aboutsummaryrefslogtreecommitdiff
path: root/tests/params.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/params.rs')
-rw-r--r--tests/params.rs137
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
+ );
+}