use cms::content_info::ContentInfo;
use cms::signed_data::{SignedData, SignerInfos};
use der::{AnyRef, Decode, DecodePem, Encode, ErrorKind, Tag};
use x509_cert::Certificate;
#[test]
fn trust_list_sd_test() {
let der_signed_data_in_ci = include_bytes!("examples/authroot.stl.sd");
let _ci = SignedData::from_der(der_signed_data_in_ci).unwrap();
}
#[test]
fn trust_list_test() {
let der_signed_data_in_ci = include_bytes!("examples/authroot.stl");
let ci = ContentInfo::from_der(der_signed_data_in_ci).unwrap();
assert_eq!(ci.content_type, const_oid::db::rfc5911::ID_SIGNED_DATA);
let bytes = ci.content.to_der().unwrap();
let sd = SignedData::from_der(bytes.as_slice()).unwrap();
let reencoded_signed_data = sd.to_der().unwrap();
assert_eq!(
sd.encap_content_info.econtent_type.to_string(),
"1.3.6.1.4.1.311.10.1"
);
let ci2 = ContentInfo {
content_type: ci.content_type,
content: AnyRef::try_from(reencoded_signed_data.as_slice())
.unwrap()
.into(),
};
let reencoded_der_signed_data_in_ci = ci2.to_der().unwrap();
assert_eq!(reencoded_der_signed_data_in_ci, der_signed_data_in_ci)
}
#[test]
fn reencode_signed_data_test() {
let der_signed_data_in_ci = include_bytes!("examples/sd.cms");
let ci = ContentInfo::from_der(der_signed_data_in_ci).unwrap();
assert_eq!(ci.content_type, const_oid::db::rfc5911::ID_SIGNED_DATA);
let bytes = ci.content.to_der().unwrap();
let sd = SignedData::from_der(bytes.as_slice()).unwrap();
let reencoded_signed_data = sd.to_der().unwrap();
let ci2 = ContentInfo {
content_type: ci.content_type,
content: AnyRef::try_from(reencoded_signed_data.as_slice())
.unwrap()
.into(),
};
let reencoded_der_signed_data_in_ci = ci2.to_der().unwrap();
assert_eq!(reencoded_der_signed_data_in_ci, der_signed_data_in_ci)
}
#[test]
fn misencoded_signer_infos_tests() {
let der_signer_infos = include_bytes!("examples/signer_info_explicit_attrs.bin");
let si = SignerInfos::from_der(der_signer_infos);
assert!(si.is_err());
let e = si.err().unwrap();
assert_eq!(
e.kind(),
ErrorKind::TagUnexpected {
expected: Some(Tag::Sequence),
actual: Tag::Set
}
);
let der_signer_infos = include_bytes!("examples/signer_info_sequence_not_set.bin");
let si = SignerInfos::from_der(der_signer_infos);
assert!(si.is_err());
let e = si.err().unwrap();
assert_eq!(
e.kind(),
ErrorKind::TagUnexpected {
expected: Some(Tag::Set),
actual: Tag::Sequence
}
);
}
#[test]
fn misencoded_signed_data_tests() {}
#[test]
fn cert_to_p7b() {
let p7b_ee_buf = include_bytes!("examples/pkits_ee.p7b");
let ee_cert_buf = include_bytes!("examples/ValidCertificatePathTest1EE.crt");
let ee_cert = Certificate::from_der(ee_cert_buf).unwrap();
let p7b_ee = ContentInfo::try_from(ee_cert).unwrap();
let p7b_ee_buf2 = p7b_ee.to_der().unwrap();
assert_eq!(p7b_ee_buf, p7b_ee_buf2.as_slice());
}
#[test]
fn pem_cert_to_p7b() {
let p7b_ee_buf = include_bytes!("examples/pkits_ee.p7b");
let ee_cert_buf = include_bytes!("examples/ValidCertificatePathTest1EE.pem");
let ee_cert: x509_cert::Certificate = x509_cert::Certificate::from_pem(ee_cert_buf).unwrap();
let p7b_ee = ContentInfo::try_from(ee_cert).unwrap();
let p7b_ee_buf2 = p7b_ee.to_der().unwrap();
assert_eq!(p7b_ee_buf, p7b_ee_buf2.as_slice());
}
#[test]
fn certs_to_p7b() {
let p7b_buf = include_bytes!("examples/pkits.p7b");
let ee_cert_buf = include_bytes!("examples/ValidCertificatePathTest1EE.crt");
let ca_cert_buf = include_bytes!("examples/GoodCACert.crt");
let ee_cert = Certificate::from_der(ee_cert_buf).unwrap();
let ca_cert = Certificate::from_der(ca_cert_buf).unwrap();
let pki_path = vec![ee_cert, ca_cert];
let p7b_ee = ContentInfo::try_from(pki_path).unwrap();
let p7b_buf2 = p7b_ee.to_der().unwrap();
assert_eq!(p7b_buf, p7b_buf2.as_slice());
}