1*b0365755Stb /* $OpenBSD: x509v3.h,v 1.40 2024/12/23 09:57:23 tb Exp $ */ 2e500e238Sjsing /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 3e500e238Sjsing * project 1999. 4e500e238Sjsing */ 5e500e238Sjsing /* ==================================================================== 6e500e238Sjsing * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. 7e500e238Sjsing * 8e500e238Sjsing * Redistribution and use in source and binary forms, with or without 9e500e238Sjsing * modification, are permitted provided that the following conditions 10e500e238Sjsing * are met: 11e500e238Sjsing * 12e500e238Sjsing * 1. Redistributions of source code must retain the above copyright 13e500e238Sjsing * notice, this list of conditions and the following disclaimer. 14e500e238Sjsing * 15e500e238Sjsing * 2. Redistributions in binary form must reproduce the above copyright 16e500e238Sjsing * notice, this list of conditions and the following disclaimer in 17e500e238Sjsing * the documentation and/or other materials provided with the 18e500e238Sjsing * distribution. 19e500e238Sjsing * 20e500e238Sjsing * 3. All advertising materials mentioning features or use of this 21e500e238Sjsing * software must display the following acknowledgment: 22e500e238Sjsing * "This product includes software developed by the OpenSSL Project 23e500e238Sjsing * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24e500e238Sjsing * 25e500e238Sjsing * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26e500e238Sjsing * endorse or promote products derived from this software without 27e500e238Sjsing * prior written permission. For written permission, please contact 28e500e238Sjsing * licensing@OpenSSL.org. 29e500e238Sjsing * 30e500e238Sjsing * 5. Products derived from this software may not be called "OpenSSL" 31e500e238Sjsing * nor may "OpenSSL" appear in their names without prior written 32e500e238Sjsing * permission of the OpenSSL Project. 33e500e238Sjsing * 34e500e238Sjsing * 6. Redistributions of any form whatsoever must retain the following 35e500e238Sjsing * acknowledgment: 36e500e238Sjsing * "This product includes software developed by the OpenSSL Project 37e500e238Sjsing * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38e500e238Sjsing * 39e500e238Sjsing * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40e500e238Sjsing * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41e500e238Sjsing * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42e500e238Sjsing * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43e500e238Sjsing * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44e500e238Sjsing * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45e500e238Sjsing * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46e500e238Sjsing * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47e500e238Sjsing * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48e500e238Sjsing * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49e500e238Sjsing * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50e500e238Sjsing * OF THE POSSIBILITY OF SUCH DAMAGE. 51e500e238Sjsing * ==================================================================== 52e500e238Sjsing * 53e500e238Sjsing * This product includes cryptographic software written by Eric Young 54e500e238Sjsing * (eay@cryptsoft.com). This product includes software written by Tim 55e500e238Sjsing * Hudson (tjh@cryptsoft.com). 56e500e238Sjsing * 57e500e238Sjsing */ 58e500e238Sjsing #ifndef HEADER_X509V3_H 59e500e238Sjsing #define HEADER_X509V3_H 60e500e238Sjsing 61e500e238Sjsing #include <openssl/opensslconf.h> 62e500e238Sjsing 63e500e238Sjsing #include <openssl/bio.h> 64e500e238Sjsing #include <openssl/x509.h> 65e500e238Sjsing #include <openssl/conf.h> 66e500e238Sjsing 67e500e238Sjsing #ifdef __cplusplus 68e500e238Sjsing extern "C" { 69e500e238Sjsing #endif 70e500e238Sjsing 71e500e238Sjsing /* Forward reference */ 72e500e238Sjsing struct v3_ext_method; 73e500e238Sjsing struct v3_ext_ctx; 74e500e238Sjsing 75e500e238Sjsing /* Useful typedefs */ 76e500e238Sjsing 77e500e238Sjsing typedef void * (*X509V3_EXT_NEW)(void); 78e500e238Sjsing typedef void (*X509V3_EXT_FREE)(void *); 79e500e238Sjsing typedef void * (*X509V3_EXT_D2I)(void *, const unsigned char ** , long); 80e500e238Sjsing typedef int (*X509V3_EXT_I2D)(void *, unsigned char **); 81e500e238Sjsing typedef STACK_OF(CONF_VALUE) * 82e500e238Sjsing (*X509V3_EXT_I2V)(const struct v3_ext_method *method, void *ext, 83e500e238Sjsing STACK_OF(CONF_VALUE) *extlist); 84e500e238Sjsing typedef void * (*X509V3_EXT_V2I)(const struct v3_ext_method *method, 85e500e238Sjsing struct v3_ext_ctx *ctx, 86e500e238Sjsing STACK_OF(CONF_VALUE) *values); 87e500e238Sjsing typedef char * (*X509V3_EXT_I2S)(const struct v3_ext_method *method, void *ext); 88e500e238Sjsing typedef void * (*X509V3_EXT_S2I)(const struct v3_ext_method *method, 89e500e238Sjsing struct v3_ext_ctx *ctx, const char *str); 90e500e238Sjsing typedef int (*X509V3_EXT_I2R)(const struct v3_ext_method *method, void *ext, 91e500e238Sjsing BIO *out, int indent); 92e500e238Sjsing typedef void * (*X509V3_EXT_R2I)(const struct v3_ext_method *method, 93e500e238Sjsing struct v3_ext_ctx *ctx, const char *str); 94e500e238Sjsing 95e500e238Sjsing /* V3 extension structure */ 96e500e238Sjsing 97e500e238Sjsing struct v3_ext_method { 98e500e238Sjsing int ext_nid; 99e500e238Sjsing int ext_flags; 100e500e238Sjsing /* If this is set the following four fields are ignored */ 101e500e238Sjsing ASN1_ITEM_EXP *it; 102e500e238Sjsing /* Old style ASN1 calls */ 103e500e238Sjsing X509V3_EXT_NEW ext_new; 104e500e238Sjsing X509V3_EXT_FREE ext_free; 105e500e238Sjsing X509V3_EXT_D2I d2i; 106e500e238Sjsing X509V3_EXT_I2D i2d; 107e500e238Sjsing 108e500e238Sjsing /* The following pair is used for string extensions */ 109e500e238Sjsing X509V3_EXT_I2S i2s; 110e500e238Sjsing X509V3_EXT_S2I s2i; 111e500e238Sjsing 112e500e238Sjsing /* The following pair is used for multi-valued extensions */ 113e500e238Sjsing X509V3_EXT_I2V i2v; 114e500e238Sjsing X509V3_EXT_V2I v2i; 115e500e238Sjsing 116e500e238Sjsing /* The following are used for raw extensions */ 117e500e238Sjsing X509V3_EXT_I2R i2r; 118e500e238Sjsing X509V3_EXT_R2I r2i; 119e500e238Sjsing 120d4af8408Stb const void *usr_data; /* Any extension specific data */ 121e500e238Sjsing }; 122e500e238Sjsing 123e500e238Sjsing struct v3_ext_ctx { 124e500e238Sjsing #define CTX_TEST 0x1 125e500e238Sjsing int flags; 126e500e238Sjsing X509 *issuer_cert; 127e500e238Sjsing X509 *subject_cert; 128e500e238Sjsing X509_REQ *subject_req; 129e500e238Sjsing X509_CRL *crl; 130e500e238Sjsing void *db; 131e500e238Sjsing }; 132e500e238Sjsing 133e500e238Sjsing typedef struct v3_ext_method X509V3_EXT_METHOD; 134e500e238Sjsing 135e500e238Sjsing DECLARE_STACK_OF(X509V3_EXT_METHOD) 136e500e238Sjsing 137136f2e43Stb /* XXX - can this be made internal? */ 138e500e238Sjsing #define X509V3_EXT_MULTILINE 0x4 139e500e238Sjsing 140fa17f87bStb /* XXX - remove it anyway? */ 141abab89dbStb /* Guess who uses this... Yes, of course, it's xca. */ 142e500e238Sjsing typedef BIT_STRING_BITNAME ENUMERATED_NAMES; 143e500e238Sjsing 144e500e238Sjsing typedef struct BASIC_CONSTRAINTS_st { 145e500e238Sjsing int ca; 146e500e238Sjsing ASN1_INTEGER *pathlen; 147e500e238Sjsing } BASIC_CONSTRAINTS; 148e500e238Sjsing 149e500e238Sjsing 150e500e238Sjsing typedef struct PKEY_USAGE_PERIOD_st { 151e500e238Sjsing ASN1_GENERALIZEDTIME *notBefore; 152e500e238Sjsing ASN1_GENERALIZEDTIME *notAfter; 153e500e238Sjsing } PKEY_USAGE_PERIOD; 154e500e238Sjsing 155e500e238Sjsing typedef struct otherName_st { 156e500e238Sjsing ASN1_OBJECT *type_id; 157e500e238Sjsing ASN1_TYPE *value; 158e500e238Sjsing } OTHERNAME; 159e500e238Sjsing 160e500e238Sjsing typedef struct EDIPartyName_st { 161e500e238Sjsing ASN1_STRING *nameAssigner; 162e500e238Sjsing ASN1_STRING *partyName; 163e500e238Sjsing } EDIPARTYNAME; 164e500e238Sjsing 165e500e238Sjsing typedef struct GENERAL_NAME_st { 166e500e238Sjsing 167e500e238Sjsing #define GEN_OTHERNAME 0 168e500e238Sjsing #define GEN_EMAIL 1 169e500e238Sjsing #define GEN_DNS 2 170e500e238Sjsing #define GEN_X400 3 171e500e238Sjsing #define GEN_DIRNAME 4 172e500e238Sjsing #define GEN_EDIPARTY 5 173e500e238Sjsing #define GEN_URI 6 174e500e238Sjsing #define GEN_IPADD 7 175e500e238Sjsing #define GEN_RID 8 176e500e238Sjsing 177e500e238Sjsing int type; 178e500e238Sjsing union { 179e500e238Sjsing char *ptr; 180e500e238Sjsing OTHERNAME *otherName; /* otherName */ 181e500e238Sjsing ASN1_IA5STRING *rfc822Name; 182e500e238Sjsing ASN1_IA5STRING *dNSName; 1837603ff28Stb ASN1_STRING *x400Address; 184e500e238Sjsing X509_NAME *directoryName; 185e500e238Sjsing EDIPARTYNAME *ediPartyName; 186e500e238Sjsing ASN1_IA5STRING *uniformResourceIdentifier; 187e500e238Sjsing ASN1_OCTET_STRING *iPAddress; 188e500e238Sjsing ASN1_OBJECT *registeredID; 189e500e238Sjsing 190e500e238Sjsing /* Old names */ 191e500e238Sjsing ASN1_OCTET_STRING *ip; /* iPAddress */ 192e500e238Sjsing X509_NAME *dirn; /* dirn */ 193e500e238Sjsing ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, uniformResourceIdentifier */ 194e500e238Sjsing ASN1_OBJECT *rid; /* registeredID */ 195e500e238Sjsing } d; 196e500e238Sjsing } GENERAL_NAME; 197e500e238Sjsing 198e500e238Sjsing typedef struct ACCESS_DESCRIPTION_st { 199e500e238Sjsing ASN1_OBJECT *method; 200e500e238Sjsing GENERAL_NAME *location; 201e500e238Sjsing } ACCESS_DESCRIPTION; 202e500e238Sjsing 203e500e238Sjsing typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; 204e500e238Sjsing 205e500e238Sjsing typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; 206e500e238Sjsing 207e500e238Sjsing DECLARE_STACK_OF(GENERAL_NAME) 208e500e238Sjsing 20928115db1Stb typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; 21028115db1Stb DECLARE_STACK_OF(GENERAL_NAMES) 21128115db1Stb 212e500e238Sjsing DECLARE_STACK_OF(ACCESS_DESCRIPTION) 213e500e238Sjsing 214e500e238Sjsing typedef struct DIST_POINT_NAME_st { 215e500e238Sjsing int type; 216e500e238Sjsing union { 217e500e238Sjsing GENERAL_NAMES *fullname; 218e500e238Sjsing STACK_OF(X509_NAME_ENTRY) *relativename; 219e500e238Sjsing } name; 220e500e238Sjsing /* If relativename then this contains the full distribution point name */ 221e500e238Sjsing X509_NAME *dpname; 222e500e238Sjsing } DIST_POINT_NAME; 223e500e238Sjsing /* All existing reasons */ 224e500e238Sjsing #define CRLDP_ALL_REASONS 0x807f 225e500e238Sjsing 226e500e238Sjsing #define CRL_REASON_NONE -1 227e500e238Sjsing #define CRL_REASON_UNSPECIFIED 0 228e500e238Sjsing #define CRL_REASON_KEY_COMPROMISE 1 229e500e238Sjsing #define CRL_REASON_CA_COMPROMISE 2 230e500e238Sjsing #define CRL_REASON_AFFILIATION_CHANGED 3 231e500e238Sjsing #define CRL_REASON_SUPERSEDED 4 232e500e238Sjsing #define CRL_REASON_CESSATION_OF_OPERATION 5 233e500e238Sjsing #define CRL_REASON_CERTIFICATE_HOLD 6 234e500e238Sjsing #define CRL_REASON_REMOVE_FROM_CRL 8 235e500e238Sjsing #define CRL_REASON_PRIVILEGE_WITHDRAWN 9 236e500e238Sjsing #define CRL_REASON_AA_COMPROMISE 10 237e500e238Sjsing 238e500e238Sjsing struct DIST_POINT_st { 239e500e238Sjsing DIST_POINT_NAME *distpoint; 240e500e238Sjsing ASN1_BIT_STRING *reasons; 241e500e238Sjsing GENERAL_NAMES *CRLissuer; 242e500e238Sjsing int dp_reasons; 243e500e238Sjsing }; 244e500e238Sjsing 245e500e238Sjsing typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; 246e500e238Sjsing 247e500e238Sjsing DECLARE_STACK_OF(DIST_POINT) 248e500e238Sjsing 249e500e238Sjsing struct AUTHORITY_KEYID_st { 250e500e238Sjsing ASN1_OCTET_STRING *keyid; 251e500e238Sjsing GENERAL_NAMES *issuer; 252e500e238Sjsing ASN1_INTEGER *serial; 253e500e238Sjsing }; 254e500e238Sjsing 255e500e238Sjsing typedef struct NOTICEREF_st { 256e500e238Sjsing ASN1_STRING *organization; 257e500e238Sjsing STACK_OF(ASN1_INTEGER) *noticenos; 258e500e238Sjsing } NOTICEREF; 259e500e238Sjsing 260e500e238Sjsing typedef struct USERNOTICE_st { 261e500e238Sjsing NOTICEREF *noticeref; 262e500e238Sjsing ASN1_STRING *exptext; 263e500e238Sjsing } USERNOTICE; 264e500e238Sjsing 265e500e238Sjsing typedef struct POLICYQUALINFO_st { 266e500e238Sjsing ASN1_OBJECT *pqualid; 267e500e238Sjsing union { 268e500e238Sjsing ASN1_IA5STRING *cpsuri; 269e500e238Sjsing USERNOTICE *usernotice; 270e500e238Sjsing ASN1_TYPE *other; 271e500e238Sjsing } d; 272e500e238Sjsing } POLICYQUALINFO; 273e500e238Sjsing 274e500e238Sjsing DECLARE_STACK_OF(POLICYQUALINFO) 275e500e238Sjsing 276e500e238Sjsing typedef struct POLICYINFO_st { 277e500e238Sjsing ASN1_OBJECT *policyid; 278e500e238Sjsing STACK_OF(POLICYQUALINFO) *qualifiers; 279e500e238Sjsing } POLICYINFO; 280e500e238Sjsing 281e500e238Sjsing typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; 282e500e238Sjsing 283e500e238Sjsing DECLARE_STACK_OF(POLICYINFO) 284e500e238Sjsing 285e500e238Sjsing typedef struct POLICY_MAPPING_st { 286e500e238Sjsing ASN1_OBJECT *issuerDomainPolicy; 287e500e238Sjsing ASN1_OBJECT *subjectDomainPolicy; 288e500e238Sjsing } POLICY_MAPPING; 289e500e238Sjsing 290e500e238Sjsing DECLARE_STACK_OF(POLICY_MAPPING) 291e500e238Sjsing 292e500e238Sjsing typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; 293e500e238Sjsing 294e500e238Sjsing typedef struct GENERAL_SUBTREE_st { 295e500e238Sjsing GENERAL_NAME *base; 296e500e238Sjsing ASN1_INTEGER *minimum; 297e500e238Sjsing ASN1_INTEGER *maximum; 298e500e238Sjsing } GENERAL_SUBTREE; 299e500e238Sjsing 300e500e238Sjsing DECLARE_STACK_OF(GENERAL_SUBTREE) 301e500e238Sjsing 302e500e238Sjsing struct NAME_CONSTRAINTS_st { 303e500e238Sjsing STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; 304e500e238Sjsing STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; 305e500e238Sjsing }; 306e500e238Sjsing 307e500e238Sjsing typedef struct POLICY_CONSTRAINTS_st { 308e500e238Sjsing ASN1_INTEGER *requireExplicitPolicy; 309e500e238Sjsing ASN1_INTEGER *inhibitPolicyMapping; 310e500e238Sjsing } POLICY_CONSTRAINTS; 311e500e238Sjsing 31290c9070dSschwarze struct ISSUING_DIST_POINT_st { 313e500e238Sjsing DIST_POINT_NAME *distpoint; 314e500e238Sjsing int onlyuser; 315e500e238Sjsing int onlyCA; 316e500e238Sjsing ASN1_BIT_STRING *onlysomereasons; 317e500e238Sjsing int indirectCRL; 318e500e238Sjsing int onlyattr; 319e500e238Sjsing }; 320e500e238Sjsing 321e500e238Sjsing /* Values in idp_flags field */ 322e500e238Sjsing /* IDP present */ 323e500e238Sjsing #define IDP_PRESENT 0x1 324e500e238Sjsing /* IDP values inconsistent */ 325e500e238Sjsing #define IDP_INVALID 0x2 326e500e238Sjsing /* onlyuser true */ 327e500e238Sjsing #define IDP_ONLYUSER 0x4 328e500e238Sjsing /* onlyCA true */ 329e500e238Sjsing #define IDP_ONLYCA 0x8 330e500e238Sjsing /* onlyattr true */ 331e500e238Sjsing #define IDP_ONLYATTR 0x10 332e500e238Sjsing /* indirectCRL true */ 333e500e238Sjsing #define IDP_INDIRECT 0x20 334e500e238Sjsing /* onlysomereasons present */ 335e500e238Sjsing #define IDP_REASONS 0x40 336e500e238Sjsing 337e500e238Sjsing #define X509V3_conf_err(val) ERR_asprintf_error_data( \ 338e500e238Sjsing "section:%s,name:%s,value:%s", val->section, \ 339e500e238Sjsing val->name, val->value); 340e500e238Sjsing 341e500e238Sjsing #define X509V3_set_ctx_test(ctx) \ 342e500e238Sjsing X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) 343e500e238Sjsing #define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; 344e500e238Sjsing 345e500e238Sjsing /* X509_PURPOSE stuff */ 346e500e238Sjsing 347e500e238Sjsing #define EXFLAG_BCONS 0x0001 348e500e238Sjsing #define EXFLAG_KUSAGE 0x0002 349e500e238Sjsing #define EXFLAG_XKUSAGE 0x0004 350e500e238Sjsing #define EXFLAG_NSCERT 0x0008 351e500e238Sjsing 352e500e238Sjsing #define EXFLAG_CA 0x0010 353e500e238Sjsing #define EXFLAG_SI 0x0020 /* Self issued. */ 354e500e238Sjsing #define EXFLAG_V1 0x0040 355e500e238Sjsing #define EXFLAG_INVALID 0x0080 356e500e238Sjsing #define EXFLAG_SET 0x0100 357e500e238Sjsing #define EXFLAG_CRITICAL 0x0200 35874c14236Stb #if !defined(LIBRESSL_INTERNAL) 359e500e238Sjsing #define EXFLAG_PROXY 0x0400 36074c14236Stb #endif 361e500e238Sjsing #define EXFLAG_INVALID_POLICY 0x0800 362e500e238Sjsing #define EXFLAG_FRESHEST 0x1000 363e500e238Sjsing #define EXFLAG_SS 0x2000 /* Self signed. */ 364e500e238Sjsing 365e500e238Sjsing #define KU_DIGITAL_SIGNATURE 0x0080 366e500e238Sjsing #define KU_NON_REPUDIATION 0x0040 367e500e238Sjsing #define KU_KEY_ENCIPHERMENT 0x0020 368e500e238Sjsing #define KU_DATA_ENCIPHERMENT 0x0010 369e500e238Sjsing #define KU_KEY_AGREEMENT 0x0008 370e500e238Sjsing #define KU_KEY_CERT_SIGN 0x0004 371e500e238Sjsing #define KU_CRL_SIGN 0x0002 372e500e238Sjsing #define KU_ENCIPHER_ONLY 0x0001 373e500e238Sjsing #define KU_DECIPHER_ONLY 0x8000 374e500e238Sjsing 375e500e238Sjsing #define NS_SSL_CLIENT 0x80 376e500e238Sjsing #define NS_SSL_SERVER 0x40 377e500e238Sjsing #define NS_SMIME 0x20 378e500e238Sjsing #define NS_OBJSIGN 0x10 379e500e238Sjsing #define NS_SSL_CA 0x04 380e500e238Sjsing #define NS_SMIME_CA 0x02 381e500e238Sjsing #define NS_OBJSIGN_CA 0x01 382e500e238Sjsing #define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) 383e500e238Sjsing 384e500e238Sjsing #define XKU_SSL_SERVER 0x1 385e500e238Sjsing #define XKU_SSL_CLIENT 0x2 386e500e238Sjsing #define XKU_SMIME 0x4 387e500e238Sjsing #define XKU_CODE_SIGN 0x8 388e500e238Sjsing #define XKU_SGC 0x10 389e500e238Sjsing #define XKU_OCSP_SIGN 0x20 390e500e238Sjsing #define XKU_TIMESTAMP 0x40 391e500e238Sjsing #define XKU_DVCS 0x80 3923e6cffe7Stb #define XKU_ANYEKU 0x100 393e500e238Sjsing 394e500e238Sjsing #define X509_PURPOSE_DYNAMIC 0x1 395e500e238Sjsing #define X509_PURPOSE_DYNAMIC_NAME 0x2 396e500e238Sjsing 39740ab66bcStb typedef struct x509_purpose_st X509_PURPOSE; 398e500e238Sjsing 399e500e238Sjsing #define X509_PURPOSE_SSL_CLIENT 1 400e500e238Sjsing #define X509_PURPOSE_SSL_SERVER 2 401e500e238Sjsing #define X509_PURPOSE_NS_SSL_SERVER 3 402e500e238Sjsing #define X509_PURPOSE_SMIME_SIGN 4 403e500e238Sjsing #define X509_PURPOSE_SMIME_ENCRYPT 5 404e500e238Sjsing #define X509_PURPOSE_CRL_SIGN 6 405e500e238Sjsing #define X509_PURPOSE_ANY 7 406e500e238Sjsing #define X509_PURPOSE_OCSP_HELPER 8 407e500e238Sjsing #define X509_PURPOSE_TIMESTAMP_SIGN 9 408e500e238Sjsing 409e500e238Sjsing #define X509_PURPOSE_MIN 1 410e500e238Sjsing #define X509_PURPOSE_MAX 9 411e500e238Sjsing 412e500e238Sjsing /* Flags for X509V3_EXT_print() */ 413e500e238Sjsing 414e500e238Sjsing #define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) 415e500e238Sjsing /* Return error for unknown extensions */ 416e500e238Sjsing #define X509V3_EXT_DEFAULT 0 417e500e238Sjsing /* Print error for unknown extensions */ 418e500e238Sjsing #define X509V3_EXT_ERROR_UNKNOWN (1L << 16) 419e500e238Sjsing /* ASN1 parse unknown extensions */ 420e500e238Sjsing #define X509V3_EXT_PARSE_UNKNOWN (2L << 16) 421e500e238Sjsing /* BIO_dump unknown extensions */ 422e500e238Sjsing #define X509V3_EXT_DUMP_UNKNOWN (3L << 16) 423e500e238Sjsing 424e500e238Sjsing /* Flags for X509V3_add1_i2d */ 425e500e238Sjsing 426e500e238Sjsing #define X509V3_ADD_OP_MASK 0xfL 427e500e238Sjsing #define X509V3_ADD_DEFAULT 0L 428e500e238Sjsing #define X509V3_ADD_APPEND 1L 429e500e238Sjsing #define X509V3_ADD_REPLACE 2L 430e500e238Sjsing #define X509V3_ADD_REPLACE_EXISTING 3L 431e500e238Sjsing #define X509V3_ADD_KEEP_EXISTING 4L 432e500e238Sjsing #define X509V3_ADD_DELETE 5L 433e500e238Sjsing #define X509V3_ADD_SILENT 0x10 434e500e238Sjsing 435e500e238Sjsing DECLARE_STACK_OF(X509_PURPOSE) 436e500e238Sjsing 437e500e238Sjsing BASIC_CONSTRAINTS *BASIC_CONSTRAINTS_new(void); 438e500e238Sjsing void BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a); 439e500e238Sjsing BASIC_CONSTRAINTS *d2i_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS **a, const unsigned char **in, long len); 440e500e238Sjsing int i2d_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS *a, unsigned char **out); 441e500e238Sjsing extern const ASN1_ITEM BASIC_CONSTRAINTS_it; 442e500e238Sjsing 443e500e238Sjsing AUTHORITY_KEYID *AUTHORITY_KEYID_new(void); 444e500e238Sjsing void AUTHORITY_KEYID_free(AUTHORITY_KEYID *a); 445e500e238Sjsing AUTHORITY_KEYID *d2i_AUTHORITY_KEYID(AUTHORITY_KEYID **a, const unsigned char **in, long len); 446e500e238Sjsing int i2d_AUTHORITY_KEYID(AUTHORITY_KEYID *a, unsigned char **out); 447e500e238Sjsing extern const ASN1_ITEM AUTHORITY_KEYID_it; 448e500e238Sjsing 449e500e238Sjsing PKEY_USAGE_PERIOD *PKEY_USAGE_PERIOD_new(void); 450e500e238Sjsing void PKEY_USAGE_PERIOD_free(PKEY_USAGE_PERIOD *a); 451e500e238Sjsing PKEY_USAGE_PERIOD *d2i_PKEY_USAGE_PERIOD(PKEY_USAGE_PERIOD **a, const unsigned char **in, long len); 452e500e238Sjsing int i2d_PKEY_USAGE_PERIOD(PKEY_USAGE_PERIOD *a, unsigned char **out); 453e500e238Sjsing extern const ASN1_ITEM PKEY_USAGE_PERIOD_it; 454e500e238Sjsing 455e500e238Sjsing GENERAL_NAME *GENERAL_NAME_new(void); 456e500e238Sjsing void GENERAL_NAME_free(GENERAL_NAME *a); 457e500e238Sjsing GENERAL_NAME *d2i_GENERAL_NAME(GENERAL_NAME **a, const unsigned char **in, long len); 458e500e238Sjsing int i2d_GENERAL_NAME(GENERAL_NAME *a, unsigned char **out); 459e500e238Sjsing extern const ASN1_ITEM GENERAL_NAME_it; 460e500e238Sjsing GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); 461e500e238Sjsing int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); 462e500e238Sjsing 463e500e238Sjsing 464e500e238Sjsing 465e500e238Sjsing ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, 466e500e238Sjsing X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); 467e500e238Sjsing STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, 468e500e238Sjsing ASN1_BIT_STRING *bits, 469e500e238Sjsing STACK_OF(CONF_VALUE) *extlist); 470e500e238Sjsing 471e500e238Sjsing STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret); 472e500e238Sjsing int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); 473e500e238Sjsing 474e500e238Sjsing GENERAL_NAMES *GENERAL_NAMES_new(void); 475e500e238Sjsing void GENERAL_NAMES_free(GENERAL_NAMES *a); 476e500e238Sjsing GENERAL_NAMES *d2i_GENERAL_NAMES(GENERAL_NAMES **a, const unsigned char **in, long len); 477e500e238Sjsing int i2d_GENERAL_NAMES(GENERAL_NAMES *a, unsigned char **out); 478e500e238Sjsing extern const ASN1_ITEM GENERAL_NAMES_it; 479e500e238Sjsing 480e500e238Sjsing STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, 481e500e238Sjsing GENERAL_NAMES *gen, STACK_OF(CONF_VALUE) *extlist); 482e500e238Sjsing GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, 483e500e238Sjsing X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); 484e500e238Sjsing 485e500e238Sjsing OTHERNAME *OTHERNAME_new(void); 486e500e238Sjsing void OTHERNAME_free(OTHERNAME *a); 487e500e238Sjsing OTHERNAME *d2i_OTHERNAME(OTHERNAME **a, const unsigned char **in, long len); 488e500e238Sjsing int i2d_OTHERNAME(OTHERNAME *a, unsigned char **out); 489e500e238Sjsing extern const ASN1_ITEM OTHERNAME_it; 490e500e238Sjsing EDIPARTYNAME *EDIPARTYNAME_new(void); 491e500e238Sjsing void EDIPARTYNAME_free(EDIPARTYNAME *a); 492e500e238Sjsing EDIPARTYNAME *d2i_EDIPARTYNAME(EDIPARTYNAME **a, const unsigned char **in, long len); 493e500e238Sjsing int i2d_EDIPARTYNAME(EDIPARTYNAME *a, unsigned char **out); 494e500e238Sjsing extern const ASN1_ITEM EDIPARTYNAME_it; 495e500e238Sjsing int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); 496e500e238Sjsing void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); 497e500e238Sjsing void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype); 498e500e238Sjsing int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, 499e500e238Sjsing ASN1_OBJECT *oid, ASN1_TYPE *value); 500e500e238Sjsing int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, 501e500e238Sjsing ASN1_OBJECT **poid, ASN1_TYPE **pvalue); 502e500e238Sjsing 503e500e238Sjsing char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, 504e500e238Sjsing const ASN1_OCTET_STRING *ia5); 505e500e238Sjsing ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, 506e500e238Sjsing X509V3_CTX *ctx, const char *str); 507e500e238Sjsing 508e500e238Sjsing EXTENDED_KEY_USAGE *EXTENDED_KEY_USAGE_new(void); 509e500e238Sjsing void EXTENDED_KEY_USAGE_free(EXTENDED_KEY_USAGE *a); 510e500e238Sjsing EXTENDED_KEY_USAGE *d2i_EXTENDED_KEY_USAGE(EXTENDED_KEY_USAGE **a, const unsigned char **in, long len); 511e500e238Sjsing int i2d_EXTENDED_KEY_USAGE(EXTENDED_KEY_USAGE *a, unsigned char **out); 512e500e238Sjsing extern const ASN1_ITEM EXTENDED_KEY_USAGE_it; 513e500e238Sjsing int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION* a); 514e500e238Sjsing 515e500e238Sjsing CERTIFICATEPOLICIES *CERTIFICATEPOLICIES_new(void); 516e500e238Sjsing void CERTIFICATEPOLICIES_free(CERTIFICATEPOLICIES *a); 517e500e238Sjsing CERTIFICATEPOLICIES *d2i_CERTIFICATEPOLICIES(CERTIFICATEPOLICIES **a, const unsigned char **in, long len); 518e500e238Sjsing int i2d_CERTIFICATEPOLICIES(CERTIFICATEPOLICIES *a, unsigned char **out); 519e500e238Sjsing extern const ASN1_ITEM CERTIFICATEPOLICIES_it; 520e500e238Sjsing POLICYINFO *POLICYINFO_new(void); 521e500e238Sjsing void POLICYINFO_free(POLICYINFO *a); 522e500e238Sjsing POLICYINFO *d2i_POLICYINFO(POLICYINFO **a, const unsigned char **in, long len); 523e500e238Sjsing int i2d_POLICYINFO(POLICYINFO *a, unsigned char **out); 524e500e238Sjsing extern const ASN1_ITEM POLICYINFO_it; 525e500e238Sjsing POLICYQUALINFO *POLICYQUALINFO_new(void); 526e500e238Sjsing void POLICYQUALINFO_free(POLICYQUALINFO *a); 527e500e238Sjsing POLICYQUALINFO *d2i_POLICYQUALINFO(POLICYQUALINFO **a, const unsigned char **in, long len); 528e500e238Sjsing int i2d_POLICYQUALINFO(POLICYQUALINFO *a, unsigned char **out); 529e500e238Sjsing extern const ASN1_ITEM POLICYQUALINFO_it; 530e500e238Sjsing USERNOTICE *USERNOTICE_new(void); 531e500e238Sjsing void USERNOTICE_free(USERNOTICE *a); 532e500e238Sjsing USERNOTICE *d2i_USERNOTICE(USERNOTICE **a, const unsigned char **in, long len); 533e500e238Sjsing int i2d_USERNOTICE(USERNOTICE *a, unsigned char **out); 534e500e238Sjsing extern const ASN1_ITEM USERNOTICE_it; 535e500e238Sjsing NOTICEREF *NOTICEREF_new(void); 536e500e238Sjsing void NOTICEREF_free(NOTICEREF *a); 537e500e238Sjsing NOTICEREF *d2i_NOTICEREF(NOTICEREF **a, const unsigned char **in, long len); 538e500e238Sjsing int i2d_NOTICEREF(NOTICEREF *a, unsigned char **out); 539e500e238Sjsing extern const ASN1_ITEM NOTICEREF_it; 540e500e238Sjsing 541e500e238Sjsing CRL_DIST_POINTS *CRL_DIST_POINTS_new(void); 542e500e238Sjsing void CRL_DIST_POINTS_free(CRL_DIST_POINTS *a); 543e500e238Sjsing CRL_DIST_POINTS *d2i_CRL_DIST_POINTS(CRL_DIST_POINTS **a, const unsigned char **in, long len); 544e500e238Sjsing int i2d_CRL_DIST_POINTS(CRL_DIST_POINTS *a, unsigned char **out); 545e500e238Sjsing extern const ASN1_ITEM CRL_DIST_POINTS_it; 546e500e238Sjsing DIST_POINT *DIST_POINT_new(void); 547e500e238Sjsing void DIST_POINT_free(DIST_POINT *a); 548e500e238Sjsing DIST_POINT *d2i_DIST_POINT(DIST_POINT **a, const unsigned char **in, long len); 549e500e238Sjsing int i2d_DIST_POINT(DIST_POINT *a, unsigned char **out); 550e500e238Sjsing extern const ASN1_ITEM DIST_POINT_it; 551e500e238Sjsing DIST_POINT_NAME *DIST_POINT_NAME_new(void); 552e500e238Sjsing void DIST_POINT_NAME_free(DIST_POINT_NAME *a); 553e500e238Sjsing DIST_POINT_NAME *d2i_DIST_POINT_NAME(DIST_POINT_NAME **a, const unsigned char **in, long len); 554e500e238Sjsing int i2d_DIST_POINT_NAME(DIST_POINT_NAME *a, unsigned char **out); 555e500e238Sjsing extern const ASN1_ITEM DIST_POINT_NAME_it; 556e500e238Sjsing ISSUING_DIST_POINT *ISSUING_DIST_POINT_new(void); 557e500e238Sjsing void ISSUING_DIST_POINT_free(ISSUING_DIST_POINT *a); 558e500e238Sjsing ISSUING_DIST_POINT *d2i_ISSUING_DIST_POINT(ISSUING_DIST_POINT **a, const unsigned char **in, long len); 559e500e238Sjsing int i2d_ISSUING_DIST_POINT(ISSUING_DIST_POINT *a, unsigned char **out); 560e500e238Sjsing extern const ASN1_ITEM ISSUING_DIST_POINT_it; 561e500e238Sjsing 562e500e238Sjsing int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); 563e500e238Sjsing 564e500e238Sjsing int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); 565e500e238Sjsing 566e500e238Sjsing ACCESS_DESCRIPTION *ACCESS_DESCRIPTION_new(void); 567e500e238Sjsing void ACCESS_DESCRIPTION_free(ACCESS_DESCRIPTION *a); 568e500e238Sjsing ACCESS_DESCRIPTION *d2i_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION **a, const unsigned char **in, long len); 569e500e238Sjsing int i2d_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION *a, unsigned char **out); 570e500e238Sjsing extern const ASN1_ITEM ACCESS_DESCRIPTION_it; 571e500e238Sjsing AUTHORITY_INFO_ACCESS *AUTHORITY_INFO_ACCESS_new(void); 572e500e238Sjsing void AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a); 573e500e238Sjsing AUTHORITY_INFO_ACCESS *d2i_AUTHORITY_INFO_ACCESS(AUTHORITY_INFO_ACCESS **a, const unsigned char **in, long len); 574e500e238Sjsing int i2d_AUTHORITY_INFO_ACCESS(AUTHORITY_INFO_ACCESS *a, unsigned char **out); 575e500e238Sjsing extern const ASN1_ITEM AUTHORITY_INFO_ACCESS_it; 576e500e238Sjsing 577e500e238Sjsing extern const ASN1_ITEM POLICY_MAPPING_it; 578e500e238Sjsing POLICY_MAPPING *POLICY_MAPPING_new(void); 579e500e238Sjsing void POLICY_MAPPING_free(POLICY_MAPPING *a); 580e500e238Sjsing extern const ASN1_ITEM POLICY_MAPPINGS_it; 581e500e238Sjsing 582e500e238Sjsing extern const ASN1_ITEM GENERAL_SUBTREE_it; 583e500e238Sjsing GENERAL_SUBTREE *GENERAL_SUBTREE_new(void); 584e500e238Sjsing void GENERAL_SUBTREE_free(GENERAL_SUBTREE *a); 585e500e238Sjsing 586e500e238Sjsing extern const ASN1_ITEM NAME_CONSTRAINTS_it; 587e500e238Sjsing NAME_CONSTRAINTS *NAME_CONSTRAINTS_new(void); 588e500e238Sjsing void NAME_CONSTRAINTS_free(NAME_CONSTRAINTS *a); 589e500e238Sjsing 590e500e238Sjsing POLICY_CONSTRAINTS *POLICY_CONSTRAINTS_new(void); 591e500e238Sjsing void POLICY_CONSTRAINTS_free(POLICY_CONSTRAINTS *a); 592e500e238Sjsing extern const ASN1_ITEM POLICY_CONSTRAINTS_it; 593e500e238Sjsing 594e500e238Sjsing GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, 595e500e238Sjsing const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 596e500e238Sjsing int gen_type, const char *value, int is_nc); 597e500e238Sjsing 598e500e238Sjsing #ifdef HEADER_CONF_H 599e500e238Sjsing GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 600e500e238Sjsing CONF_VALUE *cnf); 601e500e238Sjsing GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, 602e500e238Sjsing const X509V3_EXT_METHOD *method, 603e500e238Sjsing X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc); 604e500e238Sjsing void X509V3_conf_free(CONF_VALUE *val); 605e500e238Sjsing 606e500e238Sjsing X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, 607e500e238Sjsing const char *value); 608e500e238Sjsing X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, 609e500e238Sjsing const char *value); 610e500e238Sjsing int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, 611e500e238Sjsing STACK_OF(X509_EXTENSION) **sk); 612e500e238Sjsing int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, 613e500e238Sjsing X509 *cert); 614e500e238Sjsing int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, 615e500e238Sjsing X509_REQ *req); 616e500e238Sjsing int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, 617e500e238Sjsing X509_CRL *crl); 618e500e238Sjsing 619e500e238Sjsing X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, 620e500e238Sjsing int ext_nid, const char *value); 621e500e238Sjsing X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, 622e500e238Sjsing const char *name, const char *value); 623e500e238Sjsing 624e500e238Sjsing void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); 625e500e238Sjsing #endif 626e500e238Sjsing 627e500e238Sjsing void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, 628e500e238Sjsing X509_REQ *req, X509_CRL *crl, int flags); 629e500e238Sjsing 630e500e238Sjsing char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); 631e500e238Sjsing ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); 632e500e238Sjsing char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); 633e500e238Sjsing char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, 634e500e238Sjsing const ASN1_ENUMERATED *aint); 635e500e238Sjsing 636e500e238Sjsing const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); 637e500e238Sjsing const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); 638e500e238Sjsing int X509V3_add_standard_extensions(void); 639e500e238Sjsing STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); 640e500e238Sjsing void *X509V3_EXT_d2i(X509_EXTENSION *ext); 641e500e238Sjsing void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, 642e500e238Sjsing int *idx); 643e500e238Sjsing 644e500e238Sjsing X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); 645e500e238Sjsing int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags); 646e500e238Sjsing 647e500e238Sjsing char *hex_to_string(const unsigned char *buffer, long len); 648e500e238Sjsing unsigned char *string_to_hex(const char *str, long *len); 649e500e238Sjsing 650e500e238Sjsing void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, 651e500e238Sjsing int ml); 652e500e238Sjsing int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent); 653e500e238Sjsing int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); 654e500e238Sjsing 655e500e238Sjsing int X509V3_extensions_print(BIO *out, const char *title, 656e500e238Sjsing const STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent); 657e500e238Sjsing 658e500e238Sjsing int X509_check_ca(X509 *x); 659e500e238Sjsing int X509_check_purpose(X509 *x, int id, int ca); 660e500e238Sjsing int X509_supported_extension(X509_EXTENSION *ex); 661e500e238Sjsing int X509_check_issued(X509 *issuer, X509 *subject); 662e500e238Sjsing int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); 663b9dfbe76Stb 664e500e238Sjsing int X509_PURPOSE_get_count(void); 665b9dfbe76Stb const X509_PURPOSE *X509_PURPOSE_get0(int idx); 666e500e238Sjsing int X509_PURPOSE_get_by_sname(const char *sname); 667b9dfbe76Stb const char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); 668b9dfbe76Stb const char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); 669e500e238Sjsing int X509_PURPOSE_get_id(const X509_PURPOSE *); 670c7d885c5Stb uint32_t X509_get_extension_flags(X509 *x); 6712fc70a27Stb uint32_t X509_get_key_usage(X509 *x); 6722fc70a27Stb uint32_t X509_get_extended_key_usage(X509 *x); 673e500e238Sjsing 674e500e238Sjsing STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); 675e500e238Sjsing STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); 676e500e238Sjsing void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); 677e500e238Sjsing STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); 678e500e238Sjsing 679e500e238Sjsing /* Flags for X509_check_* functions */ 680e500e238Sjsing /* Always check subject name for host match even if subject alt names present */ 681e500e238Sjsing #define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 682e500e238Sjsing /* Disable wildcard matching for dnsName fields and common name. */ 683e500e238Sjsing #define X509_CHECK_FLAG_NO_WILDCARDS 0x2 684e500e238Sjsing /* Wildcards must not match a partial label. */ 685e500e238Sjsing #define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 686e500e238Sjsing /* Allow (non-partial) wildcards to match multiple labels. */ 687e500e238Sjsing #define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 688e500e238Sjsing /* Constraint verifier subdomain patterns to match a single labels. */ 689e500e238Sjsing #define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 69023258cfeSbeck /* Disable checking the CN for a hostname, to support modern validation */ 69123258cfeSbeck #define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 692e500e238Sjsing 693e500e238Sjsing int X509_check_host(X509 *x, const char *chk, size_t chklen, 694e500e238Sjsing unsigned int flags, char **peername); 695e500e238Sjsing int X509_check_email(X509 *x, const char *chk, size_t chklen, 696e500e238Sjsing unsigned int flags); 697e500e238Sjsing int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, 698e500e238Sjsing unsigned int flags); 699e500e238Sjsing int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); 700e500e238Sjsing 701e500e238Sjsing ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); 702e500e238Sjsing ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); 703e500e238Sjsing int a2i_ipadd(unsigned char *ipout, const char *ipasc); 704e500e238Sjsing int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk, 705e500e238Sjsing unsigned long chtype); 706e500e238Sjsing 7070b5aa37fSjob #ifndef OPENSSL_NO_RFC3779 7080b5aa37fSjob typedef struct ASRange_st { 7095f2eabbbStb ASN1_INTEGER *min; 7105f2eabbbStb ASN1_INTEGER *max; 7110b5aa37fSjob } ASRange; 7120b5aa37fSjob 7130b5aa37fSjob #define ASIdOrRange_id 0 7140b5aa37fSjob #define ASIdOrRange_range 1 7150b5aa37fSjob 7160b5aa37fSjob typedef struct ASIdOrRange_st { 7170b5aa37fSjob int type; 7180b5aa37fSjob union { 7190b5aa37fSjob ASN1_INTEGER *id; 7200b5aa37fSjob ASRange *range; 7210b5aa37fSjob } u; 7220b5aa37fSjob } ASIdOrRange; 7230b5aa37fSjob 7240b5aa37fSjob typedef STACK_OF(ASIdOrRange) ASIdOrRanges; 725e7cb2f83Sjob DECLARE_STACK_OF(ASIdOrRange) 7260b5aa37fSjob 7270b5aa37fSjob #define ASIdentifierChoice_inherit 0 7280b5aa37fSjob #define ASIdentifierChoice_asIdsOrRanges 1 7290b5aa37fSjob 7300b5aa37fSjob typedef struct ASIdentifierChoice_st { 7310b5aa37fSjob int type; 7320b5aa37fSjob union { 7330b5aa37fSjob ASN1_NULL *inherit; 7340b5aa37fSjob ASIdOrRanges *asIdsOrRanges; 7350b5aa37fSjob } u; 7360b5aa37fSjob } ASIdentifierChoice; 7370b5aa37fSjob 7380b5aa37fSjob typedef struct ASIdentifiers_st { 7395f2eabbbStb ASIdentifierChoice *asnum; 7405f2eabbbStb ASIdentifierChoice *rdi; 7410b5aa37fSjob } ASIdentifiers; 7420b5aa37fSjob 743354a658eSjob ASRange *ASRange_new(void); 744354a658eSjob void ASRange_free(ASRange *a); 745354a658eSjob ASRange *d2i_ASRange(ASRange **a, const unsigned char **in, long len); 746354a658eSjob int i2d_ASRange(ASRange *a, unsigned char **out); 747354a658eSjob extern const ASN1_ITEM ASRange_it; 748354a658eSjob 749354a658eSjob ASIdOrRange *ASIdOrRange_new(void); 750354a658eSjob void ASIdOrRange_free(ASIdOrRange *a); 751354a658eSjob ASIdOrRange *d2i_ASIdOrRange(ASIdOrRange **a, const unsigned char **in, 752354a658eSjob long len); 753354a658eSjob int i2d_ASIdOrRange(ASIdOrRange *a, unsigned char **out); 754354a658eSjob extern const ASN1_ITEM ASIdOrRange_it; 755354a658eSjob 756354a658eSjob ASIdentifierChoice *ASIdentifierChoice_new(void); 757354a658eSjob void ASIdentifierChoice_free(ASIdentifierChoice *a); 758354a658eSjob ASIdentifierChoice *d2i_ASIdentifierChoice(ASIdentifierChoice **a, 759354a658eSjob const unsigned char **in, long len); 760354a658eSjob int i2d_ASIdentifierChoice(ASIdentifierChoice *a, unsigned char **out); 761354a658eSjob extern const ASN1_ITEM ASIdentifierChoice_it; 762354a658eSjob 763354a658eSjob ASIdentifiers *ASIdentifiers_new(void); 764354a658eSjob void ASIdentifiers_free(ASIdentifiers *a); 765354a658eSjob ASIdentifiers *d2i_ASIdentifiers(ASIdentifiers **a, const unsigned char **in, 766354a658eSjob long len); 767354a658eSjob int i2d_ASIdentifiers(ASIdentifiers *a, unsigned char **out); 768354a658eSjob extern const ASN1_ITEM ASIdentifiers_it; 769354a658eSjob 7700b5aa37fSjob typedef struct IPAddressRange_st { 7715f2eabbbStb ASN1_BIT_STRING *min; 7725f2eabbbStb ASN1_BIT_STRING *max; 7730b5aa37fSjob } IPAddressRange; 7740b5aa37fSjob 7750b5aa37fSjob #define IPAddressOrRange_addressPrefix 0 7760b5aa37fSjob #define IPAddressOrRange_addressRange 1 7770b5aa37fSjob 7780b5aa37fSjob typedef struct IPAddressOrRange_st { 7790b5aa37fSjob int type; 7800b5aa37fSjob union { 7810b5aa37fSjob ASN1_BIT_STRING *addressPrefix; 7820b5aa37fSjob IPAddressRange *addressRange; 7830b5aa37fSjob } u; 7840b5aa37fSjob } IPAddressOrRange; 7850b5aa37fSjob 7860b5aa37fSjob typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; 787e7cb2f83Sjob DECLARE_STACK_OF(IPAddressOrRange) 7880b5aa37fSjob 7890b5aa37fSjob #define IPAddressChoice_inherit 0 7900b5aa37fSjob #define IPAddressChoice_addressesOrRanges 1 7910b5aa37fSjob 7920b5aa37fSjob typedef struct IPAddressChoice_st { 7930b5aa37fSjob int type; 7940b5aa37fSjob union { 7950b5aa37fSjob ASN1_NULL *inherit; 7960b5aa37fSjob IPAddressOrRanges *addressesOrRanges; 7970b5aa37fSjob } u; 7980b5aa37fSjob } IPAddressChoice; 7990b5aa37fSjob 8000b5aa37fSjob typedef struct IPAddressFamily_st { 8010b5aa37fSjob ASN1_OCTET_STRING *addressFamily; 8020b5aa37fSjob IPAddressChoice *ipAddressChoice; 8030b5aa37fSjob } IPAddressFamily; 8040b5aa37fSjob 8050b5aa37fSjob typedef STACK_OF(IPAddressFamily) IPAddrBlocks; 806e7cb2f83Sjob DECLARE_STACK_OF(IPAddressFamily) 807354a658eSjob 808354a658eSjob IPAddressRange *IPAddressRange_new(void); 809354a658eSjob void IPAddressRange_free(IPAddressRange *a); 810354a658eSjob IPAddressRange *d2i_IPAddressRange(IPAddressRange **a, 811354a658eSjob const unsigned char **in, long len); 812354a658eSjob int i2d_IPAddressRange(IPAddressRange *a, unsigned char **out); 813354a658eSjob extern const ASN1_ITEM IPAddressRange_it; 814354a658eSjob 815354a658eSjob IPAddressOrRange *IPAddressOrRange_new(void); 816354a658eSjob void IPAddressOrRange_free(IPAddressOrRange *a); 817354a658eSjob IPAddressOrRange *d2i_IPAddressOrRange(IPAddressOrRange **a, 818354a658eSjob const unsigned char **in, long len); 819354a658eSjob int i2d_IPAddressOrRange(IPAddressOrRange *a, unsigned char **out); 820354a658eSjob extern const ASN1_ITEM IPAddressOrRange_it; 821354a658eSjob 822354a658eSjob IPAddressChoice *IPAddressChoice_new(void); 823354a658eSjob void IPAddressChoice_free(IPAddressChoice *a); 824354a658eSjob IPAddressChoice *d2i_IPAddressChoice(IPAddressChoice **a, 825354a658eSjob const unsigned char **in, long len); 826354a658eSjob int i2d_IPAddressChoice(IPAddressChoice *a, unsigned char **out); 827354a658eSjob extern const ASN1_ITEM IPAddressChoice_it; 828354a658eSjob 829354a658eSjob IPAddressFamily *IPAddressFamily_new(void); 830354a658eSjob void IPAddressFamily_free(IPAddressFamily *a); 831354a658eSjob IPAddressFamily *d2i_IPAddressFamily(IPAddressFamily **a, 832354a658eSjob const unsigned char **in, long len); 833354a658eSjob int i2d_IPAddressFamily(IPAddressFamily *a, unsigned char **out); 834354a658eSjob extern const ASN1_ITEM IPAddressFamily_it; 8350b5aa37fSjob 8360b5aa37fSjob /* 8370b5aa37fSjob * API tag for elements of the ASIdentifer SEQUENCE. 8380b5aa37fSjob */ 8390b5aa37fSjob #define V3_ASID_ASNUM 0 8400b5aa37fSjob #define V3_ASID_RDI 1 8410b5aa37fSjob 8420b5aa37fSjob /* 8430b5aa37fSjob * AFI values, assigned by IANA. It'd be nice to make the AFI 8440b5aa37fSjob * handling code totally generic, but there are too many little things 8450b5aa37fSjob * that would need to be defined for other address families for it to 8460b5aa37fSjob * be worth the trouble. 8470b5aa37fSjob */ 8480b5aa37fSjob #define IANA_AFI_IPV4 1 8490b5aa37fSjob #define IANA_AFI_IPV6 2 8505f2eabbbStb 8510b5aa37fSjob /* 8520b5aa37fSjob * Utilities to construct and extract values from RFC3779 extensions, 8530b5aa37fSjob * since some of the encodings (particularly for IP address prefixes 8540b5aa37fSjob * and ranges) are a bit tedious to work with directly. 8550b5aa37fSjob */ 8560b5aa37fSjob int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); 8570b5aa37fSjob int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, 8580b5aa37fSjob ASN1_INTEGER *min, ASN1_INTEGER *max); 8595f2eabbbStb int X509v3_addr_add_inherit(IPAddrBlocks *addr, const unsigned afi, 8605f2eabbbStb const unsigned *safi); 8615f2eabbbStb int X509v3_addr_add_prefix(IPAddrBlocks *addr, const unsigned afi, 8625f2eabbbStb const unsigned *safi, unsigned char *a, const int prefixlen); 8635f2eabbbStb int X509v3_addr_add_range(IPAddrBlocks *addr, const unsigned afi, 8645f2eabbbStb const unsigned *safi, unsigned char *min, unsigned char *max); 8650b5aa37fSjob unsigned X509v3_addr_get_afi(const IPAddressFamily *f); 8660b5aa37fSjob int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, 8675f2eabbbStb unsigned char *min, unsigned char *max, const int length); 8685f2eabbbStb 8690b5aa37fSjob /* 8700b5aa37fSjob * Canonical forms. 8710b5aa37fSjob */ 8720b5aa37fSjob int X509v3_asid_is_canonical(ASIdentifiers *asid); 8730b5aa37fSjob int X509v3_addr_is_canonical(IPAddrBlocks *addr); 8740b5aa37fSjob int X509v3_asid_canonize(ASIdentifiers *asid); 8750b5aa37fSjob int X509v3_addr_canonize(IPAddrBlocks *addr); 8760b5aa37fSjob 8770b5aa37fSjob /* 8780b5aa37fSjob * Tests for inheritance and containment. 8790b5aa37fSjob */ 8800b5aa37fSjob int X509v3_asid_inherits(ASIdentifiers *asid); 8810b5aa37fSjob int X509v3_addr_inherits(IPAddrBlocks *addr); 8820b5aa37fSjob int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); 8830b5aa37fSjob int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); 8840b5aa37fSjob 8850b5aa37fSjob /* 8860b5aa37fSjob * Check whether RFC 3779 extensions nest properly in chains. 8870b5aa37fSjob */ 8880b5aa37fSjob int X509v3_asid_validate_path(X509_STORE_CTX *); 8890b5aa37fSjob int X509v3_addr_validate_path(X509_STORE_CTX *); 8905f2eabbbStb int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, ASIdentifiers *ext, 8910b5aa37fSjob int allow_inheritance); 8925f2eabbbStb int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, IPAddrBlocks *ext, 8935f2eabbbStb int allow_inheritance); 8940b5aa37fSjob 895ad5e494dStb #endif /* !OPENSSL_NO_RFC3779 */ 896e500e238Sjsing 897e500e238Sjsing void ERR_load_X509V3_strings(void); 898e500e238Sjsing 899e500e238Sjsing /* Error codes for the X509V3 functions. */ 900e500e238Sjsing 901e500e238Sjsing /* Function codes. */ 902e500e238Sjsing #define X509V3_F_A2I_GENERAL_NAME 164 903e500e238Sjsing #define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 904e500e238Sjsing #define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 905e500e238Sjsing #define X509V3_F_COPY_EMAIL 122 906e500e238Sjsing #define X509V3_F_COPY_ISSUER 123 907e500e238Sjsing #define X509V3_F_DO_DIRNAME 144 908e500e238Sjsing #define X509V3_F_DO_EXT_CONF 124 909e500e238Sjsing #define X509V3_F_DO_EXT_I2D 135 910e500e238Sjsing #define X509V3_F_DO_EXT_NCONF 151 911e500e238Sjsing #define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148 912e500e238Sjsing #define X509V3_F_GNAMES_FROM_SECTNAME 156 913e500e238Sjsing #define X509V3_F_HEX_TO_STRING 111 914e500e238Sjsing #define X509V3_F_I2S_ASN1_ENUMERATED 121 915e500e238Sjsing #define X509V3_F_I2S_ASN1_IA5STRING 149 916e500e238Sjsing #define X509V3_F_I2S_ASN1_INTEGER 120 917e500e238Sjsing #define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 918e500e238Sjsing #define X509V3_F_NOTICE_SECTION 132 919e500e238Sjsing #define X509V3_F_NREF_NOS 133 920e500e238Sjsing #define X509V3_F_POLICY_SECTION 131 921e500e238Sjsing #define X509V3_F_PROCESS_PCI_VALUE 150 922e500e238Sjsing #define X509V3_F_R2I_CERTPOL 130 923e500e238Sjsing #define X509V3_F_R2I_PCI 155 924e500e238Sjsing #define X509V3_F_S2I_ASN1_IA5STRING 100 925e500e238Sjsing #define X509V3_F_S2I_ASN1_INTEGER 108 926e500e238Sjsing #define X509V3_F_S2I_ASN1_OCTET_STRING 112 927e500e238Sjsing #define X509V3_F_S2I_ASN1_SKEY_ID 114 928e500e238Sjsing #define X509V3_F_S2I_SKEY_ID 115 929e500e238Sjsing #define X509V3_F_SET_DIST_POINT_NAME 158 930e500e238Sjsing #define X509V3_F_STRING_TO_HEX 113 931e500e238Sjsing #define X509V3_F_SXNET_ADD_ID_ASC 125 932e500e238Sjsing #define X509V3_F_SXNET_ADD_ID_INTEGER 126 933e500e238Sjsing #define X509V3_F_SXNET_ADD_ID_ULONG 127 934e500e238Sjsing #define X509V3_F_SXNET_GET_ID_ASC 128 935e500e238Sjsing #define X509V3_F_SXNET_GET_ID_ULONG 129 936e500e238Sjsing #define X509V3_F_V2I_ASIDENTIFIERS 163 937e500e238Sjsing #define X509V3_F_V2I_ASN1_BIT_STRING 101 938e500e238Sjsing #define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 939e500e238Sjsing #define X509V3_F_V2I_AUTHORITY_KEYID 119 940e500e238Sjsing #define X509V3_F_V2I_BASIC_CONSTRAINTS 102 941e500e238Sjsing #define X509V3_F_V2I_CRLD 134 942e500e238Sjsing #define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 943e500e238Sjsing #define X509V3_F_V2I_GENERAL_NAMES 118 944e500e238Sjsing #define X509V3_F_V2I_GENERAL_NAME_EX 117 945e500e238Sjsing #define X509V3_F_V2I_IDP 157 946e500e238Sjsing #define X509V3_F_V2I_IPADDRBLOCKS 159 947e500e238Sjsing #define X509V3_F_V2I_ISSUER_ALT 153 948e500e238Sjsing #define X509V3_F_V2I_NAME_CONSTRAINTS 147 949e500e238Sjsing #define X509V3_F_V2I_POLICY_CONSTRAINTS 146 950e500e238Sjsing #define X509V3_F_V2I_POLICY_MAPPINGS 145 951e500e238Sjsing #define X509V3_F_V2I_SUBJECT_ALT 154 952e500e238Sjsing #define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL 160 953e500e238Sjsing #define X509V3_F_V3_GENERIC_EXTENSION 116 954e500e238Sjsing #define X509V3_F_X509V3_ADD1_I2D 140 955e500e238Sjsing #define X509V3_F_X509V3_ADD_VALUE 105 956e500e238Sjsing #define X509V3_F_X509V3_EXT_ADD 104 957e500e238Sjsing #define X509V3_F_X509V3_EXT_ADD_ALIAS 106 958e500e238Sjsing #define X509V3_F_X509V3_EXT_CONF 107 959e500e238Sjsing #define X509V3_F_X509V3_EXT_I2D 136 960e500e238Sjsing #define X509V3_F_X509V3_EXT_NCONF 152 961e500e238Sjsing #define X509V3_F_X509V3_GET_SECTION 142 962e500e238Sjsing #define X509V3_F_X509V3_GET_STRING 143 963e500e238Sjsing #define X509V3_F_X509V3_GET_VALUE_BOOL 110 964e500e238Sjsing #define X509V3_F_X509V3_PARSE_LIST 109 965e500e238Sjsing #define X509V3_F_X509_PURPOSE_ADD 137 966e500e238Sjsing #define X509V3_F_X509_PURPOSE_SET 141 967e500e238Sjsing 968e500e238Sjsing /* Reason codes. */ 969e500e238Sjsing #define X509V3_R_BAD_IP_ADDRESS 118 970e500e238Sjsing #define X509V3_R_BAD_OBJECT 119 971e500e238Sjsing #define X509V3_R_BN_DEC2BN_ERROR 100 972e500e238Sjsing #define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 973e500e238Sjsing #define X509V3_R_DIRNAME_ERROR 149 974e500e238Sjsing #define X509V3_R_DISTPOINT_ALREADY_SET 160 975e500e238Sjsing #define X509V3_R_DUPLICATE_ZONE_ID 133 976e500e238Sjsing #define X509V3_R_ERROR_CONVERTING_ZONE 131 977e500e238Sjsing #define X509V3_R_ERROR_CREATING_EXTENSION 144 978e500e238Sjsing #define X509V3_R_ERROR_IN_EXTENSION 128 979e500e238Sjsing #define X509V3_R_EXPECTED_A_SECTION_NAME 137 980e500e238Sjsing #define X509V3_R_EXTENSION_EXISTS 145 981e500e238Sjsing #define X509V3_R_EXTENSION_NAME_ERROR 115 982e500e238Sjsing #define X509V3_R_EXTENSION_NOT_FOUND 102 983e500e238Sjsing #define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 984e500e238Sjsing #define X509V3_R_EXTENSION_VALUE_ERROR 116 985e500e238Sjsing #define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 986e500e238Sjsing #define X509V3_R_ILLEGAL_HEX_DIGIT 113 987e500e238Sjsing #define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 988e500e238Sjsing #define X509V3_R_INVALID_MULTIPLE_RDNS 161 989e500e238Sjsing #define X509V3_R_INVALID_ASNUMBER 162 990e500e238Sjsing #define X509V3_R_INVALID_ASRANGE 163 991e500e238Sjsing #define X509V3_R_INVALID_BOOLEAN_STRING 104 992e500e238Sjsing #define X509V3_R_INVALID_EXTENSION_STRING 105 993e500e238Sjsing #define X509V3_R_INVALID_INHERITANCE 165 994e500e238Sjsing #define X509V3_R_INVALID_IPADDRESS 166 995e500e238Sjsing #define X509V3_R_INVALID_NAME 106 996e500e238Sjsing #define X509V3_R_INVALID_NULL_ARGUMENT 107 997e500e238Sjsing #define X509V3_R_INVALID_NULL_NAME 108 998e500e238Sjsing #define X509V3_R_INVALID_NULL_VALUE 109 999e500e238Sjsing #define X509V3_R_INVALID_NUMBER 140 1000e500e238Sjsing #define X509V3_R_INVALID_NUMBERS 141 1001e500e238Sjsing #define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 1002e500e238Sjsing #define X509V3_R_INVALID_OPTION 138 1003e500e238Sjsing #define X509V3_R_INVALID_POLICY_IDENTIFIER 134 1004e500e238Sjsing #define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 1005e500e238Sjsing #define X509V3_R_INVALID_PURPOSE 146 1006e500e238Sjsing #define X509V3_R_INVALID_SAFI 164 1007e500e238Sjsing #define X509V3_R_INVALID_SECTION 135 1008e500e238Sjsing #define X509V3_R_INVALID_SYNTAX 143 1009e500e238Sjsing #define X509V3_R_ISSUER_DECODE_ERROR 126 1010e500e238Sjsing #define X509V3_R_MISSING_VALUE 124 1011e500e238Sjsing #define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 1012e500e238Sjsing #define X509V3_R_NO_CONFIG_DATABASE 136 1013e500e238Sjsing #define X509V3_R_NO_ISSUER_CERTIFICATE 121 1014e500e238Sjsing #define X509V3_R_NO_ISSUER_DETAILS 127 1015e500e238Sjsing #define X509V3_R_NO_POLICY_IDENTIFIER 139 1016e500e238Sjsing #define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 1017e500e238Sjsing #define X509V3_R_NO_PUBLIC_KEY 114 1018e500e238Sjsing #define X509V3_R_NO_SUBJECT_DETAILS 125 1019e500e238Sjsing #define X509V3_R_ODD_NUMBER_OF_DIGITS 112 1020e500e238Sjsing #define X509V3_R_OPERATION_NOT_DEFINED 148 1021e500e238Sjsing #define X509V3_R_OTHERNAME_ERROR 147 1022e500e238Sjsing #define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 1023e500e238Sjsing #define X509V3_R_POLICY_PATH_LENGTH 156 1024e500e238Sjsing #define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 1025e500e238Sjsing #define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 158 1026e500e238Sjsing #define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 1027e500e238Sjsing #define X509V3_R_SECTION_NOT_FOUND 150 1028e500e238Sjsing #define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 1029e500e238Sjsing #define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 1030e500e238Sjsing #define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 1031e500e238Sjsing #define X509V3_R_UNKNOWN_EXTENSION 129 1032e500e238Sjsing #define X509V3_R_UNKNOWN_EXTENSION_NAME 130 1033e500e238Sjsing #define X509V3_R_UNKNOWN_OPTION 120 1034e500e238Sjsing #define X509V3_R_UNSUPPORTED_OPTION 117 1035e500e238Sjsing #define X509V3_R_UNSUPPORTED_TYPE 167 1036e500e238Sjsing #define X509V3_R_USER_TOO_LONG 132 1037e500e238Sjsing 1038e500e238Sjsing #ifdef __cplusplus 1039e500e238Sjsing } 1040e500e238Sjsing #endif 1041e500e238Sjsing #endif 1042