155714Skris/* x509v3.h */
2296465Sdelphij/*
3296465Sdelphij * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4296465Sdelphij * 1999.
555714Skris */
655714Skris/* ====================================================================
7160814Ssimon * Copyright (c) 1999-2004 The OpenSSL Project.  All rights reserved.
855714Skris *
955714Skris * Redistribution and use in source and binary forms, with or without
1055714Skris * modification, are permitted provided that the following conditions
1155714Skris * are met:
1255714Skris *
1355714Skris * 1. Redistributions of source code must retain the above copyright
14296465Sdelphij *    notice, this list of conditions and the following disclaimer.
1555714Skris *
1655714Skris * 2. Redistributions in binary form must reproduce the above copyright
1755714Skris *    notice, this list of conditions and the following disclaimer in
1855714Skris *    the documentation and/or other materials provided with the
1955714Skris *    distribution.
2055714Skris *
2155714Skris * 3. All advertising materials mentioning features or use of this
2255714Skris *    software must display the following acknowledgment:
2355714Skris *    "This product includes software developed by the OpenSSL Project
2455714Skris *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
2555714Skris *
2655714Skris * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
2755714Skris *    endorse or promote products derived from this software without
2855714Skris *    prior written permission. For written permission, please contact
2955714Skris *    licensing@OpenSSL.org.
3055714Skris *
3155714Skris * 5. Products derived from this software may not be called "OpenSSL"
3255714Skris *    nor may "OpenSSL" appear in their names without prior written
3355714Skris *    permission of the OpenSSL Project.
3455714Skris *
3555714Skris * 6. Redistributions of any form whatsoever must retain the following
3655714Skris *    acknowledgment:
3755714Skris *    "This product includes software developed by the OpenSSL Project
3855714Skris *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
3955714Skris *
4055714Skris * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
4155714Skris * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4255714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
4355714Skris * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
4455714Skris * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4555714Skris * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4655714Skris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4755714Skris * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
4955714Skris * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
5055714Skris * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
5155714Skris * OF THE POSSIBILITY OF SUCH DAMAGE.
5255714Skris * ====================================================================
5355714Skris *
5455714Skris * This product includes cryptographic software written by Eric Young
5555714Skris * (eay@cryptsoft.com).  This product includes software written by Tim
5655714Skris * Hudson (tjh@cryptsoft.com).
5755714Skris *
5855714Skris */
5955714Skris#ifndef HEADER_X509V3_H
60296465Sdelphij# define HEADER_X509V3_H
6155714Skris
62296465Sdelphij# include <openssl/bio.h>
63296465Sdelphij# include <openssl/x509.h>
64296465Sdelphij# include <openssl/conf.h>
6568651Skris
6655714Skris#ifdef __cplusplus
6755714Skrisextern "C" {
6855714Skris#endif
6955714Skris
7055714Skris/* Forward reference */
7155714Skrisstruct v3_ext_method;
7255714Skrisstruct v3_ext_ctx;
7355714Skris
7455714Skris/* Useful typedefs */
7555714Skris
76296465Sdelphijtypedef void *(*X509V3_EXT_NEW)(void);
77296465Sdelphijtypedef void (*X509V3_EXT_FREE) (void *);
78296465Sdelphijtypedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
79296465Sdelphijtypedef int (*X509V3_EXT_I2D) (void *, unsigned char **);
80296465Sdelphijtypedef STACK_OF(CONF_VALUE) *(*X509V3_EXT_I2V) (struct v3_ext_method *method,
81296465Sdelphij                                                 void *ext,
82296465Sdelphij                                                 STACK_OF(CONF_VALUE)
83296465Sdelphij                                                 *extlist);
84296465Sdelphijtypedef void *(*X509V3_EXT_V2I)(struct v3_ext_method *method,
85296465Sdelphij                                struct v3_ext_ctx *ctx,
86296465Sdelphij                                STACK_OF(CONF_VALUE) *values);
87296465Sdelphijtypedef char *(*X509V3_EXT_I2S)(struct v3_ext_method *method, void *ext);
88296465Sdelphijtypedef void *(*X509V3_EXT_S2I)(struct v3_ext_method *method,
89296465Sdelphij                                struct v3_ext_ctx *ctx, const char *str);
90296465Sdelphijtypedef int (*X509V3_EXT_I2R) (struct v3_ext_method *method, void *ext,
91296465Sdelphij                               BIO *out, int indent);
92296465Sdelphijtypedef void *(*X509V3_EXT_R2I)(struct v3_ext_method *method,
93296465Sdelphij                                struct v3_ext_ctx *ctx, const char *str);
9455714Skris
9555714Skris/* V3 extension structure */
9655714Skris
9755714Skrisstruct v3_ext_method {
98296465Sdelphij    int ext_nid;
99296465Sdelphij    int ext_flags;
100109998Smarkm/* If this is set the following four fields are ignored */
101296465Sdelphij    ASN1_ITEM_EXP *it;
102109998Smarkm/* Old style ASN1 calls */
103296465Sdelphij    X509V3_EXT_NEW ext_new;
104296465Sdelphij    X509V3_EXT_FREE ext_free;
105296465Sdelphij    X509V3_EXT_D2I d2i;
106296465Sdelphij    X509V3_EXT_I2D i2d;
10755714Skris/* The following pair is used for string extensions */
108296465Sdelphij    X509V3_EXT_I2S i2s;
109296465Sdelphij    X509V3_EXT_S2I s2i;
11055714Skris/* The following pair is used for multi-valued extensions */
111296465Sdelphij    X509V3_EXT_I2V i2v;
112296465Sdelphij    X509V3_EXT_V2I v2i;
11355714Skris/* The following are used for raw extensions */
114296465Sdelphij    X509V3_EXT_I2R i2r;
115296465Sdelphij    X509V3_EXT_R2I r2i;
116296465Sdelphij    void *usr_data;             /* Any extension specific data */
11755714Skris};
11855714Skris
11955714Skristypedef struct X509V3_CONF_METHOD_st {
120296465Sdelphij    char *(*get_string) (void *db, char *section, char *value);
121296465Sdelphij    STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section);
122296465Sdelphij    void (*free_string) (void *db, char *string);
123296465Sdelphij    void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);
12455714Skris} X509V3_CONF_METHOD;
12555714Skris
12655714Skris/* Context specific info */
12755714Skrisstruct v3_ext_ctx {
128296465Sdelphij# define CTX_TEST 0x1
129296465Sdelphij    int flags;
130296465Sdelphij    X509 *issuer_cert;
131296465Sdelphij    X509 *subject_cert;
132296465Sdelphij    X509_REQ *subject_req;
133296465Sdelphij    X509_CRL *crl;
134296465Sdelphij    X509V3_CONF_METHOD *db_meth;
135296465Sdelphij    void *db;
13655714Skris/* Maybe more here */
13755714Skris};
13855714Skris
13955714Skristypedef struct v3_ext_method X509V3_EXT_METHOD;
14055714Skris
14168651SkrisDECLARE_STACK_OF(X509V3_EXT_METHOD)
14268651Skris
14355714Skris/* ext_flags values */
144296465Sdelphij# define X509V3_EXT_DYNAMIC      0x1
145296465Sdelphij# define X509V3_EXT_CTX_DEP      0x2
146296465Sdelphij# define X509V3_EXT_MULTILINE    0x4
14755714Skris
14855714Skristypedef BIT_STRING_BITNAME ENUMERATED_NAMES;
14955714Skris
15055714Skristypedef struct BASIC_CONSTRAINTS_st {
151296465Sdelphij    int ca;
152296465Sdelphij    ASN1_INTEGER *pathlen;
15355714Skris} BASIC_CONSTRAINTS;
15455714Skris
15555714Skristypedef struct PKEY_USAGE_PERIOD_st {
156296465Sdelphij    ASN1_GENERALIZEDTIME *notBefore;
157296465Sdelphij    ASN1_GENERALIZEDTIME *notAfter;
15855714Skris} PKEY_USAGE_PERIOD;
15955714Skris
16059191Skristypedef struct otherName_st {
161296465Sdelphij    ASN1_OBJECT *type_id;
162296465Sdelphij    ASN1_TYPE *value;
16359191Skris} OTHERNAME;
16459191Skris
165109998Smarkmtypedef struct EDIPartyName_st {
166296465Sdelphij    ASN1_STRING *nameAssigner;
167296465Sdelphij    ASN1_STRING *partyName;
168109998Smarkm} EDIPARTYNAME;
169109998Smarkm
17055714Skristypedef struct GENERAL_NAME_st {
171296465Sdelphij# define GEN_OTHERNAME   0
172296465Sdelphij# define GEN_EMAIL       1
173296465Sdelphij# define GEN_DNS         2
174296465Sdelphij# define GEN_X400        3
175296465Sdelphij# define GEN_DIRNAME     4
176296465Sdelphij# define GEN_EDIPARTY    5
177296465Sdelphij# define GEN_URI         6
178296465Sdelphij# define GEN_IPADD       7
179296465Sdelphij# define GEN_RID         8
180296465Sdelphij    int type;
181296465Sdelphij    union {
182296465Sdelphij        char *ptr;
183296465Sdelphij        OTHERNAME *otherName;   /* otherName */
184296465Sdelphij        ASN1_IA5STRING *rfc822Name;
185296465Sdelphij        ASN1_IA5STRING *dNSName;
186296465Sdelphij        ASN1_TYPE *x400Address;
187296465Sdelphij        X509_NAME *directoryName;
188296465Sdelphij        EDIPARTYNAME *ediPartyName;
189296465Sdelphij        ASN1_IA5STRING *uniformResourceIdentifier;
190296465Sdelphij        ASN1_OCTET_STRING *iPAddress;
191296465Sdelphij        ASN1_OBJECT *registeredID;
192296465Sdelphij        /* Old names */
193296465Sdelphij        ASN1_OCTET_STRING *ip;  /* iPAddress */
194296465Sdelphij        X509_NAME *dirn;        /* dirn */
195296465Sdelphij        ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,
196296465Sdelphij                                 * uniformResourceIdentifier */
197296465Sdelphij        ASN1_OBJECT *rid;       /* registeredID */
198296465Sdelphij        ASN1_TYPE *other;       /* x400Address */
199296465Sdelphij    } d;
20055714Skris} GENERAL_NAME;
20155714Skris
202109998Smarkmtypedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
203109998Smarkm
20459191Skristypedef struct ACCESS_DESCRIPTION_st {
205296465Sdelphij    ASN1_OBJECT *method;
206296465Sdelphij    GENERAL_NAME *location;
20759191Skris} ACCESS_DESCRIPTION;
20859191Skris
209109998Smarkmtypedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
210109998Smarkm
211109998Smarkmtypedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
212109998Smarkm
21355714SkrisDECLARE_STACK_OF(GENERAL_NAME)
21455714SkrisDECLARE_ASN1_SET_OF(GENERAL_NAME)
21555714Skris
21659191SkrisDECLARE_STACK_OF(ACCESS_DESCRIPTION)
21759191SkrisDECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)
21859191Skris
21955714Skristypedef struct DIST_POINT_NAME_st {
220296465Sdelphij    int type;
221296465Sdelphij    union {
222296465Sdelphij        GENERAL_NAMES *fullname;
223296465Sdelphij        STACK_OF(X509_NAME_ENTRY) *relativename;
224296465Sdelphij    } name;
22555714Skris} DIST_POINT_NAME;
22655714Skris
22755714Skristypedef struct DIST_POINT_st {
228296465Sdelphij    DIST_POINT_NAME *distpoint;
229296465Sdelphij    ASN1_BIT_STRING *reasons;
230296465Sdelphij    GENERAL_NAMES *CRLissuer;
23155714Skris} DIST_POINT;
23255714Skris
233109998Smarkmtypedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;
234109998Smarkm
23555714SkrisDECLARE_STACK_OF(DIST_POINT)
23655714SkrisDECLARE_ASN1_SET_OF(DIST_POINT)
23755714Skris
23855714Skristypedef struct AUTHORITY_KEYID_st {
239296465Sdelphij    ASN1_OCTET_STRING *keyid;
240296465Sdelphij    GENERAL_NAMES *issuer;
241296465Sdelphij    ASN1_INTEGER *serial;
24255714Skris} AUTHORITY_KEYID;
24355714Skris
24455714Skris/* Strong extranet structures */
24555714Skris
24655714Skristypedef struct SXNET_ID_st {
247296465Sdelphij    ASN1_INTEGER *zone;
248296465Sdelphij    ASN1_OCTET_STRING *user;
24955714Skris} SXNETID;
25055714Skris
25155714SkrisDECLARE_STACK_OF(SXNETID)
25255714SkrisDECLARE_ASN1_SET_OF(SXNETID)
25355714Skris
25455714Skristypedef struct SXNET_st {
255296465Sdelphij    ASN1_INTEGER *version;
256296465Sdelphij    STACK_OF(SXNETID) *ids;
25755714Skris} SXNET;
25855714Skris
25955714Skristypedef struct NOTICEREF_st {
260296465Sdelphij    ASN1_STRING *organization;
261296465Sdelphij    STACK_OF(ASN1_INTEGER) *noticenos;
26255714Skris} NOTICEREF;
26355714Skris
26455714Skristypedef struct USERNOTICE_st {
265296465Sdelphij    NOTICEREF *noticeref;
266296465Sdelphij    ASN1_STRING *exptext;
26755714Skris} USERNOTICE;
26855714Skris
26955714Skristypedef struct POLICYQUALINFO_st {
270296465Sdelphij    ASN1_OBJECT *pqualid;
271296465Sdelphij    union {
272296465Sdelphij        ASN1_IA5STRING *cpsuri;
273296465Sdelphij        USERNOTICE *usernotice;
274296465Sdelphij        ASN1_TYPE *other;
275296465Sdelphij    } d;
27655714Skris} POLICYQUALINFO;
27755714Skris
27855714SkrisDECLARE_STACK_OF(POLICYQUALINFO)
27955714SkrisDECLARE_ASN1_SET_OF(POLICYQUALINFO)
28055714Skris
28155714Skristypedef struct POLICYINFO_st {
282296465Sdelphij    ASN1_OBJECT *policyid;
283296465Sdelphij    STACK_OF(POLICYQUALINFO) *qualifiers;
28455714Skris} POLICYINFO;
28555714Skris
286109998Smarkmtypedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;
287109998Smarkm
28855714SkrisDECLARE_STACK_OF(POLICYINFO)
28955714SkrisDECLARE_ASN1_SET_OF(POLICYINFO)
29055714Skris
291160814Ssimontypedef struct POLICY_MAPPING_st {
292296465Sdelphij    ASN1_OBJECT *issuerDomainPolicy;
293296465Sdelphij    ASN1_OBJECT *subjectDomainPolicy;
294160814Ssimon} POLICY_MAPPING;
295160814Ssimon
296160814SsimonDECLARE_STACK_OF(POLICY_MAPPING)
297160814Ssimon
298160814Ssimontypedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;
299160814Ssimon
300160814Ssimontypedef struct GENERAL_SUBTREE_st {
301296465Sdelphij    GENERAL_NAME *base;
302296465Sdelphij    ASN1_INTEGER *minimum;
303296465Sdelphij    ASN1_INTEGER *maximum;
304160814Ssimon} GENERAL_SUBTREE;
305160814Ssimon
306160814SsimonDECLARE_STACK_OF(GENERAL_SUBTREE)
307160814Ssimon
308160814Ssimontypedef struct NAME_CONSTRAINTS_st {
309296465Sdelphij    STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
310296465Sdelphij    STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
311160814Ssimon} NAME_CONSTRAINTS;
312160814Ssimon
313160814Ssimontypedef struct POLICY_CONSTRAINTS_st {
314296465Sdelphij    ASN1_INTEGER *requireExplicitPolicy;
315296465Sdelphij    ASN1_INTEGER *inhibitPolicyMapping;
316160814Ssimon} POLICY_CONSTRAINTS;
317160814Ssimon
318160814Ssimon/* Proxy certificate structures, see RFC 3820 */
319296465Sdelphijtypedef struct PROXY_POLICY_st {
320296465Sdelphij    ASN1_OBJECT *policyLanguage;
321296465Sdelphij    ASN1_OCTET_STRING *policy;
322296465Sdelphij} PROXY_POLICY;
323160814Ssimon
324296465Sdelphijtypedef struct PROXY_CERT_INFO_EXTENSION_st {
325296465Sdelphij    ASN1_INTEGER *pcPathLengthConstraint;
326296465Sdelphij    PROXY_POLICY *proxyPolicy;
327296465Sdelphij} PROXY_CERT_INFO_EXTENSION;
328160814Ssimon
329160814SsimonDECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
330160814SsimonDECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)
331160814Ssimon
332296465Sdelphij# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
33355714Skris",name:", val->name, ",value:", val->value);
33455714Skris
335296465Sdelphij# define X509V3_set_ctx_test(ctx) \
336296465Sdelphij                        X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
337296465Sdelphij# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
33855714Skris
339296465Sdelphij# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
340296465Sdelphij                        0,0,0,0, \
341296465Sdelphij                        0,0, \
342296465Sdelphij                        (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
343296465Sdelphij                        (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
344296465Sdelphij                        NULL, NULL, \
345296465Sdelphij                        table}
34655714Skris
347296465Sdelphij# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
348296465Sdelphij                        0,0,0,0, \
349296465Sdelphij                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
350296465Sdelphij                        (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
351296465Sdelphij                        0,0,0,0, \
352296465Sdelphij                        NULL}
35355714Skris
354296465Sdelphij# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
35555714Skris
35659191Skris/* X509_PURPOSE stuff */
35759191Skris
358296465Sdelphij# define EXFLAG_BCONS            0x1
359296465Sdelphij# define EXFLAG_KUSAGE           0x2
360296465Sdelphij# define EXFLAG_XKUSAGE          0x4
361296465Sdelphij# define EXFLAG_NSCERT           0x8
36259191Skris
363296465Sdelphij# define EXFLAG_CA               0x10
364194206Ssimon/* Really self issued not necessarily self signed */
365296465Sdelphij# define EXFLAG_SI               0x20
366296465Sdelphij# define EXFLAG_SS               0x20
367296465Sdelphij# define EXFLAG_V1               0x40
368296465Sdelphij# define EXFLAG_INVALID          0x80
369296465Sdelphij# define EXFLAG_SET              0x100
370296465Sdelphij# define EXFLAG_CRITICAL         0x200
371296465Sdelphij# define EXFLAG_PROXY            0x400
37259191Skris
373296465Sdelphij# define EXFLAG_INVALID_POLICY   0x800
374160814Ssimon
375296465Sdelphij# define KU_DIGITAL_SIGNATURE    0x0080
376296465Sdelphij# define KU_NON_REPUDIATION      0x0040
377296465Sdelphij# define KU_KEY_ENCIPHERMENT     0x0020
378296465Sdelphij# define KU_DATA_ENCIPHERMENT    0x0010
379296465Sdelphij# define KU_KEY_AGREEMENT        0x0008
380296465Sdelphij# define KU_KEY_CERT_SIGN        0x0004
381296465Sdelphij# define KU_CRL_SIGN             0x0002
382296465Sdelphij# define KU_ENCIPHER_ONLY        0x0001
383296465Sdelphij# define KU_DECIPHER_ONLY        0x8000
38459191Skris
385296465Sdelphij# define NS_SSL_CLIENT           0x80
386296465Sdelphij# define NS_SSL_SERVER           0x40
387296465Sdelphij# define NS_SMIME                0x20
388296465Sdelphij# define NS_OBJSIGN              0x10
389296465Sdelphij# define NS_SSL_CA               0x04
390296465Sdelphij# define NS_SMIME_CA             0x02
391296465Sdelphij# define NS_OBJSIGN_CA           0x01
392296465Sdelphij# define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)
39359191Skris
394296465Sdelphij# define XKU_SSL_SERVER          0x1
395296465Sdelphij# define XKU_SSL_CLIENT          0x2
396296465Sdelphij# define XKU_SMIME               0x4
397296465Sdelphij# define XKU_CODE_SIGN           0x8
398296465Sdelphij# define XKU_SGC                 0x10
399296465Sdelphij# define XKU_OCSP_SIGN           0x20
400296465Sdelphij# define XKU_TIMESTAMP           0x40
401296465Sdelphij# define XKU_DVCS                0x80
40259191Skris
403296465Sdelphij# define X509_PURPOSE_DYNAMIC    0x1
404296465Sdelphij# define X509_PURPOSE_DYNAMIC_NAME       0x2
40559191Skris
40659191Skristypedef struct x509_purpose_st {
407296465Sdelphij    int purpose;
408296465Sdelphij    int trust;                  /* Default trust ID */
409296465Sdelphij    int flags;
410296465Sdelphij    int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);
411296465Sdelphij    char *name;
412296465Sdelphij    char *sname;
413296465Sdelphij    void *usr_data;
41459191Skris} X509_PURPOSE;
41559191Skris
416296465Sdelphij# define X509_PURPOSE_SSL_CLIENT         1
417296465Sdelphij# define X509_PURPOSE_SSL_SERVER         2
418296465Sdelphij# define X509_PURPOSE_NS_SSL_SERVER      3
419296465Sdelphij# define X509_PURPOSE_SMIME_SIGN         4
420296465Sdelphij# define X509_PURPOSE_SMIME_ENCRYPT      5
421296465Sdelphij# define X509_PURPOSE_CRL_SIGN           6
422296465Sdelphij# define X509_PURPOSE_ANY                7
423296465Sdelphij# define X509_PURPOSE_OCSP_HELPER        8
42459191Skris
425296465Sdelphij# define X509_PURPOSE_MIN                1
426296465Sdelphij# define X509_PURPOSE_MAX                8
42759191Skris
428109998Smarkm/* Flags for X509V3_EXT_print() */
42959191Skris
430296465Sdelphij# define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
431109998Smarkm/* Return error for unknown extensions */
432296465Sdelphij# define X509V3_EXT_DEFAULT              0
433109998Smarkm/* Print error for unknown extensions */
434296465Sdelphij# define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
435109998Smarkm/* ASN1 parse unknown extensions */
436296465Sdelphij# define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
437109998Smarkm/* BIO_dump unknown extensions */
438296465Sdelphij# define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)
43955714Skris
440109998Smarkm/* Flags for X509V3_add1_i2d */
44155714Skris
442296465Sdelphij# define X509V3_ADD_OP_MASK              0xfL
443296465Sdelphij# define X509V3_ADD_DEFAULT              0L
444296465Sdelphij# define X509V3_ADD_APPEND               1L
445296465Sdelphij# define X509V3_ADD_REPLACE              2L
446296465Sdelphij# define X509V3_ADD_REPLACE_EXISTING     3L
447296465Sdelphij# define X509V3_ADD_KEEP_EXISTING        4L
448296465Sdelphij# define X509V3_ADD_DELETE               5L
449296465Sdelphij# define X509V3_ADD_SILENT               0x10
45055714Skris
451109998SmarkmDECLARE_STACK_OF(X509_PURPOSE)
45255714Skris
453109998SmarkmDECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)
454109998Smarkm
455109998SmarkmDECLARE_ASN1_FUNCTIONS(SXNET)
456109998SmarkmDECLARE_ASN1_FUNCTIONS(SXNETID)
457109998Smarkm
458296465Sdelphijint SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen);
459296465Sdelphijint SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user,
460296465Sdelphij                       int userlen);
461296465Sdelphijint SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user,
462296465Sdelphij                         int userlen);
46355714Skris
46455714SkrisASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone);
46555714SkrisASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
46655714SkrisASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);
46755714Skris
468109998SmarkmDECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)
46955714Skris
470109998SmarkmDECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)
47155714Skris
472109998SmarkmDECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
473109998Smarkm
474160814SsimonASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
475296465Sdelphij                                     X509V3_CTX *ctx,
476296465Sdelphij                                     STACK_OF(CONF_VALUE) *nval);
477160814SsimonSTACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
478296465Sdelphij                                          ASN1_BIT_STRING *bits,
479296465Sdelphij                                          STACK_OF(CONF_VALUE) *extlist);
480160814Ssimon
481296465SdelphijSTACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
482296465Sdelphij                                       GENERAL_NAME *gen,
483296465Sdelphij                                       STACK_OF(CONF_VALUE) *ret);
484109998Smarkmint GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
485109998Smarkm
486109998SmarkmDECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)
487109998Smarkm
48855714SkrisSTACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
489296465Sdelphij                                        GENERAL_NAMES *gen,
490296465Sdelphij                                        STACK_OF(CONF_VALUE) *extlist);
491296465SdelphijGENERAL_NAMES *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
492296465Sdelphij                                 STACK_OF(CONF_VALUE) *nval);
49355714Skris
494109998SmarkmDECLARE_ASN1_FUNCTIONS(OTHERNAME)
495109998SmarkmDECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
49659191Skris
497296465Sdelphijchar *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
498296465Sdelphij                            ASN1_OCTET_STRING *ia5);
499296465SdelphijASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
500296465Sdelphij                                         X509V3_CTX *ctx, char *str);
50155714Skris
502109998SmarkmDECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
503296465Sdelphijint i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a);
50455714Skris
505109998SmarkmDECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
506109998SmarkmDECLARE_ASN1_FUNCTIONS(POLICYINFO)
507109998SmarkmDECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
508109998SmarkmDECLARE_ASN1_FUNCTIONS(USERNOTICE)
509109998SmarkmDECLARE_ASN1_FUNCTIONS(NOTICEREF)
51055714Skris
511109998SmarkmDECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
512109998SmarkmDECLARE_ASN1_FUNCTIONS(DIST_POINT)
513109998SmarkmDECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
51455714Skris
515109998SmarkmDECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
516109998SmarkmDECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
51755714Skris
518160814SsimonDECLARE_ASN1_ITEM(POLICY_MAPPING)
519160814SsimonDECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
520160814SsimonDECLARE_ASN1_ITEM(POLICY_MAPPINGS)
521160814Ssimon
522160814SsimonDECLARE_ASN1_ITEM(GENERAL_SUBTREE)
523160814SsimonDECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
524160814Ssimon
525160814SsimonDECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
526160814SsimonDECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
527160814Ssimon
528160814SsimonDECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
529160814SsimonDECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)
530160814Ssimon
531296465Sdelphij# ifdef HEADER_CONF_H
532160814SsimonGENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
533296465Sdelphij                               CONF_VALUE *cnf);
534296465SdelphijGENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
535296465Sdelphij                                  X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
536296465Sdelphij                                  CONF_VALUE *cnf, int is_nc);
53755714Skrisvoid X509V3_conf_free(CONF_VALUE *val);
538109998Smarkm
539296465SdelphijX509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
540296465Sdelphij                                     char *value);
541296465SdelphijX509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name,
542296465Sdelphij                                 char *value);
543296465Sdelphijint X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section,
544296465Sdelphij                            STACK_OF(X509_EXTENSION) **sk);
545296465Sdelphijint X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
546296465Sdelphij                         X509 *cert);
547296465Sdelphijint X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
548296465Sdelphij                             X509_REQ *req);
549296465Sdelphijint X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,
550296465Sdelphij                             X509_CRL *crl);
551109998Smarkm
552296465SdelphijX509_EXTENSION *X509V3_EXT_conf_nid(LHASH *conf, X509V3_CTX *ctx, int ext_nid,
553296465Sdelphij                                    char *value);
554296465SdelphijX509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name,
555296465Sdelphij                                char *value);
556296465Sdelphijint X509V3_EXT_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
557296465Sdelphij                        X509 *cert);
558296465Sdelphijint X509V3_EXT_REQ_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
559296465Sdelphij                            X509_REQ *req);
560296465Sdelphijint X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
561296465Sdelphij                            X509_CRL *crl);
562109998Smarkm
56355714Skrisint X509V3_add_value_bool_nf(char *name, int asn1_bool,
564296465Sdelphij                             STACK_OF(CONF_VALUE) **extlist);
56555714Skrisint X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
56655714Skrisint X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
567109998Smarkmvoid X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
56855714Skrisvoid X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash);
569296465Sdelphij# endif
57055714Skris
571296465Sdelphijchar *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
572296465SdelphijSTACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section);
57355714Skrisvoid X509V3_string_free(X509V3_CTX *ctx, char *str);
574296465Sdelphijvoid X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
57555714Skrisvoid X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
576296465Sdelphij                    X509_REQ *req, X509_CRL *crl, int flags);
57755714Skris
57855714Skrisint X509V3_add_value(const char *name, const char *value,
579296465Sdelphij                     STACK_OF(CONF_VALUE) **extlist);
58055714Skrisint X509V3_add_value_uchar(const char *name, const unsigned char *value,
581296465Sdelphij                           STACK_OF(CONF_VALUE) **extlist);
58255714Skrisint X509V3_add_value_bool(const char *name, int asn1_bool,
583296465Sdelphij                          STACK_OF(CONF_VALUE) **extlist);
58455714Skrisint X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
585296465Sdelphij                         STACK_OF(CONF_VALUE) **extlist);
586296465Sdelphijchar *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
587296465SdelphijASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
588296465Sdelphijchar *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
589296465Sdelphijchar *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
590296465Sdelphij                                ASN1_ENUMERATED *aint);
59155714Skrisint X509V3_EXT_add(X509V3_EXT_METHOD *ext);
59255714Skrisint X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
59355714Skrisint X509V3_EXT_add_alias(int nid_to, int nid_from);
59455714Skrisvoid X509V3_EXT_cleanup(void);
59555714Skris
59655714SkrisX509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
59755714SkrisX509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
59855714Skrisint X509V3_add_standard_extensions(void);
599109998SmarkmSTACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
60055714Skrisvoid *X509V3_EXT_d2i(X509_EXTENSION *ext);
601296465Sdelphijvoid *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
602296465Sdelphij                     int *idx);
60359191Skris
60455714SkrisX509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
605296465Sdelphijint X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
606296465Sdelphij                    int crit, unsigned long flags);
60755714Skris
60855714Skrischar *hex_to_string(unsigned char *buffer, long len);
60955714Skrisunsigned char *string_to_hex(char *str, long *len);
61055714Skrisint name_cmp(const char *name, const char *cmp);
61155714Skris
61255714Skrisvoid X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
613296465Sdelphij                        int ml);
614296465Sdelphijint X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,
615296465Sdelphij                     int indent);
61655714Skrisint X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
61755714Skris
618296465Sdelphijint X509V3_extensions_print(BIO *out, char *title,
619296465Sdelphij                            STACK_OF(X509_EXTENSION) *exts,
620296465Sdelphij                            unsigned long flag, int indent);
621109998Smarkm
622160814Ssimonint X509_check_ca(X509 *x);
62359191Skrisint X509_check_purpose(X509 *x, int id, int ca);
624109998Smarkmint X509_supported_extension(X509_EXTENSION *ex);
625109998Smarkmint X509_PURPOSE_set(int *p, int purpose);
62668651Skrisint X509_check_issued(X509 *issuer, X509 *subject);
62759191Skrisint X509_PURPOSE_get_count(void);
628296465SdelphijX509_PURPOSE *X509_PURPOSE_get0(int idx);
62959191Skrisint X509_PURPOSE_get_by_sname(char *sname);
63059191Skrisint X509_PURPOSE_get_by_id(int id);
63159191Skrisint X509_PURPOSE_add(int id, int trust, int flags,
632296465Sdelphij                     int (*ck) (const X509_PURPOSE *, const X509 *, int),
633296465Sdelphij                     char *name, char *sname, void *arg);
63459191Skrischar *X509_PURPOSE_get0_name(X509_PURPOSE *xp);
63559191Skrischar *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);
63659191Skrisint X509_PURPOSE_get_trust(X509_PURPOSE *xp);
63759191Skrisvoid X509_PURPOSE_cleanup(void);
63859191Skrisint X509_PURPOSE_get_id(X509_PURPOSE *);
63959191Skris
64068651SkrisSTACK *X509_get1_email(X509 *x);
64168651SkrisSTACK *X509_REQ_get1_email(X509_REQ *x);
642296465Sdelphijvoid X509_email_free(STACK * sk);
643194206SsimonSTACK *X509_get1_ocsp(X509 *x);
64468651Skris
645160814SsimonASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
646160814SsimonASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
647167612Ssimonint a2i_ipadd(unsigned char *ipout, const char *ipasc);
648296465Sdelphijint X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,
649296465Sdelphij                             unsigned long chtype);
65068651Skris
651160814Ssimonvoid X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
652160814Ssimon
653296465Sdelphij# ifndef OPENSSL_NO_RFC3779
654167612Ssimon
655167612Ssimontypedef struct ASRange_st {
656296465Sdelphij    ASN1_INTEGER *min, *max;
657167612Ssimon} ASRange;
658167612Ssimon
659296465Sdelphij#  define ASIdOrRange_id          0
660296465Sdelphij#  define ASIdOrRange_range       1
661167612Ssimon
662167612Ssimontypedef struct ASIdOrRange_st {
663296465Sdelphij    int type;
664296465Sdelphij    union {
665296465Sdelphij        ASN1_INTEGER *id;
666296465Sdelphij        ASRange *range;
667296465Sdelphij    } u;
668167612Ssimon} ASIdOrRange;
669167612Ssimon
670167612Ssimontypedef STACK_OF(ASIdOrRange) ASIdOrRanges;
671167612SsimonDECLARE_STACK_OF(ASIdOrRange)
672167612Ssimon
673296465Sdelphij#  define ASIdentifierChoice_inherit              0
674296465Sdelphij#  define ASIdentifierChoice_asIdsOrRanges        1
675167612Ssimon
676167612Ssimontypedef struct ASIdentifierChoice_st {
677296465Sdelphij    int type;
678296465Sdelphij    union {
679296465Sdelphij        ASN1_NULL *inherit;
680296465Sdelphij        ASIdOrRanges *asIdsOrRanges;
681296465Sdelphij    } u;
682167612Ssimon} ASIdentifierChoice;
683167612Ssimon
684167612Ssimontypedef struct ASIdentifiers_st {
685296465Sdelphij    ASIdentifierChoice *asnum, *rdi;
686167612Ssimon} ASIdentifiers;
687167612Ssimon
688167612SsimonDECLARE_ASN1_FUNCTIONS(ASRange)
689167612SsimonDECLARE_ASN1_FUNCTIONS(ASIdOrRange)
690167612SsimonDECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
691167612SsimonDECLARE_ASN1_FUNCTIONS(ASIdentifiers)
692167612Ssimon
693167612Ssimontypedef struct IPAddressRange_st {
694296465Sdelphij    ASN1_BIT_STRING *min, *max;
695167612Ssimon} IPAddressRange;
696167612Ssimon
697296465Sdelphij#  define IPAddressOrRange_addressPrefix  0
698296465Sdelphij#  define IPAddressOrRange_addressRange   1
699167612Ssimon
700167612Ssimontypedef struct IPAddressOrRange_st {
701296465Sdelphij    int type;
702296465Sdelphij    union {
703296465Sdelphij        ASN1_BIT_STRING *addressPrefix;
704296465Sdelphij        IPAddressRange *addressRange;
705296465Sdelphij    } u;
706167612Ssimon} IPAddressOrRange;
707167612Ssimon
708167612Ssimontypedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
709167612SsimonDECLARE_STACK_OF(IPAddressOrRange)
710167612Ssimon
711296465Sdelphij#  define IPAddressChoice_inherit                 0
712296465Sdelphij#  define IPAddressChoice_addressesOrRanges       1
713167612Ssimon
714167612Ssimontypedef struct IPAddressChoice_st {
715296465Sdelphij    int type;
716296465Sdelphij    union {
717296465Sdelphij        ASN1_NULL *inherit;
718296465Sdelphij        IPAddressOrRanges *addressesOrRanges;
719296465Sdelphij    } u;
720167612Ssimon} IPAddressChoice;
721167612Ssimon
722167612Ssimontypedef struct IPAddressFamily_st {
723296465Sdelphij    ASN1_OCTET_STRING *addressFamily;
724296465Sdelphij    IPAddressChoice *ipAddressChoice;
725167612Ssimon} IPAddressFamily;
726167612Ssimon
727167612Ssimontypedef STACK_OF(IPAddressFamily) IPAddrBlocks;
728167612SsimonDECLARE_STACK_OF(IPAddressFamily)
729167612Ssimon
730167612SsimonDECLARE_ASN1_FUNCTIONS(IPAddressRange)
731167612SsimonDECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
732167612SsimonDECLARE_ASN1_FUNCTIONS(IPAddressChoice)
733167612SsimonDECLARE_ASN1_FUNCTIONS(IPAddressFamily)
734167612Ssimon
735167612Ssimon/*
736167612Ssimon * API tag for elements of the ASIdentifer SEQUENCE.
737167612Ssimon */
738296465Sdelphij#  define V3_ASID_ASNUM   0
739296465Sdelphij#  define V3_ASID_RDI     1
740167612Ssimon
741167612Ssimon/*
742167612Ssimon * AFI values, assigned by IANA.  It'd be nice to make the AFI
743167612Ssimon * handling code totally generic, but there are too many little things
744167612Ssimon * that would need to be defined for other address families for it to
745167612Ssimon * be worth the trouble.
746167612Ssimon */
747296465Sdelphij#  define IANA_AFI_IPV4   1
748296465Sdelphij#  define IANA_AFI_IPV6   2
749167612Ssimon
750167612Ssimon/*
751167612Ssimon * Utilities to construct and extract values from RFC3779 extensions,
752167612Ssimon * since some of the encodings (particularly for IP address prefixes
753167612Ssimon * and ranges) are a bit tedious to work with directly.
754167612Ssimon */
755167612Ssimonint v3_asid_add_inherit(ASIdentifiers *asid, int which);
756167612Ssimonint v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
757296465Sdelphij                            ASN1_INTEGER *min, ASN1_INTEGER *max);
758167612Ssimonint v3_addr_add_inherit(IPAddrBlocks *addr,
759296465Sdelphij                        const unsigned afi, const unsigned *safi);
760167612Ssimonint v3_addr_add_prefix(IPAddrBlocks *addr,
761296465Sdelphij                       const unsigned afi, const unsigned *safi,
762296465Sdelphij                       unsigned char *a, const int prefixlen);
763167612Ssimonint v3_addr_add_range(IPAddrBlocks *addr,
764296465Sdelphij                      const unsigned afi, const unsigned *safi,
765296465Sdelphij                      unsigned char *min, unsigned char *max);
766167612Ssimonunsigned v3_addr_get_afi(const IPAddressFamily *f);
767167612Ssimonint v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
768296465Sdelphij                      unsigned char *min, unsigned char *max,
769296465Sdelphij                      const int length);
770167612Ssimon
771167612Ssimon/*
772167612Ssimon * Canonical forms.
773167612Ssimon */
774167612Ssimonint v3_asid_is_canonical(ASIdentifiers *asid);
775167612Ssimonint v3_addr_is_canonical(IPAddrBlocks *addr);
776167612Ssimonint v3_asid_canonize(ASIdentifiers *asid);
777167612Ssimonint v3_addr_canonize(IPAddrBlocks *addr);
778167612Ssimon
779167612Ssimon/*
780167612Ssimon * Tests for inheritance and containment.
781167612Ssimon */
782167612Ssimonint v3_asid_inherits(ASIdentifiers *asid);
783167612Ssimonint v3_addr_inherits(IPAddrBlocks *addr);
784167612Ssimonint v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
785167612Ssimonint v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);
786167612Ssimon
787167612Ssimon/*
788167612Ssimon * Check whether RFC 3779 extensions nest properly in chains.
789167612Ssimon */
790167612Ssimonint v3_asid_validate_path(X509_STORE_CTX *);
791167612Ssimonint v3_addr_validate_path(X509_STORE_CTX *);
792167612Ssimonint v3_asid_validate_resource_set(STACK_OF(X509) *chain,
793296465Sdelphij                                  ASIdentifiers *ext, int allow_inheritance);
794167612Ssimonint v3_addr_validate_resource_set(STACK_OF(X509) *chain,
795296465Sdelphij                                  IPAddrBlocks *ext, int allow_inheritance);
796167612Ssimon
797296465Sdelphij# endif                         /* OPENSSL_NO_RFC3779 */
798167612Ssimon
79955714Skris/* BEGIN ERROR CODES */
800296465Sdelphij/*
801296465Sdelphij * The following lines are auto generated by the script mkerr.pl. Any changes
80255714Skris * made after this point may be overwritten when the script is next run.
80355714Skris */
80489837Skrisvoid ERR_load_X509V3_strings(void);
80555714Skris
80655714Skris/* Error codes for the X509V3 functions. */
80755714Skris
80855714Skris/* Function codes. */
809296465Sdelphij# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE             156
810296465Sdelphij# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL         157
811296465Sdelphij# define X509V3_F_COPY_EMAIL                              122
812296465Sdelphij# define X509V3_F_COPY_ISSUER                             123
813296465Sdelphij# define X509V3_F_DO_DIRNAME                              144
814296465Sdelphij# define X509V3_F_DO_EXT_CONF                             124
815296465Sdelphij# define X509V3_F_DO_EXT_I2D                              135
816296465Sdelphij# define X509V3_F_DO_EXT_NCONF                            151
817296465Sdelphij# define X509V3_F_DO_I2V_NAME_CONSTRAINTS                 148
818296465Sdelphij# define X509V3_F_HEX_TO_STRING                           111
819296465Sdelphij# define X509V3_F_I2S_ASN1_ENUMERATED                     121
820296465Sdelphij# define X509V3_F_I2S_ASN1_IA5STRING                      149
821296465Sdelphij# define X509V3_F_I2S_ASN1_INTEGER                        120
822296465Sdelphij# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS               138
823296465Sdelphij# define X509V3_F_NOTICE_SECTION                          132
824296465Sdelphij# define X509V3_F_NREF_NOS                                133
825296465Sdelphij# define X509V3_F_POLICY_SECTION                          131
826296465Sdelphij# define X509V3_F_PROCESS_PCI_VALUE                       150
827296465Sdelphij# define X509V3_F_R2I_CERTPOL                             130
828296465Sdelphij# define X509V3_F_R2I_PCI                                 155
829296465Sdelphij# define X509V3_F_S2I_ASN1_IA5STRING                      100
830296465Sdelphij# define X509V3_F_S2I_ASN1_INTEGER                        108
831296465Sdelphij# define X509V3_F_S2I_ASN1_OCTET_STRING                   112
832296465Sdelphij# define X509V3_F_S2I_ASN1_SKEY_ID                        114
833296465Sdelphij# define X509V3_F_S2I_SKEY_ID                             115
834296465Sdelphij# define X509V3_F_STRING_TO_HEX                           113
835296465Sdelphij# define X509V3_F_SXNET_ADD_ID_ASC                        125
836296465Sdelphij# define X509V3_F_SXNET_ADD_ID_INTEGER                    126
837296465Sdelphij# define X509V3_F_SXNET_ADD_ID_ULONG                      127
838296465Sdelphij# define X509V3_F_SXNET_GET_ID_ASC                        128
839296465Sdelphij# define X509V3_F_SXNET_GET_ID_ULONG                      129
840296465Sdelphij# define X509V3_F_V2I_ASIDENTIFIERS                       158
841296465Sdelphij# define X509V3_F_V2I_ASN1_BIT_STRING                     101
842296465Sdelphij# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS               139
843296465Sdelphij# define X509V3_F_V2I_AUTHORITY_KEYID                     119
844296465Sdelphij# define X509V3_F_V2I_BASIC_CONSTRAINTS                   102
845296465Sdelphij# define X509V3_F_V2I_CRLD                                134
846296465Sdelphij# define X509V3_F_V2I_EXTENDED_KEY_USAGE                  103
847296465Sdelphij# define X509V3_F_V2I_GENERAL_NAMES                       118
848296465Sdelphij# define X509V3_F_V2I_GENERAL_NAME_EX                     117
849296465Sdelphij# define X509V3_F_V2I_IPADDRBLOCKS                        159
850296465Sdelphij# define X509V3_F_V2I_ISSUER_ALT                          153
851296465Sdelphij# define X509V3_F_V2I_NAME_CONSTRAINTS                    147
852296465Sdelphij# define X509V3_F_V2I_POLICY_CONSTRAINTS                  146
853296465Sdelphij# define X509V3_F_V2I_POLICY_MAPPINGS                     145
854296465Sdelphij# define X509V3_F_V2I_SUBJECT_ALT                         154
855296465Sdelphij# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL          160
856296465Sdelphij# define X509V3_F_V3_GENERIC_EXTENSION                    116
857296465Sdelphij# define X509V3_F_X509V3_ADD1_I2D                         140
858296465Sdelphij# define X509V3_F_X509V3_ADD_VALUE                        105
859296465Sdelphij# define X509V3_F_X509V3_EXT_ADD                          104
860296465Sdelphij# define X509V3_F_X509V3_EXT_ADD_ALIAS                    106
861296465Sdelphij# define X509V3_F_X509V3_EXT_CONF                         107
862296465Sdelphij# define X509V3_F_X509V3_EXT_I2D                          136
863296465Sdelphij# define X509V3_F_X509V3_EXT_NCONF                        152
864296465Sdelphij# define X509V3_F_X509V3_GET_SECTION                      142
865296465Sdelphij# define X509V3_F_X509V3_GET_STRING                       143
866296465Sdelphij# define X509V3_F_X509V3_GET_VALUE_BOOL                   110
867296465Sdelphij# define X509V3_F_X509V3_PARSE_LIST                       109
868296465Sdelphij# define X509V3_F_X509_PURPOSE_ADD                        137
869296465Sdelphij# define X509V3_F_X509_PURPOSE_SET                        141
87055714Skris
87155714Skris/* Reason codes. */
872296465Sdelphij# define X509V3_R_BAD_IP_ADDRESS                          118
873296465Sdelphij# define X509V3_R_BAD_OBJECT                              119
874296465Sdelphij# define X509V3_R_BN_DEC2BN_ERROR                         100
875296465Sdelphij# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR                101
876296465Sdelphij# define X509V3_R_DIRNAME_ERROR                           149
877296465Sdelphij# define X509V3_R_DUPLICATE_ZONE_ID                       133
878296465Sdelphij# define X509V3_R_ERROR_CONVERTING_ZONE                   131
879296465Sdelphij# define X509V3_R_ERROR_CREATING_EXTENSION                144
880296465Sdelphij# define X509V3_R_ERROR_IN_EXTENSION                      128
881296465Sdelphij# define X509V3_R_EXPECTED_A_SECTION_NAME                 137
882296465Sdelphij# define X509V3_R_EXTENSION_EXISTS                        145
883296465Sdelphij# define X509V3_R_EXTENSION_NAME_ERROR                    115
884296465Sdelphij# define X509V3_R_EXTENSION_NOT_FOUND                     102
885296465Sdelphij# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED         103
886296465Sdelphij# define X509V3_R_EXTENSION_VALUE_ERROR                   116
887296465Sdelphij# define X509V3_R_ILLEGAL_EMPTY_EXTENSION                 151
888296465Sdelphij# define X509V3_R_ILLEGAL_HEX_DIGIT                       113
889296465Sdelphij# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG             152
890296465Sdelphij# define X509V3_R_INVALID_ASNUMBER                        160
891296465Sdelphij# define X509V3_R_INVALID_ASRANGE                         161
892296465Sdelphij# define X509V3_R_INVALID_BOOLEAN_STRING                  104
893296465Sdelphij# define X509V3_R_INVALID_EXTENSION_STRING                105
894296465Sdelphij# define X509V3_R_INVALID_INHERITANCE                     162
895296465Sdelphij# define X509V3_R_INVALID_IPADDRESS                       163
896296465Sdelphij# define X509V3_R_INVALID_NAME                            106
897296465Sdelphij# define X509V3_R_INVALID_NULL_ARGUMENT                   107
898296465Sdelphij# define X509V3_R_INVALID_NULL_NAME                       108
899296465Sdelphij# define X509V3_R_INVALID_NULL_VALUE                      109
900296465Sdelphij# define X509V3_R_INVALID_NUMBER                          140
901296465Sdelphij# define X509V3_R_INVALID_NUMBERS                         141
902296465Sdelphij# define X509V3_R_INVALID_OBJECT_IDENTIFIER               110
903296465Sdelphij# define X509V3_R_INVALID_OPTION                          138
904296465Sdelphij# define X509V3_R_INVALID_POLICY_IDENTIFIER               134
905296465Sdelphij# define X509V3_R_INVALID_PROXY_POLICY_SETTING            153
906296465Sdelphij# define X509V3_R_INVALID_PURPOSE                         146
907296465Sdelphij# define X509V3_R_INVALID_SAFI                            164
908296465Sdelphij# define X509V3_R_INVALID_SECTION                         135
909296465Sdelphij# define X509V3_R_INVALID_SYNTAX                          143
910296465Sdelphij# define X509V3_R_ISSUER_DECODE_ERROR                     126
911296465Sdelphij# define X509V3_R_MISSING_VALUE                           124
912296465Sdelphij# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS           142
913296465Sdelphij# define X509V3_R_NO_CONFIG_DATABASE                      136
914296465Sdelphij# define X509V3_R_NO_ISSUER_CERTIFICATE                   121
915296465Sdelphij# define X509V3_R_NO_ISSUER_DETAILS                       127
916296465Sdelphij# define X509V3_R_NO_POLICY_IDENTIFIER                    139
917296465Sdelphij# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED   154
918296465Sdelphij# define X509V3_R_NO_PUBLIC_KEY                           114
919296465Sdelphij# define X509V3_R_NO_SUBJECT_DETAILS                      125
920296465Sdelphij# define X509V3_R_ODD_NUMBER_OF_DIGITS                    112
921296465Sdelphij# define X509V3_R_OPERATION_NOT_DEFINED                   148
922296465Sdelphij# define X509V3_R_OTHERNAME_ERROR                         147
923296465Sdelphij# define X509V3_R_POLICY_LANGUAGE_ALREADTY_DEFINED        155
924296465Sdelphij# define X509V3_R_POLICY_PATH_LENGTH                      156
925296465Sdelphij# define X509V3_R_POLICY_PATH_LENGTH_ALREADTY_DEFINED     157
926296465Sdelphij# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED   158
927296465Sdelphij# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159
928296465Sdelphij# define X509V3_R_SECTION_NOT_FOUND                       150
929296465Sdelphij# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS            122
930296465Sdelphij# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID              123
931296465Sdelphij# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT             111
932296465Sdelphij# define X509V3_R_UNKNOWN_EXTENSION                       129
933296465Sdelphij# define X509V3_R_UNKNOWN_EXTENSION_NAME                  130
934296465Sdelphij# define X509V3_R_UNKNOWN_OPTION                          120
935296465Sdelphij# define X509V3_R_UNSUPPORTED_OPTION                      117
936296465Sdelphij# define X509V3_R_USER_TOO_LONG                           132
93755714Skris
93855714Skris#ifdef  __cplusplus
93955714Skris}
94055714Skris#endif
94155714Skris#endif
942