blob: 0fc094df313fa177e946fc6d8fba2e53dda2cfca [file] [log] [blame]
#![cfg(feature = "alloc")]
use webpki::KeyUsage;
fn check_cert(
ee: &[u8],
ca: &[u8],
eku: KeyUsage,
time: webpki::Time,
result: Result<(), webpki::Error>,
) {
let anchors = [webpki::TrustAnchor::try_from_cert_der(ca).unwrap()];
let algs = &[
&webpki::RSA_PKCS1_2048_8192_SHA256,
&webpki::ECDSA_P256_SHA256,
];
let cert = webpki::EndEntityCert::try_from(ee).unwrap();
assert_eq!(
cert.verify_for_usage(algs, &anchors, &[], time, eku, &[]),
result
);
}
#[test]
pub fn verify_custom_eku_mdoc() {
let err = Err(webpki::Error::RequiredEkuNotFound);
let time = webpki::Time::from_seconds_since_unix_epoch(1609459200); // Jan 1 01:00:00 CET 2021
let ee = include_bytes!("misc/mdoc_eku.ee.der");
let ca = include_bytes!("misc/mdoc_eku.ca.der");
let eku_mdoc = KeyUsage::required(&[(40 * 1) + 0, 129, 140, 93, 5, 1, 2]);
check_cert(ee, ca, eku_mdoc, time, Ok(()));
check_cert(ee, ca, KeyUsage::server_auth(), time, err);
check_cert(ee, ca, eku_mdoc, time, Ok(()));
check_cert(ee, ca, KeyUsage::server_auth(), time, err);
}
#[test]
pub fn verify_custom_eku_client() {
let time = webpki::Time::from_seconds_since_unix_epoch(0x1fed_f00d);
let ee = include_bytes!("client_auth/cert_with_no_eku_accepted_for_client_auth.ee.der");
let ca = include_bytes!("client_auth/cert_with_no_eku_accepted_for_client_auth.ca.der");
check_cert(ee, ca, KeyUsage::client_auth(), time, Ok(()));
let ee = include_bytes!("client_auth/cert_with_both_ekus_accepted_for_client_auth.ee.der");
let ca = include_bytes!("client_auth/cert_with_both_ekus_accepted_for_client_auth.ca.der");
check_cert(ee, ca, KeyUsage::client_auth(), time, Ok(()));
check_cert(ee, ca, KeyUsage::server_auth(), time, Ok(()));
}