Add missing accessors for X509 AuthorityKeyIdentifier
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Wed, 31 Jul 2019 15:02:45 +0000 (17:02 +0200)
committerDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Thu, 1 Aug 2019 10:13:37 +0000 (12:13 +0200)
Complements commit b383aa208146, which added X509_get0_authority_key_id().

 const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
 const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);      [NEW]
 const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);       [NEW]

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9494)

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

index 70b0397d97b915a9b440ff4c3fd1f2df09dbbf82..67dece68c39a3ca767f27129f8011a4ae2abedd9 100644 (file)
@@ -871,6 +871,20 @@ const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x)
     return (x->akid != NULL ? x->akid->keyid : NULL);
 }
 
+const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x)
+{
+    /* Call for side-effect of computing hash and caching extensions */
+    X509_check_purpose(x, -1, -1);
+    return (x->akid != NULL ? x->akid->issuer : NULL);
+}
+
+const ASN1_INTEGER *X509_get0_authority_serial(X509 *x)
+{
+    /* Call for side-effect of computing hash and caching extensions */
+    X509_check_purpose(x, -1, -1);
+    return (x->akid != NULL ? x->akid->serial : NULL);
+}
+
 long X509_get_pathlen(X509 *x)
 {
     /* Called for side effect of caching extensions */
index fc4ebbb31d8d39941167a1ff8922e010a7f88a5a..80e526c3c7e7ddc83787d2ea7120a3777cc357ec 100644 (file)
@@ -4,6 +4,8 @@
 
 X509_get0_subject_key_id,
 X509_get0_authority_key_id,
+X509_get0_authority_issuer,
+X509_get0_authority_serial,
 X509_get_pathlen,
 X509_get_extension_flags,
 X509_get_key_usage,
@@ -22,6 +24,8 @@ X509_get_proxy_pathlen - retrieve certificate extension data
  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);
+ const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
+ const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);
  void X509_set_proxy_flag(X509 *x);
  void X509_set_proxy_pathlen(int l);
  long X509_get_proxy_pathlen(X509 *x);
@@ -115,6 +119,14 @@ 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_get0_authority_issuer() returns an internal pointer to the authority
+certificate issuer of B<x> as a stack of B<GENERAL_NAME> structures or
+B<NULL> if the extension is not present or cannot be parsed.
+
+X509_get0_authority_serial() returns an internal pointer to the authority
+certificate serial number of B<x> as an B<ASN1_INTEGER> 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 9ea20275ac34b40f38f07ec5521330bdc3b7b250..6c6eca38a582af2d934ec3d1ce65e8389fddbad3 100644 (file)
@@ -661,6 +661,8 @@ 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);
+const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
+const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);
 
 int X509_PURPOSE_get_count(void);
 X509_PURPOSE *X509_PURPOSE_get0(int idx);
index 474f9f950d1f4d9cc9aedb63d48a244db9880902..bf8b803c4c6782118d8438f8a66cd705cf9c50c8 100644 (file)
@@ -4580,3 +4580,5 @@ EVP_PKEY_meth_get_digest_custom         4533      1_1_1   EXIST::FUNCTION:
 OPENSSL_INIT_set_config_filename        4534   1_1_1b  EXIST::FUNCTION:STDIO
 OPENSSL_INIT_set_config_file_flags      4535   1_1_1b  EXIST::FUNCTION:STDIO
 EVP_PKEY_get0_engine                    4536   1_1_1c  EXIST::FUNCTION:ENGINE
+X509_get0_authority_serial              4537   1_1_1d  EXIST::FUNCTION:
+X509_get0_authority_issuer              4538   1_1_1d  EXIST::FUNCTION: