Skip to content

Commit 205da37

Browse files
authored
Merge pull request #6883 from IngelaAndin/ingela/public_key/decode_crl_distpoint_ext_later/GH-6402/OTP-18316
public_key: Move decode of CRLDistributionPoints extension
2 parents d2e7956 + a893290 commit 205da37

File tree

3 files changed

+26
-10
lines changed

3 files changed

+26
-10
lines changed

lib/public_key/src/pubkey_cert.erl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,9 @@ select_extension(_, asn1_NOVALUE) ->
370370
undefined;
371371
select_extension(_, []) ->
372372
undefined;
373+
select_extension(Id, [#'Extension'{extnID = ?'id-ce-cRLDistributionPoints' = Id,
374+
extnValue = Value} = Extension | _]) when is_binary(Value) ->
375+
Extension#'Extension'{extnValue = public_key:der_decode('CRLDistributionPoints', Value)};
373376
select_extension(Id, [#'Extension'{extnID = Id} = Extension | _]) ->
374377
Extension;
375378
select_extension(Id, [_ | Extensions]) ->

lib/public_key/src/pubkey_cert_records.erl

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -262,21 +262,20 @@ extension_id(?'id-ce-keyUsage') -> 'KeyUsage';
262262
extension_id(?'id-ce-privateKeyUsagePeriod') -> 'PrivateKeyUsagePeriod';
263263
extension_id(?'id-ce-certificatePolicies') -> 'CertificatePolicies';
264264
extension_id(?'id-ce-policyMappings') -> 'PolicyMappings';
265-
extension_id(?'id-ce-subjectAltName') -> 'SubjectAltName';
266-
extension_id(?'id-ce-issuerAltName') -> 'IssuerAltName';
265+
extension_id(?'id-ce-subjectAltName') -> 'SubjectAltName';
266+
extension_id(?'id-ce-issuerAltName') -> 'IssuerAltName';
267267
extension_id(?'id-ce-subjectDirectoryAttributes') -> 'SubjectDirectoryAttributes';
268-
extension_id(?'id-ce-basicConstraints' ) -> 'BasicConstraints';
269-
extension_id(?'id-ce-nameConstraints') -> 'NameConstraints';
270-
extension_id(?'id-ce-policyConstraints') -> 'PolicyConstraints';
271-
extension_id(?'id-ce-cRLDistributionPoints') -> 'CRLDistributionPoints';
272-
extension_id(?'id-ce-extKeyUsage') -> 'ExtKeyUsageSyntax';
273-
extension_id(?'id-ce-inhibitAnyPolicy') -> 'InhibitAnyPolicy';
268+
extension_id(?'id-ce-basicConstraints' ) -> 'BasicConstraints';
269+
extension_id(?'id-ce-nameConstraints') -> 'NameConstraints';
270+
extension_id(?'id-ce-policyConstraints') -> 'PolicyConstraints';
271+
extension_id(?'id-ce-extKeyUsage') -> 'ExtKeyUsageSyntax';
272+
extension_id(?'id-ce-inhibitAnyPolicy') -> 'InhibitAnyPolicy';
274273
extension_id(?'id-ce-freshestCRL') -> 'FreshestCRL';
275-
%% Missing in public_key doc
274+
extension_id(?'id-ce-issuingDistributionPoint') -> 'IssuingDistributionPoint';
275+
%% Missing in public_key doc
276276
extension_id(?'id-pe-authorityInfoAccess') -> 'AuthorityInfoAccessSyntax';
277277
extension_id(?'id-pe-subjectInfoAccess') -> 'SubjectInfoAccessSyntax';
278278
extension_id(?'id-ce-cRLNumber') -> 'CRLNumber';
279-
extension_id(?'id-ce-issuingDistributionPoint') -> 'IssuingDistributionPoint';
280279
extension_id(?'id-ce-deltaCRLIndicator') -> 'BaseCRLNumber';
281280
extension_id(?'id-ce-cRLReasons') -> 'CRLReason';
282281
extension_id(?'id-ce-certificateIssuer') -> 'CertificateIssuer';

lib/public_key/test/public_key_SUITE.erl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@
8989
pkix_countryname/1,
9090
pkix_emailaddress/0,
9191
pkix_emailaddress/1,
92+
pkix_decode_cert/0,
93+
pkix_decode_cert/1,
9294
pkix_path_validation/0,
9395
pkix_path_validation/1,
9496
pkix_path_validation_root_expired/0,
@@ -149,6 +151,7 @@ all() ->
149151
pkix,
150152
pkix_countryname,
151153
pkix_emailaddress,
154+
pkix_decode_cert,
152155
pkix_path_validation,
153156
pkix_path_validation_root_expired,
154157
pkix_iso_rsa_oid,
@@ -795,6 +798,17 @@ pkix_emailaddress(Config) when is_list(Config) ->
795798
check_emailaddress(Issuer),
796799
check_emailaddress(Subj).
797800

801+
802+
%%--------------------------------------------------------------------
803+
pkix_decode_cert() ->
804+
[{doc, "Test that extension IssuerDistributionPoint is not decoded in 'otp' decoding mode. We want to leave it for later "
805+
"to increase interopability for sites that does not use this extension and will not care if it is properly encoded"}].
806+
pkix_decode_cert(Config) when is_list(Config) ->
807+
Der = base64:decode(
808+
<<"MIICXDCCAgKgAwIBAgIBATAKBggqhkjOPQQDAjApMRkwFwYDVQQFExBjOTY4NDI4OTMyNzUwOGRiMQwwCgYDVQQMDANURUUwHhcNMjIxMDI5MTczMTA3WhcNMjkwNDE2MjAzNDUzWjAfMR0wGwYDVQQDExRBbmRyb2lkIEtleXN0b3JlIEtleTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFmIQDus/jIZ0cPnRCITCzUUuCjQBw8MetO6154mmTL8O/fFlGgYkZ6C8jSSntKC/lMwaZHxAgW1AGgoCrPuX5ejggEjMIIBHzALBgNVHQ8EBAMCB4AwCAYDVR0fBAEAMIIBBAYKKwYBBAHWeQIBEQSB9TCB8gIBAgoBAQIBAwoBAQQgyvsSa116xqleaXs6xA84wqpAPWFgaaTjCWBnZpHslmoEADBEv4VFQAQ+MDwxFjAUBAxjb20ud2hhdHNhcHACBA0+oAQxIgQgOYfQQ9EK769ahxCzZxQY/lfg4ZtlPJ34JVj+tf/OXUQweqEFMQMCAQKiAwIBA6MEAgIBAKUIMQYCAQYCAQSqAwIBAb+DdwIFAL+FPQgCBgGEJMweob+FPgMCAQC/hUAqMCgEIFNB5rJkaXmnDldlMAeh8xAWlCHsm92fGlZI91reAFrxAQH/CgEAv4VBBQIDAV+Qv4VCBQIDAxUYMAoGCCqGSM49BAMCA0gAMEUCIF0BwvRQipVoaz5SIhsYbIeK+FHbAjWPgOxWgQ6Juq64AiEA83ZLsK37DjZ/tZNRi271VHQqIU8mdqUIMboVUiy3DaM=">>),
809+
810+
#'OTPCertificate'{} = public_key:pkix_decode_cert(Der, otp).
811+
798812
%%--------------------------------------------------------------------
799813
pkix_path_validation() ->
800814
[{doc, "Test PKIX path validation"}].

0 commit comments

Comments
 (0)