x509v3.h 39.2 KB
Newer Older
1
/* x509v3.h */
2 3 4
/*
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
 * 1999.
5 6
 */
/* ====================================================================
7
 * Copyright (c) 1999-2004 The OpenSSL Project.  All rights reserved.
8 9 10 11
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
12 13
 *
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
15
 *
16
 * 2. Redistributions in binary form must reproduce the above copyright
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 *
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 *    endorse or promote products derived from this software without
 *    prior written permission. For written permission, please contact
 *    licensing@OpenSSL.org.
 *
 * 5. Products derived from this software may not be called "OpenSSL"
 *    nor may "OpenSSL" appear in their names without prior written
 *    permission of the OpenSSL Project.
 *
 * 6. Redistributions of any form whatsoever must retain the following
 *    acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 *
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 *
 * This product includes cryptographic software written by Eric Young
 * (eay@cryptsoft.com).  This product includes software written by Tim
 * Hudson (tjh@cryptsoft.com).
 *
58
 */
59
#ifndef HEADER_X509V3_H
60
# define HEADER_X509V3_H
61

62 63 64
# include <openssl/bio.h>
# include <openssl/x509.h>
# include <openssl/conf.h>
65

66 67 68 69
#ifdef __cplusplus
extern "C" {
#endif

70
# ifdef OPENSSL_SYS_WIN32
71
/* Under Win32 these are defined in wincrypt.h */
72 73 74
#  undef X509_NAME
#  undef X509_EXTENSIONS
# endif
75

76 77 78 79 80 81
/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;

/* Useful typedefs */

82 83 84 85
typedef void *(*X509V3_EXT_NEW)(void);
typedef void (*X509V3_EXT_FREE) (void *);
typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
typedef int (*X509V3_EXT_I2D) (void *, unsigned char **);
86
typedef STACK_OF(CONF_VALUE) *
87 88 89 90 91 92 93 94 95 96 97 98 99
    (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext,
                       STACK_OF(CONF_VALUE) *extlist);
typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx,
                                STACK_OF(CONF_VALUE) *values);
typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method,
                                void *ext);
typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx, const char *str);
typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext,
                               BIO *out, int indent);
typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method,
                                struct v3_ext_ctx *ctx, const char *str);
100 101 102 103

/* V3 extension structure */

struct v3_ext_method {
104 105
    int ext_nid;
    int ext_flags;
D
 
Dr. Stephen Henson 已提交
106
/* If this is set the following four fields are ignored */
107
    ASN1_ITEM_EXP *it;
D
 
Dr. Stephen Henson 已提交
108
/* Old style ASN1 calls */
109 110 111 112
    X509V3_EXT_NEW ext_new;
    X509V3_EXT_FREE ext_free;
    X509V3_EXT_D2I d2i;
    X509V3_EXT_I2D i2d;
113
/* The following pair is used for string extensions */
114 115
    X509V3_EXT_I2S i2s;
    X509V3_EXT_S2I s2i;
116
/* The following pair is used for multi-valued extensions */
117 118
    X509V3_EXT_I2V i2v;
    X509V3_EXT_V2I v2i;
119
/* The following are used for raw extensions */
120 121 122
    X509V3_EXT_I2R i2r;
    X509V3_EXT_R2I r2i;
    void *usr_data;             /* Any extension specific data */
123 124
};

125
typedef struct X509V3_CONF_METHOD_st {
126 127 128 129
    char *(*get_string) (void *db, char *section, char *value);
    STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section);
    void (*free_string) (void *db, char *string);
    void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);
130
} X509V3_CONF_METHOD;
131

132
/* Context specific info */
133
struct v3_ext_ctx {
134 135 136 137 138 139 140 141 142
# define CTX_TEST 0x1
# define X509V3_CTX_REPLACE 0x2
    int flags;
    X509 *issuer_cert;
    X509 *subject_cert;
    X509_REQ *subject_req;
    X509_CRL *crl;
    X509V3_CONF_METHOD *db_meth;
    void *db;
143 144 145 146 147
/* Maybe more here */
};

typedef struct v3_ext_method X509V3_EXT_METHOD;

148 149
DECLARE_STACK_OF(X509V3_EXT_METHOD)

150
/* ext_flags values */
151 152 153
# define X509V3_EXT_DYNAMIC      0x1
# define X509V3_EXT_CTX_DEP      0x2
# define X509V3_EXT_MULTILINE    0x4
154

155 156
typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

157
typedef struct BASIC_CONSTRAINTS_st {
158 159
    int ca;
    ASN1_INTEGER *pathlen;
160 161
} BASIC_CONSTRAINTS;

162
typedef struct PKEY_USAGE_PERIOD_st {
163 164
    ASN1_GENERALIZEDTIME *notBefore;
    ASN1_GENERALIZEDTIME *notAfter;
165 166
} PKEY_USAGE_PERIOD;

167
typedef struct otherName_st {
168 169
    ASN1_OBJECT *type_id;
    ASN1_TYPE *value;
170 171
} OTHERNAME;

D
 
Dr. Stephen Henson 已提交
172
typedef struct EDIPartyName_st {
173 174
    ASN1_STRING *nameAssigner;
    ASN1_STRING *partyName;
D
 
Dr. Stephen Henson 已提交
175 176
} EDIPARTYNAME;

177
typedef struct GENERAL_NAME_st {
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
# define GEN_OTHERNAME   0
# define GEN_EMAIL       1
# define GEN_DNS         2
# define GEN_X400        3
# define GEN_DIRNAME     4
# define GEN_EDIPARTY    5
# define GEN_URI         6
# define GEN_IPADD       7
# define GEN_RID         8
    int type;
    union {
        char *ptr;
        OTHERNAME *otherName;   /* otherName */
        ASN1_IA5STRING *rfc822Name;
        ASN1_IA5STRING *dNSName;
        ASN1_TYPE *x400Address;
        X509_NAME *directoryName;
        EDIPARTYNAME *ediPartyName;
        ASN1_IA5STRING *uniformResourceIdentifier;
        ASN1_OCTET_STRING *iPAddress;
        ASN1_OBJECT *registeredID;
        /* Old names */
        ASN1_OCTET_STRING *ip;  /* iPAddress */
        X509_NAME *dirn;        /* dirn */
        ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,
                                 * uniformResourceIdentifier */
        ASN1_OBJECT *rid;       /* registeredID */
        ASN1_TYPE *other;       /* x400Address */
    } d;
207 208
} GENERAL_NAME;

D
 
Dr. Stephen Henson 已提交
209 210
typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;

211
typedef struct ACCESS_DESCRIPTION_st {
212 213
    ASN1_OBJECT *method;
    GENERAL_NAME *location;
214 215
} ACCESS_DESCRIPTION;

D
 
Dr. Stephen Henson 已提交
216 217 218 219
typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;

typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;

220 221
DECLARE_STACK_OF(GENERAL_NAME)

222 223
DECLARE_STACK_OF(ACCESS_DESCRIPTION)

224
typedef struct DIST_POINT_NAME_st {
225 226 227 228 229
    int type;
    union {
        GENERAL_NAMES *fullname;
        STACK_OF(X509_NAME_ENTRY) *relativename;
    } name;
230
/* If relativename then this contains the full distribution point name */
231
    X509_NAME *dpname;
232
} DIST_POINT_NAME;
233
/* All existing reasons */
234 235 236 237 238 239 240 241 242 243 244 245 246
# define CRLDP_ALL_REASONS       0x807f

# define CRL_REASON_NONE                         -1
# define CRL_REASON_UNSPECIFIED                  0
# define CRL_REASON_KEY_COMPROMISE               1
# define CRL_REASON_CA_COMPROMISE                2
# define CRL_REASON_AFFILIATION_CHANGED          3
# define CRL_REASON_SUPERSEDED                   4
# define CRL_REASON_CESSATION_OF_OPERATION       5
# define CRL_REASON_CERTIFICATE_HOLD             6
# define CRL_REASON_REMOVE_FROM_CRL              8
# define CRL_REASON_PRIVILEGE_WITHDRAWN          9
# define CRL_REASON_AA_COMPROMISE                10
247

248
struct DIST_POINT_st {
249 250 251 252
    DIST_POINT_NAME *distpoint;
    ASN1_BIT_STRING *reasons;
    GENERAL_NAMES *CRLissuer;
    int dp_reasons;
253
};
254

D
 
Dr. Stephen Henson 已提交
255 256
typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;

257 258
DECLARE_STACK_OF(DIST_POINT)

259
struct AUTHORITY_KEYID_st {
260 261 262
    ASN1_OCTET_STRING *keyid;
    GENERAL_NAMES *issuer;
    ASN1_INTEGER *serial;
263
};
264

265
/* Strong extranet structures */
266

267
typedef struct SXNET_ID_st {
268 269
    ASN1_INTEGER *zone;
    ASN1_OCTET_STRING *user;
270
} SXNETID;
271

B
Ben Laurie 已提交
272 273 274
DECLARE_STACK_OF(SXNETID)

typedef struct SXNET_st {
275 276
    ASN1_INTEGER *version;
    STACK_OF(SXNETID) *ids;
B
Ben Laurie 已提交
277 278
} SXNET;

279
typedef struct NOTICEREF_st {
280 281
    ASN1_STRING *organization;
    STACK_OF(ASN1_INTEGER) *noticenos;
282 283 284
} NOTICEREF;

typedef struct USERNOTICE_st {
285 286
    NOTICEREF *noticeref;
    ASN1_STRING *exptext;
287 288 289
} USERNOTICE;

typedef struct POLICYQUALINFO_st {
290 291 292 293 294 295
    ASN1_OBJECT *pqualid;
    union {
        ASN1_IA5STRING *cpsuri;
        USERNOTICE *usernotice;
        ASN1_TYPE *other;
    } d;
296 297 298 299 300
} POLICYQUALINFO;

DECLARE_STACK_OF(POLICYQUALINFO)

typedef struct POLICYINFO_st {
301 302
    ASN1_OBJECT *policyid;
    STACK_OF(POLICYQUALINFO) *qualifiers;
303 304
} POLICYINFO;

D
 
Dr. Stephen Henson 已提交
305 306
typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;

B
Bodo Möller 已提交
307
DECLARE_STACK_OF(POLICYINFO)
308

D
Dr. Stephen Henson 已提交
309
typedef struct POLICY_MAPPING_st {
310 311
    ASN1_OBJECT *issuerDomainPolicy;
    ASN1_OBJECT *subjectDomainPolicy;
D
Dr. Stephen Henson 已提交
312 313 314 315 316 317
} POLICY_MAPPING;

DECLARE_STACK_OF(POLICY_MAPPING)

typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;

318
typedef struct GENERAL_SUBTREE_st {
319 320 321
    GENERAL_NAME *base;
    ASN1_INTEGER *minimum;
    ASN1_INTEGER *maximum;
322 323 324 325
} GENERAL_SUBTREE;

DECLARE_STACK_OF(GENERAL_SUBTREE)

326
struct NAME_CONSTRAINTS_st {
327 328
    STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
    STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
329
};
330

331
typedef struct POLICY_CONSTRAINTS_st {
332 333
    ASN1_INTEGER *requireExplicitPolicy;
    ASN1_INTEGER *inhibitPolicyMapping;
334 335
} POLICY_CONSTRAINTS;

336
/* Proxy certificate structures, see RFC 3820 */
337 338 339 340 341 342 343 344 345
typedef struct PROXY_POLICY_st {
    ASN1_OBJECT *policyLanguage;
    ASN1_OCTET_STRING *policy;
} PROXY_POLICY;

typedef struct PROXY_CERT_INFO_EXTENSION_st {
    ASN1_INTEGER *pcPathLengthConstraint;
    PROXY_POLICY *proxyPolicy;
} PROXY_CERT_INFO_EXTENSION;
346 347 348 349

DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)

350 351 352 353 354 355 356 357
struct ISSUING_DIST_POINT_st {
    DIST_POINT_NAME *distpoint;
    int onlyuser;
    int onlyCA;
    ASN1_BIT_STRING *onlysomereasons;
    int indirectCRL;
    int onlyattr;
};
358

359 360
/* Values in idp_flags field */
/* IDP present */
361
# define IDP_PRESENT     0x1
362
/* IDP values inconsistent */
363
# define IDP_INVALID     0x2
364
/* onlyuser true */
365
# define IDP_ONLYUSER    0x4
366
/* onlyCA true */
367
# define IDP_ONLYCA      0x8
368
/* onlyattr true */
369
# define IDP_ONLYATTR    0x10
370
/* indirectCRL true */
371
# define IDP_INDIRECT    0x20
372
/* onlysomereasons present */
373
# define IDP_REASONS     0x40
374

375
# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
376 377
",name:", val->name, ",value:", val->value);

378 379 380
# define X509V3_set_ctx_test(ctx) \
                        X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
381

382 383 384 385 386 387 388
# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
                        0,0,0,0, \
                        0,0, \
                        (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
                        (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
                        NULL, NULL, \
                        table}
389

390 391 392 393 394 395
# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
                        0,0,0,0, \
                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
                        (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
                        0,0,0,0, \
                        NULL}
396

397
# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
398 399 400

/* X509_PURPOSE stuff */

401 402 403 404
# define EXFLAG_BCONS            0x1
# define EXFLAG_KUSAGE           0x2
# define EXFLAG_XKUSAGE          0x4
# define EXFLAG_NSCERT           0x8
405

406
# define EXFLAG_CA               0x10
D
Dr. Stephen Henson 已提交
407
/* Really self issued not necessarily self signed */
408 409 410 411 412 413 414 415 416
# define EXFLAG_SI               0x20
# define EXFLAG_V1               0x40
# define EXFLAG_INVALID          0x80
# define EXFLAG_SET              0x100
# define EXFLAG_CRITICAL         0x200
# define EXFLAG_PROXY            0x400

# define EXFLAG_INVALID_POLICY   0x800
# define EXFLAG_FRESHEST         0x1000
417
/* Self signed */
418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450
# define EXFLAG_SS               0x2000

# define KU_DIGITAL_SIGNATURE    0x0080
# define KU_NON_REPUDIATION      0x0040
# define KU_KEY_ENCIPHERMENT     0x0020
# define KU_DATA_ENCIPHERMENT    0x0010
# define KU_KEY_AGREEMENT        0x0008
# define KU_KEY_CERT_SIGN        0x0004
# define KU_CRL_SIGN             0x0002
# define KU_ENCIPHER_ONLY        0x0001
# define KU_DECIPHER_ONLY        0x8000

# define NS_SSL_CLIENT           0x80
# define NS_SSL_SERVER           0x40
# define NS_SMIME                0x20
# define NS_OBJSIGN              0x10
# define NS_SSL_CA               0x04
# define NS_SMIME_CA             0x02
# define NS_OBJSIGN_CA           0x01
# define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)

# define XKU_SSL_SERVER          0x1
# define XKU_SSL_CLIENT          0x2
# define XKU_SMIME               0x4
# define XKU_CODE_SIGN           0x8
# define XKU_SGC                 0x10
# define XKU_OCSP_SIGN           0x20
# define XKU_TIMESTAMP           0x40
# define XKU_DVCS                0x80
# define XKU_ANYEKU              0x100

# define X509_PURPOSE_DYNAMIC    0x1
# define X509_PURPOSE_DYNAMIC_NAME       0x2
451

452
typedef struct x509_purpose_st {
453 454 455 456 457 458 459
    int purpose;
    int trust;                  /* Default trust ID */
    int flags;
    int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);
    char *name;
    char *sname;
    void *usr_data;
460 461
} X509_PURPOSE;

462 463 464 465 466 467 468 469 470
# define X509_PURPOSE_SSL_CLIENT         1
# define X509_PURPOSE_SSL_SERVER         2
# define X509_PURPOSE_NS_SSL_SERVER      3
# define X509_PURPOSE_SMIME_SIGN         4
# define X509_PURPOSE_SMIME_ENCRYPT      5
# define X509_PURPOSE_CRL_SIGN           6
# define X509_PURPOSE_ANY                7
# define X509_PURPOSE_OCSP_HELPER        8
# define X509_PURPOSE_TIMESTAMP_SIGN     9
471

472 473
# define X509_PURPOSE_MIN                1
# define X509_PURPOSE_MAX                9
474

475 476
/* Flags for X509V3_EXT_print() */

477
# define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
478
/* Return error for unknown extensions */
479
# define X509V3_EXT_DEFAULT              0
480
/* Print error for unknown extensions */
481
# define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
482
/* ASN1 parse unknown extensions */
483
# define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
484
/* BIO_dump unknown extensions */
485
# define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)
486

487 488
/* Flags for X509V3_add1_i2d */

489 490 491 492 493 494 495 496
# define X509V3_ADD_OP_MASK              0xfL
# define X509V3_ADD_DEFAULT              0L
# define X509V3_ADD_APPEND               1L
# define X509V3_ADD_REPLACE              2L
# define X509V3_ADD_REPLACE_EXISTING     3L
# define X509V3_ADD_KEEP_EXISTING        4L
# define X509V3_ADD_DELETE               5L
# define X509V3_ADD_SILENT               0x10
497

498
DECLARE_STACK_OF(X509_PURPOSE)
499

D
 
Dr. Stephen Henson 已提交
500
DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)
501

D
 
Dr. Stephen Henson 已提交
502 503
DECLARE_ASN1_FUNCTIONS(SXNET)
DECLARE_ASN1_FUNCTIONS(SXNETID)
504

505 506 507 508 509
int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen);
int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user,
                       int userlen);
int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user,
                         int userlen);
510 511 512 513 514

ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone);
ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);

D
 
Dr. Stephen Henson 已提交
515 516 517 518 519
DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)

DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)

DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
520 521 522
GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a);
int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);

523
ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
524 525
                                     X509V3_CTX *ctx,
                                     STACK_OF(CONF_VALUE) *nval);
526
STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
527 528 529
                                          ASN1_BIT_STRING *bits,
                                          STACK_OF(CONF_VALUE) *extlist);
char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5);
530
ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
531
                                   X509V3_CTX *ctx, char *str);
532

533 534 535
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
                                       GENERAL_NAME *gen,
                                       STACK_OF(CONF_VALUE) *ret);
536
int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
537

D
 
Dr. Stephen Henson 已提交
538
DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)
539

540
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
541 542
                                        GENERAL_NAMES *gen,
                                        STACK_OF(CONF_VALUE) *extlist);
543
GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
544
                                 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
545

D
 
Dr. Stephen Henson 已提交
546 547
DECLARE_ASN1_FUNCTIONS(OTHERNAME)
DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
548
int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
D
Dr. Stephen Henson 已提交
549 550 551
void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype);
int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
552 553 554
                                ASN1_OBJECT *oid, ASN1_TYPE *value);
int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen,
                                ASN1_OBJECT **poid, ASN1_TYPE **pvalue);
555

556 557 558 559
char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
                            ASN1_OCTET_STRING *ia5);
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
                                         X509V3_CTX *ctx, char *str);
560

D
 
Dr. Stephen Henson 已提交
561
DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
562
int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a);
563

D
 
Dr. Stephen Henson 已提交
564 565 566 567 568
DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
DECLARE_ASN1_FUNCTIONS(POLICYINFO)
DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
DECLARE_ASN1_FUNCTIONS(USERNOTICE)
DECLARE_ASN1_FUNCTIONS(NOTICEREF)
569

D
 
Dr. Stephen Henson 已提交
570 571 572
DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
DECLARE_ASN1_FUNCTIONS(DIST_POINT)
DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
573
DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)
574

575 576
int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname);

577 578
int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);

D
 
Dr. Stephen Henson 已提交
579 580
DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
581

D
Dr. Stephen Henson 已提交
582
DECLARE_ASN1_ITEM(POLICY_MAPPING)
583
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
D
Dr. Stephen Henson 已提交
584 585
DECLARE_ASN1_ITEM(POLICY_MAPPINGS)

586 587 588 589 590 591
DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)

DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)

592 593 594
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)

595
GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
596 597 598
                               const X509V3_EXT_METHOD *method,
                               X509V3_CTX *ctx, int gen_type, char *value,
                               int is_nc);
599

600 601 602
# ifdef HEADER_CONF_H
GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
                               X509V3_CTX *ctx, CONF_VALUE *cnf);
603
GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
604 605 606
                                  const X509V3_EXT_METHOD *method,
                                  X509V3_CTX *ctx, CONF_VALUE *cnf,
                                  int is_nc);
607
void X509V3_conf_free(CONF_VALUE *val);
D
 
Dr. Stephen Henson 已提交
608

609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624
X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
                                     char *value);
X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name,
                                 char *value);
int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section,
                            STACK_OF(X509_EXTENSION) **sk);
int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
                         X509 *cert);
int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
                             X509_REQ *req);
int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
                             X509_CRL *crl);

X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
                                    X509V3_CTX *ctx, int ext_nid,
                                    char *value);
B
Ben Laurie 已提交
625
X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
626
                                char *name, char *value);
B
Ben Laurie 已提交
627
int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
628
                        char *section, X509 *cert);
B
Ben Laurie 已提交
629
int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
630
                            char *section, X509_REQ *req);
B
Ben Laurie 已提交
631
int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
632
                            char *section, X509_CRL *crl);
D
 
Dr. Stephen Henson 已提交
633

634
int X509V3_add_value_bool_nf(char *name, int asn1_bool,
635
                             STACK_OF(CONF_VALUE) **extlist);
636 637
int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
D
 
Dr. Stephen Henson 已提交
638
void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
B
Ben Laurie 已提交
639
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
640
# endif
641

642 643
char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section);
644
void X509V3_string_free(X509V3_CTX *ctx, char *str);
645
void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
646
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
647
                    X509_REQ *req, X509_CRL *crl, int flags);
648

649
int X509V3_add_value(const char *name, const char *value,
650
                     STACK_OF(CONF_VALUE) **extlist);
B
Ben Laurie 已提交
651
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
652
                           STACK_OF(CONF_VALUE) **extlist);
653
int X509V3_add_value_bool(const char *name, int asn1_bool,
654
                          STACK_OF(CONF_VALUE) **extlist);
655
int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
656 657 658 659 660 661
                         STACK_OF(CONF_VALUE) **extlist);
char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
                                ASN1_ENUMERATED *aint);
662
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
663
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
664 665 666
int X509V3_EXT_add_alias(int nid_to, int nid_from);
void X509V3_EXT_cleanup(void);

667 668
const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
669
int X509V3_add_standard_extensions(void);
D
 
Dr. Stephen Henson 已提交
670
STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
671
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
672 673
void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
                     int *idx);
674

675
X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
676 677
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
                    int crit, unsigned long flags);
678

D
Dr. Stephen Henson 已提交
679 680
char *hex_to_string(const unsigned char *buffer, long len);
unsigned char *string_to_hex(const char *str, long *len);
B
Ben Laurie 已提交
681
int name_cmp(const char *name, const char *cmp);
682

683
void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
684 685 686
                        int ml);
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,
                     int indent);
687
int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
688

689 690 691
int X509V3_extensions_print(BIO *out, char *title,
                            STACK_OF(X509_EXTENSION) *exts,
                            unsigned long flag, int indent);
692

693
int X509_check_ca(X509 *x);
694
int X509_check_purpose(X509 *x, int id, int ca);
D
 
Dr. Stephen Henson 已提交
695
int X509_supported_extension(X509_EXTENSION *ex);
D
 
Dr. Stephen Henson 已提交
696
int X509_PURPOSE_set(int *p, int purpose);
697
int X509_check_issued(X509 *issuer, X509 *subject);
698
int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid);
699
int X509_PURPOSE_get_count(void);
700
X509_PURPOSE *X509_PURPOSE_get0(int idx);
701 702
int X509_PURPOSE_get_by_sname(char *sname);
int X509_PURPOSE_get_by_id(int id);
703
int X509_PURPOSE_add(int id, int trust, int flags,
704 705
                     int (*ck) (const X509_PURPOSE *, const X509 *, int),
                     char *name, char *sname, void *arg);
706 707
char *X509_PURPOSE_get0_name(X509_PURPOSE *xp);
char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);
708
int X509_PURPOSE_get_trust(X509_PURPOSE *xp);
709
void X509_PURPOSE_cleanup(void);
710 711
int X509_PURPOSE_get_id(X509_PURPOSE *);

D
Dr. Stephen Henson 已提交
712 713 714 715
STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
716 717
/* Flags for X509_check_* functions */

718 719 720 721
/*
 * Always check subject name for host match even if subject alt names present
 */
# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT    0x1
V
Viktor Dukhovni 已提交
722
/* Disable wildcard matching for dnsName fields and common name. */
723
# define X509_CHECK_FLAG_NO_WILDCARDS    0x2
V
Viktor Dukhovni 已提交
724
/* Wildcards must not match a partial label. */
725
# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
V
Viktor Dukhovni 已提交
726
/* Allow (non-partial) wildcards to match multiple labels. */
727
# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
728
/* Constraint verifier subdomain patterns to match a single labels. */
729
# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
730 731 732 733 734
/*
 * Match reference identifiers starting with "." to any sub-domain.
 * This is a non-public flag, turned on implicitly when the subject
 * reference identity is a DNS name.
 */
735
# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000
736

737
int X509_check_host(X509 *x, const char *chk, size_t chklen,
738
                    unsigned int flags, char **peername);
739
int X509_check_email(X509 *x, const char *chk, size_t chklen,
740
                     unsigned int flags);
741
int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
742
                  unsigned int flags);
743
int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);
744

745
ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
746
ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
B
Ben Laurie 已提交
747
int a2i_ipadd(unsigned char *ipout, const char *ipasc);
M
Matt Caswell 已提交
748
int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,
749
                             unsigned long chtype);
750

751
void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
D
Dr. Stephen Henson 已提交
752
DECLARE_STACK_OF(X509_POLICY_NODE)
753

B
Ben Laurie 已提交
754
typedef struct ASRange_st {
755
    ASN1_INTEGER *min, *max;
B
Ben Laurie 已提交
756 757
} ASRange;

R
Rich Salz 已提交
758 759
# define ASIdOrRange_id          0
# define ASIdOrRange_range       1
B
Ben Laurie 已提交
760 761

typedef struct ASIdOrRange_st {
762 763 764 765 766
    int type;
    union {
        ASN1_INTEGER *id;
        ASRange *range;
    } u;
B
Ben Laurie 已提交
767 768 769 770 771
} ASIdOrRange;

typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
DECLARE_STACK_OF(ASIdOrRange)

R
Rich Salz 已提交
772 773
# define ASIdentifierChoice_inherit              0
# define ASIdentifierChoice_asIdsOrRanges        1
B
Ben Laurie 已提交
774 775

typedef struct ASIdentifierChoice_st {
776 777 778 779 780
    int type;
    union {
        ASN1_NULL *inherit;
        ASIdOrRanges *asIdsOrRanges;
    } u;
B
Ben Laurie 已提交
781 782 783
} ASIdentifierChoice;

typedef struct ASIdentifiers_st {
784
    ASIdentifierChoice *asnum, *rdi;
B
Ben Laurie 已提交
785 786 787 788 789 790 791 792
} ASIdentifiers;

DECLARE_ASN1_FUNCTIONS(ASRange)
DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
DECLARE_ASN1_FUNCTIONS(ASIdentifiers)

typedef struct IPAddressRange_st {
793
    ASN1_BIT_STRING *min, *max;
B
Ben Laurie 已提交
794 795
} IPAddressRange;

R
Rich Salz 已提交
796 797
# define IPAddressOrRange_addressPrefix  0
# define IPAddressOrRange_addressRange   1
B
Ben Laurie 已提交
798 799

typedef struct IPAddressOrRange_st {
800 801 802 803 804
    int type;
    union {
        ASN1_BIT_STRING *addressPrefix;
        IPAddressRange *addressRange;
    } u;
B
Ben Laurie 已提交
805 806 807 808 809
} IPAddressOrRange;

typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
DECLARE_STACK_OF(IPAddressOrRange)

R
Rich Salz 已提交
810 811
# define IPAddressChoice_inherit                 0
# define IPAddressChoice_addressesOrRanges       1
B
Ben Laurie 已提交
812 813

typedef struct IPAddressChoice_st {
814 815 816 817 818
    int type;
    union {
        ASN1_NULL *inherit;
        IPAddressOrRanges *addressesOrRanges;
    } u;
B
Ben Laurie 已提交
819 820 821
} IPAddressChoice;

typedef struct IPAddressFamily_st {
822 823
    ASN1_OCTET_STRING *addressFamily;
    IPAddressChoice *ipAddressChoice;
B
Ben Laurie 已提交
824 825 826 827 828 829 830 831 832 833 834 835 836
} IPAddressFamily;

typedef STACK_OF(IPAddressFamily) IPAddrBlocks;
DECLARE_STACK_OF(IPAddressFamily)

DECLARE_ASN1_FUNCTIONS(IPAddressRange)
DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
DECLARE_ASN1_FUNCTIONS(IPAddressFamily)

/*
 * API tag for elements of the ASIdentifer SEQUENCE.
 */
R
Rich Salz 已提交
837 838
# define V3_ASID_ASNUM   0
# define V3_ASID_RDI     1
B
Ben Laurie 已提交
839 840 841 842 843 844 845

/*
 * AFI values, assigned by IANA.  It'd be nice to make the AFI
 * handling code totally generic, but there are too many little things
 * that would need to be defined for other address families for it to
 * be worth the trouble.
 */
R
Rich Salz 已提交
846 847
# define IANA_AFI_IPV4   1
# define IANA_AFI_IPV6   2
B
Ben Laurie 已提交
848 849 850 851 852 853 854 855

/*
 * Utilities to construct and extract values from RFC3779 extensions,
 * since some of the encodings (particularly for IP address prefixes
 * and ranges) are a bit tedious to work with directly.
 */
int v3_asid_add_inherit(ASIdentifiers *asid, int which);
int v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
856
                            ASN1_INTEGER *min, ASN1_INTEGER *max);
B
Ben Laurie 已提交
857
int v3_addr_add_inherit(IPAddrBlocks *addr,
858
                        const unsigned afi, const unsigned *safi);
B
Ben Laurie 已提交
859
int v3_addr_add_prefix(IPAddrBlocks *addr,
860 861
                       const unsigned afi, const unsigned *safi,
                       unsigned char *a, const int prefixlen);
B
Ben Laurie 已提交
862
int v3_addr_add_range(IPAddrBlocks *addr,
863 864
                      const unsigned afi, const unsigned *safi,
                      unsigned char *min, unsigned char *max);
B
Ben Laurie 已提交
865 866
unsigned v3_addr_get_afi(const IPAddressFamily *f);
int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
867 868
                      unsigned char *min, unsigned char *max,
                      const int length);
B
Ben Laurie 已提交
869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891

/*
 * Canonical forms.
 */
int v3_asid_is_canonical(ASIdentifiers *asid);
int v3_addr_is_canonical(IPAddrBlocks *addr);
int v3_asid_canonize(ASIdentifiers *asid);
int v3_addr_canonize(IPAddrBlocks *addr);

/*
 * Tests for inheritance and containment.
 */
int v3_asid_inherits(ASIdentifiers *asid);
int v3_addr_inherits(IPAddrBlocks *addr);
int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);

/*
 * Check whether RFC 3779 extensions nest properly in chains.
 */
int v3_asid_validate_path(X509_STORE_CTX *);
int v3_addr_validate_path(X509_STORE_CTX *);
int v3_asid_validate_resource_set(STACK_OF(X509) *chain,
892
                                  ASIdentifiers *ext, int allow_inheritance);
B
Ben Laurie 已提交
893
int v3_addr_validate_resource_set(STACK_OF(X509) *chain,
894
                                  IPAddrBlocks *ext, int allow_inheritance);
B
Ben Laurie 已提交
895

896
/* BEGIN ERROR CODES */
897 898
/*
 * The following lines are auto generated by the script mkerr.pl. Any changes
899 900
 * made after this point may be overwritten when the script is next run.
 */
D
 
Dr. Stephen Henson 已提交
901
void ERR_load_X509V3_strings(void);
902

903 904 905
/* Error codes for the X509V3 functions. */

/* Function codes. */
906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970
# define X509V3_F_A2I_GENERAL_NAME                        164
# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE             161
# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL         162
# define X509V3_F_COPY_EMAIL                              122
# define X509V3_F_COPY_ISSUER                             123
# define X509V3_F_DO_DIRNAME                              144
# define X509V3_F_DO_EXT_CONF                             124
# define X509V3_F_DO_EXT_I2D                              135
# define X509V3_F_DO_EXT_NCONF                            151
# define X509V3_F_DO_I2V_NAME_CONSTRAINTS                 148
# define X509V3_F_GNAMES_FROM_SECTNAME                    156
# define X509V3_F_HEX_TO_STRING                           111
# define X509V3_F_I2S_ASN1_ENUMERATED                     121
# define X509V3_F_I2S_ASN1_IA5STRING                      149
# define X509V3_F_I2S_ASN1_INTEGER                        120
# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS               138
# define X509V3_F_NOTICE_SECTION                          132
# define X509V3_F_NREF_NOS                                133
# define X509V3_F_POLICY_SECTION                          131
# define X509V3_F_PROCESS_PCI_VALUE                       150
# define X509V3_F_R2I_CERTPOL                             130
# define X509V3_F_R2I_PCI                                 155
# define X509V3_F_S2I_ASN1_IA5STRING                      100
# define X509V3_F_S2I_ASN1_INTEGER                        108
# define X509V3_F_S2I_ASN1_OCTET_STRING                   112
# define X509V3_F_S2I_ASN1_SKEY_ID                        114
# define X509V3_F_S2I_SKEY_ID                             115
# define X509V3_F_SET_DIST_POINT_NAME                     158
# define X509V3_F_STRING_TO_HEX                           113
# define X509V3_F_SXNET_ADD_ID_ASC                        125
# define X509V3_F_SXNET_ADD_ID_INTEGER                    126
# define X509V3_F_SXNET_ADD_ID_ULONG                      127
# define X509V3_F_SXNET_GET_ID_ASC                        128
# define X509V3_F_SXNET_GET_ID_ULONG                      129
# define X509V3_F_V2I_ASIDENTIFIERS                       163
# define X509V3_F_V2I_ASN1_BIT_STRING                     101
# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS               139
# define X509V3_F_V2I_AUTHORITY_KEYID                     119
# define X509V3_F_V2I_BASIC_CONSTRAINTS                   102
# define X509V3_F_V2I_CRLD                                134
# define X509V3_F_V2I_EXTENDED_KEY_USAGE                  103
# define X509V3_F_V2I_GENERAL_NAMES                       118
# define X509V3_F_V2I_GENERAL_NAME_EX                     117
# define X509V3_F_V2I_IDP                                 157
# define X509V3_F_V2I_IPADDRBLOCKS                        159
# define X509V3_F_V2I_ISSUER_ALT                          153
# define X509V3_F_V2I_NAME_CONSTRAINTS                    147
# define X509V3_F_V2I_POLICY_CONSTRAINTS                  146
# define X509V3_F_V2I_POLICY_MAPPINGS                     145
# define X509V3_F_V2I_SUBJECT_ALT                         154
# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL          160
# define X509V3_F_V3_GENERIC_EXTENSION                    116
# define X509V3_F_X509V3_ADD1_I2D                         140
# define X509V3_F_X509V3_ADD_VALUE                        105
# define X509V3_F_X509V3_EXT_ADD                          104
# define X509V3_F_X509V3_EXT_ADD_ALIAS                    106
# define X509V3_F_X509V3_EXT_CONF                         107
# define X509V3_F_X509V3_EXT_I2D                          136
# define X509V3_F_X509V3_EXT_NCONF                        152
# define X509V3_F_X509V3_GET_SECTION                      142
# define X509V3_F_X509V3_GET_STRING                       143
# define X509V3_F_X509V3_GET_VALUE_BOOL                   110
# define X509V3_F_X509V3_PARSE_LIST                       109
# define X509V3_F_X509_PURPOSE_ADD                        137
# define X509V3_F_X509_PURPOSE_SET                        141
971 972

/* Reason codes. */
973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040
# define X509V3_R_BAD_IP_ADDRESS                          118
# define X509V3_R_BAD_OBJECT                              119
# define X509V3_R_BN_DEC2BN_ERROR                         100
# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR                101
# define X509V3_R_DIRNAME_ERROR                           149
# define X509V3_R_DISTPOINT_ALREADY_SET                   160
# define X509V3_R_DUPLICATE_ZONE_ID                       133
# define X509V3_R_ERROR_CONVERTING_ZONE                   131
# define X509V3_R_ERROR_CREATING_EXTENSION                144
# define X509V3_R_ERROR_IN_EXTENSION                      128
# define X509V3_R_EXPECTED_A_SECTION_NAME                 137
# define X509V3_R_EXTENSION_EXISTS                        145
# define X509V3_R_EXTENSION_NAME_ERROR                    115
# define X509V3_R_EXTENSION_NOT_FOUND                     102
# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED         103
# define X509V3_R_EXTENSION_VALUE_ERROR                   116
# define X509V3_R_ILLEGAL_EMPTY_EXTENSION                 151
# define X509V3_R_ILLEGAL_HEX_DIGIT                       113
# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG             152
# define X509V3_R_INVALID_MULTIPLE_RDNS                   161
# define X509V3_R_INVALID_ASNUMBER                        162
# define X509V3_R_INVALID_ASRANGE                         163
# define X509V3_R_INVALID_BOOLEAN_STRING                  104
# define X509V3_R_INVALID_EXTENSION_STRING                105
# define X509V3_R_INVALID_INHERITANCE                     165
# define X509V3_R_INVALID_IPADDRESS                       166
# define X509V3_R_INVALID_NAME                            106
# define X509V3_R_INVALID_NULL_ARGUMENT                   107
# define X509V3_R_INVALID_NULL_NAME                       108
# define X509V3_R_INVALID_NULL_VALUE                      109
# define X509V3_R_INVALID_NUMBER                          140
# define X509V3_R_INVALID_NUMBERS                         141
# define X509V3_R_INVALID_OBJECT_IDENTIFIER               110
# define X509V3_R_INVALID_OPTION                          138
# define X509V3_R_INVALID_POLICY_IDENTIFIER               134
# define X509V3_R_INVALID_PROXY_POLICY_SETTING            153
# define X509V3_R_INVALID_PURPOSE                         146
# define X509V3_R_INVALID_SAFI                            164
# define X509V3_R_INVALID_SECTION                         135
# define X509V3_R_INVALID_SYNTAX                          143
# define X509V3_R_ISSUER_DECODE_ERROR                     126
# define X509V3_R_MISSING_VALUE                           124
# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS           142
# define X509V3_R_NO_CONFIG_DATABASE                      136
# define X509V3_R_NO_ISSUER_CERTIFICATE                   121
# define X509V3_R_NO_ISSUER_DETAILS                       127
# define X509V3_R_NO_POLICY_IDENTIFIER                    139
# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED   154
# define X509V3_R_NO_PUBLIC_KEY                           114
# define X509V3_R_NO_SUBJECT_DETAILS                      125
# define X509V3_R_ODD_NUMBER_OF_DIGITS                    112
# define X509V3_R_OPERATION_NOT_DEFINED                   148
# define X509V3_R_OTHERNAME_ERROR                         147
# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED         155
# define X509V3_R_POLICY_PATH_LENGTH                      156
# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED      157
# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED   158
# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159
# define X509V3_R_SECTION_NOT_FOUND                       150
# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS            122
# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID              123
# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT             111
# define X509V3_R_UNKNOWN_EXTENSION                       129
# define X509V3_R_UNKNOWN_EXTENSION_NAME                  130
# define X509V3_R_UNKNOWN_OPTION                          120
# define X509V3_R_UNSUPPORTED_OPTION                      117
# define X509V3_R_UNSUPPORTED_TYPE                        167
# define X509V3_R_USER_TOO_LONG                           132
1041

1042 1043 1044 1045
#ifdef  __cplusplus
}
#endif
#endif