1 /* $OpenBSD: x509v3.h,v 1.5 2021/09/02 13:48:39 job Exp $ */
2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3  * project 1999.
4  */
5 /* ====================================================================
6  * Copyright (c) 1999-2004 The OpenSSL Project.  All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in
17  *    the documentation and/or other materials provided with the
18  *    distribution.
19  *
20  * 3. All advertising materials mentioning features or use of this
21  *    software must display the following acknowledgment:
22  *    "This product includes software developed by the OpenSSL Project
23  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24  *
25  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26  *    endorse or promote products derived from this software without
27  *    prior written permission. For written permission, please contact
28  *    licensing@OpenSSL.org.
29  *
30  * 5. Products derived from this software may not be called "OpenSSL"
31  *    nor may "OpenSSL" appear in their names without prior written
32  *    permission of the OpenSSL Project.
33  *
34  * 6. Redistributions of any form whatsoever must retain the following
35  *    acknowledgment:
36  *    "This product includes software developed by the OpenSSL Project
37  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38  *
39  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50  * OF THE POSSIBILITY OF SUCH DAMAGE.
51  * ====================================================================
52  *
53  * This product includes cryptographic software written by Eric Young
54  * (eay@cryptsoft.com).  This product includes software written by Tim
55  * Hudson (tjh@cryptsoft.com).
56  *
57  */
58 module libressl_d.openssl.x509v3;
59 
60 
61 private static import core.stdc.config;
62 private static import libressl_d.compat.stdio;
63 private static import libressl_d.openssl.asn1;
64 private static import libressl_d.openssl.err;
65 private static import libressl_d.openssl.ossl_typ;
66 private static import libressl_d.openssl.safestack;
67 private static import libressl_d.openssl.stack;
68 public import libressl_d.openssl.bio;
69 public import libressl_d.openssl.conf;
70 public import libressl_d.openssl.opensslconf;
71 public import libressl_d.openssl.x509;
72 
73 enum HEADER_X509V3_H = true;
74 
75 extern (C):
76 nothrow @nogc:
77 
78 /* Useful typedefs */
79 
80 alias X509V3_EXT_NEW = extern (C) nothrow @nogc void* function();
81 alias X509V3_EXT_FREE = extern (C) nothrow @nogc void function(void*);
82 alias X509V3_EXT_D2I = extern (C) nothrow @nogc void* function(void*, const (ubyte)**, core.stdc.config.c_long);
83 alias X509V3_EXT_I2D = extern (C) nothrow @nogc int function(void*, ubyte**);
84 alias X509V3_EXT_I2V = extern (C) nothrow @nogc libressl_d.openssl.conf.stack_st_CONF_VALUE* function(const (.v3_ext_method)* method, void* ext, libressl_d.openssl.conf.stack_st_CONF_VALUE* extlist);
85 alias X509V3_EXT_V2I = extern (C) nothrow @nogc void* function(const (.v3_ext_method)* method, .v3_ext_ctx* ctx, libressl_d.openssl.conf.stack_st_CONF_VALUE* values);
86 alias X509V3_EXT_I2S = extern (C) nothrow @nogc char* function(const (.v3_ext_method)* method, void* ext);
87 alias X509V3_EXT_S2I = extern (C) nothrow @nogc void* function(const (.v3_ext_method)* method, .v3_ext_ctx* ctx, const (char)* str);
88 alias X509V3_EXT_I2R = extern (C) nothrow @nogc int function(const (.v3_ext_method)* method, void* ext, libressl_d.openssl.bio.BIO* out_, int indent);
89 alias X509V3_EXT_R2I = extern (C) nothrow @nogc void* function(const (.v3_ext_method)* method, .v3_ext_ctx* ctx, const (char)* str);
90 
91 /* V3 extension structure */
92 
93 struct v3_ext_method
94 {
95 	int ext_nid;
96 	int ext_flags;
97 	/* If this is set the following four fields are ignored */
98 	libressl_d.openssl.asn1.ASN1_ITEM_EXP* it;
99 	/* Old style ASN1 calls */
100 	.X509V3_EXT_NEW ext_new;
101 	.X509V3_EXT_FREE ext_free;
102 	.X509V3_EXT_D2I d2i;
103 	.X509V3_EXT_I2D i2d;
104 
105 	/* The following pair is used for string extensions */
106 	.X509V3_EXT_I2S i2s;
107 	.X509V3_EXT_S2I s2i;
108 
109 	/* The following pair is used for multi-valued extensions */
110 	.X509V3_EXT_I2V i2v;
111 	.X509V3_EXT_V2I v2i;
112 
113 	/* The following are used for raw extensions */
114 	.X509V3_EXT_I2R i2r;
115 	.X509V3_EXT_R2I r2i;
116 
117 	/**
118 	 * Any extension specific data
119 	 */
120 	void* usr_data;
121 }
122 
123 struct X509V3_CONF_METHOD_st
124 {
125 	char* function(void* db, const (char)* section, const (char)* value) get_string;
126 	libressl_d.openssl.conf.stack_st_CONF_VALUE* function(void* db, const (char)* section) get_section;
127 	void function(void* db, char* string_) free_string;
128 	void function(void* db, libressl_d.openssl.conf.stack_st_CONF_VALUE* section) free_section;
129 }
130 
131 alias X509V3_CONF_METHOD = .X509V3_CONF_METHOD_st;
132 
133 enum CTX_TEST = 0x01;
134 
135 /**
136  * Context specific info
137  */
138 struct v3_ext_ctx
139 {
140 	int flags;
141 	libressl_d.openssl.ossl_typ.X509* issuer_cert;
142 	libressl_d.openssl.ossl_typ.X509* subject_cert;
143 	libressl_d.openssl.x509.X509_REQ* subject_req;
144 	libressl_d.openssl.ossl_typ.X509_CRL* crl;
145 	.X509V3_CONF_METHOD* db_meth;
146 	void* db;
147 	/* Maybe more here */
148 }
149 
150 alias X509V3_EXT_METHOD = .v3_ext_method;
151 
152 //DECLARE_STACK_OF(X509V3_EXT_METHOD)
153 struct stack_st_X509V3_EXT_METHOD
154 {
155 	libressl_d.openssl.stack._STACK stack;
156 }
157 
158 /* ext_flags values */
159 enum X509V3_EXT_DYNAMIC = 0x01;
160 enum X509V3_EXT_CTX_DEP = 0x02;
161 enum X509V3_EXT_MULTILINE = 0x04;
162 
163 alias ENUMERATED_NAMES = libressl_d.openssl.asn1.BIT_STRING_BITNAME;
164 
165 struct BASIC_CONSTRAINTS_st
166 {
167 	int ca;
168 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* pathlen;
169 }
170 
171 alias BASIC_CONSTRAINTS = .BASIC_CONSTRAINTS_st;
172 
173 struct PKEY_USAGE_PERIOD_st
174 {
175 	libressl_d.openssl.ossl_typ.ASN1_GENERALIZEDTIME* notBefore;
176 	libressl_d.openssl.ossl_typ.ASN1_GENERALIZEDTIME* notAfter;
177 }
178 
179 alias PKEY_USAGE_PERIOD = .PKEY_USAGE_PERIOD_st;
180 
181 struct otherName_st
182 {
183 	libressl_d.openssl.asn1.ASN1_OBJECT* type_id;
184 	libressl_d.openssl.asn1.ASN1_TYPE* value;
185 }
186 
187 alias OTHERNAME = .otherName_st;
188 
189 struct EDIPartyName_st
190 {
191 	libressl_d.openssl.ossl_typ.ASN1_STRING* nameAssigner;
192 	libressl_d.openssl.ossl_typ.ASN1_STRING* partyName;
193 }
194 
195 alias EDIPARTYNAME = .EDIPartyName_st;
196 
197 struct GENERAL_NAME_st
198 {
199 	enum GEN_OTHERNAME = 0;
200 	enum GEN_EMAIL = 1;
201 	enum GEN_DNS = 2;
202 	enum GEN_X400 = 3;
203 	enum GEN_DIRNAME = 4;
204 	enum GEN_EDIPARTY = 5;
205 	enum GEN_URI = 6;
206 	enum GEN_IPADD = 7;
207 	enum GEN_RID = 8;
208 
209 	int type;
210 
211 	union d_
212 	{
213 		char* ptr_;
214 
215 		/**
216 		 * otherName
217 		 */
218 		.OTHERNAME* otherName;
219 
220 		libressl_d.openssl.ossl_typ.ASN1_IA5STRING* rfc822Name;
221 		libressl_d.openssl.ossl_typ.ASN1_IA5STRING* dNSName;
222 		libressl_d.openssl.asn1.ASN1_TYPE* x400Address;
223 		libressl_d.openssl.ossl_typ.X509_NAME* directoryName;
224 		.EDIPARTYNAME* ediPartyName;
225 		libressl_d.openssl.ossl_typ.ASN1_IA5STRING* uniformResourceIdentifier;
226 		libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* iPAddress;
227 		libressl_d.openssl.asn1.ASN1_OBJECT* registeredID;
228 
229 		/* Old names */
230 
231 		/**
232 		 * iPAddress
233 		 */
234 		libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* ip;
235 
236 		/**
237 		 * dirn
238 		 */
239 		libressl_d.openssl.ossl_typ.X509_NAME* dirn;
240 
241 		/**
242 		 * rfc822Name, dNSName, uniformResourceIdentifier
243 		 */
244 		libressl_d.openssl.ossl_typ.ASN1_IA5STRING* ia5;
245 
246 		/**
247 		 * registeredID
248 		 */
249 		libressl_d.openssl.asn1.ASN1_OBJECT* rid;
250 
251 		/**
252 		 * x400Address
253 		 */
254 		libressl_d.openssl.asn1.ASN1_TYPE* other;
255 	}
256 
257 	d_ d;
258 }
259 
260 alias GENERAL_NAME = .GENERAL_NAME_st;
261 
262 alias GENERAL_NAMES = .stack_st_GENERAL_NAME;
263 
264 struct ACCESS_DESCRIPTION_st
265 {
266 	libressl_d.openssl.asn1.ASN1_OBJECT* method;
267 	.GENERAL_NAME* location;
268 }
269 
270 alias ACCESS_DESCRIPTION = .ACCESS_DESCRIPTION_st;
271 
272 alias AUTHORITY_INFO_ACCESS = .stack_st_ACCESS_DESCRIPTION;
273 
274 alias EXTENDED_KEY_USAGE = libressl_d.openssl.asn1.stack_st_ASN1_OBJECT;
275 
276 //DECLARE_STACK_OF(GENERAL_NAME)
277 struct stack_st_GENERAL_NAME
278 {
279 	libressl_d.openssl.stack._STACK stack;
280 }
281 
282 //DECLARE_STACK_OF(ACCESS_DESCRIPTION)
283 struct stack_st_ACCESS_DESCRIPTION
284 {
285 	libressl_d.openssl.stack._STACK stack;
286 }
287 
288 struct DIST_POINT_NAME_st
289 {
290 	int type;
291 
292 	union name_
293 	{
294 		.GENERAL_NAMES* fullname;
295 		libressl_d.openssl.x509.stack_st_X509_NAME_ENTRY* relativename;
296 	}
297 
298 	name_ name;
299 
300 	/**
301 	 * If relativename then this contains the full distribution point name
302 	 */
303 	libressl_d.openssl.ossl_typ.X509_NAME* dpname;
304 }
305 
306 alias DIST_POINT_NAME = .DIST_POINT_NAME_st;
307 
308 /**
309  * All existing reasons
310  */
311 enum CRLDP_ALL_REASONS = 0x807F;
312 
313 enum CRL_REASON_NONE = -1;
314 enum CRL_REASON_UNSPECIFIED = 0;
315 enum CRL_REASON_KEY_COMPROMISE = 1;
316 enum CRL_REASON_CA_COMPROMISE = 2;
317 enum CRL_REASON_AFFILIATION_CHANGED = 3;
318 enum CRL_REASON_SUPERSEDED = 4;
319 enum CRL_REASON_CESSATION_OF_OPERATION = 5;
320 enum CRL_REASON_CERTIFICATE_HOLD = 6;
321 enum CRL_REASON_REMOVE_FROM_CRL = 8;
322 enum CRL_REASON_PRIVILEGE_WITHDRAWN = 9;
323 enum CRL_REASON_AA_COMPROMISE = 10;
324 
325 struct DIST_POINT_st
326 {
327 	.DIST_POINT_NAME* distpoint;
328 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* reasons;
329 	.GENERAL_NAMES* CRLissuer;
330 	int dp_reasons;
331 }
332 
333 alias CRL_DIST_POINTS = .stack_st_DIST_POINT;
334 
335 //DECLARE_STACK_OF(DIST_POINT)
336 struct stack_st_DIST_POINT
337 {
338 	libressl_d.openssl.stack._STACK stack;
339 }
340 
341 struct AUTHORITY_KEYID_st
342 {
343 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* keyid;
344 	.GENERAL_NAMES* issuer;
345 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* serial;
346 }
347 
348 /* Strong extranet structures */
349 
350 struct SXNET_ID_st
351 {
352 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* zone;
353 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* user;
354 }
355 
356 alias SXNETID = .SXNET_ID_st;
357 
358 //DECLARE_STACK_OF(SXNETID)
359 struct stack_st_SXNETID
360 {
361 	libressl_d.openssl.stack._STACK stack;
362 }
363 
364 struct SXNET_st
365 {
366 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* version_;
367 	.stack_st_SXNETID* ids;
368 }
369 
370 alias SXNET = .SXNET_st;
371 
372 struct NOTICEREF_st
373 {
374 	libressl_d.openssl.ossl_typ.ASN1_STRING* organization;
375 	libressl_d.openssl.asn1.stack_st_ASN1_INTEGER* noticenos;
376 }
377 
378 alias NOTICEREF = .NOTICEREF_st;
379 
380 struct USERNOTICE_st
381 {
382 	.NOTICEREF* noticeref;
383 	libressl_d.openssl.ossl_typ.ASN1_STRING* exptext;
384 }
385 
386 alias USERNOTICE = .USERNOTICE_st;
387 
388 struct POLICYQUALINFO_st
389 {
390 	libressl_d.openssl.asn1.ASN1_OBJECT* pqualid;
391 
392 	union d_
393 	{
394 		libressl_d.openssl.ossl_typ.ASN1_IA5STRING* cpsuri;
395 		.USERNOTICE* usernotice;
396 		libressl_d.openssl.asn1.ASN1_TYPE* other;
397 	}
398 
399 	d_ d;
400 }
401 
402 alias POLICYQUALINFO = .POLICYQUALINFO_st;
403 
404 //DECLARE_STACK_OF(POLICYQUALINFO)
405 struct stack_st_POLICYQUALINFO
406 {
407 	libressl_d.openssl.stack._STACK stack;
408 }
409 
410 struct POLICYINFO_st
411 {
412 	libressl_d.openssl.asn1.ASN1_OBJECT* policyid;
413 	.stack_st_POLICYQUALINFO* qualifiers;
414 }
415 
416 alias POLICYINFO = .POLICYINFO_st;
417 
418 alias CERTIFICATEPOLICIES = .stack_st_POLICYINFO;
419 
420 //DECLARE_STACK_OF(POLICYINFO)
421 struct stack_st_POLICYINFO
422 {
423 	libressl_d.openssl.stack._STACK stack;
424 }
425 
426 struct POLICY_MAPPING_st
427 {
428 	libressl_d.openssl.asn1.ASN1_OBJECT* issuerDomainPolicy;
429 	libressl_d.openssl.asn1.ASN1_OBJECT* subjectDomainPolicy;
430 }
431 
432 alias POLICY_MAPPING = .POLICY_MAPPING_st;
433 
434 //DECLARE_STACK_OF(POLICY_MAPPING)
435 struct stack_st_POLICY_MAPPING
436 {
437 	libressl_d.openssl.stack._STACK stack;
438 }
439 
440 alias POLICY_MAPPINGS = .stack_st_POLICY_MAPPING;
441 
442 struct GENERAL_SUBTREE_st
443 {
444 	.GENERAL_NAME* base;
445 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* minimum;
446 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* maximum;
447 }
448 
449 alias GENERAL_SUBTREE = .GENERAL_SUBTREE_st;
450 
451 //DECLARE_STACK_OF(GENERAL_SUBTREE)
452 struct stack_st_GENERAL_SUBTREE
453 {
454 	libressl_d.openssl.stack._STACK stack;
455 }
456 
457 struct NAME_CONSTRAINTS_st
458 {
459 	.stack_st_GENERAL_SUBTREE* permittedSubtrees;
460 	.stack_st_GENERAL_SUBTREE* excludedSubtrees;
461 }
462 
463 struct POLICY_CONSTRAINTS_st
464 {
465 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* requireExplicitPolicy;
466 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* inhibitPolicyMapping;
467 }
468 
469 alias POLICY_CONSTRAINTS = .POLICY_CONSTRAINTS_st;
470 
471 /* Proxy certificate structures, see RFC 3820 */
472 struct PROXY_POLICY_st
473 {
474 	libressl_d.openssl.asn1.ASN1_OBJECT* policyLanguage;
475 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* policy;
476 }
477 
478 alias PROXY_POLICY = .PROXY_POLICY_st;
479 
480 struct PROXY_CERT_INFO_EXTENSION_st
481 {
482 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* pcPathLengthConstraint;
483 	.PROXY_POLICY* proxyPolicy;
484 }
485 
486 alias PROXY_CERT_INFO_EXTENSION = .PROXY_CERT_INFO_EXTENSION_st;
487 
488 .PROXY_POLICY* PROXY_POLICY_new();
489 void PROXY_POLICY_free(.PROXY_POLICY* a);
490 .PROXY_POLICY* d2i_PROXY_POLICY(.PROXY_POLICY** a, const (ubyte)** in_, core.stdc.config.c_long len);
491 int i2d_PROXY_POLICY(.PROXY_POLICY* a, ubyte** out_);
492 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PROXY_POLICY_it;
493 .PROXY_CERT_INFO_EXTENSION* PROXY_CERT_INFO_EXTENSION_new();
494 void PROXY_CERT_INFO_EXTENSION_free(.PROXY_CERT_INFO_EXTENSION* a);
495 .PROXY_CERT_INFO_EXTENSION* d2i_PROXY_CERT_INFO_EXTENSION(.PROXY_CERT_INFO_EXTENSION** a, const (ubyte)** in_, core.stdc.config.c_long len);
496 int i2d_PROXY_CERT_INFO_EXTENSION(.PROXY_CERT_INFO_EXTENSION* a, ubyte** out_);
497 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PROXY_CERT_INFO_EXTENSION_it;
498 
499 struct ISSUING_DIST_POINT_st
500 {
501 	.DIST_POINT_NAME* distpoint;
502 	int onlyuser;
503 	int onlyCA;
504 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* onlysomereasons;
505 	int indirectCRL;
506 	int onlyattr;
507 }
508 
509 /* Values in idp_flags field */
510 /**
511  * IDP present
512  */
513 enum IDP_PRESENT = 0x01;
514 
515 /**
516  * IDP values inconsistent
517  */
518 enum IDP_INVALID = 0x02;
519 
520 /**
521  * onlyuser true
522  */
523 enum IDP_ONLYUSER = 0x04;
524 
525 /**
526  * onlyCA true
527  */
528 enum IDP_ONLYCA = 0x08;
529 
530 /**
531  * onlyattr true
532  */
533 enum IDP_ONLYATTR = 0x10;
534 
535 /**
536  * indirectCRL true
537  */
538 enum IDP_INDIRECT = 0x20;
539 
540 /**
541  * onlysomereasons present
542  */
543 enum IDP_REASONS = 0x40;
544 
545 pragma(inline, true)
546 void X509V3_conf_err(libressl_d.openssl.conf.CONF_VALUE* val)
547 
548 	in
549 	{
550 		assert(val != null);
551 	}
552 
553 	do
554 	{
555 		libressl_d.openssl.err.ERR_asprintf_error_data(cast(char*)(&("section:%s,name:%s,value:%s\0"[0])), val.section, val.name, val.value);
556 	}
557 
558 pragma(inline, true)
559 void X509V3_set_ctx_test(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx)
560 
561 	do
562 	{
563 		.X509V3_set_ctx(ctx, null, null, null, null, .CTX_TEST);
564 	}
565 
566 pragma(inline, true)
567 pure nothrow @trusted @nogc @live
568 void X509V3_set_ctx_nodb(scope libressl_d.openssl.ossl_typ.X509V3_CTX* ctx)
569 
570 	in
571 	{
572 		assert(ctx != null);
573 	}
574 
575 	do
576 	{
577 		ctx.db = null;
578 	}
579 
580 //#define EXT_BITSTRING(nid, table) { nid, 0, &ASN1_BIT_STRING_it, 0, 0, 0, 0, 0, 0, cast(.X509V3_EXT_I2V)(.i2v_ASN1_BIT_STRING), cast(.X509V3_EXT_V2I)(.v2i_ASN1_BIT_STRING), null, null, table }
581 
582 //#define EXT_IA5STRING(nid) { nid, 0, &ASN1_IA5STRING_it, 0, 0, 0, 0, cast(.X509V3_EXT_I2S)(i2s_ASN1_IA5STRING), cast(.X509V3_EXT_S2I)(s2i_ASN1_IA5STRING), 0, 0, 0, 0, null }
583 
584 //#define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
585 
586 /* X509_PURPOSE stuff */
587 
588 enum EXFLAG_BCONS = 0x0001;
589 enum EXFLAG_KUSAGE = 0x0002;
590 enum EXFLAG_XKUSAGE = 0x0004;
591 enum EXFLAG_NSCERT = 0x0008;
592 
593 enum EXFLAG_CA = 0x0010;
594 
595 /**
596  * Self issued.
597  */
598 enum EXFLAG_SI = 0x0020;
599 
600 enum EXFLAG_V1 = 0x0040;
601 enum EXFLAG_INVALID = 0x0080;
602 enum EXFLAG_SET = 0x0100;
603 enum EXFLAG_CRITICAL = 0x0200;
604 enum EXFLAG_PROXY = 0x0400;
605 enum EXFLAG_INVALID_POLICY = 0x0800;
606 enum EXFLAG_FRESHEST = 0x1000;
607 
608 /**
609  * Self signed.
610  */
611 enum EXFLAG_SS = 0x2000;
612 
613 enum KU_DIGITAL_SIGNATURE = 0x0080;
614 enum KU_NON_REPUDIATION = 0x0040;
615 enum KU_KEY_ENCIPHERMENT = 0x0020;
616 enum KU_DATA_ENCIPHERMENT = 0x0010;
617 enum KU_KEY_AGREEMENT = 0x0008;
618 enum KU_KEY_CERT_SIGN = 0x0004;
619 enum KU_CRL_SIGN = 0x0002;
620 enum KU_ENCIPHER_ONLY = 0x0001;
621 enum KU_DECIPHER_ONLY = 0x8000;
622 
623 enum NS_SSL_CLIENT = 0x80;
624 enum NS_SSL_SERVER = 0x40;
625 enum NS_SMIME = 0x20;
626 enum NS_OBJSIGN = 0x10;
627 enum NS_SSL_CA = 0x04;
628 enum NS_SMIME_CA = 0x02;
629 enum NS_OBJSIGN_CA = 0x01;
630 enum NS_ANY_CA = .NS_SSL_CA | .NS_SMIME_CA | .NS_OBJSIGN_CA;
631 
632 enum XKU_SSL_SERVER = 0x01;
633 enum XKU_SSL_CLIENT = 0x02;
634 enum XKU_SMIME = 0x04;
635 enum XKU_CODE_SIGN = 0x08;
636 enum XKU_SGC = 0x10;
637 enum XKU_OCSP_SIGN = 0x20;
638 enum XKU_TIMESTAMP = 0x40;
639 enum XKU_DVCS = 0x80;
640 
641 enum X509_PURPOSE_DYNAMIC = 0x01;
642 enum X509_PURPOSE_DYNAMIC_NAME = 0x02;
643 
644 struct x509_purpose_st
645 {
646 	int purpose;
647 
648 	/**
649 	 * Default trust ID
650 	 */
651 	int trust;
652 
653 	int flags;
654 	int function(const .x509_purpose_st*, const (libressl_d.openssl.ossl_typ.X509)*, int) check_purpose;
655 	char* name;
656 	char* sname;
657 	void* usr_data;
658 }
659 
660 alias X509_PURPOSE = .x509_purpose_st;
661 
662 enum X509_PURPOSE_SSL_CLIENT = 1;
663 enum X509_PURPOSE_SSL_SERVER = 2;
664 enum X509_PURPOSE_NS_SSL_SERVER = 3;
665 enum X509_PURPOSE_SMIME_SIGN = 4;
666 enum X509_PURPOSE_SMIME_ENCRYPT = 5;
667 enum X509_PURPOSE_CRL_SIGN = 6;
668 enum X509_PURPOSE_ANY = 7;
669 enum X509_PURPOSE_OCSP_HELPER = 8;
670 enum X509_PURPOSE_TIMESTAMP_SIGN = 9;
671 
672 enum X509_PURPOSE_MIN = 1;
673 enum X509_PURPOSE_MAX = 9;
674 
675 /* Flags for X509V3_EXT_print() */
676 
677 enum X509V3_EXT_UNKNOWN_MASK = 0x0FL << 16;
678 
679 /**
680  * Return error for unknown extensions
681  */
682 enum X509V3_EXT_DEFAULT = 0;
683 
684 /**
685  * Print error for unknown extensions
686  */
687 enum X509V3_EXT_ERROR_UNKNOWN = 1L << 16;
688 
689 /**
690  * ASN1 parse unknown extensions
691  */
692 enum X509V3_EXT_PARSE_UNKNOWN = 2L << 16;
693 
694 /**
695  * BIO_dump unknown extensions
696  */
697 enum X509V3_EXT_DUMP_UNKNOWN = 3L << 16;
698 
699 /* Flags for X509V3_add1_i2d */
700 
701 enum X509V3_ADD_OP_MASK = 0x0FL;
702 enum X509V3_ADD_DEFAULT = 0L;
703 enum X509V3_ADD_APPEND = 1L;
704 enum X509V3_ADD_REPLACE = 2L;
705 enum X509V3_ADD_REPLACE_EXISTING = 3L;
706 enum X509V3_ADD_KEEP_EXISTING = 4L;
707 enum X509V3_ADD_DELETE = 5L;
708 enum X509V3_ADD_SILENT = 0x10;
709 
710 //DECLARE_STACK_OF(X509_PURPOSE)
711 struct stack_st_X509_PURPOSE
712 {
713 	libressl_d.openssl.stack._STACK stack;
714 }
715 
716 .BASIC_CONSTRAINTS* BASIC_CONSTRAINTS_new();
717 void BASIC_CONSTRAINTS_free(.BASIC_CONSTRAINTS* a);
718 .BASIC_CONSTRAINTS* d2i_BASIC_CONSTRAINTS(.BASIC_CONSTRAINTS** a, const (ubyte)** in_, core.stdc.config.c_long len);
719 int i2d_BASIC_CONSTRAINTS(.BASIC_CONSTRAINTS* a, ubyte** out_);
720 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM BASIC_CONSTRAINTS_it;
721 
722 .SXNET* SXNET_new();
723 void SXNET_free(.SXNET* a);
724 .SXNET* d2i_SXNET(.SXNET** a, const (ubyte)** in_, core.stdc.config.c_long len);
725 int i2d_SXNET(.SXNET* a, ubyte** out_);
726 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM SXNET_it;
727 .SXNETID* SXNETID_new();
728 void SXNETID_free(.SXNETID* a);
729 .SXNETID* d2i_SXNETID(.SXNETID** a, const (ubyte)** in_, core.stdc.config.c_long len);
730 int i2d_SXNETID(.SXNETID* a, ubyte** out_);
731 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM SXNETID_it;
732 
733 int SXNET_add_id_asc(.SXNET** psx, const (char)* zone, const (char)* user, int userlen);
734 int SXNET_add_id_ulong(.SXNET** psx, core.stdc.config.c_ulong lzone, const (char)* user, int userlen);
735 int SXNET_add_id_INTEGER(.SXNET** psx, libressl_d.openssl.ossl_typ.ASN1_INTEGER* izone, const (char)* user, int userlen);
736 
737 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* SXNET_get_id_asc(.SXNET* sx, const (char)* zone);
738 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* SXNET_get_id_ulong(.SXNET* sx, core.stdc.config.c_ulong lzone);
739 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* SXNET_get_id_INTEGER(.SXNET* sx, libressl_d.openssl.ossl_typ.ASN1_INTEGER* zone);
740 
741 libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* AUTHORITY_KEYID_new();
742 void AUTHORITY_KEYID_free(libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* a);
743 libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* d2i_AUTHORITY_KEYID(libressl_d.openssl.ossl_typ.AUTHORITY_KEYID** a, const (ubyte)** in_, core.stdc.config.c_long len);
744 int i2d_AUTHORITY_KEYID(libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* a, ubyte** out_);
745 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM AUTHORITY_KEYID_it;
746 
747 .PKEY_USAGE_PERIOD* PKEY_USAGE_PERIOD_new();
748 void PKEY_USAGE_PERIOD_free(.PKEY_USAGE_PERIOD* a);
749 .PKEY_USAGE_PERIOD* d2i_PKEY_USAGE_PERIOD(.PKEY_USAGE_PERIOD** a, const (ubyte)** in_, core.stdc.config.c_long len);
750 int i2d_PKEY_USAGE_PERIOD(.PKEY_USAGE_PERIOD* a, ubyte** out_);
751 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PKEY_USAGE_PERIOD_it;
752 
753 .GENERAL_NAME* GENERAL_NAME_new();
754 void GENERAL_NAME_free(.GENERAL_NAME* a);
755 .GENERAL_NAME* d2i_GENERAL_NAME(.GENERAL_NAME** a, const (ubyte)** in_, core.stdc.config.c_long len);
756 int i2d_GENERAL_NAME(.GENERAL_NAME* a, ubyte** out_);
757 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM GENERAL_NAME_it;
758 .GENERAL_NAME* GENERAL_NAME_dup(.GENERAL_NAME* a);
759 int GENERAL_NAME_cmp(.GENERAL_NAME* a, .GENERAL_NAME* b);
760 
761 libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* v2i_ASN1_BIT_STRING(.X509V3_EXT_METHOD* method, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.conf.stack_st_CONF_VALUE* nval);
762 libressl_d.openssl.conf.stack_st_CONF_VALUE* i2v_ASN1_BIT_STRING(.X509V3_EXT_METHOD* method, libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* bits, libressl_d.openssl.conf.stack_st_CONF_VALUE* extlist);
763 
764 libressl_d.openssl.conf.stack_st_CONF_VALUE* i2v_GENERAL_NAME(.X509V3_EXT_METHOD* method, .GENERAL_NAME* gen, libressl_d.openssl.conf.stack_st_CONF_VALUE* ret);
765 int GENERAL_NAME_print(libressl_d.openssl.bio.BIO* out_, .GENERAL_NAME* gen);
766 
767 .GENERAL_NAMES* GENERAL_NAMES_new();
768 void GENERAL_NAMES_free(.GENERAL_NAMES* a);
769 .GENERAL_NAMES* d2i_GENERAL_NAMES(.GENERAL_NAMES** a, const (ubyte)** in_, core.stdc.config.c_long len);
770 int i2d_GENERAL_NAMES(.GENERAL_NAMES* a, ubyte** out_);
771 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM GENERAL_NAMES_it;
772 
773 libressl_d.openssl.conf.stack_st_CONF_VALUE* i2v_GENERAL_NAMES(.X509V3_EXT_METHOD* method, .GENERAL_NAMES* gen, libressl_d.openssl.conf.stack_st_CONF_VALUE* extlist);
774 .GENERAL_NAMES* v2i_GENERAL_NAMES(const (.X509V3_EXT_METHOD)* method, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.conf.stack_st_CONF_VALUE* nval);
775 
776 .OTHERNAME* OTHERNAME_new();
777 void OTHERNAME_free(.OTHERNAME* a);
778 .OTHERNAME* d2i_OTHERNAME(.OTHERNAME** a, const (ubyte)** in_, core.stdc.config.c_long len);
779 int i2d_OTHERNAME(.OTHERNAME* a, ubyte** out_);
780 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM OTHERNAME_it;
781 .EDIPARTYNAME* EDIPARTYNAME_new();
782 void EDIPARTYNAME_free(.EDIPARTYNAME* a);
783 .EDIPARTYNAME* d2i_EDIPARTYNAME(.EDIPARTYNAME** a, const (ubyte)** in_, core.stdc.config.c_long len);
784 int i2d_EDIPARTYNAME(.EDIPARTYNAME* a, ubyte** out_);
785 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM EDIPARTYNAME_it;
786 int OTHERNAME_cmp(.OTHERNAME* a, .OTHERNAME* b);
787 void GENERAL_NAME_set0_value(.GENERAL_NAME* a, int type, void* value);
788 void* GENERAL_NAME_get0_value(.GENERAL_NAME* a, int* ptype);
789 int GENERAL_NAME_set0_othername(.GENERAL_NAME* gen, libressl_d.openssl.asn1.ASN1_OBJECT* oid, libressl_d.openssl.asn1.ASN1_TYPE* value);
790 int GENERAL_NAME_get0_otherName(.GENERAL_NAME* gen, libressl_d.openssl.asn1.ASN1_OBJECT** poid, libressl_d.openssl.asn1.ASN1_TYPE** pvalue);
791 
792 char* i2s_ASN1_OCTET_STRING(.X509V3_EXT_METHOD* method, const (libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING)* ia5);
793 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* s2i_ASN1_OCTET_STRING(.X509V3_EXT_METHOD* method, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* str);
794 
795 .EXTENDED_KEY_USAGE* EXTENDED_KEY_USAGE_new();
796 void EXTENDED_KEY_USAGE_free(.EXTENDED_KEY_USAGE* a);
797 .EXTENDED_KEY_USAGE* d2i_EXTENDED_KEY_USAGE(.EXTENDED_KEY_USAGE** a, const (ubyte)** in_, core.stdc.config.c_long len);
798 int i2d_EXTENDED_KEY_USAGE(.EXTENDED_KEY_USAGE* a, ubyte** out_);
799 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM EXTENDED_KEY_USAGE_it;
800 int i2a_ACCESS_DESCRIPTION(libressl_d.openssl.bio.BIO* bp, const (.ACCESS_DESCRIPTION)* a);
801 
802 .CERTIFICATEPOLICIES* CERTIFICATEPOLICIES_new();
803 void CERTIFICATEPOLICIES_free(.CERTIFICATEPOLICIES* a);
804 .CERTIFICATEPOLICIES* d2i_CERTIFICATEPOLICIES(.CERTIFICATEPOLICIES** a, const (ubyte)** in_, core.stdc.config.c_long len);
805 int i2d_CERTIFICATEPOLICIES(.CERTIFICATEPOLICIES* a, ubyte** out_);
806 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM CERTIFICATEPOLICIES_it;
807 .POLICYINFO* POLICYINFO_new();
808 void POLICYINFO_free(.POLICYINFO* a);
809 .POLICYINFO* d2i_POLICYINFO(.POLICYINFO** a, const (ubyte)** in_, core.stdc.config.c_long len);
810 int i2d_POLICYINFO(.POLICYINFO* a, ubyte** out_);
811 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM POLICYINFO_it;
812 .POLICYQUALINFO* POLICYQUALINFO_new();
813 void POLICYQUALINFO_free(.POLICYQUALINFO* a);
814 .POLICYQUALINFO* d2i_POLICYQUALINFO(.POLICYQUALINFO** a, const (ubyte)** in_, core.stdc.config.c_long len);
815 int i2d_POLICYQUALINFO(.POLICYQUALINFO* a, ubyte** out_);
816 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM POLICYQUALINFO_it;
817 .USERNOTICE* USERNOTICE_new();
818 void USERNOTICE_free(.USERNOTICE* a);
819 .USERNOTICE* d2i_USERNOTICE(.USERNOTICE** a, const (ubyte)** in_, core.stdc.config.c_long len);
820 int i2d_USERNOTICE(.USERNOTICE* a, ubyte** out_);
821 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM USERNOTICE_it;
822 .NOTICEREF* NOTICEREF_new();
823 void NOTICEREF_free(.NOTICEREF* a);
824 .NOTICEREF* d2i_NOTICEREF(.NOTICEREF** a, const (ubyte)** in_, core.stdc.config.c_long len);
825 int i2d_NOTICEREF(.NOTICEREF* a, ubyte** out_);
826 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM NOTICEREF_it;
827 
828 .CRL_DIST_POINTS* CRL_DIST_POINTS_new();
829 void CRL_DIST_POINTS_free(.CRL_DIST_POINTS* a);
830 .CRL_DIST_POINTS* d2i_CRL_DIST_POINTS(.CRL_DIST_POINTS** a, const (ubyte)** in_, core.stdc.config.c_long len);
831 int i2d_CRL_DIST_POINTS(.CRL_DIST_POINTS* a, ubyte** out_);
832 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM CRL_DIST_POINTS_it;
833 libressl_d.openssl.ossl_typ.DIST_POINT* DIST_POINT_new();
834 void DIST_POINT_free(libressl_d.openssl.ossl_typ.DIST_POINT* a);
835 libressl_d.openssl.ossl_typ.DIST_POINT* d2i_DIST_POINT(libressl_d.openssl.ossl_typ.DIST_POINT** a, const (ubyte)** in_, core.stdc.config.c_long len);
836 int i2d_DIST_POINT(libressl_d.openssl.ossl_typ.DIST_POINT* a, ubyte** out_);
837 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM DIST_POINT_it;
838 .DIST_POINT_NAME* DIST_POINT_NAME_new();
839 void DIST_POINT_NAME_free(.DIST_POINT_NAME* a);
840 .DIST_POINT_NAME* d2i_DIST_POINT_NAME(.DIST_POINT_NAME** a, const (ubyte)** in_, core.stdc.config.c_long len);
841 int i2d_DIST_POINT_NAME(.DIST_POINT_NAME* a, ubyte** out_);
842 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM DIST_POINT_NAME_it;
843 libressl_d.openssl.ossl_typ.ISSUING_DIST_POINT* ISSUING_DIST_POINT_new();
844 void ISSUING_DIST_POINT_free(libressl_d.openssl.ossl_typ.ISSUING_DIST_POINT* a);
845 libressl_d.openssl.ossl_typ.ISSUING_DIST_POINT* d2i_ISSUING_DIST_POINT(libressl_d.openssl.ossl_typ.ISSUING_DIST_POINT** a, const (ubyte)** in_, core.stdc.config.c_long len);
846 int i2d_ISSUING_DIST_POINT(libressl_d.openssl.ossl_typ.ISSUING_DIST_POINT* a, ubyte** out_);
847 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM ISSUING_DIST_POINT_it;
848 
849 int DIST_POINT_set_dpname(.DIST_POINT_NAME* dpn, libressl_d.openssl.ossl_typ.X509_NAME* iname);
850 
851 int NAME_CONSTRAINTS_check(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.NAME_CONSTRAINTS* nc);
852 
853 .ACCESS_DESCRIPTION* ACCESS_DESCRIPTION_new();
854 void ACCESS_DESCRIPTION_free(.ACCESS_DESCRIPTION* a);
855 .ACCESS_DESCRIPTION* d2i_ACCESS_DESCRIPTION(.ACCESS_DESCRIPTION** a, const (ubyte)** in_, core.stdc.config.c_long len);
856 int i2d_ACCESS_DESCRIPTION(.ACCESS_DESCRIPTION* a, ubyte** out_);
857 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM ACCESS_DESCRIPTION_it;
858 .AUTHORITY_INFO_ACCESS* AUTHORITY_INFO_ACCESS_new();
859 void AUTHORITY_INFO_ACCESS_free(.AUTHORITY_INFO_ACCESS* a);
860 .AUTHORITY_INFO_ACCESS* d2i_AUTHORITY_INFO_ACCESS(.AUTHORITY_INFO_ACCESS** a, const (ubyte)** in_, core.stdc.config.c_long len);
861 int i2d_AUTHORITY_INFO_ACCESS(.AUTHORITY_INFO_ACCESS* a, ubyte** out_);
862 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM AUTHORITY_INFO_ACCESS_it;
863 
864 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM POLICY_MAPPING_it;
865 .POLICY_MAPPING* POLICY_MAPPING_new();
866 void POLICY_MAPPING_free(.POLICY_MAPPING* a);
867 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM POLICY_MAPPINGS_it;
868 
869 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM GENERAL_SUBTREE_it;
870 .GENERAL_SUBTREE* GENERAL_SUBTREE_new();
871 void GENERAL_SUBTREE_free(.GENERAL_SUBTREE* a);
872 
873 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM NAME_CONSTRAINTS_it;
874 libressl_d.openssl.ossl_typ.NAME_CONSTRAINTS* NAME_CONSTRAINTS_new();
875 void NAME_CONSTRAINTS_free(libressl_d.openssl.ossl_typ.NAME_CONSTRAINTS* a);
876 
877 .POLICY_CONSTRAINTS* POLICY_CONSTRAINTS_new();
878 void POLICY_CONSTRAINTS_free(.POLICY_CONSTRAINTS* a);
879 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM POLICY_CONSTRAINTS_it;
880 
881 .GENERAL_NAME* a2i_GENERAL_NAME(.GENERAL_NAME* out_, const (.X509V3_EXT_METHOD)* method, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, int gen_type, const (char)* value, int is_nc);
882 
883 static assert(libressl_d.openssl.conf.HEADER_CONF_H);
884 .GENERAL_NAME* v2i_GENERAL_NAME(const (.X509V3_EXT_METHOD)* method, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.conf.CONF_VALUE* cnf);
885 .GENERAL_NAME* v2i_GENERAL_NAME_ex(.GENERAL_NAME* out_, const (.X509V3_EXT_METHOD)* method, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.conf.CONF_VALUE* cnf, int is_nc);
886 void X509V3_conf_free(libressl_d.openssl.conf.CONF_VALUE* val);
887 
888 libressl_d.openssl.x509.X509_EXTENSION* X509V3_EXT_nconf_nid(libressl_d.openssl.ossl_typ.CONF* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, int ext_nid, const (char)* value);
889 libressl_d.openssl.x509.X509_EXTENSION* X509V3_EXT_nconf(libressl_d.openssl.ossl_typ.CONF* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* name, const (char)* value);
890 int X509V3_EXT_add_nconf_sk(libressl_d.openssl.ossl_typ.CONF* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.x509.stack_st_X509_EXTENSION** sk);
891 int X509V3_EXT_add_nconf(libressl_d.openssl.ossl_typ.CONF* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.ossl_typ.X509* cert);
892 int X509V3_EXT_REQ_add_nconf(libressl_d.openssl.ossl_typ.CONF* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.x509.X509_REQ* req);
893 int X509V3_EXT_CRL_add_nconf(libressl_d.openssl.ossl_typ.CONF* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.ossl_typ.X509_CRL* crl);
894 
895 libressl_d.openssl.x509.X509_EXTENSION* X509V3_EXT_conf_nid(libressl_d.openssl.conf.lhash_st_CONF_VALUE* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, int ext_nid, const (char)* value);
896 libressl_d.openssl.x509.X509_EXTENSION* X509V3_EXT_conf(libressl_d.openssl.conf.lhash_st_CONF_VALUE* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* name, const (char)* value);
897 int X509V3_EXT_add_conf(libressl_d.openssl.conf.lhash_st_CONF_VALUE* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.ossl_typ.X509* cert);
898 int X509V3_EXT_REQ_add_conf(libressl_d.openssl.conf.lhash_st_CONF_VALUE* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.x509.X509_REQ* req);
899 int X509V3_EXT_CRL_add_conf(libressl_d.openssl.conf.lhash_st_CONF_VALUE* conf, libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section, libressl_d.openssl.ossl_typ.X509_CRL* crl);
900 
901 int X509V3_add_value_bool_nf(const (char)* name, int asn1_bool, libressl_d.openssl.conf.stack_st_CONF_VALUE** extlist);
902 int X509V3_get_value_bool(const (libressl_d.openssl.conf.CONF_VALUE)* value, int* asn1_bool);
903 int X509V3_get_value_int(const (libressl_d.openssl.conf.CONF_VALUE)* value, libressl_d.openssl.ossl_typ.ASN1_INTEGER** aint);
904 void X509V3_set_nconf(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.ossl_typ.CONF* conf);
905 void X509V3_set_conf_lhash(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.conf.lhash_st_CONF_VALUE* lhash);
906 
907 char* X509V3_get_string(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* name, const (char)* section);
908 libressl_d.openssl.conf.stack_st_CONF_VALUE* X509V3_get_section(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, const (char)* section);
909 void X509V3_string_free(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, char* str);
910 void X509V3_section_free(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.conf.stack_st_CONF_VALUE* section);
911 void X509V3_set_ctx(libressl_d.openssl.ossl_typ.X509V3_CTX* ctx, libressl_d.openssl.ossl_typ.X509* issuer, libressl_d.openssl.ossl_typ.X509* subject, libressl_d.openssl.x509.X509_REQ* req, libressl_d.openssl.ossl_typ.X509_CRL* crl, int flags);
912 
913 int X509V3_add_value(const (char)* name, const (char)* value, libressl_d.openssl.conf.stack_st_CONF_VALUE** extlist);
914 int X509V3_add_value_uchar(const (char)* name, const (ubyte)* value, libressl_d.openssl.conf.stack_st_CONF_VALUE** extlist);
915 int X509V3_add_value_bool(const (char)* name, int asn1_bool, libressl_d.openssl.conf.stack_st_CONF_VALUE** extlist);
916 int X509V3_add_value_int(const (char)* name, const (libressl_d.openssl.ossl_typ.ASN1_INTEGER)* aint, libressl_d.openssl.conf.stack_st_CONF_VALUE** extlist);
917 char* i2s_ASN1_INTEGER(.X509V3_EXT_METHOD* meth, const (libressl_d.openssl.ossl_typ.ASN1_INTEGER)* aint);
918 libressl_d.openssl.ossl_typ.ASN1_INTEGER* s2i_ASN1_INTEGER(.X509V3_EXT_METHOD* meth, const (char)* value);
919 char* i2s_ASN1_ENUMERATED(.X509V3_EXT_METHOD* meth, const (libressl_d.openssl.ossl_typ.ASN1_ENUMERATED)* aint);
920 char* i2s_ASN1_ENUMERATED_TABLE(.X509V3_EXT_METHOD* meth, const (libressl_d.openssl.ossl_typ.ASN1_ENUMERATED)* aint);
921 int X509V3_EXT_add(.X509V3_EXT_METHOD* ext);
922 int X509V3_EXT_add_list(.X509V3_EXT_METHOD* extlist);
923 int X509V3_EXT_add_alias(int nid_to, int nid_from);
924 void X509V3_EXT_cleanup();
925 
926 const (.X509V3_EXT_METHOD)* X509V3_EXT_get(libressl_d.openssl.x509.X509_EXTENSION* ext);
927 const (.X509V3_EXT_METHOD)* X509V3_EXT_get_nid(int nid);
928 int X509V3_add_standard_extensions();
929 libressl_d.openssl.conf.stack_st_CONF_VALUE* X509V3_parse_list(const (char)* line);
930 void* X509V3_EXT_d2i(libressl_d.openssl.x509.X509_EXTENSION* ext);
931 void* X509V3_get_d2i(const (libressl_d.openssl.x509.stack_st_X509_EXTENSION)* x, int nid, int* crit, int* idx);
932 
933 libressl_d.openssl.x509.X509_EXTENSION* X509V3_EXT_i2d(int ext_nid, int crit, void* ext_struc);
934 int X509V3_add1_i2d(libressl_d.openssl.x509.stack_st_X509_EXTENSION** x, int nid, void* value, int crit, core.stdc.config.c_ulong flags);
935 
936 char* hex_to_string(const (ubyte)* buffer, core.stdc.config.c_long len);
937 ubyte* string_to_hex(const (char)* str, core.stdc.config.c_long* len);
938 int name_cmp(const (char)* name, const (char)* cmp);
939 
940 void X509V3_EXT_val_prn(libressl_d.openssl.bio.BIO* out_, libressl_d.openssl.conf.stack_st_CONF_VALUE* val, int indent, int ml);
941 int X509V3_EXT_print(libressl_d.openssl.bio.BIO* out_, libressl_d.openssl.x509.X509_EXTENSION* ext, core.stdc.config.c_ulong flag, int indent);
942 int X509V3_EXT_print_fp(libressl_d.compat.stdio.FILE* out_, libressl_d.openssl.x509.X509_EXTENSION* ext, int flag, int indent);
943 
944 int X509V3_extensions_print(libressl_d.openssl.bio.BIO* out_, const (char)* title, const (libressl_d.openssl.x509.stack_st_X509_EXTENSION)* exts, core.stdc.config.c_ulong flag, int indent);
945 
946 int X509_check_ca(libressl_d.openssl.ossl_typ.X509* x);
947 int X509_check_purpose(libressl_d.openssl.ossl_typ.X509* x, int id, int ca);
948 int X509_supported_extension(libressl_d.openssl.x509.X509_EXTENSION* ex);
949 int X509_PURPOSE_set(int* p, int purpose);
950 int X509_check_issued(libressl_d.openssl.ossl_typ.X509* issuer, libressl_d.openssl.ossl_typ.X509* subject);
951 int X509_check_akid(libressl_d.openssl.ossl_typ.X509* issuer, libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* akid);
952 int X509_PURPOSE_get_count();
953 .X509_PURPOSE* X509_PURPOSE_get0(int idx);
954 int X509_PURPOSE_get_by_sname(const (char)* sname);
955 int X509_PURPOSE_get_by_id(int id);
956 int X509_PURPOSE_add(int id, int trust, int flags, int function(const (.X509_PURPOSE)*, const (libressl_d.openssl.ossl_typ.X509)*, int) ck, const (char)* name, const (char)* sname, void* arg);
957 char* X509_PURPOSE_get0_name(const (.X509_PURPOSE)* xp);
958 char* X509_PURPOSE_get0_sname(const (.X509_PURPOSE)* xp);
959 int X509_PURPOSE_get_trust(const (.X509_PURPOSE)* xp);
960 void X509_PURPOSE_cleanup();
961 int X509_PURPOSE_get_id(const (.X509_PURPOSE)*);
962 
963 libressl_d.openssl.safestack.stack_st_OPENSSL_STRING* X509_get1_email(libressl_d.openssl.ossl_typ.X509* x);
964 libressl_d.openssl.safestack.stack_st_OPENSSL_STRING* X509_REQ_get1_email(libressl_d.openssl.x509.X509_REQ* x);
965 void X509_email_free(libressl_d.openssl.safestack.stack_st_OPENSSL_STRING* sk);
966 libressl_d.openssl.safestack.stack_st_OPENSSL_STRING* X509_get1_ocsp(libressl_d.openssl.ossl_typ.X509* x);
967 
968 /* Flags for X509_check_* functions */
969 /**
970  * Always check subject name for host match even if subject alt names present
971  */
972 enum X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT = 0x01;
973 
974 /**
975  * Disable wildcard matching for dnsName fields and common name.
976  */
977 enum X509_CHECK_FLAG_NO_WILDCARDS = 0x02;
978 
979 /**
980  * Wildcards must not match a partial label.
981  */
982 enum X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS = 0x04;
983 
984 /**
985  * Allow (non-partial) wildcards to match multiple labels.
986  */
987 enum X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS = 0x08;
988 
989 /**
990  * Constraint verifier subdomain patterns to match a single labels.
991  */
992 enum X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS = 0x10;
993 
994 /**
995  * Disable checking the CN for a hostname, to support modern validation
996  */
997 enum X509_CHECK_FLAG_NEVER_CHECK_SUBJECT = 0x20;
998 
999 /**
1000  * Match reference identifiers starting with "." to any sub-domain.
1001  * This is a non-public flag, turned on implicitly when the subject
1002  * reference identity is a DNS name.
1003  */
1004 enum _X509_CHECK_FLAG_DOT_SUBDOMAINS = 0x8000;
1005 
1006 int X509_check_host(libressl_d.openssl.ossl_typ.X509* x, const (char)* chk, size_t chklen, uint flags, char** peername);
1007 int X509_check_email(libressl_d.openssl.ossl_typ.X509* x, const (char)* chk, size_t chklen, uint flags);
1008 int X509_check_ip(libressl_d.openssl.ossl_typ.X509* x, const (ubyte)* chk, size_t chklen, uint flags);
1009 int X509_check_ip_asc(libressl_d.openssl.ossl_typ.X509* x, const (char)* ipasc, uint flags);
1010 
1011 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* a2i_IPADDRESS(const (char)* ipasc);
1012 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* a2i_IPADDRESS_NC(const (char)* ipasc);
1013 int a2i_ipadd(ubyte* ipout, const (char)* ipasc);
1014 int X509V3_NAME_from_section(libressl_d.openssl.ossl_typ.X509_NAME* nm, libressl_d.openssl.conf.stack_st_CONF_VALUE* dn_sk, core.stdc.config.c_ulong chtype);
1015 
1016 void X509_POLICY_NODE_print(libressl_d.openssl.bio.BIO* out_, libressl_d.openssl.ossl_typ.X509_POLICY_NODE* node, int indent);
1017 
1018 //DECLARE_STACK_OF(X509_POLICY_NODE)
1019 struct stack_st_X509_POLICY_NODE
1020 {
1021 	libressl_d.openssl.stack._STACK stack;
1022 }
1023 
1024 version (LIBRESSL_INTERNAL) {
1025 	version (OPENSSL_NO_RFC3779) {
1026 	} else {
1027 		struct ASRange_st
1028 		{
1029 			libressl_d.openssl.ossl_typ.ASN1_INTEGER* min;
1030 			libressl_d.openssl.ossl_typ.ASN1_INTEGER* max;
1031 		}
1032 
1033 		alias ASRange = .ASRange_st;
1034 
1035 		enum ASIdOrRange_id = 0;
1036 		enum ASIdOrRange_range = 1;
1037 
1038 		struct ASIdOrRange_st
1039 		{
1040 			int type;
1041 
1042 			union u_
1043 			{
1044 				libressl_d.openssl.ossl_typ.ASN1_INTEGER* id;
1045 				.ASRange* range;
1046 			}
1047 
1048 			u_ u;
1049 		}
1050 
1051 		alias ASIdOrRange = .ASIdOrRange_st;
1052 
1053 		//DECLARE_STACK_OF(ASIdOrRange)
1054 		struct stack_st_ASIdOrRange
1055 		{
1056 			libressl_d.openssl.stack._STACK stack;
1057 		}
1058 
1059 		alias ASIdOrRanges = .stack_st_ASIdOrRange;
1060 
1061 		enum ASIdentifierChoice_inherit = 0;
1062 		enum ASIdentifierChoice_asIdsOrRanges = 1;
1063 
1064 		struct ASIdentifierChoice_st
1065 		{
1066 			int type;
1067 
1068 			union u_
1069 			{
1070 				libressl_d.openssl.ossl_typ.ASN1_NULL* inherit;
1071 				.ASIdOrRanges* asIdsOrRanges;
1072 			}
1073 
1074 			u_ u;
1075 		}
1076 
1077 		alias ASIdentifierChoice = .ASIdentifierChoice_st;
1078 
1079 		struct ASIdentifiers_st
1080 		{
1081 			.ASIdentifierChoice* asnum;
1082 			.ASIdentifierChoice* rdi;
1083 		}
1084 
1085 		alias ASIdentifiers = .ASIdentifiers_st;
1086 
1087 		.ASRange* ASRange_new();
1088 		void ASRange_free(.ASRange* a);
1089 		.ASRange* d2i_ASRange(.ASRange** a, const (ubyte)** in_, core.stdc.config.c_long len);
1090 		int i2d_ASRange(.ASRange* a, ubyte** out_);
1091 		extern __gshared const ASN1_ITEM ASRange_it;
1092 
1093 		.ASIdOrRange* ASIdOrRange_new();
1094 		void ASIdOrRange_free(.ASIdOrRange* a);
1095 		.ASIdOrRange* d2i_ASIdOrRange(.ASIdOrRange** a, const (ubyte)** in_, core.stdc.config.c_long len);
1096 		int i2d_ASIdOrRange(.ASIdOrRange* a, ubyte** out_);
1097 		extern __gshared const ASN1_ITEM ASIdOrRange_it;
1098 
1099 		.ASIdentifierChoice* ASIdentifierChoice_new();
1100 		void ASIdentifierChoice_free(.ASIdentifierChoice* a);
1101 		.ASIdentifierChoice* d2i_ASIdentifierChoice(.ASIdentifierChoice** a, const (ubyte)** in_, core.stdc.config.c_long len);
1102 		int i2d_ASIdentifierChoice(.ASIdentifierChoice* a, ubyte** out_);
1103 		extern __gshared const ASN1_ITEM ASIdentifierChoice_it;
1104 
1105 		.ASIdentifiers* ASIdentifiers_new();
1106 		void ASIdentifiers_free(.ASIdentifiers* a);
1107 		.ASIdentifiers* d2i_ASIdentifiers(.ASIdentifiers** a, const (ubyte)** in_, core.stdc.config.c_long len);
1108 		int i2d_ASIdentifiers(.ASIdentifiers* a, ubyte** out_);
1109 		extern __gshared const ASN1_ITEM ASIdentifiers_it;
1110 
1111 		struct IPAddressRange_st
1112 		{
1113 			libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* min;
1114 			libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* max;
1115 		}
1116 
1117 		alias IPAddressRange = .IPAddressRange_st;
1118 
1119 		enum IPAddressOrRange_addressPrefix = 0;
1120 		enum IPAddressOrRange_addressRange = 1;
1121 
1122 		struct IPAddressOrRange_st
1123 		{
1124 			int type;
1125 
1126 			union u_
1127 			{
1128 				libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* addressPrefix;
1129 				.IPAddressRange* addressRange;
1130 			}
1131 
1132 			u_ u;
1133 		}
1134 
1135 		alias IPAddressOrRange = .IPAddressOrRange_st;
1136 
1137 		//DECLARE_STACK_OF(IPAddressOrRange)
1138 		struct stack_st_IPAddressOrRange
1139 		{
1140 			libressl_d.openssl.stack._STACK stack;
1141 		}
1142 
1143 		alias IPAddressOrRanges = .stack_st_IPAddressOrRange;
1144 
1145 		enum IPAddressChoice_inherit = 0;
1146 		enum IPAddressChoice_addressesOrRanges = 1;
1147 
1148 		struct IPAddressChoice_st
1149 		{
1150 			int type;
1151 
1152 			union u_
1153 			{
1154 				libressl_d.openssl.ossl_typ.ASN1_NULL* inherit;
1155 				.IPAddressOrRanges* addressesOrRanges;
1156 			}
1157 
1158 			u_ u;
1159 		}
1160 
1161 		alias IPAddressChoice = .IPAddressChoice_st;
1162 
1163 		struct IPAddressFamily_st
1164 		{
1165 			libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* addressFamily;
1166 			.IPAddressChoice* ipAddressChoice;
1167 		}
1168 
1169 		alias IPAddressFamily = .IPAddressFamily_st;
1170 
1171 		//DECLARE_STACK_OF(IPAddressFamily)
1172 		struct stack_st_IPAddressFamily
1173 		{
1174 			libressl_d.openssl.stack._STACK stack;
1175 		}
1176 
1177 		alias IPAddrBlocks = .stack_st_IPAddressFamily;
1178 
1179 		.IPAddressRange* IPAddressRange_new();
1180 		void IPAddressRange_free(.IPAddressRange* a);
1181 		.IPAddressRange* d2i_IPAddressRange(.IPAddressRange** a, const (ubyte)** in_, core.stdc.config.c_long len);
1182 		int i2d_IPAddressRange(.IPAddressRange* a, ubyte** out_);
1183 		extern __gshared const ASN1_ITEM IPAddressRange_it;
1184 
1185 		.IPAddressOrRange* IPAddressOrRange_new();
1186 		void IPAddressOrRange_free(.IPAddressOrRange* a);
1187 		.IPAddressOrRange* d2i_IPAddressOrRange(.IPAddressOrRange** a, const (ubyte)** in_, core.stdc.config.c_long len);
1188 		int i2d_IPAddressOrRange(.IPAddressOrRange* a, ubyte** out_);
1189 		extern __gshared const ASN1_ITEM IPAddressOrRange_it;
1190 
1191 		.IPAddressChoice* IPAddressChoice_new();
1192 		void IPAddressChoice_free(.IPAddressChoice* a);
1193 		.IPAddressChoice* d2i_IPAddressChoice(.IPAddressChoice** a, const (ubyte)** in_, core.stdc.config.c_long len);
1194 		int i2d_IPAddressChoice(.IPAddressChoice* a, ubyte** out_);
1195 		extern __gshared const ASN1_ITEM IPAddressChoice_it;
1196 
1197 		.IPAddressFamily* IPAddressFamily_new();
1198 		void IPAddressFamily_free(.IPAddressFamily* a);
1199 		.IPAddressFamily* d2i_IPAddressFamily(.IPAddressFamily** a, const (ubyte)** in_, core.stdc.config.c_long len);
1200 		int i2d_IPAddressFamily(.IPAddressFamily* a, ubyte** out_);
1201 		extern __gshared const ASN1_ITEM IPAddressFamily_it;
1202 
1203 		/*
1204 		 * API tag for elements of the ASIdentifer SEQUENCE.
1205 		 */
1206 		enum V3_ASID_ASNUM = 0;
1207 		enum V3_ASID_RDI = 1;
1208 
1209 		/*
1210 		 * AFI values, assigned by IANA.  It'd be nice to make the AFI
1211 		 * handling code totally generic, but there are too many little things
1212 		 * that would need to be defined for other address families for it to
1213 		 * be worth the trouble.
1214 		 */
1215 		enum IANA_AFI_IPV4 = 1;
1216 		enum IANA_AFI_IPV6 = 2;
1217 
1218 		/*
1219 		 * Utilities to construct and extract values from RFC3779 extensions,
1220 		 * since some of the encodings (particularly for IP address prefixes
1221 		 * and ranges) are a bit tedious to work with directly.
1222 		 */
1223 		int X509v3_asid_add_inherit(.ASIdentifiers* asid, int which);
1224 		int X509v3_asid_add_id_or_range(.ASIdentifiers* asid, int which, libressl_d.openssl.ossl_typ.ASN1_INTEGER* min, libressl_d.openssl.ossl_typ.ASN1_INTEGER* max);
1225 		int X509v3_addr_add_inherit(.IPAddrBlocks* addr, const uint afi, const (uint)* safi);
1226 		int X509v3_addr_add_prefix(.IPAddrBlocks* addr, const uint afi, const (uint)* safi, ubyte* a, const int prefixlen);
1227 		int X509v3_addr_add_range(.IPAddrBlocks* addr, const uint afi, const (uint)* safi, ubyte* min, ubyte* max);
1228 		uint X509v3_addr_get_afi(const (.IPAddressFamily)* f);
1229 		int X509v3_addr_get_range(.IPAddressOrRange* aor, const uint afi, ubyte* min, ubyte* max, const int length);
1230 
1231 		/*
1232 		 * Canonical forms.
1233 		 */
1234 		int X509v3_asid_is_canonical(.ASIdentifiers* asid);
1235 		int X509v3_addr_is_canonical(.IPAddrBlocks* addr);
1236 		int X509v3_asid_canonize(.ASIdentifiers* asid);
1237 		int X509v3_addr_canonize(.IPAddrBlocks* addr);
1238 
1239 		/*
1240 		 * Tests for inheritance and containment.
1241 		 */
1242 		int X509v3_asid_inherits(.ASIdentifiers* asid);
1243 		int X509v3_addr_inherits(.IPAddrBlocks* addr);
1244 		int X509v3_asid_subset(.ASIdentifiers* a, .ASIdentifiers* b);
1245 		int X509v3_addr_subset(.IPAddrBlocks* a, .IPAddrBlocks* b);
1246 
1247 		/*
1248 		 * Check whether RFC 3779 extensions nest properly in chains.
1249 		 */
1250 		int X509v3_asid_validate_path(libressl_d.openssl.ossl_typ.X509_STORE_CTX*);
1251 		int X509v3_addr_validate_path(libressl_d.openssl.ossl_typ.X509_STORE_CTX*);
1252 		int X509v3_asid_validate_resource_set(libressl_d.openssl.x509.stack_st_X509* chain, .ASIdentifiers* ext, int allow_inheritance);
1253 		int X509v3_addr_validate_resource_set(libressl_d.openssl.x509.stack_st_X509* chain, .IPAddrBlocks* ext, int allow_inheritance);
1254 	}
1255 }
1256 
1257 /* BEGIN ERROR CODES */
1258 /**
1259  * The following lines are auto generated by the script mkerr.pl. Any changes
1260  * made after this point may be overwritten when the script is next run.
1261  */
1262 void ERR_load_X509V3_strings();
1263 
1264 /* Error codes for the X509V3 functions. */
1265 
1266 /* Function codes. */
1267 enum X509V3_F_A2I_GENERAL_NAME = 164;
1268 enum X509V3_F_ASIDENTIFIERCHOICE_CANONIZE = 161;
1269 enum X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL = 162;
1270 enum X509V3_F_COPY_EMAIL = 122;
1271 enum X509V3_F_COPY_ISSUER = 123;
1272 enum X509V3_F_DO_DIRNAME = 144;
1273 enum X509V3_F_DO_EXT_CONF = 124;
1274 enum X509V3_F_DO_EXT_I2D = 135;
1275 enum X509V3_F_DO_EXT_NCONF = 151;
1276 enum X509V3_F_DO_I2V_NAME_CONSTRAINTS = 148;
1277 enum X509V3_F_GNAMES_FROM_SECTNAME = 156;
1278 enum X509V3_F_HEX_TO_STRING = 111;
1279 enum X509V3_F_I2S_ASN1_ENUMERATED = 121;
1280 enum X509V3_F_I2S_ASN1_IA5STRING = 149;
1281 enum X509V3_F_I2S_ASN1_INTEGER = 120;
1282 enum X509V3_F_I2V_AUTHORITY_INFO_ACCESS = 138;
1283 enum X509V3_F_NOTICE_SECTION = 132;
1284 enum X509V3_F_NREF_NOS = 133;
1285 enum X509V3_F_POLICY_SECTION = 131;
1286 enum X509V3_F_PROCESS_PCI_VALUE = 150;
1287 enum X509V3_F_R2I_CERTPOL = 130;
1288 enum X509V3_F_R2I_PCI = 155;
1289 enum X509V3_F_S2I_ASN1_IA5STRING = 100;
1290 enum X509V3_F_S2I_ASN1_INTEGER = 108;
1291 enum X509V3_F_S2I_ASN1_OCTET_STRING = 112;
1292 enum X509V3_F_S2I_ASN1_SKEY_ID = 114;
1293 enum X509V3_F_S2I_SKEY_ID = 115;
1294 enum X509V3_F_SET_DIST_POINT_NAME = 158;
1295 enum X509V3_F_STRING_TO_HEX = 113;
1296 enum X509V3_F_SXNET_ADD_ID_ASC = 125;
1297 enum X509V3_F_SXNET_ADD_ID_INTEGER = 126;
1298 enum X509V3_F_SXNET_ADD_ID_ULONG = 127;
1299 enum X509V3_F_SXNET_GET_ID_ASC = 128;
1300 enum X509V3_F_SXNET_GET_ID_ULONG = 129;
1301 enum X509V3_F_V2I_ASIDENTIFIERS = 163;
1302 enum X509V3_F_V2I_ASN1_BIT_STRING = 101;
1303 enum X509V3_F_V2I_AUTHORITY_INFO_ACCESS = 139;
1304 enum X509V3_F_V2I_AUTHORITY_KEYID = 119;
1305 enum X509V3_F_V2I_BASIC_CONSTRAINTS = 102;
1306 enum X509V3_F_V2I_CRLD = 134;
1307 enum X509V3_F_V2I_EXTENDED_KEY_USAGE = 103;
1308 enum X509V3_F_V2I_GENERAL_NAMES = 118;
1309 enum X509V3_F_V2I_GENERAL_NAME_EX = 117;
1310 enum X509V3_F_V2I_IDP = 157;
1311 enum X509V3_F_V2I_IPADDRBLOCKS = 159;
1312 enum X509V3_F_V2I_ISSUER_ALT = 153;
1313 enum X509V3_F_V2I_NAME_CONSTRAINTS = 147;
1314 enum X509V3_F_V2I_POLICY_CONSTRAINTS = 146;
1315 enum X509V3_F_V2I_POLICY_MAPPINGS = 145;
1316 enum X509V3_F_V2I_SUBJECT_ALT = 154;
1317 enum X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL = 160;
1318 enum X509V3_F_V3_GENERIC_EXTENSION = 116;
1319 enum X509V3_F_X509V3_ADD1_I2D = 140;
1320 enum X509V3_F_X509V3_ADD_VALUE = 105;
1321 enum X509V3_F_X509V3_EXT_ADD = 104;
1322 enum X509V3_F_X509V3_EXT_ADD_ALIAS = 106;
1323 enum X509V3_F_X509V3_EXT_CONF = 107;
1324 enum X509V3_F_X509V3_EXT_I2D = 136;
1325 enum X509V3_F_X509V3_EXT_NCONF = 152;
1326 enum X509V3_F_X509V3_GET_SECTION = 142;
1327 enum X509V3_F_X509V3_GET_STRING = 143;
1328 enum X509V3_F_X509V3_GET_VALUE_BOOL = 110;
1329 enum X509V3_F_X509V3_PARSE_LIST = 109;
1330 enum X509V3_F_X509_PURPOSE_ADD = 137;
1331 enum X509V3_F_X509_PURPOSE_SET = 141;
1332 
1333 /* Reason codes. */
1334 enum X509V3_R_BAD_IP_ADDRESS = 118;
1335 enum X509V3_R_BAD_OBJECT = 119;
1336 enum X509V3_R_BN_DEC2BN_ERROR = 100;
1337 enum X509V3_R_BN_TO_ASN1_INTEGER_ERROR = 101;
1338 enum X509V3_R_DIRNAME_ERROR = 149;
1339 enum X509V3_R_DISTPOINT_ALREADY_SET = 160;
1340 enum X509V3_R_DUPLICATE_ZONE_ID = 133;
1341 enum X509V3_R_ERROR_CONVERTING_ZONE = 131;
1342 enum X509V3_R_ERROR_CREATING_EXTENSION = 144;
1343 enum X509V3_R_ERROR_IN_EXTENSION = 128;
1344 enum X509V3_R_EXPECTED_A_SECTION_NAME = 137;
1345 enum X509V3_R_EXTENSION_EXISTS = 145;
1346 enum X509V3_R_EXTENSION_NAME_ERROR = 115;
1347 enum X509V3_R_EXTENSION_NOT_FOUND = 102;
1348 enum X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED = 103;
1349 enum X509V3_R_EXTENSION_VALUE_ERROR = 116;
1350 enum X509V3_R_ILLEGAL_EMPTY_EXTENSION = 151;
1351 enum X509V3_R_ILLEGAL_HEX_DIGIT = 113;
1352 enum X509V3_R_INCORRECT_POLICY_SYNTAX_TAG = 152;
1353 enum X509V3_R_INVALID_MULTIPLE_RDNS = 161;
1354 enum X509V3_R_INVALID_ASNUMBER = 162;
1355 enum X509V3_R_INVALID_ASRANGE = 163;
1356 enum X509V3_R_INVALID_BOOLEAN_STRING = 104;
1357 enum X509V3_R_INVALID_EXTENSION_STRING = 105;
1358 enum X509V3_R_INVALID_INHERITANCE = 165;
1359 enum X509V3_R_INVALID_IPADDRESS = 166;
1360 enum X509V3_R_INVALID_NAME = 106;
1361 enum X509V3_R_INVALID_NULL_ARGUMENT = 107;
1362 enum X509V3_R_INVALID_NULL_NAME = 108;
1363 enum X509V3_R_INVALID_NULL_VALUE = 109;
1364 enum X509V3_R_INVALID_NUMBER = 140;
1365 enum X509V3_R_INVALID_NUMBERS = 141;
1366 enum X509V3_R_INVALID_OBJECT_IDENTIFIER = 110;
1367 enum X509V3_R_INVALID_OPTION = 138;
1368 enum X509V3_R_INVALID_POLICY_IDENTIFIER = 134;
1369 enum X509V3_R_INVALID_PROXY_POLICY_SETTING = 153;
1370 enum X509V3_R_INVALID_PURPOSE = 146;
1371 enum X509V3_R_INVALID_SAFI = 164;
1372 enum X509V3_R_INVALID_SECTION = 135;
1373 enum X509V3_R_INVALID_SYNTAX = 143;
1374 enum X509V3_R_ISSUER_DECODE_ERROR = 126;
1375 enum X509V3_R_MISSING_VALUE = 124;
1376 enum X509V3_R_NEED_ORGANIZATION_AND_NUMBERS = 142;
1377 enum X509V3_R_NO_CONFIG_DATABASE = 136;
1378 enum X509V3_R_NO_ISSUER_CERTIFICATE = 121;
1379 enum X509V3_R_NO_ISSUER_DETAILS = 127;
1380 enum X509V3_R_NO_POLICY_IDENTIFIER = 139;
1381 enum X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED = 154;
1382 enum X509V3_R_NO_PUBLIC_KEY = 114;
1383 enum X509V3_R_NO_SUBJECT_DETAILS = 125;
1384 enum X509V3_R_ODD_NUMBER_OF_DIGITS = 112;
1385 enum X509V3_R_OPERATION_NOT_DEFINED = 148;
1386 enum X509V3_R_OTHERNAME_ERROR = 147;
1387 enum X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED = 155;
1388 enum X509V3_R_POLICY_PATH_LENGTH = 156;
1389 enum X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED = 157;
1390 enum X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED = 158;
1391 enum X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY = 159;
1392 enum X509V3_R_SECTION_NOT_FOUND = 150;
1393 enum X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS = 122;
1394 enum X509V3_R_UNABLE_TO_GET_ISSUER_KEYID = 123;
1395 enum X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT = 111;
1396 enum X509V3_R_UNKNOWN_EXTENSION = 129;
1397 enum X509V3_R_UNKNOWN_EXTENSION_NAME = 130;
1398 enum X509V3_R_UNKNOWN_OPTION = 120;
1399 enum X509V3_R_UNSUPPORTED_OPTION = 117;
1400 enum X509V3_R_UNSUPPORTED_TYPE = 167;
1401 enum X509V3_R_USER_TOO_LONG = 132;