• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/openssl/crypto/x509v3/
1/* x509v3.h */
2/*
3 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4 * 1999.
5 */
6/* ====================================================================
7 * Copyright (c) 1999-2004 The OpenSSL Project.  All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * 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 *    notice, this list of conditions and the following disclaimer in
18 *    the documentation and/or other materials provided with the
19 *    distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 *    software must display the following acknowledgment:
23 *    "This product includes software developed by the OpenSSL Project
24 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 *    endorse or promote products derived from this software without
28 *    prior written permission. For written permission, please contact
29 *    licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 *    nor may "OpenSSL" appear in their names without prior written
33 *    permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 *    acknowledgment:
37 *    "This product includes software developed by the OpenSSL Project
38 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com).  This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59#ifndef HEADER_X509V3_H
60# define HEADER_X509V3_H
61
62# include <openssl/bio.h>
63# include <openssl/x509.h>
64# include <openssl/conf.h>
65
66#ifdef __cplusplus
67extern "C" {
68#endif
69
70# ifdef OPENSSL_SYS_WIN32
71/* Under Win32 these are defined in wincrypt.h */
72#  undef X509_NAME
73#  undef X509_CERT_PAIR
74#  undef X509_EXTENSIONS
75# endif
76
77/* Forward reference */
78struct v3_ext_method;
79struct v3_ext_ctx;
80
81/* Useful typedefs */
82
83typedef void *(*X509V3_EXT_NEW)(void);
84typedef void (*X509V3_EXT_FREE) (void *);
85typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
86typedef int (*X509V3_EXT_I2D) (void *, unsigned char **);
87typedef STACK_OF(CONF_VALUE) *
88    (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext,
89                       STACK_OF(CONF_VALUE) *extlist);
90typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method,
91                                struct v3_ext_ctx *ctx,
92                                STACK_OF(CONF_VALUE) *values);
93typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method,
94                                void *ext);
95typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method,
96                                struct v3_ext_ctx *ctx, const char *str);
97typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext,
98                               BIO *out, int indent);
99typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method,
100                                struct v3_ext_ctx *ctx, const char *str);
101
102/* V3 extension structure */
103
104struct v3_ext_method {
105    int ext_nid;
106    int ext_flags;
107/* If this is set the following four fields are ignored */
108    ASN1_ITEM_EXP *it;
109/* Old style ASN1 calls */
110    X509V3_EXT_NEW ext_new;
111    X509V3_EXT_FREE ext_free;
112    X509V3_EXT_D2I d2i;
113    X509V3_EXT_I2D i2d;
114/* The following pair is used for string extensions */
115    X509V3_EXT_I2S i2s;
116    X509V3_EXT_S2I s2i;
117/* The following pair is used for multi-valued extensions */
118    X509V3_EXT_I2V i2v;
119    X509V3_EXT_V2I v2i;
120/* The following are used for raw extensions */
121    X509V3_EXT_I2R i2r;
122    X509V3_EXT_R2I r2i;
123    void *usr_data;             /* Any extension specific data */
124};
125
126typedef struct X509V3_CONF_METHOD_st {
127    char *(*get_string) (void *db, char *section, char *value);
128    STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section);
129    void (*free_string) (void *db, char *string);
130    void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);
131} X509V3_CONF_METHOD;
132
133/* Context specific info */
134struct v3_ext_ctx {
135# define CTX_TEST 0x1
136    int flags;
137    X509 *issuer_cert;
138    X509 *subject_cert;
139    X509_REQ *subject_req;
140    X509_CRL *crl;
141    X509V3_CONF_METHOD *db_meth;
142    void *db;
143/* Maybe more here */
144};
145
146typedef struct v3_ext_method X509V3_EXT_METHOD;
147
148DECLARE_STACK_OF(X509V3_EXT_METHOD)
149
150/* ext_flags values */
151# define X509V3_EXT_DYNAMIC      0x1
152# define X509V3_EXT_CTX_DEP      0x2
153# define X509V3_EXT_MULTILINE    0x4
154
155typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
156
157typedef struct BASIC_CONSTRAINTS_st {
158    int ca;
159    ASN1_INTEGER *pathlen;
160} BASIC_CONSTRAINTS;
161
162typedef struct PKEY_USAGE_PERIOD_st {
163    ASN1_GENERALIZEDTIME *notBefore;
164    ASN1_GENERALIZEDTIME *notAfter;
165} PKEY_USAGE_PERIOD;
166
167typedef struct otherName_st {
168    ASN1_OBJECT *type_id;
169    ASN1_TYPE *value;
170} OTHERNAME;
171
172typedef struct EDIPartyName_st {
173    ASN1_STRING *nameAssigner;
174    ASN1_STRING *partyName;
175} EDIPARTYNAME;
176
177typedef struct GENERAL_NAME_st {
178# define GEN_OTHERNAME   0
179# define GEN_EMAIL       1
180# define GEN_DNS         2
181# define GEN_X400        3
182# define GEN_DIRNAME     4
183# define GEN_EDIPARTY    5
184# define GEN_URI         6
185# define GEN_IPADD       7
186# define GEN_RID         8
187    int type;
188    union {
189        char *ptr;
190        OTHERNAME *otherName;   /* otherName */
191        ASN1_IA5STRING *rfc822Name;
192        ASN1_IA5STRING *dNSName;
193        ASN1_TYPE *x400Address;
194        X509_NAME *directoryName;
195        EDIPARTYNAME *ediPartyName;
196        ASN1_IA5STRING *uniformResourceIdentifier;
197        ASN1_OCTET_STRING *iPAddress;
198        ASN1_OBJECT *registeredID;
199        /* Old names */
200        ASN1_OCTET_STRING *ip;  /* iPAddress */
201        X509_NAME *dirn;        /* dirn */
202        ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,
203                                 * uniformResourceIdentifier */
204        ASN1_OBJECT *rid;       /* registeredID */
205        ASN1_TYPE *other;       /* x400Address */
206    } d;
207} GENERAL_NAME;
208
209typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
210
211typedef struct ACCESS_DESCRIPTION_st {
212    ASN1_OBJECT *method;
213    GENERAL_NAME *location;
214} ACCESS_DESCRIPTION;
215
216typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
217
218typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
219
220DECLARE_STACK_OF(GENERAL_NAME)
221DECLARE_ASN1_SET_OF(GENERAL_NAME)
222
223DECLARE_STACK_OF(ACCESS_DESCRIPTION)
224DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)
225
226typedef struct DIST_POINT_NAME_st {
227    int type;
228    union {
229        GENERAL_NAMES *fullname;
230        STACK_OF(X509_NAME_ENTRY) *relativename;
231    } name;
232/* If relativename then this contains the full distribution point name */
233    X509_NAME *dpname;
234} DIST_POINT_NAME;
235/* All existing reasons */
236# define CRLDP_ALL_REASONS       0x807f
237
238# define CRL_REASON_NONE                         -1
239# define CRL_REASON_UNSPECIFIED                  0
240# define CRL_REASON_KEY_COMPROMISE               1
241# define CRL_REASON_CA_COMPROMISE                2
242# define CRL_REASON_AFFILIATION_CHANGED          3
243# define CRL_REASON_SUPERSEDED                   4
244# define CRL_REASON_CESSATION_OF_OPERATION       5
245# define CRL_REASON_CERTIFICATE_HOLD             6
246# define CRL_REASON_REMOVE_FROM_CRL              8
247# define CRL_REASON_PRIVILEGE_WITHDRAWN          9
248# define CRL_REASON_AA_COMPROMISE                10
249
250struct DIST_POINT_st {
251    DIST_POINT_NAME *distpoint;
252    ASN1_BIT_STRING *reasons;
253    GENERAL_NAMES *CRLissuer;
254    int dp_reasons;
255};
256
257typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;
258
259DECLARE_STACK_OF(DIST_POINT)
260DECLARE_ASN1_SET_OF(DIST_POINT)
261
262struct AUTHORITY_KEYID_st {
263    ASN1_OCTET_STRING *keyid;
264    GENERAL_NAMES *issuer;
265    ASN1_INTEGER *serial;
266};
267
268/* Strong extranet structures */
269
270typedef struct SXNET_ID_st {
271    ASN1_INTEGER *zone;
272    ASN1_OCTET_STRING *user;
273} SXNETID;
274
275DECLARE_STACK_OF(SXNETID)
276DECLARE_ASN1_SET_OF(SXNETID)
277
278typedef struct SXNET_st {
279    ASN1_INTEGER *version;
280    STACK_OF(SXNETID) *ids;
281} SXNET;
282
283typedef struct NOTICEREF_st {
284    ASN1_STRING *organization;
285    STACK_OF(ASN1_INTEGER) *noticenos;
286} NOTICEREF;
287
288typedef struct USERNOTICE_st {
289    NOTICEREF *noticeref;
290    ASN1_STRING *exptext;
291} USERNOTICE;
292
293typedef struct POLICYQUALINFO_st {
294    ASN1_OBJECT *pqualid;
295    union {
296        ASN1_IA5STRING *cpsuri;
297        USERNOTICE *usernotice;
298        ASN1_TYPE *other;
299    } d;
300} POLICYQUALINFO;
301
302DECLARE_STACK_OF(POLICYQUALINFO)
303DECLARE_ASN1_SET_OF(POLICYQUALINFO)
304
305typedef struct POLICYINFO_st {
306    ASN1_OBJECT *policyid;
307    STACK_OF(POLICYQUALINFO) *qualifiers;
308} POLICYINFO;
309
310typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;
311
312DECLARE_STACK_OF(POLICYINFO)
313DECLARE_ASN1_SET_OF(POLICYINFO)
314
315typedef struct POLICY_MAPPING_st {
316    ASN1_OBJECT *issuerDomainPolicy;
317    ASN1_OBJECT *subjectDomainPolicy;
318} POLICY_MAPPING;
319
320DECLARE_STACK_OF(POLICY_MAPPING)
321
322typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;
323
324typedef struct GENERAL_SUBTREE_st {
325    GENERAL_NAME *base;
326    ASN1_INTEGER *minimum;
327    ASN1_INTEGER *maximum;
328} GENERAL_SUBTREE;
329
330DECLARE_STACK_OF(GENERAL_SUBTREE)
331
332struct NAME_CONSTRAINTS_st {
333    STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
334    STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
335};
336
337typedef struct POLICY_CONSTRAINTS_st {
338    ASN1_INTEGER *requireExplicitPolicy;
339    ASN1_INTEGER *inhibitPolicyMapping;
340} POLICY_CONSTRAINTS;
341
342/* Proxy certificate structures, see RFC 3820 */
343typedef struct PROXY_POLICY_st {
344    ASN1_OBJECT *policyLanguage;
345    ASN1_OCTET_STRING *policy;
346} PROXY_POLICY;
347
348typedef struct PROXY_CERT_INFO_EXTENSION_st {
349    ASN1_INTEGER *pcPathLengthConstraint;
350    PROXY_POLICY *proxyPolicy;
351} PROXY_CERT_INFO_EXTENSION;
352
353DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
354DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)
355
356struct ISSUING_DIST_POINT_st {
357    DIST_POINT_NAME *distpoint;
358    int onlyuser;
359    int onlyCA;
360    ASN1_BIT_STRING *onlysomereasons;
361    int indirectCRL;
362    int onlyattr;
363};
364
365/* Values in idp_flags field */
366/* IDP present */
367# define IDP_PRESENT     0x1
368/* IDP values inconsistent */
369# define IDP_INVALID     0x2
370/* onlyuser true */
371# define IDP_ONLYUSER    0x4
372/* onlyCA true */
373# define IDP_ONLYCA      0x8
374/* onlyattr true */
375# define IDP_ONLYATTR    0x10
376/* indirectCRL true */
377# define IDP_INDIRECT    0x20
378/* onlysomereasons present */
379# define IDP_REASONS     0x40
380
381# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
382",name:", val->name, ",value:", val->value);
383
384# define X509V3_set_ctx_test(ctx) \
385                        X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
386# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
387
388# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
389                        0,0,0,0, \
390                        0,0, \
391                        (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
392                        (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
393                        NULL, NULL, \
394                        table}
395
396# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
397                        0,0,0,0, \
398                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
399                        (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
400                        0,0,0,0, \
401                        NULL}
402
403# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
404
405/* X509_PURPOSE stuff */
406
407# define EXFLAG_BCONS            0x1
408# define EXFLAG_KUSAGE           0x2
409# define EXFLAG_XKUSAGE          0x4
410# define EXFLAG_NSCERT           0x8
411
412# define EXFLAG_CA               0x10
413/* Really self issued not necessarily self signed */
414# define EXFLAG_SI               0x20
415# define EXFLAG_V1               0x40
416# define EXFLAG_INVALID          0x80
417# define EXFLAG_SET              0x100
418# define EXFLAG_CRITICAL         0x200
419# define EXFLAG_PROXY            0x400
420
421# define EXFLAG_INVALID_POLICY   0x800
422# define EXFLAG_FRESHEST         0x1000
423/* Self signed */
424# define EXFLAG_SS               0x2000
425
426# define KU_DIGITAL_SIGNATURE    0x0080
427# define KU_NON_REPUDIATION      0x0040
428# define KU_KEY_ENCIPHERMENT     0x0020
429# define KU_DATA_ENCIPHERMENT    0x0010
430# define KU_KEY_AGREEMENT        0x0008
431# define KU_KEY_CERT_SIGN        0x0004
432# define KU_CRL_SIGN             0x0002
433# define KU_ENCIPHER_ONLY        0x0001
434# define KU_DECIPHER_ONLY        0x8000
435
436# define NS_SSL_CLIENT           0x80
437# define NS_SSL_SERVER           0x40
438# define NS_SMIME                0x20
439# define NS_OBJSIGN              0x10
440# define NS_SSL_CA               0x04
441# define NS_SMIME_CA             0x02
442# define NS_OBJSIGN_CA           0x01
443# define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)
444
445# define XKU_SSL_SERVER          0x1
446# define XKU_SSL_CLIENT          0x2
447# define XKU_SMIME               0x4
448# define XKU_CODE_SIGN           0x8
449# define XKU_SGC                 0x10
450# define XKU_OCSP_SIGN           0x20
451# define XKU_TIMESTAMP           0x40
452# define XKU_DVCS                0x80
453# define XKU_ANYEKU              0x100
454
455# define X509_PURPOSE_DYNAMIC    0x1
456# define X509_PURPOSE_DYNAMIC_NAME       0x2
457
458typedef struct x509_purpose_st {
459    int purpose;
460    int trust;                  /* Default trust ID */
461    int flags;
462    int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);
463    char *name;
464    char *sname;
465    void *usr_data;
466} X509_PURPOSE;
467
468# define X509_PURPOSE_SSL_CLIENT         1
469# define X509_PURPOSE_SSL_SERVER         2
470# define X509_PURPOSE_NS_SSL_SERVER      3
471# define X509_PURPOSE_SMIME_SIGN         4
472# define X509_PURPOSE_SMIME_ENCRYPT      5
473# define X509_PURPOSE_CRL_SIGN           6
474# define X509_PURPOSE_ANY                7
475# define X509_PURPOSE_OCSP_HELPER        8
476# define X509_PURPOSE_TIMESTAMP_SIGN     9
477
478# define X509_PURPOSE_MIN                1
479# define X509_PURPOSE_MAX                9
480
481/* Flags for X509V3_EXT_print() */
482
483# define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
484/* Return error for unknown extensions */
485# define X509V3_EXT_DEFAULT              0
486/* Print error for unknown extensions */
487# define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
488/* ASN1 parse unknown extensions */
489# define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
490/* BIO_dump unknown extensions */
491# define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)
492
493/* Flags for X509V3_add1_i2d */
494
495# define X509V3_ADD_OP_MASK              0xfL
496# define X509V3_ADD_DEFAULT              0L
497# define X509V3_ADD_APPEND               1L
498# define X509V3_ADD_REPLACE              2L
499# define X509V3_ADD_REPLACE_EXISTING     3L
500# define X509V3_ADD_KEEP_EXISTING        4L
501# define X509V3_ADD_DELETE               5L
502# define X509V3_ADD_SILENT               0x10
503
504DECLARE_STACK_OF(X509_PURPOSE)
505
506DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)
507
508DECLARE_ASN1_FUNCTIONS(SXNET)
509DECLARE_ASN1_FUNCTIONS(SXNETID)
510
511int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen);
512int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user,
513                       int userlen);
514int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user,
515                         int userlen);
516
517ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone);
518ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
519ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);
520
521DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)
522
523DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)
524
525DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
526GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a);
527int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);
528
529ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
530                                     X509V3_CTX *ctx,
531                                     STACK_OF(CONF_VALUE) *nval);
532STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
533                                          ASN1_BIT_STRING *bits,
534                                          STACK_OF(CONF_VALUE) *extlist);
535
536STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
537                                       GENERAL_NAME *gen,
538                                       STACK_OF(CONF_VALUE) *ret);
539int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
540
541DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)
542
543STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
544                                        GENERAL_NAMES *gen,
545                                        STACK_OF(CONF_VALUE) *extlist);
546GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
547                                 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
548
549DECLARE_ASN1_FUNCTIONS(OTHERNAME)
550DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
551int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
552void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
553void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype);
554int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
555                                ASN1_OBJECT *oid, ASN1_TYPE *value);
556int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen,
557                                ASN1_OBJECT **poid, ASN1_TYPE **pvalue);
558
559char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
560                            ASN1_OCTET_STRING *ia5);
561ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
562                                         X509V3_CTX *ctx, char *str);
563
564DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
565int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a);
566
567DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
568DECLARE_ASN1_FUNCTIONS(POLICYINFO)
569DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
570DECLARE_ASN1_FUNCTIONS(USERNOTICE)
571DECLARE_ASN1_FUNCTIONS(NOTICEREF)
572
573DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
574DECLARE_ASN1_FUNCTIONS(DIST_POINT)
575DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
576DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)
577
578int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname);
579
580int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);
581
582DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
583DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
584
585DECLARE_ASN1_ITEM(POLICY_MAPPING)
586DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
587DECLARE_ASN1_ITEM(POLICY_MAPPINGS)
588
589DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
590DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
591
592DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
593DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
594
595DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
596DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)
597
598GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
599                               const X509V3_EXT_METHOD *method,
600                               X509V3_CTX *ctx, int gen_type, char *value,
601                               int is_nc);
602
603# ifdef HEADER_CONF_H
604GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
605                               X509V3_CTX *ctx, CONF_VALUE *cnf);
606GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
607                                  const X509V3_EXT_METHOD *method,
608                                  X509V3_CTX *ctx, CONF_VALUE *cnf,
609                                  int is_nc);
610void X509V3_conf_free(CONF_VALUE *val);
611
612X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
613                                     char *value);
614X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name,
615                                 char *value);
616int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section,
617                            STACK_OF(X509_EXTENSION) **sk);
618int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
619                         X509 *cert);
620int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
621                             X509_REQ *req);
622int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
623                             X509_CRL *crl);
624
625X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
626                                    X509V3_CTX *ctx, int ext_nid,
627                                    char *value);
628X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
629                                char *name, char *value);
630int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
631                        char *section, X509 *cert);
632int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
633                            char *section, X509_REQ *req);
634int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
635                            char *section, X509_CRL *crl);
636
637int X509V3_add_value_bool_nf(char *name, int asn1_bool,
638                             STACK_OF(CONF_VALUE) **extlist);
639int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
640int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
641void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
642void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
643# endif
644
645char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
646STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section);
647void X509V3_string_free(X509V3_CTX *ctx, char *str);
648void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
649void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
650                    X509_REQ *req, X509_CRL *crl, int flags);
651
652int X509V3_add_value(const char *name, const char *value,
653                     STACK_OF(CONF_VALUE) **extlist);
654int X509V3_add_value_uchar(const char *name, const unsigned char *value,
655                           STACK_OF(CONF_VALUE) **extlist);
656int X509V3_add_value_bool(const char *name, int asn1_bool,
657                          STACK_OF(CONF_VALUE) **extlist);
658int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
659                         STACK_OF(CONF_VALUE) **extlist);
660char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
661ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
662char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
663char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
664                                ASN1_ENUMERATED *aint);
665int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
666int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
667int X509V3_EXT_add_alias(int nid_to, int nid_from);
668void X509V3_EXT_cleanup(void);
669
670const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
671const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
672int X509V3_add_standard_extensions(void);
673STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
674void *X509V3_EXT_d2i(X509_EXTENSION *ext);
675void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
676                     int *idx);
677int X509V3_EXT_free(int nid, void *ext_data);
678
679X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
680int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
681                    int crit, unsigned long flags);
682
683char *hex_to_string(const unsigned char *buffer, long len);
684unsigned char *string_to_hex(const char *str, long *len);
685int name_cmp(const char *name, const char *cmp);
686
687void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
688                        int ml);
689int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,
690                     int indent);
691int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
692
693int X509V3_extensions_print(BIO *out, char *title,
694                            STACK_OF(X509_EXTENSION) *exts,
695                            unsigned long flag, int indent);
696
697int X509_check_ca(X509 *x);
698int X509_check_purpose(X509 *x, int id, int ca);
699int X509_supported_extension(X509_EXTENSION *ex);
700int X509_PURPOSE_set(int *p, int purpose);
701int X509_check_issued(X509 *issuer, X509 *subject);
702int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid);
703int X509_PURPOSE_get_count(void);
704X509_PURPOSE *X509_PURPOSE_get0(int idx);
705int X509_PURPOSE_get_by_sname(char *sname);
706int X509_PURPOSE_get_by_id(int id);
707int X509_PURPOSE_add(int id, int trust, int flags,
708                     int (*ck) (const X509_PURPOSE *, const X509 *, int),
709                     char *name, char *sname, void *arg);
710char *X509_PURPOSE_get0_name(X509_PURPOSE *xp);
711char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);
712int X509_PURPOSE_get_trust(X509_PURPOSE *xp);
713void X509_PURPOSE_cleanup(void);
714int X509_PURPOSE_get_id(X509_PURPOSE *);
715
716STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
717STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
718void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
719STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
720/* Flags for X509_check_* functions */
721
722/*
723 * Always check subject name for host match even if subject alt names present
724 */
725# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT    0x1
726/* Disable wildcard matching for dnsName fields and common name. */
727# define X509_CHECK_FLAG_NO_WILDCARDS    0x2
728/* Wildcards must not match a partial label. */
729# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
730/* Allow (non-partial) wildcards to match multiple labels. */
731# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
732/* Constraint verifier subdomain patterns to match a single labels. */
733# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
734/*
735 * Match reference identifiers starting with "." to any sub-domain.
736 * This is a non-public flag, turned on implicitly when the subject
737 * reference identity is a DNS name.
738 */
739# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000
740
741int X509_check_host(X509 *x, const char *chk, size_t chklen,
742                    unsigned int flags, char **peername);
743int X509_check_email(X509 *x, const char *chk, size_t chklen,
744                     unsigned int flags);
745int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
746                  unsigned int flags);
747int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);
748
749ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
750ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
751int a2i_ipadd(unsigned char *ipout, const char *ipasc);
752int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,
753                             unsigned long chtype);
754
755void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
756DECLARE_STACK_OF(X509_POLICY_NODE)
757
758# ifndef OPENSSL_NO_RFC3779
759
760typedef struct ASRange_st {
761    ASN1_INTEGER *min, *max;
762} ASRange;
763
764#  define ASIdOrRange_id          0
765#  define ASIdOrRange_range       1
766
767typedef struct ASIdOrRange_st {
768    int type;
769    union {
770        ASN1_INTEGER *id;
771        ASRange *range;
772    } u;
773} ASIdOrRange;
774
775typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
776DECLARE_STACK_OF(ASIdOrRange)
777
778#  define ASIdentifierChoice_inherit              0
779#  define ASIdentifierChoice_asIdsOrRanges        1
780
781typedef struct ASIdentifierChoice_st {
782    int type;
783    union {
784        ASN1_NULL *inherit;
785        ASIdOrRanges *asIdsOrRanges;
786    } u;
787} ASIdentifierChoice;
788
789typedef struct ASIdentifiers_st {
790    ASIdentifierChoice *asnum, *rdi;
791} ASIdentifiers;
792
793DECLARE_ASN1_FUNCTIONS(ASRange)
794DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
795DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
796DECLARE_ASN1_FUNCTIONS(ASIdentifiers)
797
798typedef struct IPAddressRange_st {
799    ASN1_BIT_STRING *min, *max;
800} IPAddressRange;
801
802#  define IPAddressOrRange_addressPrefix  0
803#  define IPAddressOrRange_addressRange   1
804
805typedef struct IPAddressOrRange_st {
806    int type;
807    union {
808        ASN1_BIT_STRING *addressPrefix;
809        IPAddressRange *addressRange;
810    } u;
811} IPAddressOrRange;
812
813typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
814DECLARE_STACK_OF(IPAddressOrRange)
815
816#  define IPAddressChoice_inherit                 0
817#  define IPAddressChoice_addressesOrRanges       1
818
819typedef struct IPAddressChoice_st {
820    int type;
821    union {
822        ASN1_NULL *inherit;
823        IPAddressOrRanges *addressesOrRanges;
824    } u;
825} IPAddressChoice;
826
827typedef struct IPAddressFamily_st {
828    ASN1_OCTET_STRING *addressFamily;
829    IPAddressChoice *ipAddressChoice;
830} IPAddressFamily;
831
832typedef STACK_OF(IPAddressFamily) IPAddrBlocks;
833DECLARE_STACK_OF(IPAddressFamily)
834
835DECLARE_ASN1_FUNCTIONS(IPAddressRange)
836DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
837DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
838DECLARE_ASN1_FUNCTIONS(IPAddressFamily)
839
840/*
841 * API tag for elements of the ASIdentifer SEQUENCE.
842 */
843#  define V3_ASID_ASNUM   0
844#  define V3_ASID_RDI     1
845
846/*
847 * AFI values, assigned by IANA.  It'd be nice to make the AFI
848 * handling code totally generic, but there are too many little things
849 * that would need to be defined for other address families for it to
850 * be worth the trouble.
851 */
852#  define IANA_AFI_IPV4   1
853#  define IANA_AFI_IPV6   2
854
855/*
856 * Utilities to construct and extract values from RFC3779 extensions,
857 * since some of the encodings (particularly for IP address prefixes
858 * and ranges) are a bit tedious to work with directly.
859 */
860int v3_asid_add_inherit(ASIdentifiers *asid, int which);
861int v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
862                            ASN1_INTEGER *min, ASN1_INTEGER *max);
863int v3_addr_add_inherit(IPAddrBlocks *addr,
864                        const unsigned afi, const unsigned *safi);
865int v3_addr_add_prefix(IPAddrBlocks *addr,
866                       const unsigned afi, const unsigned *safi,
867                       unsigned char *a, const int prefixlen);
868int v3_addr_add_range(IPAddrBlocks *addr,
869                      const unsigned afi, const unsigned *safi,
870                      unsigned char *min, unsigned char *max);
871unsigned v3_addr_get_afi(const IPAddressFamily *f);
872int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
873                      unsigned char *min, unsigned char *max,
874                      const int length);
875
876/*
877 * Canonical forms.
878 */
879int v3_asid_is_canonical(ASIdentifiers *asid);
880int v3_addr_is_canonical(IPAddrBlocks *addr);
881int v3_asid_canonize(ASIdentifiers *asid);
882int v3_addr_canonize(IPAddrBlocks *addr);
883
884/*
885 * Tests for inheritance and containment.
886 */
887int v3_asid_inherits(ASIdentifiers *asid);
888int v3_addr_inherits(IPAddrBlocks *addr);
889int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
890int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);
891
892/*
893 * Check whether RFC 3779 extensions nest properly in chains.
894 */
895int v3_asid_validate_path(X509_STORE_CTX *);
896int v3_addr_validate_path(X509_STORE_CTX *);
897int v3_asid_validate_resource_set(STACK_OF(X509) *chain,
898                                  ASIdentifiers *ext, int allow_inheritance);
899int v3_addr_validate_resource_set(STACK_OF(X509) *chain,
900                                  IPAddrBlocks *ext, int allow_inheritance);
901
902# endif                         /* OPENSSL_NO_RFC3779 */
903
904/* BEGIN ERROR CODES */
905/*
906 * The following lines are auto generated by the script mkerr.pl. Any changes
907 * made after this point may be overwritten when the script is next run.
908 */
909void ERR_load_X509V3_strings(void);
910
911/* Error codes for the X509V3 functions. */
912
913/* Function codes. */
914# define X509V3_F_A2I_GENERAL_NAME                        164
915# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE             161
916# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL         162
917# define X509V3_F_COPY_EMAIL                              122
918# define X509V3_F_COPY_ISSUER                             123
919# define X509V3_F_DO_DIRNAME                              144
920# define X509V3_F_DO_EXT_CONF                             124
921# define X509V3_F_DO_EXT_I2D                              135
922# define X509V3_F_DO_EXT_NCONF                            151
923# define X509V3_F_DO_I2V_NAME_CONSTRAINTS                 148
924# define X509V3_F_GNAMES_FROM_SECTNAME                    156
925# define X509V3_F_HEX_TO_STRING                           111
926# define X509V3_F_I2S_ASN1_ENUMERATED                     121
927# define X509V3_F_I2S_ASN1_IA5STRING                      149
928# define X509V3_F_I2S_ASN1_INTEGER                        120
929# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS               138
930# define X509V3_F_NOTICE_SECTION                          132
931# define X509V3_F_NREF_NOS                                133
932# define X509V3_F_POLICY_SECTION                          131
933# define X509V3_F_PROCESS_PCI_VALUE                       150
934# define X509V3_F_R2I_CERTPOL                             130
935# define X509V3_F_R2I_PCI                                 155
936# define X509V3_F_S2I_ASN1_IA5STRING                      100
937# define X509V3_F_S2I_ASN1_INTEGER                        108
938# define X509V3_F_S2I_ASN1_OCTET_STRING                   112
939# define X509V3_F_S2I_ASN1_SKEY_ID                        114
940# define X509V3_F_S2I_SKEY_ID                             115
941# define X509V3_F_SET_DIST_POINT_NAME                     158
942# define X509V3_F_STRING_TO_HEX                           113
943# define X509V3_F_SXNET_ADD_ID_ASC                        125
944# define X509V3_F_SXNET_ADD_ID_INTEGER                    126
945# define X509V3_F_SXNET_ADD_ID_ULONG                      127
946# define X509V3_F_SXNET_GET_ID_ASC                        128
947# define X509V3_F_SXNET_GET_ID_ULONG                      129
948# define X509V3_F_V2I_ASIDENTIFIERS                       163
949# define X509V3_F_V2I_ASN1_BIT_STRING                     101
950# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS               139
951# define X509V3_F_V2I_AUTHORITY_KEYID                     119
952# define X509V3_F_V2I_BASIC_CONSTRAINTS                   102
953# define X509V3_F_V2I_CRLD                                134
954# define X509V3_F_V2I_EXTENDED_KEY_USAGE                  103
955# define X509V3_F_V2I_GENERAL_NAMES                       118
956# define X509V3_F_V2I_GENERAL_NAME_EX                     117
957# define X509V3_F_V2I_IDP                                 157
958# define X509V3_F_V2I_IPADDRBLOCKS                        159
959# define X509V3_F_V2I_ISSUER_ALT                          153
960# define X509V3_F_V2I_NAME_CONSTRAINTS                    147
961# define X509V3_F_V2I_POLICY_CONSTRAINTS                  146
962# define X509V3_F_V2I_POLICY_MAPPINGS                     145
963# define X509V3_F_V2I_SUBJECT_ALT                         154
964# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL          160
965# define X509V3_F_V3_GENERIC_EXTENSION                    116
966# define X509V3_F_X509V3_ADD1_I2D                         140
967# define X509V3_F_X509V3_ADD_VALUE                        105
968# define X509V3_F_X509V3_EXT_ADD                          104
969# define X509V3_F_X509V3_EXT_ADD_ALIAS                    106
970# define X509V3_F_X509V3_EXT_CONF                         107
971# define X509V3_F_X509V3_EXT_FREE                         165
972# define X509V3_F_X509V3_EXT_I2D                          136
973# define X509V3_F_X509V3_EXT_NCONF                        152
974# define X509V3_F_X509V3_GET_SECTION                      142
975# define X509V3_F_X509V3_GET_STRING                       143
976# define X509V3_F_X509V3_GET_VALUE_BOOL                   110
977# define X509V3_F_X509V3_PARSE_LIST                       109
978# define X509V3_F_X509_PURPOSE_ADD                        137
979# define X509V3_F_X509_PURPOSE_SET                        141
980
981/* Reason codes. */
982# define X509V3_R_BAD_IP_ADDRESS                          118
983# define X509V3_R_BAD_OBJECT                              119
984# define X509V3_R_BN_DEC2BN_ERROR                         100
985# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR                101
986# define X509V3_R_CANNOT_FIND_FREE_FUNCTION               168
987# define X509V3_R_DIRNAME_ERROR                           149
988# define X509V3_R_DISTPOINT_ALREADY_SET                   160
989# define X509V3_R_DUPLICATE_ZONE_ID                       133
990# define X509V3_R_ERROR_CONVERTING_ZONE                   131
991# define X509V3_R_ERROR_CREATING_EXTENSION                144
992# define X509V3_R_ERROR_IN_EXTENSION                      128
993# define X509V3_R_EXPECTED_A_SECTION_NAME                 137
994# define X509V3_R_EXTENSION_EXISTS                        145
995# define X509V3_R_EXTENSION_NAME_ERROR                    115
996# define X509V3_R_EXTENSION_NOT_FOUND                     102
997# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED         103
998# define X509V3_R_EXTENSION_VALUE_ERROR                   116
999# define X509V3_R_ILLEGAL_EMPTY_EXTENSION                 151
1000# define X509V3_R_ILLEGAL_HEX_DIGIT                       113
1001# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG             152
1002# define X509V3_R_INVALID_ASNUMBER                        162
1003# define X509V3_R_INVALID_ASRANGE                         163
1004# define X509V3_R_INVALID_BOOLEAN_STRING                  104
1005# define X509V3_R_INVALID_EXTENSION_STRING                105
1006# define X509V3_R_INVALID_INHERITANCE                     165
1007# define X509V3_R_INVALID_IPADDRESS                       166
1008# define X509V3_R_INVALID_MULTIPLE_RDNS                   161
1009# define X509V3_R_INVALID_NAME                            106
1010# define X509V3_R_INVALID_NULL_ARGUMENT                   107
1011# define X509V3_R_INVALID_NULL_NAME                       108
1012# define X509V3_R_INVALID_NULL_VALUE                      109
1013# define X509V3_R_INVALID_NUMBER                          140
1014# define X509V3_R_INVALID_NUMBERS                         141
1015# define X509V3_R_INVALID_OBJECT_IDENTIFIER               110
1016# define X509V3_R_INVALID_OPTION                          138
1017# define X509V3_R_INVALID_POLICY_IDENTIFIER               134
1018# define X509V3_R_INVALID_PROXY_POLICY_SETTING            153
1019# define X509V3_R_INVALID_PURPOSE                         146
1020# define X509V3_R_INVALID_SAFI                            164
1021# define X509V3_R_INVALID_SECTION                         135
1022# define X509V3_R_INVALID_SYNTAX                          143
1023# define X509V3_R_ISSUER_DECODE_ERROR                     126
1024# define X509V3_R_MISSING_VALUE                           124
1025# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS           142
1026# define X509V3_R_NO_CONFIG_DATABASE                      136
1027# define X509V3_R_NO_ISSUER_CERTIFICATE                   121
1028# define X509V3_R_NO_ISSUER_DETAILS                       127
1029# define X509V3_R_NO_POLICY_IDENTIFIER                    139
1030# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED   154
1031# define X509V3_R_NO_PUBLIC_KEY                           114
1032# define X509V3_R_NO_SUBJECT_DETAILS                      125
1033# define X509V3_R_ODD_NUMBER_OF_DIGITS                    112
1034# define X509V3_R_OPERATION_NOT_DEFINED                   148
1035# define X509V3_R_OTHERNAME_ERROR                         147
1036# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED         155
1037# define X509V3_R_POLICY_PATH_LENGTH                      156
1038# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED      157
1039# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED   158
1040# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159
1041# define X509V3_R_SECTION_NOT_FOUND                       150
1042# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS            122
1043# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID              123
1044# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT             111
1045# define X509V3_R_UNKNOWN_EXTENSION                       129
1046# define X509V3_R_UNKNOWN_EXTENSION_NAME                  130
1047# define X509V3_R_UNKNOWN_OPTION                          120
1048# define X509V3_R_UNSUPPORTED_OPTION                      117
1049# define X509V3_R_UNSUPPORTED_TYPE                        167
1050# define X509V3_R_USER_TOO_LONG                           132
1051
1052#ifdef  __cplusplus
1053}
1054#endif
1055#endif
1056