Skip to content

Commit 611340f

Browse files
committed
tests: verify SAN ext. criticality
1 parent aee2e6f commit 611340f

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

rcgen/tests/generic.rs

+51
Original file line numberDiff line numberDiff line change
@@ -518,3 +518,54 @@ mod test_csr {
518518
assert_eq!(*params, csrp.params);
519519
}
520520
}
521+
522+
#[cfg(feature = "x509-parser")]
523+
mod test_subject_alternative_name_criticality {
524+
use x509_parser::certificate::X509Certificate;
525+
use x509_parser::extensions::X509Extension;
526+
use x509_parser::{oid_registry, parse_x509_certificate};
527+
528+
use crate::util::default_params;
529+
530+
#[test]
531+
fn with_subject_sans_not_critical() {
532+
let (params, keypair) = default_params();
533+
assert!(
534+
!params
535+
.distinguished_name
536+
.iter()
537+
.collect::<Vec<_>>()
538+
.is_empty(),
539+
"non-empty subject required for test"
540+
);
541+
542+
let cert = params.self_signed(&keypair).unwrap();
543+
let cert = cert.der();
544+
let (_, parsed) = parse_x509_certificate(cert).unwrap();
545+
assert!(
546+
!san_ext(&parsed).critical,
547+
"with subject, SAN ext should not be critical"
548+
);
549+
}
550+
551+
#[test]
552+
fn without_subject_sans_critical() {
553+
let (mut params, keypair) = default_params();
554+
params.distinguished_name = Default::default();
555+
556+
let cert = params.self_signed(&keypair).unwrap();
557+
let cert = cert.der();
558+
let (_, parsed) = parse_x509_certificate(cert).unwrap();
559+
assert!(
560+
san_ext(&parsed).critical,
561+
"without subject, SAN ext should be critical"
562+
);
563+
}
564+
565+
fn san_ext<'cert>(cert: &'cert X509Certificate) -> &'cert X509Extension<'cert> {
566+
cert.extensions()
567+
.iter()
568+
.find(|ext| ext.oid == oid_registry::OID_X509_EXT_SUBJECT_ALT_NAME)
569+
.expect("missing SAN extension")
570+
}
571+
}

0 commit comments

Comments
 (0)