@@ -1282,10 +1282,12 @@ pub enum ExtendedKeyUsagePurpose {
1282
1282
TimeStamping ,
1283
1283
/// id-kp-OCSPSigning
1284
1284
OcspSigning ,
1285
+ /// Defined by an organization with a need
1286
+ Other ( Vec < u64 > ) ,
1285
1287
}
1286
1288
1287
1289
impl ExtendedKeyUsagePurpose {
1288
- fn oid ( & self ) -> & ' static [ u64 ] {
1290
+ fn oid ( & self ) -> & [ u64 ] {
1289
1291
use ExtendedKeyUsagePurpose :: * ;
1290
1292
match self {
1291
1293
// anyExtendedKeyUsage
@@ -1297,6 +1299,7 @@ impl ExtendedKeyUsagePurpose {
1297
1299
EmailProtection => & [ 1 , 3 , 6 , 1 , 5 , 5 , 7 , 3 , 4 ] ,
1298
1300
TimeStamping => & [ 1 , 3 , 6 , 1 , 5 , 5 , 7 , 3 , 8 ] ,
1299
1301
OcspSigning => & [ 1 , 3 , 6 , 1 , 5 , 5 , 7 , 3 , 9 ] ,
1302
+ Other ( oid) => & oid,
1300
1303
}
1301
1304
}
1302
1305
}
@@ -1935,6 +1938,36 @@ mod tests {
1935
1938
assert ! ( extension. value. any) ;
1936
1939
}
1937
1940
1941
+ #[ test]
1942
+ fn test_with_extended_key_usages_other ( ) {
1943
+ use x509_parser:: der_parser:: asn1_rs:: Oid ;
1944
+ let mut params: CertificateParams = Default :: default ( ) ;
1945
+ const OID_1 : & [ u64 ] = & [ 1 , 2 , 3 , 4 ] ;
1946
+ const OID_2 : & [ u64 ] = & [ 1 , 2 , 3 , 4 , 5 , 6 ] ;
1947
+
1948
+ // Set extended_key_usages
1949
+ params. extended_key_usages = vec ! [
1950
+ ExtendedKeyUsagePurpose :: Other ( Vec :: from( OID_1 ) ) ,
1951
+ ExtendedKeyUsagePurpose :: Other ( Vec :: from( OID_2 ) ) ,
1952
+ ] ;
1953
+
1954
+ // Make the cert
1955
+ let cert = Certificate :: from_params ( params) . unwrap ( ) ;
1956
+
1957
+ // Serialize it
1958
+ let der = cert. serialize_der ( ) . unwrap ( ) ;
1959
+
1960
+ // Parse it
1961
+ let ( _rem, cert) = x509_parser:: parse_x509_certificate ( & der) . unwrap ( ) ;
1962
+
1963
+ // Ensure we found it.
1964
+ let maybe_extension = cert. extended_key_usage ( ) . unwrap ( ) ;
1965
+ let extension = maybe_extension. unwrap ( ) ;
1966
+
1967
+ let expected_oids = vec ! [ Oid :: from( OID_1 ) . unwrap( ) , Oid :: from( OID_2 ) . unwrap( ) ] ;
1968
+ assert_eq ! ( extension. value. other, expected_oids) ;
1969
+ }
1970
+
1938
1971
#[ test]
1939
1972
fn signature_algos_different ( ) {
1940
1973
// TODO unify this with test_key_params_mismatch.
0 commit comments