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