Support all NULL-syntax X.509v3 extensions
authorJonathan M. Wilbur <jonathan@wilbur.space>
Sat, 1 Jul 2023 15:56:40 +0000 (15:56 +0000)
committerTodd Short <todd.short@me.com>
Mon, 25 Sep 2023 19:12:04 +0000 (15:12 -0400)
Signed-off-by: Jonathan M. Wilbur <jonathan@wilbur.space>
Reviewed-by: Todd Short <todd.short@me.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21342)

16 files changed:
crypto/x509/build.info
crypto/x509/ext_dat.h
crypto/x509/standard_exts.h
crypto/x509/v3_group_ac.c [new file with mode: 0644]
crypto/x509/v3_ind_iss.c [new file with mode: 0644]
crypto/x509/v3_no_ass.c [new file with mode: 0644]
crypto/x509/v3_no_rev_avail.c [new file with mode: 0644]
crypto/x509/v3_single_use.c [new file with mode: 0644]
crypto/x509/v3_soa_id.c [new file with mode: 0644]
test/certs/ext-groupAC.pem [new file with mode: 0644]
test/certs/ext-indirectIssuer.pem [new file with mode: 0644]
test/certs/ext-noAssertion.pem [new file with mode: 0644]
test/certs/ext-noRevAvail.pem [new file with mode: 0644]
test/certs/ext-sOAIdentifier.pem [new file with mode: 0644]
test/certs/ext-singleUse.pem [new file with mode: 0644]
test/recipes/25-test_x509.t

index 8820f983bb3d01f04eb5adfbd82d8226e01e01b4..3f70f3ff36dfbc07ffbab2ab186ff8b80b34c627 100644 (file)
@@ -14,7 +14,8 @@ SOURCE[../../libcrypto]=\
         v3_info.c v3_akeya.c v3_pmaps.c v3_pcons.c v3_ncons.c \
         v3_pcia.c v3_pci.c v3_ist.c \
         pcy_cache.c pcy_node.c pcy_data.c pcy_map.c pcy_tree.c pcy_lib.c \
-        v3_asid.c v3_addr.c v3_tlsf.c v3_admis.c
+        v3_asid.c v3_addr.c v3_tlsf.c v3_admis.c v3_no_rev_avail.c \
+        v3_soa_id.c v3_no_ass.c v3_group_ac.c v3_single_use.c v3_ind_iss.c
 
 IF[{- !$disabled{'deprecated-3.0'} -}]
   SOURCE[../../libcrypto]=x509type.c
index a0a7f88ccd8ad63fe8cce6e06745e11a11db2fd9..8325aacfa5306aa47315eef6f93976c06d46150d 100644 (file)
@@ -25,3 +25,9 @@ extern const X509V3_EXT_METHOD ossl_v3_tls_feature;
 extern const X509V3_EXT_METHOD ossl_v3_ext_admission;
 extern const X509V3_EXT_METHOD ossl_v3_utf8_list[1];
 extern const X509V3_EXT_METHOD ossl_v3_issuer_sign_tool;
+extern const X509V3_EXT_METHOD ossl_v3_group_ac;
+extern const X509V3_EXT_METHOD ossl_v3_soa_identifier;
+extern const X509V3_EXT_METHOD ossl_v3_no_assertion;
+extern const X509V3_EXT_METHOD ossl_v3_no_rev_avail;
+extern const X509V3_EXT_METHOD ossl_v3_single_use;
+extern const X509V3_EXT_METHOD ossl_v3_indirect_issuer;
index 27a99a4b13ed7ec1f1aaa069c14fd3510d18e67c..e5c9e3f9e01ac6f8e6dd91685df9d6a70e9b1e8b 100644 (file)
@@ -53,6 +53,7 @@ static const X509V3_EXT_METHOD *standard_exts[] = {
 #endif
     &ossl_v3_sinfo,
     &ossl_v3_policy_constraints,
+    &ossl_v3_no_rev_avail,
 #ifndef OPENSSL_NO_OCSP
     &ossl_v3_crl_hold,
 #endif
@@ -71,7 +72,12 @@ static const X509V3_EXT_METHOD *standard_exts[] = {
     &ossl_v3_utf8_list[0],
     &ossl_v3_issuer_sign_tool,
     &ossl_v3_tls_feature,
-    &ossl_v3_ext_admission
+    &ossl_v3_ext_admission,
+    &ossl_v3_soa_identifier,
+    &ossl_v3_indirect_issuer,
+    &ossl_v3_no_assertion,
+    &ossl_v3_single_use,
+    &ossl_v3_group_ac
 };
 
 /* Number of standard extensions */
diff --git a/crypto/x509/v3_group_ac.c b/crypto/x509/v3_group_ac.c
new file mode 100644 (file)
index 0000000..9a2b69d
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/x509v3.h>
+#include "ext_dat.h"
+
+static int i2r_GROUP_AC(X509V3_EXT_METHOD *method,
+                        void *su, BIO *out,
+                        int indent)
+{
+    return 1;
+}
+
+static void *r2i_GROUP_AC(X509V3_EXT_METHOD *method,
+                          X509V3_CTX *ctx, const char *value)
+{
+    return ASN1_NULL_new();
+}
+
+static char *i2s_GROUP_AC(const X509V3_EXT_METHOD *method, void *val)
+{
+    return OPENSSL_strdup("NULL");
+}
+
+static void *s2i_GROUP_AC(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str)
+{
+    return ASN1_NULL_new();
+}
+
+/*
+ * The groupAC X.509v3 extension is defined in ITU Recommendation X.509
+ * (2019), Section 17.1.2.6. See: https://www.itu.int/rec/T-REC-X.509-201910-I/en.
+ */
+const X509V3_EXT_METHOD ossl_v3_group_ac = {
+    NID_group_ac, 0, ASN1_ITEM_ref(ASN1_NULL),
+    0, 0, 0, 0,
+    (X509V3_EXT_I2S)i2s_GROUP_AC,
+    (X509V3_EXT_S2I)s2i_GROUP_AC,
+    0, 0,
+    (X509V3_EXT_I2R)i2r_GROUP_AC,
+    (X509V3_EXT_R2I)r2i_GROUP_AC,
+    NULL
+};
diff --git a/crypto/x509/v3_ind_iss.c b/crypto/x509/v3_ind_iss.c
new file mode 100644 (file)
index 0000000..ff41ba7
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/x509v3.h>
+#include "ext_dat.h"
+
+static int i2r_INDIRECT_ISSUER(X509V3_EXT_METHOD *method,
+                        void *su, BIO *out,
+                        int indent)
+{
+    return 1;
+}
+
+static void *r2i_INDIRECT_ISSUER(X509V3_EXT_METHOD *method,
+                          X509V3_CTX *ctx, const char *value)
+{
+    return ASN1_NULL_new();
+}
+
+static char *i2s_INDIRECT_ISSUER(const X509V3_EXT_METHOD *method, void *val)
+{
+    return OPENSSL_strdup("NULL");
+}
+
+static void *s2i_INDIRECT_ISSUER(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str)
+{
+    return ASN1_NULL_new();
+}
+
+/*
+ * The indirectIssuer X.509v3 extension is defined in ITU Recommendation X.509
+ * (2019), Section 17.5.2.5. See: https://www.itu.int/rec/T-REC-X.509-201910-I/en.
+ */
+const X509V3_EXT_METHOD ossl_v3_indirect_issuer = {
+    NID_indirect_issuer, 0, ASN1_ITEM_ref(ASN1_NULL),
+    0, 0, 0, 0,
+    (X509V3_EXT_I2S)i2s_INDIRECT_ISSUER,
+    (X509V3_EXT_S2I)s2i_INDIRECT_ISSUER,
+    0, 0,
+    (X509V3_EXT_I2R)i2r_INDIRECT_ISSUER,
+    (X509V3_EXT_R2I)r2i_INDIRECT_ISSUER,
+    NULL
+};
diff --git a/crypto/x509/v3_no_ass.c b/crypto/x509/v3_no_ass.c
new file mode 100644 (file)
index 0000000..873e20a
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/x509v3.h>
+#include "ext_dat.h"
+
+static int i2r_NO_ASSERTION(X509V3_EXT_METHOD *method,
+                            void *su, BIO *out,
+                            int indent)
+{
+    return 1;
+}
+
+static void *r2i_NO_ASSERTION(X509V3_EXT_METHOD *method,
+                              X509V3_CTX *ctx, const char *value)
+{
+    return ASN1_NULL_new();
+}
+
+static char *i2s_NO_ASSERTION(const X509V3_EXT_METHOD *method, void *val)
+{
+    return OPENSSL_strdup("NULL");
+}
+
+static void *s2i_NO_ASSERTION(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str)
+{
+    return ASN1_NULL_new();
+}
+
+/*
+ * The noAssertion X.509v3 extension is defined in ITU Recommendation X.509
+ * (2019), Section 17.5.2.7. See: https://www.itu.int/rec/T-REC-X.509-201910-I/en.
+ */
+const X509V3_EXT_METHOD ossl_v3_no_assertion = {
+    NID_no_assertion, 0, ASN1_ITEM_ref(ASN1_NULL),
+    0, 0, 0, 0,
+    (X509V3_EXT_I2S)i2s_NO_ASSERTION,
+    (X509V3_EXT_S2I)s2i_NO_ASSERTION,
+    0, 0,
+    (X509V3_EXT_I2R)i2r_NO_ASSERTION,
+    (X509V3_EXT_R2I)r2i_NO_ASSERTION,
+    NULL
+};
diff --git a/crypto/x509/v3_no_rev_avail.c b/crypto/x509/v3_no_rev_avail.c
new file mode 100644 (file)
index 0000000..849feda
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/x509v3.h>
+#include "ext_dat.h"
+
+static int i2r_NO_REV_AVAIL(X509V3_EXT_METHOD *method,
+                            void *su, BIO *out,
+                            int indent)
+{
+    return 1;
+}
+
+static void *r2i_NO_REV_AVAIL(X509V3_EXT_METHOD *method,
+                            X509V3_CTX *ctx, const char *value)
+{
+    return ASN1_NULL_new();
+}
+
+static char *i2s_NO_REV_AVAIL(const X509V3_EXT_METHOD *method, void *val)
+{
+    return OPENSSL_strdup("NULL");
+}
+
+static void *s2i_NO_REV_AVAIL(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str)
+{
+    return ASN1_NULL_new();
+}
+
+/*
+ * The noRevAvail X.509v3 extension is defined in ITU Recommendation X.509
+ * (2019), Section 17.2.2.7. See: https://www.itu.int/rec/T-REC-X.509-201910-I/en.
+ */
+const X509V3_EXT_METHOD ossl_v3_no_rev_avail = {
+    NID_no_rev_avail, 0, ASN1_ITEM_ref(ASN1_NULL),
+    0, 0, 0, 0,
+    (X509V3_EXT_I2S)i2s_NO_REV_AVAIL,
+    (X509V3_EXT_S2I)s2i_NO_REV_AVAIL,
+    0, 0,
+    (X509V3_EXT_I2R)i2r_NO_REV_AVAIL,
+    (X509V3_EXT_R2I)r2i_NO_REV_AVAIL,
+    NULL
+};
diff --git a/crypto/x509/v3_single_use.c b/crypto/x509/v3_single_use.c
new file mode 100644 (file)
index 0000000..50da6e1
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/x509v3.h>
+#include "ext_dat.h"
+
+static int i2r_SINGLE_USE(X509V3_EXT_METHOD *method,
+                        void *su, BIO *out,
+                        int indent)
+{
+    return 1;
+}
+
+static void *r2i_SINGLE_USE(X509V3_EXT_METHOD *method,
+                          X509V3_CTX *ctx, const char *value)
+{
+    return ASN1_NULL_new();
+}
+
+static char *i2s_SINGLE_USE(const X509V3_EXT_METHOD *method, void *val)
+{
+    return OPENSSL_strdup("NULL");
+}
+
+static void *s2i_SINGLE_USE(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str)
+{
+    return ASN1_NULL_new();
+}
+
+/*
+ * The singleUse X.509v3 extension is defined in ITU Recommendation X.509
+ * (2019), Section 17.1.2.5. See: https://www.itu.int/rec/T-REC-X.509-201910-I/en.
+ */
+const X509V3_EXT_METHOD ossl_v3_single_use = {
+    NID_single_use, 0, ASN1_ITEM_ref(ASN1_NULL),
+    0, 0, 0, 0,
+    (X509V3_EXT_I2S)i2s_SINGLE_USE,
+    (X509V3_EXT_S2I)s2i_SINGLE_USE,
+    0, 0,
+    (X509V3_EXT_I2R)i2r_SINGLE_USE,
+    (X509V3_EXT_R2I)r2i_SINGLE_USE,
+    NULL
+};
diff --git a/crypto/x509/v3_soa_id.c b/crypto/x509/v3_soa_id.c
new file mode 100644 (file)
index 0000000..8be5bd8
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/x509v3.h>
+#include "ext_dat.h"
+
+static int i2r_SOA_IDENTIFIER(X509V3_EXT_METHOD *method,
+                              void *su, BIO *out,
+                              int indent)
+{
+    return 1;
+}
+
+static void *r2i_SOA_IDENTIFIER(X509V3_EXT_METHOD *method,
+                                X509V3_CTX *ctx, const char *value)
+{
+    return ASN1_NULL_new();
+}
+
+static char *i2s_SOA_IDENTIFIER(const X509V3_EXT_METHOD *method, void *val)
+{
+    return OPENSSL_strdup("NULL");
+}
+
+static void *s2i_SOA_IDENTIFIER(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str)
+{
+    return ASN1_NULL_new();
+}
+
+/*
+ * The sOAIdentifier X.509v3 extension is defined in ITU Recommendation X.509
+ * (2019), Section 17.3.2.1.1. See: https://www.itu.int/rec/T-REC-X.509-201910-I/en.
+ */
+const X509V3_EXT_METHOD ossl_v3_soa_identifier = {
+    NID_soa_identifier, 0, ASN1_ITEM_ref(ASN1_NULL),
+    0, 0, 0, 0,
+    (X509V3_EXT_I2S)i2s_SOA_IDENTIFIER,
+    (X509V3_EXT_S2I)s2i_SOA_IDENTIFIER,
+    0, 0,
+    (X509V3_EXT_I2R)i2r_SOA_IDENTIFIER,
+    (X509V3_EXT_R2I)r2i_SOA_IDENTIFIER,
+    NULL
+};
diff --git a/test/certs/ext-groupAC.pem b/test/certs/ext-groupAC.pem
new file mode 100644 (file)
index 0000000..f5325eb
--- /dev/null
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCCAXKgAwIBAgIDAQIDMAsGCSqGSIb3DQEBBTAAMCIYDzIwMjEwODMwMDA1
+MzE3WhgPMjAyMTA4MzAwMDUzMTdaMAAwggEgMAsGCSqGSIb3DQEBAQOCAQ8AMIIB
+CgKCAQEAtnjLm1ts1hC4fNNt3UnQD9y73bDXgioTyWYSI3ca/KNfuTydjFTEYAmq
+nuGrBOUfgbmH3PRQ0AmpqljgWTb3d3K8H4UFvDWQTPSS21IMjm8oqd19nE5GxWir
+Gu0oDRzhWLHe1RZ7ZrohCPg/1Ocsy47QZuK2laFB0rEmrRWBmEYbDl3/wxf5XfqI
+qpOynJB02thXrTCcTM7Rz1FqCFt/ZVZB5hKY2S+CTdE9OIVKlr4WHMfuvUYeOj06
+GkwLFJHNv2tU+tovI3mYRxUuY4UupkS3MC+Otey7XKm1P+INjWWoegm6iCAt3Vus
+pVz+6pU2xgl3nrAVMQHB4fReQPH0pQIDAQABow0wCzAJBgNVHUIEAgUAMAsGCSqG
+SIb3DQEBBQMBAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ext-indirectIssuer.pem b/test/certs/ext-indirectIssuer.pem
new file mode 100644 (file)
index 0000000..afc2180
--- /dev/null
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCCAXKgAwIBAgIDAQIDMAsGCSqGSIb3DQEBBTAAMCIYDzIwMjEwODMxMDIy
+NzM4WhgPMjAyMTA4MzEwMjI3MzhaMAAwggEgMAsGCSqGSIb3DQEBAQOCAQ8AMIIB
+CgKCAQEAtnjLm1ts1hC4fNNt3UnQD9y73bDXgioTyWYSI3ca/KNfuTydjFTEYAmq
+nuGrBOUfgbmH3PRQ0AmpqljgWTb3d3K8H4UFvDWQTPSS21IMjm8oqd19nE5GxWir
+Gu0oDRzhWLHe1RZ7ZrohCPg/1Ocsy47QZuK2laFB0rEmrRWBmEYbDl3/wxf5XfqI
+qpOynJB02thXrTCcTM7Rz1FqCFt/ZVZB5hKY2S+CTdE9OIVKlr4WHMfuvUYeOj06
+GkwLFJHNv2tU+tovI3mYRxUuY4UupkS3MC+Otey7XKm1P+INjWWoegm6iCAt3Vus
+pVz+6pU2xgl3nrAVMQHB4fReQPH0pQIDAQABow0wCzAJBgNVHT0EAgUAMAsGCSqG
+SIb3DQEBBQMBAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ext-noAssertion.pem b/test/certs/ext-noAssertion.pem
new file mode 100644 (file)
index 0000000..1aaa860
--- /dev/null
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCCAXKgAwIBAgIDAQIDMAsGCSqGSIb3DQEBBTAAMCIYDzIwMjEwODMwMDA1
+NDMyWhgPMjAyMTA4MzAwMDU0MzJaMAAwggEgMAsGCSqGSIb3DQEBAQOCAQ8AMIIB
+CgKCAQEAtnjLm1ts1hC4fNNt3UnQD9y73bDXgioTyWYSI3ca/KNfuTydjFTEYAmq
+nuGrBOUfgbmH3PRQ0AmpqljgWTb3d3K8H4UFvDWQTPSS21IMjm8oqd19nE5GxWir
+Gu0oDRzhWLHe1RZ7ZrohCPg/1Ocsy47QZuK2laFB0rEmrRWBmEYbDl3/wxf5XfqI
+qpOynJB02thXrTCcTM7Rz1FqCFt/ZVZB5hKY2S+CTdE9OIVKlr4WHMfuvUYeOj06
+GkwLFJHNv2tU+tovI3mYRxUuY4UupkS3MC+Otey7XKm1P+INjWWoegm6iCAt3Vus
+pVz+6pU2xgl3nrAVMQHB4fReQPH0pQIDAQABow0wCzAJBgNVHT4EAgUAMAsGCSqG
+SIb3DQEBBQMBAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ext-noRevAvail.pem b/test/certs/ext-noRevAvail.pem
new file mode 100644 (file)
index 0000000..23bf49b
--- /dev/null
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBiTCCAXWgAwIBAgIDAQIDMAsGCSqGSIb3DQEBBTAAMCIYDzIwMjEwOTE1MDAw
+OTM1WhgPMjAyMTA5MTUwMDA5MzVaMAAwggEgMAsGCSqGSIb3DQEBAQOCAQ8AMIIB
+CgKCAQEAtnjLm1ts1hC4fNNt3UnQD9y73bDXgioTyWYSI3ca/KNfuTydjFTEYAmq
+nuGrBOUfgbmH3PRQ0AmpqljgWTb3d3K8H4UFvDWQTPSS21IMjm8oqd19nE5GxWir
+Gu0oDRzhWLHe1RZ7ZrohCPg/1Ocsy47QZuK2laFB0rEmrRWBmEYbDl3/wxf5XfqI
+qpOynJB02thXrTCcTM7Rz1FqCFt/ZVZB5hKY2S+CTdE9OIVKlr4WHMfuvUYeOj06
+GkwLFJHNv2tU+tovI3mYRxUuY4UupkS3MC+Otey7XKm1P+INjWWoegm6iCAt3Vus
+pVz+6pU2xgl3nrAVMQHB4fReQPH0pQIDAQABoxAwDjAMBgNVHTgBAf8EAgUAMAsG
+CSqGSIb3DQEBBQMBAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ext-sOAIdentifier.pem b/test/certs/ext-sOAIdentifier.pem
new file mode 100644 (file)
index 0000000..7da3a3b
--- /dev/null
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCCAXKgAwIBAgIDAQIDMAsGCSqGSIb3DQEBBTAAMCIYDzIwMjEwODMwMDA1
+NDA4WhgPMjAyMTA4MzAwMDU0MDhaMAAwggEgMAsGCSqGSIb3DQEBAQOCAQ8AMIIB
+CgKCAQEAtnjLm1ts1hC4fNNt3UnQD9y73bDXgioTyWYSI3ca/KNfuTydjFTEYAmq
+nuGrBOUfgbmH3PRQ0AmpqljgWTb3d3K8H4UFvDWQTPSS21IMjm8oqd19nE5GxWir
+Gu0oDRzhWLHe1RZ7ZrohCPg/1Ocsy47QZuK2laFB0rEmrRWBmEYbDl3/wxf5XfqI
+qpOynJB02thXrTCcTM7Rz1FqCFt/ZVZB5hKY2S+CTdE9OIVKlr4WHMfuvUYeOj06
+GkwLFJHNv2tU+tovI3mYRxUuY4UupkS3MC+Otey7XKm1P+INjWWoegm6iCAt3Vus
+pVz+6pU2xgl3nrAVMQHB4fReQPH0pQIDAQABow0wCzAJBgNVHTIEAgUAMAsGCSqG
+SIb3DQEBBQMBAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ext-singleUse.pem b/test/certs/ext-singleUse.pem
new file mode 100644 (file)
index 0000000..e72701c
--- /dev/null
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBrzCCAZmgAwIBAgIEDCI4TjANBgkqhkiG9w0BAQUFADARMQ8wDQYDVQQDDAZI
+aSBtb20wIhgPMjAyMzA3MDExMzA4MDRaGA8yMDIzMDcwMTEzMDgwNFowETEPMA0G
+A1UEAwwGSGkgbW9tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtnjL
+m1ts1hC4fNNt3UnQD9y73bDXgioTyWYSI3ca/KNfuTydjFTEYAmqnuGrBOUfgbmH
+3PRQ0AmpqljgWTb3d3K8H4UFvDWQTPSS21IMjm8oqd19nE5GxWirGu0oDRzhWLHe
+1RZ7ZrohCPg/1Ocsy47QZuK2laFB0rEmrRWBmEYbDl3/wxf5XfqIqpOynJB02thX
+rTCcTM7Rz1FqCFt/ZVZB5hKY2S+CTdE9OIVKlr4WHMfuvUYeOj06GkwLFJHNv2tU
++tovI3mYRxUuY4UupkS3MC+Otey7XKm1P+INjWWoegm6iCAt3VuspVz+6pU2xgl3
+nrAVMQHB4fReQPH0pQIDAQABow0wCzAJBgNVHUEEAgUAMA0GCSqGSIb3DQEBBQUA
+AwEA
+-----END CERTIFICATE-----
index 408ac40c7c3e5b3a9132809767481c4181094014..9bf011c1885cd4b118913c4daa0bc7013f4741bf 100644 (file)
@@ -16,7 +16,7 @@ use OpenSSL::Test qw/:DEFAULT srctop_file/;
 
 setup("test_x509");
 
-plan tests => 37;
+plan tests => 43;
 
 # Prevent MSys2 filename munging for arguments that look like file paths but
 # aren't
@@ -110,6 +110,30 @@ cert_contains(srctop_file(@certs, "fake-gp.pem"),
               "2.16.528.1.1003.1.3.5.5.2-1-0000006666-Z-12345678-01.015-12345678",
               1, 'x500 -- subjectAltName');
 
+cert_contains(srctop_file(@certs, "ext-noAssertion.pem"),
+              "No Assertion",
+              1, 'X.509 Not Assertion Extension');
+
+cert_contains(srctop_file(@certs, "ext-groupAC.pem"),
+              "Group Attribute Certificate",
+              1, 'X.509 Group Attribute Certificate Extension');
+
+cert_contains(srctop_file(@certs, "ext-sOAIdentifier.pem"),
+              "Source of Authority",
+              1, 'X.509 Source of Authority Extension');
+
+cert_contains(srctop_file(@certs, "ext-noRevAvail.pem"),
+              "No Revocation Available",
+              1, 'X.509 No Revocation Available');
+
+cert_contains(srctop_file(@certs, "ext-singleUse.pem"),
+              "Single Use",
+              1, 'X509v3 Single Use');
+
+cert_contains(srctop_file(@certs, "ext-indirectIssuer.pem"),
+              "Indirect Issuer",
+              1, 'X.509 Indirect Issuer');
+
 sub test_errors { # actually tests diagnostics of OSSL_STORE
     my ($expected, $cert, @opts) = @_;
     my $infile = srctop_file(@certs, $cert);