[openssl-users] X509 subject key identifier
    Viktor Dukhovni 
    openssl-users at dukhovni.org
       
    Tue Sep 22 14:31:14 UTC 2015
    
    
  
On Tue, Sep 22, 2015 at 09:22:09AM -0400, Ken Goldman wrote:
> 1 - Am I correct that "data" points to the internal structure, and so "skid"
> should not be freed until I'm done with "data"?
Correct.  The "data" element is part of the ASN1_STRING (of type
ASN1_OCTET_STRING).
> 2 - For my education, I thought that d2i calls converted from DER to openssl
> internal format.  Yet, the input "subject" is an X509*, the internal format.
While the certificate object is already decoded, its extensions are not,
they are stored in DER form, and you need to extract them via suitable
decoding routines.
> 3 - Are these calls documented?  They're not in my usual starting point
> 
> https://www.openssl.org/docs/man1.0.1/crypto/
> 
> nor are they on the X509 page.
Sadly, they're not.  Please open a ticket that requests these be
documented.  There's a tiny example in
    doc/HOWTO/proxy_certificates.txt
but it does not amount to documentation of the interface.
If you're really feeling generous, write the document.
The underlying interface is in crypto/x509v3/v3_lib.c:
    /*-
     * Get critical flag and decoded version of extension from a NID.
     * The "idx" variable returns the last found extension and can
     * be used to retrieve multiple extensions of the same NID.
     * However multiple extensions with the same NID is usually
     * due to a badly encoded certificate so if idx is NULL we
     * choke if multiple extensions exist.
     * The "crit" variable is set to the critical value.
     * The return value is the decoded extension or NULL on
     * error. The actual error can have several different causes,
     * the value of *crit reflects the cause:
     * >= 0, extension found but not decoded (reflects critical value).
     * -1 extension not found.
     * -2 extension occurs more than once.
     */
    void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
			 int *idx)
Only certain "standard" extensions have default "d2i" methods.  The list
is in:
    static const X509V3_EXT_METHOD *standard_exts[]
in the same file, but some legacy NetScape extensions are
defined in crypto/x509v3/v3_ia5.c:
    const X509V3_EXT_METHOD v3_ns_ia5_list[]
-- 
	Viktor.
    
    
More information about the openssl-users
mailing list