unplugged-system/external/rust/crates/pkcs1/tests/params.rs

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
);
}