1 /* $OpenBSD: x509.h,v 1.76 2021/09/02 12:41:44 job Exp $ */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3  * All rights reserved.
4  *
5  * This package is an SSL implementation written
6  * by Eric Young (eay@cryptsoft.com).
7  * The implementation was written so as to conform with Netscapes SSL.
8  *
9  * This library is free for commercial and non-commercial use as core.stdc.config.c_long as
10  * the following conditions are aheared to.  The following conditions
11  * apply to all code found in this distribution, be it the RC4, RSA,
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13  * included with this distribution is covered by the same copyright terms
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15  *
16  * Copyright remains Eric Young's, and as such any Copyright notices in
17  * the code are not to be removed.
18  * If this package is used in a product, Eric Young should be given attribution
19  * as the author of the parts of the library used.
20  * This can be in the form of a textual message at program startup or
21  * in documentation (online or textual) provided with the package.
22  *
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the copyright
27  *    notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  *    notice, this list of conditions and the following disclaimer in the
30  *    documentation and/or other materials provided with the distribution.
31  * 3. All advertising materials mentioning features or use of this software
32  *    must display the following acknowledgement:
33  *    "This product includes cryptographic software written by
34  *     Eric Young (eay@cryptsoft.com)"
35  *    The word 'cryptographic' can be left out if the rouines from the library
36  *    being used are not cryptographic related :-).
37  * 4. If you include any Windows specific code (or a derivative thereof) from
38  *    the apps directory (application code) you must include an acknowledgement:
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40  *
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  *
53  * The licence and distribution terms for any publically available version or
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be
55  * copied and put under another distribution licence
56  * [including the GNU Public Licence.]
57  */
58 /* ====================================================================
59  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60  * ECDH support in OpenSSL originally developed by
61  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
62  */
63 module libressl_d.openssl.x509;
64 
65 
66 private static import core.stdc.config;
67 private static import libressl_d.compat.stdio;
68 private static import libressl_d.compat.time;
69 private static import libressl_d.openssl.x509v3;
70 public import libressl_d.openssl.asn1;
71 public import libressl_d.openssl.bio;
72 public import libressl_d.openssl.ec;
73 public import libressl_d.openssl.evp;
74 public import libressl_d.openssl.opensslconf;
75 public import libressl_d.openssl.ossl_typ;
76 public import libressl_d.openssl.pkcs7;
77 public import libressl_d.openssl.safestack;
78 public import libressl_d.openssl.sha;
79 public import libressl_d.openssl.stack;
80 public import libressl_d.openssl.x509_vfy;
81 
82 enum HEADER_X509_H = true;
83 
84 version (OPENSSL_NO_BUFFER) {
85 } else {
86 	public import libressl_d.openssl.buffer;
87 }
88 
89 version (OPENSSL_NO_EVP) {
90 } else {
91 	public import libressl_d.openssl.evp;
92 }
93 
94 version (OPENSSL_NO_BIO) {
95 } else {
96 	public import libressl_d.openssl.bio;
97 }
98 
99 version (OPENSSL_NO_EC) {
100 } else {
101 	public import libressl_d.openssl.ec;
102 }
103 
104 version (OPENSSL_NO_ECDSA) {
105 } else {
106 	public import libressl_d.openssl.ecdsa;
107 }
108 
109 version (OPENSSL_NO_ECDH) {
110 } else {
111 	public import libressl_d.openssl.ecdh;
112 }
113 
114 version (OPENSSL_NO_DEPRECATED) {
115 } else {
116 	version (OPENSSL_NO_RSA) {
117 	} else {
118 		public import libressl_d.openssl.rsa;
119 	}
120 
121 	version (OPENSSL_NO_DSA) {
122 	} else {
123 		public import libressl_d.openssl.dsa;
124 	}
125 
126 	version (OPENSSL_NO_DH) {
127 	} else {
128 		public import libressl_d.openssl.dh;
129 	}
130 }
131 
132 version (OPENSSL_NO_SHA) {
133 } else {
134 	public import libressl_d.openssl.sha;
135 }
136 
137 extern (C):
138 nothrow @nogc:
139 
140 //#if defined(_WIN32) && defined(__WINCRYPT_H__)
141 	version (LIBRESSL_INTERNAL) {
142 	} else {
143 		//pragma(msg, "Warning, overriding WinCrypt defines");
144 	}
145 
146 	//#undef libressl_d.openssl.ossl_typ.X509_NAME
147 	//#undef X509_CERT_PAIR
148 	//#undef X509_EXTENSIONS
149 //#endif
150 
151 enum X509_FILETYPE_PEM = 1;
152 enum X509_FILETYPE_ASN1 = 2;
153 enum X509_FILETYPE_DEFAULT = 3;
154 
155 enum X509v3_KU_DIGITAL_SIGNATURE = 0x0080;
156 enum X509v3_KU_NON_REPUDIATION = 0x0040;
157 enum X509v3_KU_KEY_ENCIPHERMENT = 0x0020;
158 enum X509v3_KU_DATA_ENCIPHERMENT = 0x0010;
159 enum X509v3_KU_KEY_AGREEMENT = 0x0008;
160 enum X509v3_KU_KEY_CERT_SIGN = 0x0004;
161 enum X509v3_KU_CRL_SIGN = 0x0002;
162 enum X509v3_KU_ENCIPHER_ONLY = 0x0001;
163 enum X509v3_KU_DECIPHER_ONLY = 0x8000;
164 enum X509v3_KU_UNDEF = 0xFFFF;
165 
166 struct X509_objects_st
167 {
168 	int nid;
169 	int function() a2i;
170 	int function() i2a;
171 }
172 
173 alias X509_OBJECTS = .X509_objects_st;
174 
175 struct X509_algor_st
176 {
177 	libressl_d.openssl.asn1.ASN1_OBJECT* algorithm;
178 	libressl_d.openssl.asn1.ASN1_TYPE* parameter;
179 }
180 
181 alias X509_ALGORS = libressl_d.openssl.asn1.stack_st_X509_ALGOR;
182 
183 struct X509_val_st
184 {
185 	libressl_d.openssl.ossl_typ.ASN1_TIME* notBefore;
186 	libressl_d.openssl.ossl_typ.ASN1_TIME* notAfter;
187 }
188 
189 alias X509_VAL = .X509_val_st;
190 
191 struct X509_pubkey_st
192 {
193 	libressl_d.openssl.ossl_typ.X509_ALGOR* algor;
194 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* public_key;
195 	libressl_d.openssl.ossl_typ.EVP_PKEY* pkey;
196 }
197 
198 struct X509_sig_st
199 {
200 	libressl_d.openssl.ossl_typ.X509_ALGOR* algor;
201 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* digest;
202 }
203 
204 alias X509_SIG = .X509_sig_st;
205 
206 struct X509_name_entry_st
207 {
208 	libressl_d.openssl.asn1.ASN1_OBJECT* object;
209 	libressl_d.openssl.ossl_typ.ASN1_STRING* value;
210 	int set;
211 
212 	/**
213 	 * temp variable
214 	 */
215 	int size;
216 }
217 
218 alias X509_NAME_ENTRY = .X509_name_entry_st;
219 
220 //DECLARE_STACK_OF(X509_NAME_ENTRY)
221 struct stack_st_X509_NAME_ENTRY
222 {
223 	libressl_d.openssl.stack._STACK stack;
224 }
225 
226 /**
227  * we always keep X509_NAMEs in 2 forms.
228  */
229 struct X509_name_st
230 {
231 	.stack_st_X509_NAME_ENTRY* entries;
232 
233 	/**
234 	 * true if 'bytes' needs to be built
235 	 */
236 	int modified;
237 
238 	version (OPENSSL_NO_BUFFER) {
239 		char* bytes;
240 	} else {
241 		libressl_d.openssl.ossl_typ.BUF_MEM* bytes;
242 	}
243 
244 	/*	core.stdc.config.c_ulong hash; Keep the hash around for lookups */
245 	ubyte* canon_enc;
246 	int canon_enclen;
247 }
248 
249 //DECLARE_STACK_OF(X509_NAME)
250 struct stack_st_X509_NAME
251 {
252 	libressl_d.openssl.stack._STACK stack;
253 }
254 
255 enum X509_EX_V_NETSCAPE_HACK = 0x8000;
256 enum X509_EX_V_INIT = 0x0001;
257 
258 struct X509_extension_st
259 {
260 	libressl_d.openssl.asn1.ASN1_OBJECT* object;
261 	libressl_d.openssl.ossl_typ.ASN1_BOOLEAN critical;
262 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* value;
263 }
264 
265 alias X509_EXTENSION = .X509_extension_st;
266 
267 alias X509_EXTENSIONS = .stack_st_X509_EXTENSION;
268 
269 //DECLARE_STACK_OF(X509_EXTENSION)
270 struct stack_st_X509_EXTENSION
271 {
272 	libressl_d.openssl.stack._STACK stack;
273 }
274 
275 /**
276  * a sequence of these are used
277  */
278 struct x509_attributes_st
279 {
280 	libressl_d.openssl.asn1.ASN1_OBJECT* object;
281 
282 	/**
283 	 * 0 for a set, 1 for a single item (which is wrong)
284 	 */
285 	int single;
286 
287 	union value_
288 	{
289 		char* ptr_;
290 
291 		/**
292 		 * 0
293 		 */
294 		libressl_d.openssl.asn1.stack_st_ASN1_TYPE* set;
295 
296 		/**
297 		 * 1
298 		 */
299 		libressl_d.openssl.asn1.ASN1_TYPE* single;
300 	}
301 
302 	value_ value;
303 }
304 
305 alias X509_ATTRIBUTE = .x509_attributes_st;
306 
307 //DECLARE_STACK_OF(X509_ATTRIBUTE)
308 struct stack_st_X509_ATTRIBUTE
309 {
310 	libressl_d.openssl.stack._STACK stack;
311 }
312 
313 struct X509_req_info_st
314 {
315 	libressl_d.openssl.asn1.ASN1_ENCODING enc;
316 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* version_;
317 	libressl_d.openssl.ossl_typ.X509_NAME* subject;
318 	libressl_d.openssl.ossl_typ.X509_PUBKEY* pubkey;
319 	/*  d=2 hl=2 l=  0 cons: cont: 00 */
320 
321 	/**
322 	 * [ 0 ]
323 	 */
324 	.stack_st_X509_ATTRIBUTE* attributes;
325 }
326 
327 alias X509_REQ_INFO = .X509_req_info_st;
328 
329 struct X509_req_st
330 {
331 	.X509_REQ_INFO* req_info;
332 	libressl_d.openssl.ossl_typ.X509_ALGOR* sig_alg;
333 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature;
334 	int references;
335 }
336 
337 alias X509_REQ = .X509_req_st;
338 
339 struct x509_cinf_st
340 {
341 	/**
342 	 * [ 0 ] default of v1
343 	 */
344 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* version_;
345 
346 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* serialNumber;
347 	libressl_d.openssl.ossl_typ.X509_ALGOR* signature;
348 	libressl_d.openssl.ossl_typ.X509_NAME* issuer;
349 	.X509_VAL* validity;
350 	libressl_d.openssl.ossl_typ.X509_NAME* subject;
351 	libressl_d.openssl.ossl_typ.X509_PUBKEY* key;
352 
353 	/**
354 	 * [ 1 ] optional in v2
355 	 */
356 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* issuerUID;
357 
358 	/**
359 	 * [ 2 ] optional in v2
360 	 */
361 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* subjectUID;
362 
363 	/**
364 	 * [ 3 ] optional in v3
365 	 */
366 	.stack_st_X509_EXTENSION* extensions;
367 
368 	libressl_d.openssl.asn1.ASN1_ENCODING enc;
369 }
370 
371 alias X509_CINF = .x509_cinf_st;
372 
373 /*
374  * This stuff is certificate "auxiliary info"
375  * it contains details which are useful in certificate
376  * stores and databases. When used this is tagged onto
377  * the end of the certificate itself
378  */
379 
380 struct x509_cert_aux_st
381 {
382 	/**
383 	 * trusted uses
384 	 */
385 	libressl_d.openssl.asn1.stack_st_ASN1_OBJECT* trust;
386 
387 	/**
388 	 * rejected uses
389 	 */
390 	libressl_d.openssl.asn1.stack_st_ASN1_OBJECT* reject;
391 
392 	/**
393 	 * "friendly name"
394 	 */
395 	libressl_d.openssl.ossl_typ.ASN1_UTF8STRING* alias_;
396 
397 	/**
398 	 * key id of private key
399 	 */
400 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* keyid;
401 
402 	/**
403 	 * other unspecified info
404 	 */
405 	libressl_d.openssl.asn1.stack_st_X509_ALGOR* other;
406 }
407 
408 alias X509_CERT_AUX = .x509_cert_aux_st;
409 
410 struct x509_st
411 {
412 	.X509_CINF* cert_info;
413 	libressl_d.openssl.ossl_typ.X509_ALGOR* sig_alg;
414 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature;
415 	int valid;
416 	int references;
417 	char* name;
418 	libressl_d.openssl.ossl_typ.CRYPTO_EX_DATA ex_data;
419 	/* These contain copies of various extension values */
420 	core.stdc.config.c_long ex_pathlen;
421 	core.stdc.config.c_long ex_pcpathlen;
422 	core.stdc.config.c_ulong ex_flags;
423 	core.stdc.config.c_ulong ex_kusage;
424 	core.stdc.config.c_ulong ex_xkusage;
425 	core.stdc.config.c_ulong ex_nscert;
426 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* skid;
427 	libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* akid;
428 	libressl_d.openssl.ossl_typ.X509_POLICY_CACHE* policy_cache;
429 	libressl_d.openssl.x509v3.stack_st_DIST_POINT* crldp;
430 	libressl_d.openssl.x509v3.stack_st_GENERAL_NAME* altname;
431 	libressl_d.openssl.ossl_typ.NAME_CONSTRAINTS* nc;
432 
433 	version (OPENSSL_NO_RFC3779) {
434 	} else {
435 		libressl_d.openssl.x509v3.stack_st_IPAddressFamily* rfc3779_addr;
436 		libressl_d.openssl.x509v3.ASIdentifiers_st* rfc3779_asid;
437 	}
438 
439 	version (OPENSSL_NO_SHA) {
440 	} else {
441 		ubyte[libressl_d.openssl.sha.SHA_DIGEST_LENGTH] sha1_hash;
442 	}
443 
444 	.X509_CERT_AUX* aux;
445 }
446 
447 //DECLARE_STACK_OF(X509)
448 struct stack_st_X509
449 {
450 	libressl_d.openssl.stack._STACK stack;
451 }
452 
453 /* This is used for a table of trust checking functions */
454 
455 struct x509_trust_st
456 {
457 	int trust;
458 	int flags;
459 	int function(.x509_trust_st*, libressl_d.openssl.ossl_typ.X509*, int) check_trust;
460 	char* name;
461 	int arg1;
462 	void* arg2;
463 }
464 
465 alias X509_TRUST = .x509_trust_st;
466 
467 //DECLARE_STACK_OF(X509_TRUST)
468 struct stack_st_X509_TRUST
469 {
470 	libressl_d.openssl.stack._STACK stack;
471 }
472 
473 struct x509_cert_pair_st
474 {
475 	libressl_d.openssl.ossl_typ.X509* forward;
476 	libressl_d.openssl.ossl_typ.X509* reverse;
477 }
478 
479 alias X509_CERT_PAIR = .x509_cert_pair_st;
480 
481 /* standard trust ids */
482 
483 /**
484  * Only valid in purpose settings
485  */
486 enum X509_TRUST_DEFAULT = -1;
487 
488 enum X509_TRUST_COMPAT = 1;
489 enum X509_TRUST_SSL_CLIENT = 2;
490 enum X509_TRUST_SSL_SERVER = 3;
491 enum X509_TRUST_EMAIL = 4;
492 enum X509_TRUST_OBJECT_SIGN = 5;
493 enum X509_TRUST_OCSP_SIGN = 6;
494 enum X509_TRUST_OCSP_REQUEST = 7;
495 enum X509_TRUST_TSA = 8;
496 
497 /* Keep these up to date! */
498 enum X509_TRUST_MIN = 1;
499 enum X509_TRUST_MAX = 8;
500 
501 /* trust_flags values */
502 enum X509_TRUST_DYNAMIC = 1;
503 enum X509_TRUST_DYNAMIC_NAME = 2;
504 
505 /* check_trust return codes */
506 
507 enum X509_TRUST_TRUSTED = 1;
508 enum X509_TRUST_REJECTED = 2;
509 enum X509_TRUST_UNTRUSTED = 3;
510 
511 /* Flags for X509_print_ex() */
512 
513 enum X509_FLAG_COMPAT = 0;
514 enum X509_FLAG_NO_HEADER = 1L;
515 enum X509_FLAG_NO_VERSION = 1L << 1;
516 enum X509_FLAG_NO_SERIAL = 1L << 2;
517 enum X509_FLAG_NO_SIGNAME = 1L << 3;
518 enum X509_FLAG_NO_ISSUER = 1L << 4;
519 enum X509_FLAG_NO_VALIDITY = 1L << 5;
520 enum X509_FLAG_NO_SUBJECT = 1L << 6;
521 enum X509_FLAG_NO_PUBKEY = 1L << 7;
522 enum X509_FLAG_NO_EXTENSIONS = 1L << 8;
523 enum X509_FLAG_NO_SIGDUMP = 1L << 9;
524 enum X509_FLAG_NO_AUX = 1L << 10;
525 enum X509_FLAG_NO_ATTRIBUTES = 1L << 11;
526 
527 /* Flags specific to X509_NAME_print_ex() */
528 
529 /* The field separator information */
530 
531 enum XN_FLAG_SEP_MASK = 0x0F << 16;
532 
533 /**
534  * Traditional SSLeay: use old X509_NAME_print
535  */
536 enum XN_FLAG_COMPAT = 0;
537 
538 /**
539  * RFC2253 ,+
540  */
541 enum XN_FLAG_SEP_COMMA_PLUS = 1 << 16;
542 
543 /**
544  * ,+ spaced: more readable
545  */
546 enum XN_FLAG_SEP_CPLUS_SPC = 2 << 16;
547 
548 /**
549  * ;+ spaced
550  */
551 enum XN_FLAG_SEP_SPLUS_SPC = 3 << 16;
552 
553 /**
554  * One line per field
555  */
556 enum XN_FLAG_SEP_MULTILINE = 4 << 16;
557 
558 /**
559  * Reverse DN order
560  */
561 enum XN_FLAG_DN_REV = 1 << 20;
562 
563 /* How the field name is shown */
564 
565 enum XN_FLAG_FN_MASK = 0x03 << 21;
566 
567 /**
568  * Object short name
569  */
570 enum XN_FLAG_FN_SN = 0;
571 
572 /**
573  * Object core.stdc.config.c_long name
574  */
575 enum XN_FLAG_FN_LN = 1 << 21;
576 
577 /**
578  * Always use OIDs
579  */
580 enum XN_FLAG_FN_OID = 2 << 21;
581 
582 /**
583  * No field names
584  */
585 enum XN_FLAG_FN_NONE = 3 << 21;
586 
587 /**
588  * Put spaces round '='
589  */
590 enum XN_FLAG_SPC_EQ = 1 << 23;
591 
592 /*
593  * This determines if we dump fields we don't recognise:
594  * RFC2253 requires this.
595  */
596 
597 enum XN_FLAG_DUMP_UNKNOWN_FIELDS = 1 << 24;
598 
599 /**
600  * Align field names to 20 characters
601  */
602 enum XN_FLAG_FN_ALIGN = 1 << 25;
603 
604 /* Complete set of RFC2253 flags */
605 
606 enum XN_FLAG_RFC2253 = libressl_d.openssl.asn1.ASN1_STRFLGS_RFC2253 | .XN_FLAG_SEP_COMMA_PLUS | .XN_FLAG_DN_REV | .XN_FLAG_FN_SN | .XN_FLAG_DUMP_UNKNOWN_FIELDS;
607 
608 /* readable oneline form */
609 
610 enum XN_FLAG_ONELINE = libressl_d.openssl.asn1.ASN1_STRFLGS_RFC2253 | libressl_d.openssl.asn1.ASN1_STRFLGS_ESC_QUOTE | .XN_FLAG_SEP_CPLUS_SPC | .XN_FLAG_SPC_EQ | .XN_FLAG_FN_SN;
611 
612 /* readable multiline form */
613 
614 enum XN_FLAG_MULTILINE = libressl_d.openssl.asn1.ASN1_STRFLGS_ESC_CTRL | libressl_d.openssl.asn1.ASN1_STRFLGS_ESC_MSB | .XN_FLAG_SEP_MULTILINE | .XN_FLAG_SPC_EQ | .XN_FLAG_FN_LN | .XN_FLAG_FN_ALIGN;
615 
616 struct x509_revoked_st
617 {
618 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* serialNumber;
619 	libressl_d.openssl.ossl_typ.ASN1_TIME* revocationDate;
620 	.stack_st_X509_EXTENSION /* optional */ * extensions;
621 	/* Set up if indirect CRL */
622 	libressl_d.openssl.x509v3.stack_st_GENERAL_NAME* issuer;
623 	/* Revocation reason */
624 	int reason;
625 
626 	/**
627 	 * load sequence
628 	 */
629 	int sequence;
630 }
631 
632 //DECLARE_STACK_OF(X509_REVOKED)
633 struct stack_st_X509_REVOKED
634 {
635 	libressl_d.openssl.stack._STACK stack;
636 }
637 
638 struct X509_crl_info_st
639 {
640 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* version_;
641 	libressl_d.openssl.ossl_typ.X509_ALGOR* sig_alg;
642 	libressl_d.openssl.ossl_typ.X509_NAME* issuer;
643 	libressl_d.openssl.ossl_typ.ASN1_TIME* lastUpdate;
644 	libressl_d.openssl.ossl_typ.ASN1_TIME* nextUpdate;
645 	.stack_st_X509_REVOKED* revoked;
646 	.stack_st_X509_EXTENSION /* [0] */ * extensions;
647 	libressl_d.openssl.asn1.ASN1_ENCODING enc;
648 }
649 
650 alias X509_CRL_INFO = .X509_crl_info_st;
651 
652 struct stack_st_GENERAL_NAMES;
653 
654 struct X509_crl_st
655 {
656 	/* actual signature */
657 	.X509_CRL_INFO* crl;
658 	libressl_d.openssl.ossl_typ.X509_ALGOR* sig_alg;
659 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature;
660 	int references;
661 	int flags;
662 	/* Copies of various extensions */
663 	libressl_d.openssl.ossl_typ.AUTHORITY_KEYID* akid;
664 	libressl_d.openssl.ossl_typ.ISSUING_DIST_POINT* idp;
665 	/* Convenient breakdown of IDP */
666 	int idp_flags;
667 	int idp_reasons;
668 	/* CRL and base CRL numbers for delta processing */
669 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* crl_number;
670 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* base_crl_number;
671 
672 	version (OPENSSL_NO_SHA) {
673 	} else {
674 		ubyte[libressl_d.openssl.sha.SHA_DIGEST_LENGTH] sha1_hash;
675 	}
676 
677 	.stack_st_GENERAL_NAMES* issuers;
678 	const (libressl_d.openssl.ossl_typ.X509_CRL_METHOD)* meth;
679 	void* meth_data;
680 }
681 
682 //DECLARE_STACK_OF(X509_CRL)
683 struct stack_st_X509_CRL
684 {
685 	libressl_d.openssl.stack._STACK stack;
686 }
687 
688 struct private_key_st
689 {
690 	int version_;
691 	/* The PKCS#8 data types */
692 	libressl_d.openssl.ossl_typ.X509_ALGOR* enc_algor;
693 
694 	/**
695 	 * encrypted pub key
696 	 */
697 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* enc_pkey;
698 
699 	/* When decrypted, the following will not be null */
700 	libressl_d.openssl.ossl_typ.EVP_PKEY* dec_pkey;
701 
702 	/* used to encrypt and decrypt */
703 	int key_length;
704 	char* key_data;
705 
706 	/**
707 	 * true if we should auto free key_data
708 	 */
709 	int key_free;
710 
711 	/* expanded version of 'enc_algor' */
712 	libressl_d.openssl.evp.EVP_CIPHER_INFO cipher;
713 
714 	int references;
715 }
716 
717 alias X509_PKEY = .private_key_st;
718 
719 version (OPENSSL_NO_EVP) {
720 } else {
721 	struct X509_info_st
722 	{
723 		libressl_d.openssl.ossl_typ.X509* x509;
724 		libressl_d.openssl.ossl_typ.X509_CRL* crl;
725 		.X509_PKEY* x_pkey;
726 
727 		libressl_d.openssl.evp.EVP_CIPHER_INFO enc_cipher;
728 		int enc_len;
729 		char* enc_data;
730 
731 		int references;
732 	}
733 
734 	alias X509_INFO = .X509_info_st;
735 
736 	//DECLARE_STACK_OF(X509_INFO)
737 	struct stack_st_X509_INFO
738 	{
739 		libressl_d.openssl.stack._STACK stack;
740 	}
741 }
742 
743 /**
744  * The next 2 structures and their 8 routines were sent to me by
745  * Pat Richard <patr@x509.com> and are used to manipulate
746  * Netscapes spki structures - useful if you are writing a CA web page
747  */
748 struct Netscape_spkac_st
749 {
750 	libressl_d.openssl.ossl_typ.X509_PUBKEY* pubkey;
751 
752 	/**
753 	 * challenge sent in atlas >= PR2
754 	 */
755 	libressl_d.openssl.ossl_typ.ASN1_IA5STRING* challenge;
756 }
757 
758 alias NETSCAPE_SPKAC = .Netscape_spkac_st;
759 
760 struct Netscape_spki_st
761 {
762 	/**
763 	 * signed public key and challenge
764 	 */
765 	.NETSCAPE_SPKAC* spkac;
766 
767 	libressl_d.openssl.ossl_typ.X509_ALGOR* sig_algor;
768 	libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature;
769 }
770 
771 alias NETSCAPE_SPKI = .Netscape_spki_st;
772 
773 /**
774  * Netscape certificate sequence structure
775  */
776 struct Netscape_certificate_sequence
777 {
778 	libressl_d.openssl.asn1.ASN1_OBJECT* type;
779 	.stack_st_X509* certs;
780 }
781 
782 alias NETSCAPE_CERT_SEQUENCE = .Netscape_certificate_sequence;
783 
784 /*
785  * nused (and iv length is wrong)
786 struct CBCParameter_st
787 {
788 ubyte[8] iv;
789 }
790 
791 alias CBC_PARAM = .CBCParameter_st;
792  */
793 
794 /* Password based encryption structure */
795 
796 struct PBEPARAM_st
797 {
798 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* salt;
799 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* iter;
800 }
801 
802 alias PBEPARAM = .PBEPARAM_st;
803 
804 /**
805  * Password based encryption V2 structures
806  */
807 struct PBE2PARAM_st
808 {
809 	libressl_d.openssl.ossl_typ.X509_ALGOR* keyfunc;
810 	libressl_d.openssl.ossl_typ.X509_ALGOR* encryption;
811 }
812 
813 alias PBE2PARAM = .PBE2PARAM_st;
814 
815 struct PBKDF2PARAM_st
816 {
817 	/**
818 	 * Usually OCTET STRING but could be anything
819 	 */
820 	libressl_d.openssl.asn1.ASN1_TYPE* salt;
821 
822 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* iter;
823 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* keylength;
824 	libressl_d.openssl.ossl_typ.X509_ALGOR* prf;
825 }
826 
827 alias PBKDF2PARAM = .PBKDF2PARAM_st;
828 
829 /**
830  * PKCS#8 private key info structure
831  */
832 struct pkcs8_priv_key_info_st
833 {
834 	libressl_d.openssl.ossl_typ.ASN1_INTEGER* version_;
835 	libressl_d.openssl.ossl_typ.X509_ALGOR* pkeyalg;
836 	libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* pkey;
837 	.stack_st_X509_ATTRIBUTE* attributes;
838 }
839 
840 enum X509_EXT_PACK_UNKNOWN = 1;
841 enum X509_EXT_PACK_STRING = 2;
842 
843 /* ****/
844 alias X509_extract_key = .X509_get_pubkey;
845 
846 alias X509_REQ_extract_key = .X509_REQ_get_pubkey;
847 alias X509_name_cmp = .X509_NAME_cmp;
848 
849 int X509_CRL_up_ref(libressl_d.openssl.ossl_typ.X509_CRL* x);
850 int X509_CRL_get_signature_nid(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl);
851 
852 const (.stack_st_X509_EXTENSION)* X509_CRL_get0_extensions(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl);
853 core.stdc.config.c_long X509_CRL_get_version(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl);
854 const (libressl_d.openssl.ossl_typ.ASN1_TIME)* X509_CRL_get0_lastUpdate(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl);
855 const (libressl_d.openssl.ossl_typ.ASN1_TIME)* X509_CRL_get0_nextUpdate(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl);
856 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_CRL_get_lastUpdate(libressl_d.openssl.ossl_typ.X509_CRL* crl);
857 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_CRL_get_nextUpdate(libressl_d.openssl.ossl_typ.X509_CRL* crl);
858 libressl_d.openssl.ossl_typ.X509_NAME* X509_CRL_get_issuer(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl);
859 .stack_st_X509_REVOKED* X509_CRL_get_REVOKED(libressl_d.openssl.ossl_typ.X509_CRL* crl);
860 void X509_CRL_get0_signature(const (libressl_d.openssl.ossl_typ.X509_CRL)* crl, const (libressl_d.openssl.ossl_typ.ASN1_BIT_STRING)** psig, const (libressl_d.openssl.ossl_typ.X509_ALGOR)** palg);
861 
862 int X509_REQ_get_signature_nid(const (.X509_REQ)* req);
863 
864 void X509_REQ_get0_signature(const (.X509_REQ)* req, const (libressl_d.openssl.ossl_typ.ASN1_BIT_STRING)** psig, const (libressl_d.openssl.ossl_typ.X509_ALGOR)** palg);
865 
866 void X509_CRL_set_default_method(const (libressl_d.openssl.ossl_typ.X509_CRL_METHOD)* meth);
867 libressl_d.openssl.ossl_typ.X509_CRL_METHOD* X509_CRL_METHOD_new(int function(libressl_d.openssl.ossl_typ.X509_CRL* crl) crl_init, int function(libressl_d.openssl.ossl_typ.X509_CRL* crl) crl_free, int function(libressl_d.openssl.ossl_typ.X509_CRL* crl, libressl_d.openssl.ossl_typ.X509_REVOKED** ret, libressl_d.openssl.ossl_typ.ASN1_INTEGER* ser, libressl_d.openssl.ossl_typ.X509_NAME* issuer) crl_lookup, int function(libressl_d.openssl.ossl_typ.X509_CRL* crl, libressl_d.openssl.ossl_typ.EVP_PKEY* pk) crl_verify);
868 void X509_CRL_METHOD_free(libressl_d.openssl.ossl_typ.X509_CRL_METHOD* m);
869 
870 void X509_CRL_set_meth_data(libressl_d.openssl.ossl_typ.X509_CRL* crl, void* dat);
871 void* X509_CRL_get_meth_data(libressl_d.openssl.ossl_typ.X509_CRL* crl);
872 
873 /*
874  * This one is only used so that a binary form can output, as in
875  * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf)
876  */
877 pragma(inline, true)
878 pure nothrow @trusted @nogc @live
879 libressl_d.openssl.ossl_typ.X509_PUBKEY* X509_get_X509_PUBKEY(return scope libressl_d.openssl.ossl_typ.X509* x)
880 
881 	in
882 	{
883 		assert(x != null);
884 		assert(x.cert_info != null);
885 	}
886 
887 	do
888 	{
889 		return x.cert_info.key;
890 	}
891 
892 const (char)* X509_verify_cert_error_string(core.stdc.config.c_long n);
893 
894 version (OPENSSL_NO_EVP) {
895 } else {
896 	int X509_verify(libressl_d.openssl.ossl_typ.X509* a, libressl_d.openssl.ossl_typ.EVP_PKEY* r);
897 
898 	int X509_REQ_verify(.X509_REQ* a, libressl_d.openssl.ossl_typ.EVP_PKEY* r);
899 	int X509_CRL_verify(libressl_d.openssl.ossl_typ.X509_CRL* a, libressl_d.openssl.ossl_typ.EVP_PKEY* r);
900 	int NETSCAPE_SPKI_verify(.NETSCAPE_SPKI* a, libressl_d.openssl.ossl_typ.EVP_PKEY* r);
901 
902 	.NETSCAPE_SPKI* NETSCAPE_SPKI_b64_decode(const (char)* str, int len);
903 	char* NETSCAPE_SPKI_b64_encode(.NETSCAPE_SPKI* x);
904 	libressl_d.openssl.ossl_typ.EVP_PKEY* NETSCAPE_SPKI_get_pubkey(.NETSCAPE_SPKI* x);
905 	int NETSCAPE_SPKI_set_pubkey(.NETSCAPE_SPKI* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
906 
907 	int NETSCAPE_SPKI_print(libressl_d.openssl.bio.BIO* out_, .NETSCAPE_SPKI* spki);
908 
909 	int X509_signature_dump(libressl_d.openssl.bio.BIO* bp, const (libressl_d.openssl.ossl_typ.ASN1_STRING)* sig, int indent);
910 	int X509_signature_print(libressl_d.openssl.bio.BIO* bp, const (libressl_d.openssl.ossl_typ.X509_ALGOR)* alg, const (libressl_d.openssl.ossl_typ.ASN1_STRING)* sig);
911 
912 	int X509_sign(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, const (libressl_d.openssl.ossl_typ.EVP_MD)* md);
913 	int X509_sign_ctx(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.EVP_MD_CTX* ctx);
914 	int X509_REQ_sign(.X509_REQ* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, const (libressl_d.openssl.ossl_typ.EVP_MD)* md);
915 	int X509_REQ_sign_ctx(.X509_REQ* x, libressl_d.openssl.ossl_typ.EVP_MD_CTX* ctx);
916 	int X509_CRL_sign(libressl_d.openssl.ossl_typ.X509_CRL* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, const (libressl_d.openssl.ossl_typ.EVP_MD)* md);
917 	int X509_CRL_sign_ctx(libressl_d.openssl.ossl_typ.X509_CRL* x, libressl_d.openssl.ossl_typ.EVP_MD_CTX* ctx);
918 	int NETSCAPE_SPKI_sign(.NETSCAPE_SPKI* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, const (libressl_d.openssl.ossl_typ.EVP_MD)* md);
919 
920 	int X509_pubkey_digest(const (libressl_d.openssl.ossl_typ.X509)* data, const (libressl_d.openssl.ossl_typ.EVP_MD)* type, ubyte* md, uint* len);
921 	int X509_digest(const (libressl_d.openssl.ossl_typ.X509)* data, const (libressl_d.openssl.ossl_typ.EVP_MD)* type, ubyte* md, uint* len);
922 	int X509_CRL_digest(const (libressl_d.openssl.ossl_typ.X509_CRL)* data, const (libressl_d.openssl.ossl_typ.EVP_MD)* type, ubyte* md, uint* len);
923 	int X509_REQ_digest(const (.X509_REQ)* data, const (libressl_d.openssl.ossl_typ.EVP_MD)* type, ubyte* md, uint* len);
924 	int X509_NAME_digest(const (libressl_d.openssl.ossl_typ.X509_NAME)* data, const (libressl_d.openssl.ossl_typ.EVP_MD)* type, ubyte* md, uint* len);
925 }
926 
927 libressl_d.openssl.ossl_typ.X509* d2i_X509_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.X509** x509);
928 int i2d_X509_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.X509* x509);
929 libressl_d.openssl.ossl_typ.X509_CRL* d2i_X509_CRL_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.X509_CRL** crl);
930 int i2d_X509_CRL_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.X509_CRL* crl);
931 .X509_REQ* d2i_X509_REQ_fp(libressl_d.compat.stdio.FILE* fp, .X509_REQ** req);
932 int i2d_X509_REQ_fp(libressl_d.compat.stdio.FILE* fp, .X509_REQ* req);
933 
934 version (OPENSSL_NO_RSA) {
935 } else {
936 	libressl_d.openssl.ossl_typ.RSA* d2i_RSAPrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.RSA** rsa);
937 	int i2d_RSAPrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.RSA* rsa);
938 	libressl_d.openssl.ossl_typ.RSA* d2i_RSAPublicKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.RSA** rsa);
939 	int i2d_RSAPublicKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.RSA* rsa);
940 	libressl_d.openssl.ossl_typ.RSA* d2i_RSA_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.RSA** rsa);
941 	int i2d_RSA_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.RSA* rsa);
942 }
943 
944 version (OPENSSL_NO_DSA) {
945 } else {
946 	libressl_d.openssl.ossl_typ.DSA* d2i_DSA_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.DSA** dsa);
947 	int i2d_DSA_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.DSA* dsa);
948 	libressl_d.openssl.ossl_typ.DSA* d2i_DSAPrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.DSA** dsa);
949 	int i2d_DSAPrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.DSA* dsa);
950 }
951 
952 version (OPENSSL_NO_EC) {
953 } else {
954 	libressl_d.openssl.ec.EC_KEY* d2i_EC_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ec.EC_KEY** eckey);
955 	int i2d_EC_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ec.EC_KEY* eckey);
956 	libressl_d.openssl.ec.EC_KEY* d2i_ECPrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ec.EC_KEY** eckey);
957 	int i2d_ECPrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ec.EC_KEY* eckey);
958 }
959 
960 .X509_SIG* d2i_PKCS8_fp(libressl_d.compat.stdio.FILE* fp, .X509_SIG** p8);
961 int i2d_PKCS8_fp(libressl_d.compat.stdio.FILE* fp, .X509_SIG* p8);
962 libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* d2i_PKCS8_PRIV_KEY_INFO_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO** p8inf);
963 int i2d_PKCS8_PRIV_KEY_INFO_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* p8inf);
964 int i2d_PKCS8PrivateKeyInfo_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.EVP_PKEY* key);
965 int i2d_PrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
966 libressl_d.openssl.ossl_typ.EVP_PKEY* d2i_PrivateKey_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.EVP_PKEY** a);
967 int i2d_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
968 libressl_d.openssl.ossl_typ.EVP_PKEY* d2i_PUBKEY_fp(libressl_d.compat.stdio.FILE* fp, libressl_d.openssl.ossl_typ.EVP_PKEY** a);
969 
970 version (OPENSSL_NO_BIO) {
971 } else {
972 	libressl_d.openssl.ossl_typ.X509* d2i_X509_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509** x509);
973 	int i2d_X509_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509* x509);
974 	libressl_d.openssl.ossl_typ.X509_CRL* d2i_X509_CRL_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509_CRL** crl);
975 	int i2d_X509_CRL_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509_CRL* crl);
976 	.X509_REQ* d2i_X509_REQ_bio(libressl_d.openssl.bio.BIO* bp, .X509_REQ** req);
977 	int i2d_X509_REQ_bio(libressl_d.openssl.bio.BIO* bp, .X509_REQ* req);
978 
979 	version (OPENSSL_NO_RSA) {
980 	} else {
981 		libressl_d.openssl.ossl_typ.RSA* d2i_RSAPrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.RSA** rsa);
982 		int i2d_RSAPrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.RSA* rsa);
983 		libressl_d.openssl.ossl_typ.RSA* d2i_RSAPublicKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.RSA** rsa);
984 		int i2d_RSAPublicKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.RSA* rsa);
985 		libressl_d.openssl.ossl_typ.RSA* d2i_RSA_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.RSA** rsa);
986 		int i2d_RSA_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.RSA* rsa);
987 	}
988 
989 	version (OPENSSL_NO_DSA) {
990 	} else {
991 		libressl_d.openssl.ossl_typ.DSA* d2i_DSA_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.DSA** dsa);
992 		int i2d_DSA_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.DSA* dsa);
993 		libressl_d.openssl.ossl_typ.DSA* d2i_DSAPrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.DSA** dsa);
994 		int i2d_DSAPrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.DSA* dsa);
995 	}
996 
997 	version (OPENSSL_NO_EC) {
998 	} else {
999 		libressl_d.openssl.ec.EC_KEY* d2i_EC_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ec.EC_KEY** eckey);
1000 		int i2d_EC_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ec.EC_KEY* eckey);
1001 		libressl_d.openssl.ec.EC_KEY* d2i_ECPrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ec.EC_KEY** eckey);
1002 		int i2d_ECPrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ec.EC_KEY* eckey);
1003 	}
1004 
1005 	.X509_SIG* d2i_PKCS8_bio(libressl_d.openssl.bio.BIO* bp, .X509_SIG** p8);
1006 	int i2d_PKCS8_bio(libressl_d.openssl.bio.BIO* bp, .X509_SIG* p8);
1007 	libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* d2i_PKCS8_PRIV_KEY_INFO_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO** p8inf);
1008 	int i2d_PKCS8_PRIV_KEY_INFO_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* p8inf);
1009 	int i2d_PKCS8PrivateKeyInfo_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.EVP_PKEY* key);
1010 	int i2d_PrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1011 	libressl_d.openssl.ossl_typ.EVP_PKEY* d2i_PrivateKey_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.EVP_PKEY** a);
1012 	int i2d_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1013 	libressl_d.openssl.ossl_typ.EVP_PKEY* d2i_PUBKEY_bio(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.EVP_PKEY** a);
1014 }
1015 
1016 libressl_d.openssl.ossl_typ.X509* X509_dup(libressl_d.openssl.ossl_typ.X509* x509);
1017 .X509_ATTRIBUTE* X509_ATTRIBUTE_dup(.X509_ATTRIBUTE* xa);
1018 .X509_EXTENSION* X509_EXTENSION_dup(.X509_EXTENSION* ex);
1019 libressl_d.openssl.ossl_typ.X509_CRL* X509_CRL_dup(libressl_d.openssl.ossl_typ.X509_CRL* crl);
1020 .X509_REQ* X509_REQ_dup(.X509_REQ* req);
1021 libressl_d.openssl.ossl_typ.X509_ALGOR* X509_ALGOR_dup(libressl_d.openssl.ossl_typ.X509_ALGOR* xn);
1022 int X509_ALGOR_set0(libressl_d.openssl.ossl_typ.X509_ALGOR* alg, libressl_d.openssl.asn1.ASN1_OBJECT* aobj, int ptype, void* pval);
1023 void X509_ALGOR_get0(const (libressl_d.openssl.asn1.ASN1_OBJECT)** paobj, int* pptype, const (void)** ppval, const (libressl_d.openssl.ossl_typ.X509_ALGOR)* algor);
1024 void X509_ALGOR_set_md(libressl_d.openssl.ossl_typ.X509_ALGOR* alg, const (libressl_d.openssl.ossl_typ.EVP_MD)* md);
1025 int X509_ALGOR_cmp(const (libressl_d.openssl.ossl_typ.X509_ALGOR)* a, const (libressl_d.openssl.ossl_typ.X509_ALGOR)* b);
1026 
1027 libressl_d.openssl.ossl_typ.X509_NAME* X509_NAME_dup(libressl_d.openssl.ossl_typ.X509_NAME* xn);
1028 int X509_NAME_get0_der(libressl_d.openssl.ossl_typ.X509_NAME* nm, const (ubyte)** pder, size_t* pderlen);
1029 .X509_NAME_ENTRY* X509_NAME_ENTRY_dup(.X509_NAME_ENTRY* ne);
1030 
1031 int X509_cmp_time(const (libressl_d.openssl.ossl_typ.ASN1_TIME)* s, libressl_d.compat.time.time_t* t);
1032 int X509_cmp_current_time(const (libressl_d.openssl.ossl_typ.ASN1_TIME)* s);
1033 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_time_adj(libressl_d.openssl.ossl_typ.ASN1_TIME* s, core.stdc.config.c_long adj, libressl_d.compat.time.time_t* t);
1034 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_time_adj_ex(libressl_d.openssl.ossl_typ.ASN1_TIME* s, int offset_day, core.stdc.config.c_long offset_sec, libressl_d.compat.time.time_t* t);
1035 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_gmtime_adj(libressl_d.openssl.ossl_typ.ASN1_TIME* s, core.stdc.config.c_long adj);
1036 
1037 const (char)* X509_get_default_cert_area();
1038 const (char)* X509_get_default_cert_dir();
1039 const (char)* X509_get_default_cert_file();
1040 const (char)* X509_get_default_cert_dir_env();
1041 const (char)* X509_get_default_cert_file_env();
1042 const (char)* X509_get_default_private_dir();
1043 
1044 .X509_REQ* X509_to_X509_REQ(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, const (libressl_d.openssl.ossl_typ.EVP_MD)* md);
1045 libressl_d.openssl.ossl_typ.X509* X509_REQ_to_X509(.X509_REQ* r, int days, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1046 
1047 libressl_d.openssl.ossl_typ.X509_ALGOR* X509_ALGOR_new();
1048 void X509_ALGOR_free(libressl_d.openssl.ossl_typ.X509_ALGOR* a);
1049 libressl_d.openssl.ossl_typ.X509_ALGOR* d2i_X509_ALGOR(libressl_d.openssl.ossl_typ.X509_ALGOR** a, const (ubyte)** in_, core.stdc.config.c_long len);
1050 int i2d_X509_ALGOR(libressl_d.openssl.ossl_typ.X509_ALGOR* a, ubyte** out_);
1051 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_ALGOR_it;
1052 .X509_ALGORS* d2i_X509_ALGORS(.X509_ALGORS** a, const (ubyte)** in_, core.stdc.config.c_long len);
1053 int i2d_X509_ALGORS(.X509_ALGORS* a, ubyte** out_);
1054 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_ALGORS_it;
1055 .X509_VAL* X509_VAL_new();
1056 void X509_VAL_free(.X509_VAL* a);
1057 .X509_VAL* d2i_X509_VAL(.X509_VAL** a, const (ubyte)** in_, core.stdc.config.c_long len);
1058 int i2d_X509_VAL(.X509_VAL* a, ubyte** out_);
1059 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_VAL_it;
1060 
1061 libressl_d.openssl.ossl_typ.X509_PUBKEY* X509_PUBKEY_new();
1062 void X509_PUBKEY_free(libressl_d.openssl.ossl_typ.X509_PUBKEY* a);
1063 libressl_d.openssl.ossl_typ.X509_PUBKEY* d2i_X509_PUBKEY(libressl_d.openssl.ossl_typ.X509_PUBKEY** a, const (ubyte)** in_, core.stdc.config.c_long len);
1064 int i2d_X509_PUBKEY(libressl_d.openssl.ossl_typ.X509_PUBKEY* a, ubyte** out_);
1065 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_PUBKEY_it;
1066 
1067 int X509_PUBKEY_set(libressl_d.openssl.ossl_typ.X509_PUBKEY** x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1068 libressl_d.openssl.ossl_typ.EVP_PKEY* X509_PUBKEY_get(libressl_d.openssl.ossl_typ.X509_PUBKEY* key);
1069 libressl_d.openssl.ossl_typ.EVP_PKEY* X509_PUBKEY_get0(libressl_d.openssl.ossl_typ.X509_PUBKEY* key);
1070 int X509_get_pubkey_parameters(libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, .stack_st_X509 * chain);
1071 int i2d_PUBKEY(libressl_d.openssl.ossl_typ.EVP_PKEY* a, ubyte** pp);
1072 libressl_d.openssl.ossl_typ.EVP_PKEY* d2i_PUBKEY(libressl_d.openssl.ossl_typ.EVP_PKEY** a, const (ubyte)** pp, core.stdc.config.c_long length_);
1073 
1074 version (OPENSSL_NO_RSA) {
1075 } else {
1076 	int i2d_RSA_PUBKEY(libressl_d.openssl.ossl_typ.RSA* a, ubyte** pp);
1077 	libressl_d.openssl.ossl_typ.RSA* d2i_RSA_PUBKEY(libressl_d.openssl.ossl_typ.RSA** a, const (ubyte)** pp, core.stdc.config.c_long length_);
1078 }
1079 
1080 version (OPENSSL_NO_DSA) {
1081 } else {
1082 	int i2d_DSA_PUBKEY(libressl_d.openssl.ossl_typ.DSA* a, ubyte** pp);
1083 	libressl_d.openssl.ossl_typ.DSA* d2i_DSA_PUBKEY(libressl_d.openssl.ossl_typ.DSA** a, const (ubyte)** pp, core.stdc.config.c_long length_);
1084 }
1085 
1086 version (OPENSSL_NO_EC) {
1087 } else {
1088 	int i2d_EC_PUBKEY(libressl_d.openssl.ec.EC_KEY* a, ubyte** pp);
1089 	libressl_d.openssl.ec.EC_KEY* d2i_EC_PUBKEY(libressl_d.openssl.ec.EC_KEY** a, const (ubyte)** pp, core.stdc.config.c_long length_);
1090 }
1091 
1092 .X509_SIG* X509_SIG_new();
1093 void X509_SIG_free(.X509_SIG* a);
1094 .X509_SIG* d2i_X509_SIG(.X509_SIG** a, const (ubyte)** in_, core.stdc.config.c_long len);
1095 int i2d_X509_SIG(.X509_SIG* a, ubyte** out_);
1096 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_SIG_it;
1097 .X509_REQ_INFO* X509_REQ_INFO_new();
1098 void X509_REQ_INFO_free(.X509_REQ_INFO* a);
1099 .X509_REQ_INFO* d2i_X509_REQ_INFO(.X509_REQ_INFO** a, const (ubyte)** in_, core.stdc.config.c_long len);
1100 int i2d_X509_REQ_INFO(.X509_REQ_INFO* a, ubyte** out_);
1101 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_REQ_INFO_it;
1102 .X509_REQ* X509_REQ_new();
1103 void X509_REQ_free(.X509_REQ* a);
1104 .X509_REQ* d2i_X509_REQ(.X509_REQ** a, const (ubyte)** in_, core.stdc.config.c_long len);
1105 int i2d_X509_REQ(.X509_REQ* a, ubyte** out_);
1106 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_REQ_it;
1107 
1108 .X509_ATTRIBUTE* X509_ATTRIBUTE_new();
1109 void X509_ATTRIBUTE_free(.X509_ATTRIBUTE* a);
1110 .X509_ATTRIBUTE* d2i_X509_ATTRIBUTE(.X509_ATTRIBUTE** a, const (ubyte)** in_, core.stdc.config.c_long len);
1111 int i2d_X509_ATTRIBUTE(.X509_ATTRIBUTE* a, ubyte** out_);
1112 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_ATTRIBUTE_it;
1113 .X509_ATTRIBUTE* X509_ATTRIBUTE_create(int nid, int atrtype, void* value);
1114 
1115 .X509_EXTENSION* X509_EXTENSION_new();
1116 void X509_EXTENSION_free(.X509_EXTENSION* a);
1117 .X509_EXTENSION* d2i_X509_EXTENSION(.X509_EXTENSION** a, const (ubyte)** in_, core.stdc.config.c_long len);
1118 int i2d_X509_EXTENSION(.X509_EXTENSION* a, ubyte** out_);
1119 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_EXTENSION_it;
1120 X509_EXTENSIONS* d2i_X509_EXTENSIONS(X509_EXTENSIONS** a, const (ubyte)** in_, core.stdc.config.c_long len);
1121 int i2d_X509_EXTENSIONS(X509_EXTENSIONS* a, ubyte** out_);
1122 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_EXTENSIONS_it;
1123 
1124 .X509_NAME_ENTRY* X509_NAME_ENTRY_new();
1125 void X509_NAME_ENTRY_free(.X509_NAME_ENTRY* a);
1126 .X509_NAME_ENTRY* d2i_X509_NAME_ENTRY(.X509_NAME_ENTRY** a, const (ubyte)** in_, core.stdc.config.c_long len);
1127 int i2d_X509_NAME_ENTRY(.X509_NAME_ENTRY* a, ubyte** out_);
1128 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_NAME_ENTRY_it;
1129 
1130 libressl_d.openssl.ossl_typ.X509_NAME* X509_NAME_new();
1131 void X509_NAME_free(libressl_d.openssl.ossl_typ.X509_NAME* a);
1132 libressl_d.openssl.ossl_typ.X509_NAME* d2i_X509_NAME(libressl_d.openssl.ossl_typ.X509_NAME** a, const (ubyte)** in_, core.stdc.config.c_long len);
1133 int i2d_X509_NAME(libressl_d.openssl.ossl_typ.X509_NAME* a, ubyte** out_);
1134 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_NAME_it;
1135 
1136 int X509_NAME_set(libressl_d.openssl.ossl_typ.X509_NAME** xn, libressl_d.openssl.ossl_typ.X509_NAME* name);
1137 
1138 .X509_CINF* X509_CINF_new();
1139 void X509_CINF_free(.X509_CINF* a);
1140 .X509_CINF* d2i_X509_CINF(.X509_CINF** a, const (ubyte)** in_, core.stdc.config.c_long len);
1141 int i2d_X509_CINF(.X509_CINF* a, ubyte** out_);
1142 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_CINF_it;
1143 
1144 libressl_d.openssl.ossl_typ.X509* X509_new();
1145 void X509_free(libressl_d.openssl.ossl_typ.X509* a);
1146 libressl_d.openssl.ossl_typ.X509* d2i_X509(libressl_d.openssl.ossl_typ.X509** a, const (ubyte)** in_, core.stdc.config.c_long len);
1147 int i2d_X509(libressl_d.openssl.ossl_typ.X509* a, ubyte** out_);
1148 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_it;
1149 .X509_CERT_AUX* X509_CERT_AUX_new();
1150 void X509_CERT_AUX_free(.X509_CERT_AUX* a);
1151 .X509_CERT_AUX* d2i_X509_CERT_AUX(.X509_CERT_AUX** a, const (ubyte)** in_, core.stdc.config.c_long len);
1152 int i2d_X509_CERT_AUX(.X509_CERT_AUX* a, ubyte** out_);
1153 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_CERT_AUX_it;
1154 
1155 .X509_CERT_PAIR* X509_CERT_PAIR_new();
1156 void X509_CERT_PAIR_free(.X509_CERT_PAIR* a);
1157 .X509_CERT_PAIR* d2i_X509_CERT_PAIR(.X509_CERT_PAIR** a, const (ubyte)** in_, core.stdc.config.c_long len);
1158 int i2d_X509_CERT_PAIR(.X509_CERT_PAIR* a, ubyte** out_);
1159 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_CERT_PAIR_it;
1160 
1161 int X509_get_ex_new_index(core.stdc.config.c_long argl, void* argp, libressl_d.openssl.ossl_typ.CRYPTO_EX_new* new_func, libressl_d.openssl.ossl_typ.CRYPTO_EX_dup* dup_func, libressl_d.openssl.ossl_typ.CRYPTO_EX_free* free_func);
1162 int X509_set_ex_data(libressl_d.openssl.ossl_typ.X509* r, int idx, void* arg);
1163 void* X509_get_ex_data(libressl_d.openssl.ossl_typ.X509* r, int idx);
1164 int i2d_X509_AUX(libressl_d.openssl.ossl_typ.X509* a, ubyte** pp);
1165 libressl_d.openssl.ossl_typ.X509* d2i_X509_AUX(libressl_d.openssl.ossl_typ.X509** a, const (ubyte)** pp, core.stdc.config.c_long length_);
1166 void X509_get0_signature(const (libressl_d.openssl.ossl_typ.ASN1_BIT_STRING)** psig, const (libressl_d.openssl.ossl_typ.X509_ALGOR)** palg, const (libressl_d.openssl.ossl_typ.X509)* x);
1167 int X509_get_signature_nid(const (libressl_d.openssl.ossl_typ.X509)* x);
1168 
1169 int X509_alias_set1(libressl_d.openssl.ossl_typ.X509* x, const (ubyte)* name, int len);
1170 int X509_keyid_set1(libressl_d.openssl.ossl_typ.X509* x, const (ubyte)* id, int len);
1171 ubyte* X509_alias_get0(libressl_d.openssl.ossl_typ.X509* x, int* len);
1172 ubyte* X509_keyid_get0(libressl_d.openssl.ossl_typ.X509* x, int* len);
1173 //int (*X509_TRUST_set_default(int function(int, libressl_d.openssl.ossl_typ.X509*, int) trust))(int, libressl_d.openssl.ossl_typ.X509*, int);
1174 int X509_TRUST_set(int* t, int trust);
1175 int X509_add1_trust_object(libressl_d.openssl.ossl_typ.X509* x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj);
1176 int X509_add1_reject_object(libressl_d.openssl.ossl_typ.X509* x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj);
1177 void X509_trust_clear(libressl_d.openssl.ossl_typ.X509* x);
1178 void X509_reject_clear(libressl_d.openssl.ossl_typ.X509* x);
1179 
1180 libressl_d.openssl.ossl_typ.X509_REVOKED* X509_REVOKED_new();
1181 void X509_REVOKED_free(libressl_d.openssl.ossl_typ.X509_REVOKED* a);
1182 libressl_d.openssl.ossl_typ.X509_REVOKED* X509_REVOKED_dup(libressl_d.openssl.ossl_typ.X509_REVOKED* a);
1183 libressl_d.openssl.ossl_typ.X509_REVOKED* d2i_X509_REVOKED(libressl_d.openssl.ossl_typ.X509_REVOKED** a, const (ubyte)** in_, core.stdc.config.c_long len);
1184 int i2d_X509_REVOKED(libressl_d.openssl.ossl_typ.X509_REVOKED* a, ubyte** out_);
1185 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_REVOKED_it;
1186 
1187 .X509_CRL_INFO* X509_CRL_INFO_new();
1188 void X509_CRL_INFO_free(.X509_CRL_INFO* a);
1189 .X509_CRL_INFO* d2i_X509_CRL_INFO(.X509_CRL_INFO** a, const (ubyte)** in_, core.stdc.config.c_long len);
1190 int i2d_X509_CRL_INFO(.X509_CRL_INFO* a, ubyte** out_);
1191 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_CRL_INFO_it;
1192 
1193 libressl_d.openssl.ossl_typ.X509_CRL* X509_CRL_new();
1194 void X509_CRL_free(libressl_d.openssl.ossl_typ.X509_CRL* a);
1195 libressl_d.openssl.ossl_typ.X509_CRL* d2i_X509_CRL(libressl_d.openssl.ossl_typ.X509_CRL** a, const (ubyte)** in_, core.stdc.config.c_long len);
1196 int i2d_X509_CRL(libressl_d.openssl.ossl_typ.X509_CRL* a, ubyte** out_);
1197 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM X509_CRL_it;
1198 
1199 int X509_CRL_add0_revoked(libressl_d.openssl.ossl_typ.X509_CRL* crl, libressl_d.openssl.ossl_typ.X509_REVOKED* rev);
1200 int X509_CRL_get0_by_serial(libressl_d.openssl.ossl_typ.X509_CRL* crl, libressl_d.openssl.ossl_typ.X509_REVOKED** ret, libressl_d.openssl.ossl_typ.ASN1_INTEGER* serial);
1201 int X509_CRL_get0_by_cert(libressl_d.openssl.ossl_typ.X509_CRL* crl, libressl_d.openssl.ossl_typ.X509_REVOKED** ret, libressl_d.openssl.ossl_typ.X509* x);
1202 
1203 .X509_PKEY* X509_PKEY_new();
1204 void X509_PKEY_free(.X509_PKEY* a);
1205 
1206 .NETSCAPE_SPKI* NETSCAPE_SPKI_new();
1207 void NETSCAPE_SPKI_free(.NETSCAPE_SPKI* a);
1208 .NETSCAPE_SPKI* d2i_NETSCAPE_SPKI(.NETSCAPE_SPKI** a, const (ubyte)** in_, core.stdc.config.c_long len);
1209 int i2d_NETSCAPE_SPKI(.NETSCAPE_SPKI* a, ubyte** out_);
1210 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM NETSCAPE_SPKI_it;
1211 .NETSCAPE_SPKAC* NETSCAPE_SPKAC_new();
1212 void NETSCAPE_SPKAC_free(.NETSCAPE_SPKAC* a);
1213 .NETSCAPE_SPKAC* d2i_NETSCAPE_SPKAC(.NETSCAPE_SPKAC** a, const (ubyte)** in_, core.stdc.config.c_long len);
1214 int i2d_NETSCAPE_SPKAC(.NETSCAPE_SPKAC* a, ubyte** out_);
1215 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM NETSCAPE_SPKAC_it;
1216 .NETSCAPE_CERT_SEQUENCE* NETSCAPE_CERT_SEQUENCE_new();
1217 void NETSCAPE_CERT_SEQUENCE_free(.NETSCAPE_CERT_SEQUENCE* a);
1218 .NETSCAPE_CERT_SEQUENCE* d2i_NETSCAPE_CERT_SEQUENCE(.NETSCAPE_CERT_SEQUENCE** a, const (ubyte)** in_, core.stdc.config.c_long len);
1219 int i2d_NETSCAPE_CERT_SEQUENCE(.NETSCAPE_CERT_SEQUENCE* a, ubyte** out_);
1220 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM NETSCAPE_CERT_SEQUENCE_it;
1221 
1222 version (OPENSSL_NO_EVP) {
1223 } else {
1224 	.X509_INFO* X509_INFO_new();
1225 	void X509_INFO_free(.X509_INFO* a);
1226 	char* X509_NAME_oneline(const (libressl_d.openssl.ossl_typ.X509_NAME)* a, char* buf, int size);
1227 
1228 	int ASN1_item_digest(const (libressl_d.openssl.ossl_typ.ASN1_ITEM)* it, const (libressl_d.openssl.ossl_typ.EVP_MD)* type, void* data, ubyte* md, uint* len);
1229 
1230 	int ASN1_item_verify(const (libressl_d.openssl.ossl_typ.ASN1_ITEM)* it, libressl_d.openssl.ossl_typ.X509_ALGOR* algor1, libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature, void* data, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1231 
1232 	int ASN1_item_sign(const (libressl_d.openssl.ossl_typ.ASN1_ITEM)* it, libressl_d.openssl.ossl_typ.X509_ALGOR* algor1, libressl_d.openssl.ossl_typ.X509_ALGOR* algor2, libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature, void* data, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, const (libressl_d.openssl.ossl_typ.EVP_MD)* type);
1233 	int ASN1_item_sign_ctx(const (libressl_d.openssl.ossl_typ.ASN1_ITEM)* it, libressl_d.openssl.ossl_typ.X509_ALGOR* algor1, libressl_d.openssl.ossl_typ.X509_ALGOR* algor2, libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* signature, void* asn, libressl_d.openssl.ossl_typ.EVP_MD_CTX* ctx);
1234 }
1235 
1236 const (.stack_st_X509_EXTENSION)* X509_get0_extensions(const (libressl_d.openssl.ossl_typ.X509)* x);
1237 const (libressl_d.openssl.ossl_typ.X509_ALGOR)* X509_get0_tbs_sigalg(const (libressl_d.openssl.ossl_typ.X509)* x);
1238 int X509_set_version(libressl_d.openssl.ossl_typ.X509* x, core.stdc.config.c_long version_);
1239 core.stdc.config.c_long X509_get_version(const (libressl_d.openssl.ossl_typ.X509)* x);
1240 int X509_set_serialNumber(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.ASN1_INTEGER* serial);
1241 libressl_d.openssl.ossl_typ.ASN1_INTEGER* X509_get_serialNumber(libressl_d.openssl.ossl_typ.X509* x);
1242 const (libressl_d.openssl.ossl_typ.ASN1_INTEGER)* X509_get0_serialNumber(const (libressl_d.openssl.ossl_typ.X509)* x);
1243 int X509_set_issuer_name(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.X509_NAME* name);
1244 libressl_d.openssl.ossl_typ.X509_NAME* X509_get_issuer_name(const (libressl_d.openssl.ossl_typ.X509)* a);
1245 int X509_set_subject_name(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.X509_NAME* name);
1246 libressl_d.openssl.ossl_typ.X509_NAME* X509_get_subject_name(const (libressl_d.openssl.ossl_typ.X509)* a);
1247 int X509_set_notBefore(libressl_d.openssl.ossl_typ.X509* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1248 int X509_set1_notBefore(libressl_d.openssl.ossl_typ.X509* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1249 int X509_set_notAfter(libressl_d.openssl.ossl_typ.X509* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1250 int X509_set1_notAfter(libressl_d.openssl.ossl_typ.X509* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1251 const (libressl_d.openssl.ossl_typ.ASN1_TIME)* X509_get0_notBefore(const (libressl_d.openssl.ossl_typ.X509)* x);
1252 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_getm_notBefore(const (libressl_d.openssl.ossl_typ.X509)* x);
1253 const (libressl_d.openssl.ossl_typ.ASN1_TIME)* X509_get0_notAfter(const (libressl_d.openssl.ossl_typ.X509)* x);
1254 libressl_d.openssl.ossl_typ.ASN1_TIME* X509_getm_notAfter(const (libressl_d.openssl.ossl_typ.X509)* x);
1255 int X509_set_pubkey(libressl_d.openssl.ossl_typ.X509* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1256 libressl_d.openssl.ossl_typ.EVP_PKEY* X509_get_pubkey(libressl_d.openssl.ossl_typ.X509* x);
1257 libressl_d.openssl.ossl_typ.EVP_PKEY* X509_get0_pubkey(const (libressl_d.openssl.ossl_typ.X509)* x);
1258 libressl_d.openssl.ossl_typ.ASN1_BIT_STRING* X509_get0_pubkey_bitstr(const (libressl_d.openssl.ossl_typ.X509)* x);
1259 int X509_certificate_type(const (libressl_d.openssl.ossl_typ.X509)* x, const (libressl_d.openssl.ossl_typ.EVP_PKEY)* pubkey);
1260 int X509_get_signature_type(const (libressl_d.openssl.ossl_typ.X509)* x);
1261 
1262 alias X509_get_notBefore = .X509_getm_notBefore;
1263 alias X509_get_notAfter = .X509_getm_notAfter;
1264 
1265 int X509_REQ_set_version(.X509_REQ* x, core.stdc.config.c_long version_);
1266 core.stdc.config.c_long X509_REQ_get_version(const (.X509_REQ)* x);
1267 int X509_REQ_set_subject_name(.X509_REQ* req, libressl_d.openssl.ossl_typ.X509_NAME* name);
1268 libressl_d.openssl.ossl_typ.X509_NAME* X509_REQ_get_subject_name(const (.X509_REQ)* x);
1269 int X509_REQ_set_pubkey(.X509_REQ* x, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1270 libressl_d.openssl.ossl_typ.EVP_PKEY* X509_REQ_get_pubkey(.X509_REQ* req);
1271 int X509_REQ_extension_nid(int nid);
1272 int* X509_REQ_get_extension_nids();
1273 void X509_REQ_set_extension_nids(int* nids);
1274 .stack_st_X509_EXTENSION* X509_REQ_get_extensions(.X509_REQ* req);
1275 int X509_REQ_add_extensions_nid(.X509_REQ* req, .stack_st_X509_EXTENSION * exts, int nid);
1276 int X509_REQ_add_extensions(.X509_REQ* req, .stack_st_X509_EXTENSION * exts);
1277 int X509_REQ_get_attr_count(const (.X509_REQ)* req);
1278 int X509_REQ_get_attr_by_NID(const (.X509_REQ)* req, int nid, int lastpos);
1279 int X509_REQ_get_attr_by_OBJ(const (.X509_REQ)* req, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1280 .X509_ATTRIBUTE* X509_REQ_get_attr(const (.X509_REQ)* req, int loc);
1281 .X509_ATTRIBUTE* X509_REQ_delete_attr(.X509_REQ* req, int loc);
1282 int X509_REQ_add1_attr(.X509_REQ* req, .X509_ATTRIBUTE* attr);
1283 int X509_REQ_add1_attr_by_OBJ(.X509_REQ* req, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (ubyte)* bytes, int len);
1284 int X509_REQ_add1_attr_by_NID(.X509_REQ* req, int nid, int type, const (ubyte)* bytes, int len);
1285 int X509_REQ_add1_attr_by_txt(.X509_REQ* req, const (char)* attrname, int type, const (ubyte)* bytes, int len);
1286 
1287 int X509_CRL_set_version(libressl_d.openssl.ossl_typ.X509_CRL* x, core.stdc.config.c_long version_);
1288 int X509_CRL_set_issuer_name(libressl_d.openssl.ossl_typ.X509_CRL* x, libressl_d.openssl.ossl_typ.X509_NAME* name);
1289 int X509_CRL_set_lastUpdate(libressl_d.openssl.ossl_typ.X509_CRL* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1290 int X509_CRL_set1_lastUpdate(libressl_d.openssl.ossl_typ.X509_CRL* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1291 int X509_CRL_set_nextUpdate(libressl_d.openssl.ossl_typ.X509_CRL* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1292 int X509_CRL_set1_nextUpdate(libressl_d.openssl.ossl_typ.X509_CRL* x, const (libressl_d.openssl.ossl_typ.ASN1_TIME)* tm);
1293 int X509_CRL_sort(libressl_d.openssl.ossl_typ.X509_CRL* crl);
1294 
1295 const (.stack_st_X509_EXTENSION)* X509_REVOKED_get0_extensions(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x);
1296 const (libressl_d.openssl.ossl_typ.ASN1_TIME)* X509_REVOKED_get0_revocationDate(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x);
1297 const (libressl_d.openssl.ossl_typ.ASN1_INTEGER)* X509_REVOKED_get0_serialNumber(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x);
1298 int X509_REVOKED_set_revocationDate(libressl_d.openssl.ossl_typ.X509_REVOKED* r, libressl_d.openssl.ossl_typ.ASN1_TIME* tm);
1299 int X509_REVOKED_set_serialNumber(libressl_d.openssl.ossl_typ.X509_REVOKED* x, libressl_d.openssl.ossl_typ.ASN1_INTEGER* serial);
1300 
1301 int X509_REQ_check_private_key(.X509_REQ* x509, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1302 
1303 int X509_check_private_key(const (libressl_d.openssl.ossl_typ.X509)* x509, const (libressl_d.openssl.ossl_typ.EVP_PKEY)* pkey);
1304 
1305 int X509_issuer_and_serial_cmp(const (libressl_d.openssl.ossl_typ.X509)* a, const (libressl_d.openssl.ossl_typ.X509)* b);
1306 core.stdc.config.c_ulong X509_issuer_and_serial_hash(libressl_d.openssl.ossl_typ.X509* a);
1307 
1308 int X509_issuer_name_cmp(const (libressl_d.openssl.ossl_typ.X509)* a, const (libressl_d.openssl.ossl_typ.X509)* b);
1309 core.stdc.config.c_ulong X509_issuer_name_hash(libressl_d.openssl.ossl_typ.X509* a);
1310 
1311 int X509_subject_name_cmp(const (libressl_d.openssl.ossl_typ.X509)* a, const (libressl_d.openssl.ossl_typ.X509)* b);
1312 core.stdc.config.c_ulong X509_subject_name_hash(libressl_d.openssl.ossl_typ.X509* x);
1313 
1314 version (OPENSSL_NO_MD5) {
1315 } else {
1316 	core.stdc.config.c_ulong X509_issuer_name_hash_old(libressl_d.openssl.ossl_typ.X509* a);
1317 	core.stdc.config.c_ulong X509_subject_name_hash_old(libressl_d.openssl.ossl_typ.X509* x);
1318 }
1319 
1320 int X509_cmp(const (libressl_d.openssl.ossl_typ.X509)* a, const (libressl_d.openssl.ossl_typ.X509)* b);
1321 int X509_NAME_cmp(const (libressl_d.openssl.ossl_typ.X509_NAME)* a, const (libressl_d.openssl.ossl_typ.X509_NAME)* b);
1322 core.stdc.config.c_ulong X509_NAME_hash(libressl_d.openssl.ossl_typ.X509_NAME* x);
1323 core.stdc.config.c_ulong X509_NAME_hash_old(libressl_d.openssl.ossl_typ.X509_NAME* x);
1324 
1325 int X509_CRL_cmp(const (libressl_d.openssl.ossl_typ.X509_CRL)* a, const (libressl_d.openssl.ossl_typ.X509_CRL)* b);
1326 int X509_CRL_match(const (libressl_d.openssl.ossl_typ.X509_CRL)* a, const (libressl_d.openssl.ossl_typ.X509_CRL)* b);
1327 int X509_print_ex_fp(libressl_d.compat.stdio.FILE* bp, libressl_d.openssl.ossl_typ.X509* x, core.stdc.config.c_ulong nmflag, core.stdc.config.c_ulong cflag);
1328 int X509_print_fp(libressl_d.compat.stdio.FILE* bp, libressl_d.openssl.ossl_typ.X509* x);
1329 int X509_CRL_print_fp(libressl_d.compat.stdio.FILE* bp, libressl_d.openssl.ossl_typ.X509_CRL* x);
1330 int X509_REQ_print_fp(libressl_d.compat.stdio.FILE* bp, .X509_REQ* req);
1331 int X509_NAME_print_ex_fp(libressl_d.compat.stdio.FILE* fp, const (libressl_d.openssl.ossl_typ.X509_NAME)* nm, int indent, core.stdc.config.c_ulong flags);
1332 
1333 version (OPENSSL_NO_BIO) {
1334 } else {
1335 	int X509_NAME_print(libressl_d.openssl.bio.BIO* bp, const (libressl_d.openssl.ossl_typ.X509_NAME)* name, int obase);
1336 	int X509_NAME_print_ex(libressl_d.openssl.bio.BIO* out_, const (libressl_d.openssl.ossl_typ.X509_NAME)* nm, int indent, core.stdc.config.c_ulong flags);
1337 	int X509_print_ex(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509* x, core.stdc.config.c_ulong nmflag, core.stdc.config.c_ulong cflag);
1338 	int X509_print(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509* x);
1339 	int X509_ocspid_print(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509* x);
1340 	int X509_CERT_AUX_print(libressl_d.openssl.bio.BIO* bp, .X509_CERT_AUX* x, int indent);
1341 	int X509_CRL_print(libressl_d.openssl.bio.BIO* bp, libressl_d.openssl.ossl_typ.X509_CRL* x);
1342 	int X509_REQ_print_ex(libressl_d.openssl.bio.BIO* bp, .X509_REQ* x, core.stdc.config.c_ulong nmflag, core.stdc.config.c_ulong cflag);
1343 	int X509_REQ_print(libressl_d.openssl.bio.BIO* bp, .X509_REQ* req);
1344 }
1345 
1346 int X509_NAME_entry_count(const (libressl_d.openssl.ossl_typ.X509_NAME)* name);
1347 int X509_NAME_get_text_by_NID(libressl_d.openssl.ossl_typ.X509_NAME* name, int nid, char* buf, int len);
1348 int X509_NAME_get_text_by_OBJ(libressl_d.openssl.ossl_typ.X509_NAME* name, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, char* buf, int len);
1349 
1350 /*
1351  * NOTE: you should be passsing -1, not 0 as lastpos.  The functions that use
1352  * lastpos, search after that position on.
1353  */
1354 int X509_NAME_get_index_by_NID(const (libressl_d.openssl.ossl_typ.X509_NAME)* name, int nid, int lastpos);
1355 int X509_NAME_get_index_by_OBJ(const (libressl_d.openssl.ossl_typ.X509_NAME)* name, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1356 .X509_NAME_ENTRY* X509_NAME_get_entry(const (libressl_d.openssl.ossl_typ.X509_NAME)* name, int loc);
1357 .X509_NAME_ENTRY* X509_NAME_delete_entry(libressl_d.openssl.ossl_typ.X509_NAME* name, int loc);
1358 int X509_NAME_add_entry(libressl_d.openssl.ossl_typ.X509_NAME* name, const (.X509_NAME_ENTRY)* ne, int loc, int set);
1359 int X509_NAME_add_entry_by_OBJ(libressl_d.openssl.ossl_typ.X509_NAME* name, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (ubyte)* bytes, int len, int loc, int set);
1360 int X509_NAME_add_entry_by_NID(libressl_d.openssl.ossl_typ.X509_NAME* name, int nid, int type, const (ubyte)* bytes, int len, int loc, int set);
1361 .X509_NAME_ENTRY* X509_NAME_ENTRY_create_by_txt(.X509_NAME_ENTRY** ne, const (char)* field, int type, const (ubyte)* bytes, int len);
1362 .X509_NAME_ENTRY* X509_NAME_ENTRY_create_by_NID(.X509_NAME_ENTRY** ne, int nid, int type, const (ubyte)* bytes, int len);
1363 int X509_NAME_add_entry_by_txt(libressl_d.openssl.ossl_typ.X509_NAME* name, const (char)* field, int type, const (ubyte)* bytes, int len, int loc, int set);
1364 .X509_NAME_ENTRY* X509_NAME_ENTRY_create_by_OBJ(.X509_NAME_ENTRY** ne, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (ubyte)* bytes, int len);
1365 int X509_NAME_ENTRY_set_object(.X509_NAME_ENTRY* ne, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj);
1366 int X509_NAME_ENTRY_set_data(.X509_NAME_ENTRY* ne, int type, const (ubyte)* bytes, int len);
1367 libressl_d.openssl.asn1.ASN1_OBJECT* X509_NAME_ENTRY_get_object(const (.X509_NAME_ENTRY)* ne);
1368 libressl_d.openssl.ossl_typ.ASN1_STRING* X509_NAME_ENTRY_get_data(const (.X509_NAME_ENTRY)* ne);
1369 int X509_NAME_ENTRY_set(const (.X509_NAME_ENTRY)* ne);
1370 
1371 int X509v3_get_ext_count(const (.stack_st_X509_EXTENSION)* x);
1372 int X509v3_get_ext_by_NID(const (.stack_st_X509_EXTENSION)* x, int nid, int lastpos);
1373 int X509v3_get_ext_by_OBJ(const (.stack_st_X509_EXTENSION)* x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1374 int X509v3_get_ext_by_critical(const (.stack_st_X509_EXTENSION)* x, int crit, int lastpos);
1375 .X509_EXTENSION* X509v3_get_ext(const (.stack_st_X509_EXTENSION)* x, int loc);
1376 .X509_EXTENSION* X509v3_delete_ext(.stack_st_X509_EXTENSION * x, int loc);
1377 .stack_st_X509_EXTENSION* X509v3_add_ext(.stack_st_X509_EXTENSION** x, .X509_EXTENSION* ex, int loc);
1378 
1379 int X509_get_ext_count(const (libressl_d.openssl.ossl_typ.X509)* x);
1380 int X509_get_ext_by_NID(const (libressl_d.openssl.ossl_typ.X509)* x, int nid, int lastpos);
1381 int X509_get_ext_by_OBJ(const (libressl_d.openssl.ossl_typ.X509)* x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1382 int X509_get_ext_by_critical(const (libressl_d.openssl.ossl_typ.X509)* x, int crit, int lastpos);
1383 .X509_EXTENSION* X509_get_ext(const (libressl_d.openssl.ossl_typ.X509)* x, int loc);
1384 .X509_EXTENSION* X509_delete_ext(libressl_d.openssl.ossl_typ.X509* x, int loc);
1385 int X509_add_ext(libressl_d.openssl.ossl_typ.X509* x, .X509_EXTENSION* ex, int loc);
1386 void* X509_get_ext_d2i(const (libressl_d.openssl.ossl_typ.X509)* x, int nid, int* crit, int* idx);
1387 int X509_add1_ext_i2d(libressl_d.openssl.ossl_typ.X509* x, int nid, void* value, int crit, core.stdc.config.c_ulong flags);
1388 
1389 int X509_CRL_get_ext_count(const (libressl_d.openssl.ossl_typ.X509_CRL)* x);
1390 int X509_CRL_get_ext_by_NID(const (libressl_d.openssl.ossl_typ.X509_CRL)* x, int nid, int lastpos);
1391 int X509_CRL_get_ext_by_OBJ(const (libressl_d.openssl.ossl_typ.X509_CRL)* x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1392 int X509_CRL_get_ext_by_critical(const (libressl_d.openssl.ossl_typ.X509_CRL)* x, int crit, int lastpos);
1393 .X509_EXTENSION* X509_CRL_get_ext(const (libressl_d.openssl.ossl_typ.X509_CRL)* x, int loc);
1394 .X509_EXTENSION* X509_CRL_delete_ext(libressl_d.openssl.ossl_typ.X509_CRL* x, int loc);
1395 int X509_CRL_add_ext(libressl_d.openssl.ossl_typ.X509_CRL* x, .X509_EXTENSION* ex, int loc);
1396 void* X509_CRL_get_ext_d2i(const (libressl_d.openssl.ossl_typ.X509_CRL)* x, int nid, int* crit, int* idx);
1397 int X509_CRL_add1_ext_i2d(libressl_d.openssl.ossl_typ.X509_CRL* x, int nid, void* value, int crit, core.stdc.config.c_ulong flags);
1398 
1399 int X509_REVOKED_get_ext_count(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x);
1400 int X509_REVOKED_get_ext_by_NID(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x, int nid, int lastpos);
1401 int X509_REVOKED_get_ext_by_OBJ(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1402 int X509_REVOKED_get_ext_by_critical(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x, int crit, int lastpos);
1403 .X509_EXTENSION* X509_REVOKED_get_ext(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x, int loc);
1404 .X509_EXTENSION* X509_REVOKED_delete_ext(libressl_d.openssl.ossl_typ.X509_REVOKED* x, int loc);
1405 int X509_REVOKED_add_ext(libressl_d.openssl.ossl_typ.X509_REVOKED* x, .X509_EXTENSION* ex, int loc);
1406 void* X509_REVOKED_get_ext_d2i(const (libressl_d.openssl.ossl_typ.X509_REVOKED)* x, int nid, int* crit, int* idx);
1407 int X509_REVOKED_add1_ext_i2d(libressl_d.openssl.ossl_typ.X509_REVOKED* x, int nid, void* value, int crit, core.stdc.config.c_ulong flags);
1408 
1409 .X509_EXTENSION* X509_EXTENSION_create_by_NID(.X509_EXTENSION** ex, int nid, int crit, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* data);
1410 .X509_EXTENSION* X509_EXTENSION_create_by_OBJ(.X509_EXTENSION** ex, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int crit, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* data);
1411 int X509_EXTENSION_set_object(.X509_EXTENSION* ex, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj);
1412 int X509_EXTENSION_set_critical(.X509_EXTENSION* ex, int crit);
1413 int X509_EXTENSION_set_data(.X509_EXTENSION* ex, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* data);
1414 libressl_d.openssl.asn1.ASN1_OBJECT* X509_EXTENSION_get_object(.X509_EXTENSION* ex);
1415 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* X509_EXTENSION_get_data(.X509_EXTENSION* ne);
1416 int X509_EXTENSION_get_critical(const (.X509_EXTENSION)* ex);
1417 
1418 int X509at_get_attr_count(const (.stack_st_X509_ATTRIBUTE)* x);
1419 int X509at_get_attr_by_NID(const (.stack_st_X509_ATTRIBUTE)* x, int nid, int lastpos);
1420 int X509at_get_attr_by_OBJ(const (.stack_st_X509_ATTRIBUTE)* sk, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1421 .X509_ATTRIBUTE* X509at_get_attr(const (.stack_st_X509_ATTRIBUTE)* x, int loc);
1422 .X509_ATTRIBUTE* X509at_delete_attr(.stack_st_X509_ATTRIBUTE * x, int loc);
1423 .stack_st_X509_ATTRIBUTE* X509at_add1_attr(.stack_st_X509_ATTRIBUTE** x, .X509_ATTRIBUTE* attr);
1424 .stack_st_X509_ATTRIBUTE* X509at_add1_attr_by_OBJ(.stack_st_X509_ATTRIBUTE** x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (ubyte)* bytes, int len);
1425 .stack_st_X509_ATTRIBUTE* X509at_add1_attr_by_NID(.stack_st_X509_ATTRIBUTE** x, int nid, int type, const (ubyte)* bytes, int len);
1426 .stack_st_X509_ATTRIBUTE* X509at_add1_attr_by_txt(.stack_st_X509_ATTRIBUTE** x, const (char)* attrname, int type, const (ubyte)* bytes, int len);
1427 void* X509at_get0_data_by_OBJ(.stack_st_X509_ATTRIBUTE * x, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos, int type);
1428 .X509_ATTRIBUTE* X509_ATTRIBUTE_create_by_NID(.X509_ATTRIBUTE** attr, int nid, int atrtype, const (void)* data, int len);
1429 .X509_ATTRIBUTE* X509_ATTRIBUTE_create_by_OBJ(.X509_ATTRIBUTE** attr, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int atrtype, const (void)* data, int len);
1430 .X509_ATTRIBUTE* X509_ATTRIBUTE_create_by_txt(.X509_ATTRIBUTE** attr, const (char)* atrname, int type, const (ubyte)* bytes, int len);
1431 int X509_ATTRIBUTE_set1_object(.X509_ATTRIBUTE* attr, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj);
1432 int X509_ATTRIBUTE_set1_data(.X509_ATTRIBUTE* attr, int attrtype, const (void)* data, int len);
1433 void* X509_ATTRIBUTE_get0_data(.X509_ATTRIBUTE* attr, int idx, int atrtype, void* data);
1434 int X509_ATTRIBUTE_count(const (.X509_ATTRIBUTE)* attr);
1435 libressl_d.openssl.asn1.ASN1_OBJECT* X509_ATTRIBUTE_get0_object(.X509_ATTRIBUTE* attr);
1436 libressl_d.openssl.asn1.ASN1_TYPE* X509_ATTRIBUTE_get0_type(.X509_ATTRIBUTE* attr, int idx);
1437 
1438 int EVP_PKEY_get_attr_count(const (libressl_d.openssl.ossl_typ.EVP_PKEY)* key);
1439 int EVP_PKEY_get_attr_by_NID(const (libressl_d.openssl.ossl_typ.EVP_PKEY)* key, int nid, int lastpos);
1440 int EVP_PKEY_get_attr_by_OBJ(const (libressl_d.openssl.ossl_typ.EVP_PKEY)* key, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos);
1441 .X509_ATTRIBUTE* EVP_PKEY_get_attr(const (libressl_d.openssl.ossl_typ.EVP_PKEY)* key, int loc);
1442 .X509_ATTRIBUTE* EVP_PKEY_delete_attr(libressl_d.openssl.ossl_typ.EVP_PKEY* key, int loc);
1443 int EVP_PKEY_add1_attr(libressl_d.openssl.ossl_typ.EVP_PKEY* key, .X509_ATTRIBUTE* attr);
1444 int EVP_PKEY_add1_attr_by_OBJ(libressl_d.openssl.ossl_typ.EVP_PKEY* key, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (ubyte)* bytes, int len);
1445 int EVP_PKEY_add1_attr_by_NID(libressl_d.openssl.ossl_typ.EVP_PKEY* key, int nid, int type, const (ubyte)* bytes, int len);
1446 int EVP_PKEY_add1_attr_by_txt(libressl_d.openssl.ossl_typ.EVP_PKEY* key, const (char)* attrname, int type, const (ubyte)* bytes, int len);
1447 
1448 int X509_verify_cert(libressl_d.openssl.ossl_typ.X509_STORE_CTX* ctx);
1449 
1450 /* lookup a cert from a X509 STACK */
1451 libressl_d.openssl.ossl_typ.X509* X509_find_by_issuer_and_serial(.stack_st_X509* sk, libressl_d.openssl.ossl_typ.X509_NAME* name, libressl_d.openssl.ossl_typ.ASN1_INTEGER* serial);
1452 libressl_d.openssl.ossl_typ.X509* X509_find_by_subject(.stack_st_X509* sk, libressl_d.openssl.ossl_typ.X509_NAME* name);
1453 
1454 .PBEPARAM* PBEPARAM_new();
1455 void PBEPARAM_free(.PBEPARAM* a);
1456 .PBEPARAM* d2i_PBEPARAM(.PBEPARAM** a, const (ubyte)** in_, core.stdc.config.c_long len);
1457 int i2d_PBEPARAM(.PBEPARAM* a, ubyte** out_);
1458 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PBEPARAM_it;
1459 .PBE2PARAM* PBE2PARAM_new();
1460 void PBE2PARAM_free(.PBE2PARAM* a);
1461 .PBE2PARAM* d2i_PBE2PARAM(.PBE2PARAM** a, const (ubyte)** in_, core.stdc.config.c_long len);
1462 int i2d_PBE2PARAM(.PBE2PARAM* a, ubyte** out_);
1463 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PBE2PARAM_it;
1464 .PBKDF2PARAM* PBKDF2PARAM_new();
1465 void PBKDF2PARAM_free(.PBKDF2PARAM* a);
1466 .PBKDF2PARAM* d2i_PBKDF2PARAM(.PBKDF2PARAM** a, const (ubyte)** in_, core.stdc.config.c_long len);
1467 int i2d_PBKDF2PARAM(.PBKDF2PARAM* a, ubyte** out_);
1468 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PBKDF2PARAM_it;
1469 
1470 int PKCS5_pbe_set0_algor(libressl_d.openssl.ossl_typ.X509_ALGOR* algor, int alg, int iter, const (ubyte)* salt, int saltlen);
1471 
1472 libressl_d.openssl.ossl_typ.X509_ALGOR* PKCS5_pbe_set(int alg, int iter, const (ubyte)* salt, int saltlen);
1473 libressl_d.openssl.ossl_typ.X509_ALGOR* PKCS5_pbe2_set(const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* cipher, int iter, ubyte* salt, int saltlen);
1474 libressl_d.openssl.ossl_typ.X509_ALGOR* PKCS5_pbe2_set_iv(const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* cipher, int iter, ubyte* salt, int saltlen, ubyte* aiv, int prf_nid);
1475 
1476 libressl_d.openssl.ossl_typ.X509_ALGOR* PKCS5_pbkdf2_set(int iter, ubyte* salt, int saltlen, int prf_nid, int keylen);
1477 
1478 /* PKCS#8 utilities */
1479 
1480 libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* PKCS8_PRIV_KEY_INFO_new();
1481 void PKCS8_PRIV_KEY_INFO_free(libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* a);
1482 libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* d2i_PKCS8_PRIV_KEY_INFO(libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO** a, const (ubyte)** in_, core.stdc.config.c_long len);
1483 int i2d_PKCS8_PRIV_KEY_INFO(libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* a, ubyte** out_);
1484 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM PKCS8_PRIV_KEY_INFO_it;
1485 
1486 libressl_d.openssl.ossl_typ.EVP_PKEY* EVP_PKCS82PKEY(const (libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO)* p8);
1487 libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* EVP_PKEY2PKCS8(libressl_d.openssl.ossl_typ.EVP_PKEY* pkey);
1488 
1489 int PKCS8_pkey_set0(libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* priv, libressl_d.openssl.asn1.ASN1_OBJECT* aobj, int version_, int ptype, void* pval, ubyte* penc, int penclen);
1490 int PKCS8_pkey_get0(const (libressl_d.openssl.asn1.ASN1_OBJECT)** ppkalg, const (ubyte)** pk, int* ppklen, const (libressl_d.openssl.ossl_typ.X509_ALGOR)** pa, const (libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO)* p8);
1491 
1492 const (.stack_st_X509_ATTRIBUTE)* PKCS8_pkey_get0_attrs(const (libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO)* p8);
1493 int PKCS8_pkey_add1_attr_by_NID(libressl_d.openssl.ossl_typ.PKCS8_PRIV_KEY_INFO* p8, int nid, int type, const (ubyte)* bytes, int len);
1494 
1495 int X509_PUBKEY_set0_param(libressl_d.openssl.ossl_typ.X509_PUBKEY* pub, libressl_d.openssl.asn1.ASN1_OBJECT* aobj, int ptype, void* pval, ubyte* penc, int penclen);
1496 int X509_PUBKEY_get0_param(libressl_d.openssl.asn1.ASN1_OBJECT** ppkalg, const (ubyte)** pk, int* ppklen, libressl_d.openssl.ossl_typ.X509_ALGOR** pa, libressl_d.openssl.ossl_typ.X509_PUBKEY* pub);
1497 
1498 int X509_check_trust(libressl_d.openssl.ossl_typ.X509* x, int id, int flags);
1499 int X509_TRUST_get_count();
1500 .X509_TRUST* X509_TRUST_get0(int idx);
1501 int X509_TRUST_get_by_id(int id);
1502 int X509_TRUST_add(int id, int flags, int function(.X509_TRUST*, libressl_d.openssl.ossl_typ.X509*, int) ck, const (char)* name, int arg1, void* arg2);
1503 void X509_TRUST_cleanup();
1504 int X509_TRUST_get_flags(const (.X509_TRUST)* xp);
1505 char* X509_TRUST_get0_name(const (.X509_TRUST)* xp);
1506 int X509_TRUST_get_trust(const (.X509_TRUST)* xp);
1507 
1508 int X509_up_ref(libressl_d.openssl.ossl_typ.X509* x);
1509 .stack_st_X509* X509_chain_up_ref(.stack_st_X509 * chain);
1510 
1511 /* BEGIN ERROR CODES */
1512 /**
1513  * The following lines are auto generated by the script mkerr.pl. Any changes
1514  * made after this point may be overwritten when the script is next run.
1515  */
1516 void ERR_load_X509_strings();
1517 
1518 /* Error codes for the X509 functions. */
1519 
1520 /* Function codes. */
1521 enum X509_F_ADD_CERT_DIR = 100;
1522 enum X509_F_BY_FILE_CTRL = 101;
1523 enum X509_F_CHECK_POLICY = 145;
1524 enum X509_F_DIR_CTRL = 102;
1525 enum X509_F_GET_CERT_BY_SUBJECT = 103;
1526 enum X509_F_NETSCAPE_SPKI_B64_DECODE = 129;
1527 enum X509_F_NETSCAPE_SPKI_B64_ENCODE = 130;
1528 enum X509_F_X509AT_ADD1_ATTR = 135;
1529 enum X509_F_X509V3_ADD_EXT = 104;
1530 enum X509_F_X509_ATTRIBUTE_CREATE_BY_NID = 136;
1531 enum X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ = 137;
1532 enum X509_F_X509_ATTRIBUTE_CREATE_BY_TXT = 140;
1533 enum X509_F_X509_ATTRIBUTE_GET0_DATA = 139;
1534 enum X509_F_X509_ATTRIBUTE_SET1_DATA = 138;
1535 enum X509_F_X509_CHECK_PRIVATE_KEY = 128;
1536 enum X509_F_X509_CRL_PRINT_FP = 147;
1537 enum X509_F_X509_EXTENSION_CREATE_BY_NID = 108;
1538 enum X509_F_X509_EXTENSION_CREATE_BY_OBJ = 109;
1539 enum X509_F_X509_GET_PUBKEY_PARAMETERS = 110;
1540 enum X509_F_X509_LOAD_CERT_CRL_FILE = 132;
1541 enum X509_F_X509_LOAD_CERT_FILE = 111;
1542 enum X509_F_X509_LOAD_CRL_FILE = 112;
1543 enum X509_F_X509_NAME_ADD_ENTRY = 113;
1544 enum X509_F_X509_NAME_ENTRY_CREATE_BY_NID = 114;
1545 enum X509_F_X509_NAME_ENTRY_CREATE_BY_TXT = 131;
1546 enum X509_F_X509_NAME_ENTRY_SET_OBJECT = 115;
1547 enum X509_F_X509_NAME_ONELINE = 116;
1548 enum X509_F_X509_NAME_PRINT = 117;
1549 enum X509_F_X509_PRINT_EX_FP = 118;
1550 enum X509_F_X509_PUBKEY_GET = 119;
1551 enum X509_F_X509_PUBKEY_SET = 120;
1552 enum X509_F_X509_REQ_CHECK_PRIVATE_KEY = 144;
1553 enum X509_F_X509_REQ_PRINT_EX = 121;
1554 enum X509_F_X509_REQ_PRINT_FP = 122;
1555 enum X509_F_X509_REQ_TO_X509 = 123;
1556 enum X509_F_X509_STORE_ADD_CERT = 124;
1557 enum X509_F_X509_STORE_ADD_CRL = 125;
1558 enum X509_F_X509_STORE_CTX_GET1_ISSUER = 146;
1559 enum X509_F_X509_STORE_CTX_INIT = 143;
1560 enum X509_F_X509_STORE_CTX_NEW = 142;
1561 enum X509_F_X509_STORE_CTX_PURPOSE_INHERIT = 134;
1562 enum X509_F_X509_TO_X509_REQ = 126;
1563 enum X509_F_X509_TRUST_ADD = 133;
1564 enum X509_F_X509_TRUST_SET = 141;
1565 enum X509_F_X509_VERIFY_CERT = 127;
1566 
1567 /* Reason codes. */
1568 enum X509_R_BAD_X509_FILETYPE = 100;
1569 enum X509_R_BASE64_DECODE_ERROR = 118;
1570 enum X509_R_CANT_CHECK_DH_KEY = 114;
1571 enum X509_R_CERT_ALREADY_IN_HASH_TABLE = 101;
1572 enum X509_R_ERR_ASN1_LIB = 102;
1573 enum X509_R_INVALID_DIRECTORY = 113;
1574 enum X509_R_INVALID_FIELD_NAME = 119;
1575 enum X509_R_INVALID_TRUST = 123;
1576 enum X509_R_KEY_TYPE_MISMATCH = 115;
1577 enum X509_R_KEY_VALUES_MISMATCH = 116;
1578 enum X509_R_LOADING_CERT_DIR = 103;
1579 enum X509_R_LOADING_DEFAULTS = 104;
1580 enum X509_R_METHOD_NOT_SUPPORTED = 124;
1581 enum X509_R_NO_CERT_SET_FOR_US_TO_VERIFY = 105;
1582 enum X509_R_PUBLIC_KEY_DECODE_ERROR = 125;
1583 enum X509_R_PUBLIC_KEY_ENCODE_ERROR = 126;
1584 enum X509_R_SHOULD_RETRY = 106;
1585 enum X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN = 107;
1586 enum X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY = 108;
1587 enum X509_R_UNKNOWN_KEY_TYPE = 117;
1588 enum X509_R_UNKNOWN_NID = 109;
1589 enum X509_R_UNKNOWN_PURPOSE_ID = 121;
1590 enum X509_R_UNKNOWN_TRUST_ID = 120;
1591 enum X509_R_UNSUPPORTED_ALGORITHM = 111;
1592 enum X509_R_WRONG_LOOKUP_TYPE = 112;
1593 enum X509_R_WRONG_TYPE = 122;