@@ -518,3 +518,54 @@ mod test_csr {
518
518
assert_eq ! ( * params, csrp. params) ;
519
519
}
520
520
}
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