diff options
Diffstat (limited to 'tests/params.rs')
-rw-r--r-- | tests/params.rs | 137 |
1 files changed, 91 insertions, 46 deletions
diff --git a/tests/params.rs b/tests/params.rs index 6954934..d47fbb5 100644 --- a/tests/params.rs +++ b/tests/params.rs @@ -2,8 +2,9 @@ use const_oid::db; use der::{ - asn1::{ObjectIdentifier, OctetStringRef}, - Decode, Encode, + asn1::{AnyRef, ObjectIdentifier, OctetStringRef}, + oid::AssociatedOid, + Encode, }; use hex_literal::hex; use pkcs1::{RsaOaepParams, RsaPssParams, TrailerField}; @@ -11,12 +12,22 @@ use pkcs1::{RsaOaepParams, RsaPssParams, TrailerField}; /// Default PSS parameters using all default values (SHA1, MGF1) const RSA_PSS_PARAMETERS_DEFAULTS: &[u8] = &hex!("3000"); /// Example PSS parameters using SHA256 instead of SHA1 -const RSA_PSS_PARAMETERS_SHA2_256: &[u8] = &hex!("3030a00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a203020120"); +const RSA_PSS_PARAMETERS_SHA2_256: &[u8] = &hex!("3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120"); /// Default OAEP parameters using all default values (SHA1, MGF1, Empty) const RSA_OAEP_PARAMETERS_DEFAULTS: &[u8] = &hex!("3000"); -/// Example OAEP parameters using SHA256 instead of SHA1 and 'abc' as label -const RSA_OAEP_PARAMETERS_SHA2_256: &[u8] = &hex!("303fa00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a212301006092a864886f70d0101090403abcdef"); +/// Example OAEP parameters using SHA256 instead of SHA1 +const RSA_OAEP_PARAMETERS_SHA2_256: &[u8] = &hex!("302fa00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500"); + +struct Sha1Mock {} +impl AssociatedOid for Sha1Mock { + const OID: ObjectIdentifier = ObjectIdentifier::new_unwrap("1.3.14.3.2.26"); +} + +struct Sha256Mock {} +impl AssociatedOid for Sha256Mock { + const OID: ObjectIdentifier = ObjectIdentifier::new_unwrap("2.16.840.1.101.3.4.2.1"); +} #[test] fn decode_pss_param() { @@ -26,20 +37,17 @@ fn decode_pss_param() { .hash .assert_algorithm_oid(db::rfc5912::ID_SHA_256) .is_ok()); - assert_eq!(param.hash.parameters, None); + assert_eq!(param.hash.parameters, Some(AnyRef::NULL)); assert!(param .mask_gen .assert_algorithm_oid(db::rfc5912::ID_MGF_1) .is_ok()); - assert_eq!( - param - .mask_gen - .parameters_any() - .unwrap() - .sequence(|reader| Ok(ObjectIdentifier::decode(reader)?)) - .unwrap(), - db::rfc5912::ID_SHA_256 - ); + assert!(param + .mask_gen + .parameters + .unwrap() + .assert_algorithm_oid(db::rfc5912::ID_SHA_256) + .is_ok()); assert_eq!(param.salt_len, 32); assert_eq!(param.trailer_field, TrailerField::BC); } @@ -62,19 +70,20 @@ fn decode_pss_param_default() { .hash .assert_algorithm_oid(db::rfc5912::ID_SHA_1) .is_ok()); - assert_eq!(param.hash.parameters, None); + assert_eq!(param.hash.parameters, Some(AnyRef::NULL)); assert!(param .mask_gen .assert_algorithm_oid(db::rfc5912::ID_MGF_1) .is_ok()); + assert!(param + .mask_gen + .parameters + .unwrap() + .assert_algorithm_oid(db::rfc5912::ID_SHA_1) + .is_ok()); assert_eq!( - param - .mask_gen - .parameters_any() - .unwrap() - .sequence(|reader| Ok(ObjectIdentifier::decode(reader)?)) - .unwrap(), - db::rfc5912::ID_SHA_1 + param.mask_gen.parameters.unwrap().parameters, + Some(AnyRef::NULL) ); assert_eq!(param.salt_len, 20); assert_eq!(param.trailer_field, TrailerField::BC); @@ -91,6 +100,23 @@ fn encode_pss_param_default() { } #[test] +fn new_pss_param() { + let mut buf = [0_u8; 256]; + + let param = RsaPssParams::new::<Sha1Mock>(20); + assert_eq!( + param.encode_to_slice(&mut buf).unwrap(), + RSA_PSS_PARAMETERS_DEFAULTS + ); + + let param = RsaPssParams::new::<Sha256Mock>(32); + assert_eq!( + param.encode_to_slice(&mut buf).unwrap(), + RSA_PSS_PARAMETERS_SHA2_256 + ); +} + +#[test] fn decode_oaep_param() { let param = RsaOaepParams::try_from(RSA_OAEP_PARAMETERS_SHA2_256).unwrap(); @@ -98,28 +124,28 @@ fn decode_oaep_param() { .hash .assert_algorithm_oid(db::rfc5912::ID_SHA_256) .is_ok()); - assert_eq!(param.hash.parameters, None); + assert_eq!(param.hash.parameters, Some(AnyRef::NULL)); assert!(param .mask_gen .assert_algorithm_oid(db::rfc5912::ID_MGF_1) .is_ok()); - assert_eq!( - param - .mask_gen - .parameters_any() - .unwrap() - .sequence(|reader| Ok(ObjectIdentifier::decode(reader)?)) - .unwrap(), - db::rfc5912::ID_SHA_256 - ); + assert!(param + .mask_gen + .parameters + .unwrap() + .assert_algorithm_oid(db::rfc5912::ID_SHA_256) + .is_ok()); assert!(param .p_source .assert_algorithm_oid(db::rfc5912::ID_P_SPECIFIED) .is_ok()); - assert_eq!( - param.p_source.parameters_any().unwrap().octet_string(), - OctetStringRef::new(&[0xab, 0xcd, 0xef]) - ); + assert!(param + .p_source + .parameters_any() + .unwrap() + .decode_as::<OctetStringRef<'_>>() + .unwrap() + .is_empty(),); } #[test] @@ -140,19 +166,20 @@ fn decode_oaep_param_default() { .hash .assert_algorithm_oid(db::rfc5912::ID_SHA_1) .is_ok()); - assert_eq!(param.hash.parameters, None); + assert_eq!(param.hash.parameters, Some(AnyRef::NULL)); assert!(param .mask_gen .assert_algorithm_oid(db::rfc5912::ID_MGF_1) .is_ok()); + assert!(param + .mask_gen + .parameters + .unwrap() + .assert_algorithm_oid(db::rfc5912::ID_SHA_1) + .is_ok()); assert_eq!( - param - .mask_gen - .parameters_any() - .unwrap() - .sequence(|reader| Ok(ObjectIdentifier::decode(reader)?)) - .unwrap(), - db::rfc5912::ID_SHA_1 + param.mask_gen.parameters.unwrap().parameters, + Some(AnyRef::NULL) ); assert!(param .p_source @@ -162,7 +189,7 @@ fn decode_oaep_param_default() { .p_source .parameters_any() .unwrap() - .octet_string() + .decode_as::<OctetStringRef<'_>>() .unwrap() .is_empty(),); assert_eq!(param, Default::default()) @@ -176,3 +203,21 @@ fn encode_oaep_param_default() { RSA_OAEP_PARAMETERS_DEFAULTS ); } + +#[test] +fn new_oaep_param() { + let mut buf = [0_u8; 256]; + + let param = RsaOaepParams::new::<Sha1Mock>(); + assert_eq!( + param.encode_to_slice(&mut buf).unwrap(), + RSA_OAEP_PARAMETERS_DEFAULTS + ); + + let param = RsaOaepParams::new::<Sha256Mock>(); + println!("{:02x?}", param.encode_to_slice(&mut buf).unwrap()); + assert_eq!( + param.encode_to_slice(&mut buf).unwrap(), + RSA_OAEP_PARAMETERS_SHA2_256 + ); +} |