Add X509_get0_authority_key_id() function
authorMassimiliano Pala <director@openca.org>
Mon, 19 Feb 2018 20:47:02 +0000 (15:47 -0500)
committerRich Salz <rsalz@openssl.org>
Mon, 19 Feb 2018 21:04:16 +0000 (16:04 -0500)
This function makes it easier to retrieve a reference to the
authority key identifier (akid->keyid) inside a certificate.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5271)

(cherry picked from commit b383aa2081467e8d49c3362d295da7bd5cb4e1d8)

crypto/x509v3/v3_purp.c
doc/crypto/X509_get_extension_flags.pod
include/openssl/x509v3.h
util/libcrypto.num

index fa5c425ffc48a1a93d298402c5e31a8c40a3b6a8..9030d5369f001fc921a914a48708da128bb22f32 100644 (file)
@@ -847,6 +847,13 @@ const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x)
     return x->skid;
 }
 
+const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x)
+{
+    /* Call for side-effect of computing hash and caching extensions */
+    X509_check_purpose(x, -1, -1);
+    return (x->akid != NULL ? x->akid->keyid : NULL);
+}
+
 long X509_get_pathlen(X509 *x)
 {
     /* Called for side effect of caching extensions */
index c78e4573c33f6b55e76d413b002b244632038739..4a255602c16a0d67e1b210e14ac9fc3e43b41c31 100644 (file)
@@ -3,6 +3,7 @@
 =head1 NAME
 
 X509_get0_subject_key_id,
+X509_get0_authority_key_id,
 X509_get_pathlen,
 X509_get_extension_flags,
 X509_get_key_usage,
@@ -20,6 +21,7 @@ X509_get_proxy_pathlen - retrieve certificate extension data
    uint32_t X509_get_key_usage(X509 *x);
    uint32_t X509_get_extended_key_usage(X509 *x);
    const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
+   const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
    void X509_set_proxy_flag(X509 *x);
    void X509_set_proxy_pathlen(int l);
    long X509_get_proxy_pathlen(X509 *x);
@@ -109,6 +111,10 @@ X509_get0_subject_key_id() returns an internal pointer to the subject key
 identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension
 is not present or cannot be parsed.
 
+X509_get0_authority_key_id() returns an internal pointer to the authority key
+identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension
+is not present or cannot be parsed.
+
 X509_set_proxy_flag() marks the certificate with the B<EXFLAG_PROXY> flag.
 This is for the users who need to mark non-RFC3820 proxy certificates as
 such, as OpenSSL only detects RFC3820 compliant ones.
index 533a38ded503dc0bf68b857b319863ee4d4cae0e..bc233077e3410f2a8f97ea383960dd37ae00a90f 100644 (file)
@@ -658,6 +658,7 @@ uint32_t X509_get_extension_flags(X509 *x);
 uint32_t X509_get_key_usage(X509 *x);
 uint32_t X509_get_extended_key_usage(X509 *x);
 const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
+const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
 
 int X509_PURPOSE_get_count(void);
 X509_PURPOSE *X509_PURPOSE_get0(int idx);
index 05c66e9eac0778a65b31de3fc56016000db34b7b..8414d97ff11412406ac1f5dd922ffb6132f8417f 100644 (file)
@@ -4233,3 +4233,4 @@ ZINT64_it                               4215      1_1_0f  EXIST:EXPORT_VAR_AS_FUNCTION
 CRYPTO_secure_clear_free                4315   1_1_0g  EXIST::FUNCTION:
 EVP_PKEY_set1_engine                    4347   1_1_0g  EXIST::FUNCTION:ENGINE
 OCSP_resp_get0_signer                   4374   1_1_0h  EXIST::FUNCTION:OCSP
+X509_get0_authority_key_id              4448   1_1_0h  EXIST::FUNCTION: