179 lines
5.0 KiB
Rust
179 lines
5.0 KiB
Rust
//! PKCS#1 algorithm params tests
|
|
|
|
use const_oid::db;
|
|
use der::{
|
|
asn1::{ObjectIdentifier, OctetStringRef},
|
|
Decode, Encode,
|
|
};
|
|
use hex_literal::hex;
|
|
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");
|
|
|
|
/// 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");
|
|
|
|
#[test]
|
|
fn decode_pss_param() {
|
|
let param = RsaPssParams::try_from(RSA_PSS_PARAMETERS_SHA2_256).unwrap();
|
|
|
|
assert!(param
|
|
.hash
|
|
.assert_algorithm_oid(db::rfc5912::ID_SHA_256)
|
|
.is_ok());
|
|
assert_eq!(param.hash.parameters, None);
|
|
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_eq!(param.salt_len, 32);
|
|
assert_eq!(param.trailer_field, TrailerField::BC);
|
|
}
|
|
|
|
#[test]
|
|
fn encode_pss_param() {
|
|
let mut buf = [0_u8; 256];
|
|
let param = RsaPssParams::try_from(RSA_PSS_PARAMETERS_SHA2_256).unwrap();
|
|
assert_eq!(
|
|
param.encode_to_slice(&mut buf).unwrap(),
|
|
RSA_PSS_PARAMETERS_SHA2_256
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn decode_pss_param_default() {
|
|
let param = RsaPssParams::try_from(RSA_PSS_PARAMETERS_DEFAULTS).unwrap();
|
|
|
|
assert!(param
|
|
.hash
|
|
.assert_algorithm_oid(db::rfc5912::ID_SHA_1)
|
|
.is_ok());
|
|
assert_eq!(param.hash.parameters, None);
|
|
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_1
|
|
);
|
|
assert_eq!(param.salt_len, 20);
|
|
assert_eq!(param.trailer_field, TrailerField::BC);
|
|
assert_eq!(param, Default::default())
|
|
}
|
|
|
|
#[test]
|
|
fn encode_pss_param_default() {
|
|
let mut buf = [0_u8; 256];
|
|
assert_eq!(
|
|
RsaPssParams::default().encode_to_slice(&mut buf).unwrap(),
|
|
RSA_PSS_PARAMETERS_DEFAULTS
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn decode_oaep_param() {
|
|
let param = RsaOaepParams::try_from(RSA_OAEP_PARAMETERS_SHA2_256).unwrap();
|
|
|
|
assert!(param
|
|
.hash
|
|
.assert_algorithm_oid(db::rfc5912::ID_SHA_256)
|
|
.is_ok());
|
|
assert_eq!(param.hash.parameters, None);
|
|
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
|
|
.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])
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn encode_oaep_param() {
|
|
let mut buf = [0_u8; 256];
|
|
let param = RsaOaepParams::try_from(RSA_OAEP_PARAMETERS_SHA2_256).unwrap();
|
|
assert_eq!(
|
|
param.encode_to_slice(&mut buf).unwrap(),
|
|
RSA_OAEP_PARAMETERS_SHA2_256
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn decode_oaep_param_default() {
|
|
let param = RsaOaepParams::try_from(RSA_OAEP_PARAMETERS_DEFAULTS).unwrap();
|
|
|
|
assert!(param
|
|
.hash
|
|
.assert_algorithm_oid(db::rfc5912::ID_SHA_1)
|
|
.is_ok());
|
|
assert_eq!(param.hash.parameters, None);
|
|
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_1
|
|
);
|
|
assert!(param
|
|
.p_source
|
|
.assert_algorithm_oid(db::rfc5912::ID_P_SPECIFIED)
|
|
.is_ok());
|
|
assert!(param
|
|
.p_source
|
|
.parameters_any()
|
|
.unwrap()
|
|
.octet_string()
|
|
.unwrap()
|
|
.is_empty(),);
|
|
assert_eq!(param, Default::default())
|
|
}
|
|
|
|
#[test]
|
|
fn encode_oaep_param_default() {
|
|
let mut buf = [0_u8; 256];
|
|
assert_eq!(
|
|
RsaOaepParams::default().encode_to_slice(&mut buf).unwrap(),
|
|
RSA_OAEP_PARAMETERS_DEFAULTS
|
|
);
|
|
}
|