1use super::super::*;
2use libc::*;
3
4cfg_if! {
5 if #[cfg(libressl400)] {
6 pub enum X509_VAL {}
7 } else {
8 #[repr(C)]
9 pub struct X509_VAL {
10 pub notBefore: *mut ASN1_TIME,
11 pub notAfter: *mut ASN1_TIME,
12 }
13 }
14}
15
16pub enum X509_NAME_ENTRY {}
17
18stack!(stack_st_X509_NAME_ENTRY);
19
20stack!(stack_st_X509_NAME);
21
22pub enum X509_EXTENSION {}
23
24stack!(stack_st_X509_EXTENSION);
25
26pub enum X509_ATTRIBUTE {}
27
28stack!(stack_st_X509_ATTRIBUTE);
29
30cfg_if! {
31 if #[cfg(any(ossl110, libressl))] {
32 pub enum X509_REQ_INFO {}
33 } else {
34 #[repr(C)]
35 pub struct X509_REQ_INFO {
36 pub enc: ASN1_ENCODING,
37 pub version: *mut ASN1_INTEGER,
38 pub subject: *mut X509_NAME,
39 pubkey: *mut c_void,
40 pub attributes: *mut stack_st_X509_ATTRIBUTE,
41 }
42 }
43}
44
45cfg_if! {
46 if #[cfg(any(ossl110, libressl))] {
47 pub enum X509_CRL {}
48 } else {
49 #[repr(C)]
50 pub struct X509_CRL {
51 pub crl: *mut X509_CRL_INFO,
52 sig_alg: *mut X509_ALGOR,
53 signature: *mut c_void,
54 references: c_int,
55 flags: c_int,
56 akid: *mut c_void,
57 idp: *mut c_void,
58 idp_flags: c_int,
59 idp_reasons: c_int,
60 crl_number: *mut ASN1_INTEGER,
61 base_crl_number: *mut ASN1_INTEGER,
62 sha1_hash: [c_uchar; 20],
63 issuers: *mut c_void,
64 meth: *const c_void,
65 meth_data: *mut c_void,
66 }
67 }
68}
69
70stack!(stack_st_X509_CRL);
71
72cfg_if! {
73 if #[cfg(any(ossl110, libressl))] {
74 pub enum X509_CRL_INFO {}
75 } else {
76 #[repr(C)]
77 pub struct X509_CRL_INFO {
78 version: *mut ASN1_INTEGER,
79 sig_alg: *mut X509_ALGOR,
80 pub issuer: *mut X509_NAME,
81 pub lastUpdate: *mut ASN1_TIME,
82 pub nextUpdate: *mut ASN1_TIME,
83 pub revoked: *mut stack_st_X509_REVOKED,
84 extensions: *mut stack_st_X509_EXTENSION,
85 enc: ASN1_ENCODING,
86 }
87 }
88}
89
90cfg_if! {
91 if #[cfg(any(ossl110, libressl))] {
92 pub enum X509_REVOKED {}
93 } else {
94 #[repr(C)]
95 pub struct X509_REVOKED {
96 pub serialNumber: *mut ASN1_INTEGER,
97 pub revocationDate: *mut ASN1_TIME,
98 pub extensions: *mut stack_st_X509_EXTENSION,
99 issuer: *mut stack_st_GENERAL_NAME,
100 reason: c_int,
101 sequence: c_int,
102 }
103 }
104}
105
106stack!(stack_st_X509_REVOKED);
107
108cfg_if! {
109 if #[cfg(any(ossl110, libressl))] {
110 pub enum X509_REQ {}
111 } else {
112 #[repr(C)]
113 pub struct X509_REQ {
114 pub req_info: *mut X509_REQ_INFO,
115 sig_alg: *mut c_void,
116 signature: *mut c_void,
117 references: c_int,
118 }
119 }
120}
121
122cfg_if! {
123 if #[cfg(any(ossl110, libressl))] {
124 pub enum X509_CINF {}
125 } else {
126 #[repr(C)]
127 pub struct X509_CINF {
128 version: *mut c_void,
129 serialNumber: *mut c_void,
130 signature: *mut c_void,
131 issuer: *mut c_void,
132 pub validity: *mut X509_VAL,
133 subject: *mut c_void,
134 key: *mut c_void,
135 issuerUID: *mut c_void,
136 subjectUID: *mut c_void,
137 pub extensions: *mut stack_st_X509_EXTENSION,
138 enc: ASN1_ENCODING,
139 }
140 }
141}
142
143stack!(stack_st_X509);
144
145stack!(stack_st_X509_OBJECT);
146
147stack!(stack_st_X509_LOOKUP);
148
149extern "C" {
150 pub fn X509_verify_cert_error_string(n: c_long) -> *const c_char;
151
152 pub fn X509_sign(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int;
153
154 pub fn X509_digest(
155 x: *const X509,
156 digest: *const EVP_MD,
157 buf: *mut c_uchar,
158 len: *mut c_uint,
159 ) -> c_int;
160 pub fn X509_pubkey_digest(
161 x: *const X509,
162 digest: *const EVP_MD,
163 buf: *mut c_uchar,
164 len: *mut c_uint,
165 ) -> c_int;
166
167 pub fn X509_REQ_sign(x: *mut X509_REQ, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int;
168 pub fn X509_REQ_digest(
169 x: *const X509_REQ,
170 digest: *const EVP_MD,
171 md: *mut c_uchar,
172 len: *mut c_uint,
173 ) -> c_int;
174}
175
176const_ptr_api! {
177 extern "C" {
178 pub fn i2d_X509_bio(b: *mut BIO, x: #[const_ptr_if(ossl300)] X509) -> c_int;
179 pub fn i2d_X509_REQ_bio(b: *mut BIO, x: #[const_ptr_if(ossl300)] X509_REQ) -> c_int;
180 pub fn i2d_PrivateKey_bio(b: *mut BIO, x: #[const_ptr_if(ossl300)] EVP_PKEY) -> c_int;
181 pub fn i2d_PUBKEY_bio(b: *mut BIO, x: #[const_ptr_if(ossl300)] EVP_PKEY) -> c_int;
182
183 pub fn i2d_PUBKEY(k: #[const_ptr_if(ossl300)] EVP_PKEY, buf: *mut *mut u8) -> c_int;
184 pub fn i2d_PrivateKey(k: #[const_ptr_if(ossl300)] EVP_PKEY, buf: *mut *mut u8) -> c_int;
185 }
186}
187
188#[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
189const_ptr_api! {
190 extern "C" {
191 pub fn i2d_RSA_PUBKEY(k: #[const_ptr_if(ossl300)] RSA, buf: *mut *mut u8) -> c_int;
192 pub fn i2d_DSA_PUBKEY(a: #[const_ptr_if(ossl300)] DSA, pp: *mut *mut c_uchar) -> c_int;
193 pub fn i2d_ECPrivateKey(ec_key: #[const_ptr_if(ossl300)] EC_KEY, pp: *mut *mut c_uchar) -> c_int;
194 pub fn i2d_EC_PUBKEY(a: #[const_ptr_if(ossl300)] EC_KEY, pp: *mut *mut c_uchar) -> c_int;
195 }
196}
197extern "C" {
198 pub fn d2i_PUBKEY(k: *mut *mut EVP_PKEY, buf: *mut *const u8, len: c_long) -> *mut EVP_PKEY;
199}
200
201#[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
202extern "C" {
203 pub fn d2i_RSA_PUBKEY(k: *mut *mut RSA, buf: *mut *const u8, len: c_long) -> *mut RSA;
204 pub fn d2i_DSA_PUBKEY(k: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long) -> *mut DSA;
205 pub fn d2i_EC_PUBKEY(
206 a: *mut *mut EC_KEY,
207 pp: *mut *const c_uchar,
208 length: c_long,
209 ) -> *mut EC_KEY;
210
211 pub fn d2i_ECPrivateKey(
212 k: *mut *mut EC_KEY,
213 pp: *mut *const c_uchar,
214 length: c_long,
215 ) -> *mut EC_KEY;
216}
217
218const_ptr_api! {
219 extern "C" {
220 pub fn X509_ALGOR_get0(
221 paobj: *mut #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT,
222 pptype: *mut c_int,
223 ppval: *mut #[const_ptr_if(any(ossl110, libressl))] c_void,
224 alg: #[const_ptr_if(any(ossl110, libressl))] X509_ALGOR,
225 );
226 }
227}
228
229extern "C" {
230 pub fn X509_gmtime_adj(time: *mut ASN1_TIME, adj: c_long) -> *mut ASN1_TIME;
231
232 pub fn X509_to_X509_REQ(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> *mut X509_REQ;
233
234 pub fn X509_ALGOR_free(x: *mut X509_ALGOR);
235
236 pub fn X509_REVOKED_new() -> *mut X509_REVOKED;
237 pub fn X509_REVOKED_free(x: *mut X509_REVOKED);
238}
239const_ptr_api! {
240 extern "C" {
241 pub fn X509_REVOKED_dup(rev: #[const_ptr_if(ossl300)] X509_REVOKED) -> *mut X509_REVOKED;
242 }
243}
244
245extern "C" {
246 pub fn d2i_X509_REVOKED(
247 a: *mut *mut X509_REVOKED,
248 pp: *mut *const c_uchar,
249 length: c_long,
250 ) -> *mut X509_REVOKED;
251}
252const_ptr_api! {
253 extern "C" {
254 pub fn i2d_X509_REVOKED(x: #[const_ptr_if(ossl300)] X509_REVOKED, buf: *mut *mut u8) -> c_int;
255 }
256}
257extern "C" {
258 pub fn X509_CRL_new() -> *mut X509_CRL;
259 pub fn X509_CRL_free(x: *mut X509_CRL);
260 pub fn d2i_X509_CRL(
261 a: *mut *mut X509_CRL,
262 pp: *mut *const c_uchar,
263 length: c_long,
264 ) -> *mut X509_CRL;
265}
266const_ptr_api! {
267 extern "C" {
268 pub fn i2d_X509_CRL(x: #[const_ptr_if(ossl300)] X509_CRL, buf: *mut *mut u8) -> c_int;
269 pub fn X509_CRL_dup(x: #[const_ptr_if(ossl300)] X509_CRL) -> *mut X509_CRL;
270 }
271}
272
273extern "C" {
274 pub fn X509_REQ_new() -> *mut X509_REQ;
275 pub fn X509_REQ_free(x: *mut X509_REQ);
276 pub fn d2i_X509_REQ(
277 a: *mut *mut X509_REQ,
278 pp: *mut *const c_uchar,
279 length: c_long,
280 ) -> *mut X509_REQ;
281}
282const_ptr_api! {
283 extern "C" {
284 pub fn i2d_X509_REQ(x: #[const_ptr_if(ossl300)] X509_REQ, buf: *mut *mut u8) -> c_int;
285
286 pub fn X509_get0_signature(
287 psig: *mut #[const_ptr_if(any(ossl110, libressl))] ASN1_BIT_STRING,
288 palg: *mut #[const_ptr_if(any(ossl110, libressl))] X509_ALGOR,
289 x: *const X509,
290 );
291
292 pub fn X509_REQ_dup(x: #[const_ptr_if(ossl300)] X509_REQ) -> *mut X509_REQ;
293 }
294}
295extern "C" {
296 #[cfg(ossl102)]
297 pub fn X509_get_signature_nid(x: *const X509) -> c_int;
298
299 pub fn X509_EXTENSION_free(ext: *mut X509_EXTENSION);
300
301 pub fn X509_NAME_ENTRY_free(x: *mut X509_NAME_ENTRY);
302
303 pub fn X509_NAME_new() -> *mut X509_NAME;
304 pub fn X509_NAME_cmp(x: *const X509_NAME, y: *const X509_NAME) -> c_int;
305 pub fn X509_NAME_free(x: *mut X509_NAME);
306
307 pub fn X509_NAME_digest(
308 data: *const X509_NAME,
309 type_: *const EVP_MD,
310 md: *mut c_uchar,
311 len: *mut c_uint,
312 ) -> c_int;
313
314 pub fn X509_new() -> *mut X509;
315 pub fn X509_free(x: *mut X509);
316}
317const_ptr_api! {
318 extern "C" {
319 pub fn i2d_X509(x: #[const_ptr_if(ossl300)] X509, buf: *mut *mut u8) -> c_int;
320 pub fn X509_NAME_dup(x: #[const_ptr_if(ossl300)] X509_NAME) -> *mut X509_NAME;
321 pub fn X509_dup(x: #[const_ptr_if(ossl300)] X509) -> *mut X509;
322 pub fn X509_NAME_add_entry(
323 name: *mut X509_NAME,
324 ne: #[const_ptr_if(any(ossl110, libressl))] X509_NAME_ENTRY,
325 loc: c_int,
326 set: c_int,
327 ) -> c_int;
328 }
329}
330extern "C" {
331 pub fn d2i_X509(a: *mut *mut X509, pp: *mut *const c_uchar, length: c_long) -> *mut X509;
332 pub fn d2i_X509_bio(b: *mut BIO, a: *mut *mut X509) -> *mut X509;
333
334 pub fn X509_get_pubkey(x: *mut X509) -> *mut EVP_PKEY;
335
336 pub fn X509_set_version(x: *mut X509, version: c_long) -> c_int;
337 #[cfg(any(ossl110, libressl))]
338 pub fn X509_get_version(x: *const X509) -> c_long;
339 pub fn X509_set_serialNumber(x: *mut X509, sn: *mut ASN1_INTEGER) -> c_int;
340 pub fn X509_get_serialNumber(x: *mut X509) -> *mut ASN1_INTEGER;
341 pub fn X509_alias_get0(x: *mut X509, len: *mut c_int) -> *mut c_uchar;
342}
343const_ptr_api! {
344 extern "C" {
345 pub fn X509_set_issuer_name(x: *mut X509, name: #[const_ptr_if(ossl300)] X509_NAME) -> c_int;
346 }
347}
348extern "C" {
349 pub fn X509_issuer_name_hash(x: *mut X509) -> c_ulong;
350 pub fn X509_subject_name_hash(x: *mut X509) -> c_ulong;
351}
352const_ptr_api! {
353 extern "C" {
354 pub fn X509_get_issuer_name(x: #[const_ptr_if(any(ossl110, libressl))] X509) -> *mut X509_NAME;
355 pub fn X509_set_subject_name(x: *mut X509, name: #[const_ptr_if(ossl300)] X509_NAME) -> c_int;
356 pub fn X509_get_subject_name(x: #[const_ptr_if(any(ossl110, libressl))] X509) -> *mut X509_NAME;
357 }
358}
359cfg_if! {
360 if #[cfg(any(ossl110, libressl))] {
361 extern "C" {
362 pub fn X509_set1_notBefore(x: *mut X509, tm: *const ASN1_TIME) -> c_int;
363 pub fn X509_set1_notAfter(x: *mut X509, tm: *const ASN1_TIME) -> c_int;
364 }
365 } else {
366 extern "C" {
367 pub fn X509_set_notBefore(x: *mut X509, tm: *const ASN1_TIME) -> c_int;
368 pub fn X509_set_notAfter(x: *mut X509, tm: *const ASN1_TIME) -> c_int;
369 }
370 }
371}
372extern "C" {
373 #[cfg(any(ossl110, libressl))]
374 pub fn X509_REQ_get_version(req: *const X509_REQ) -> c_long;
375 pub fn X509_REQ_set_version(req: *mut X509_REQ, version: c_long) -> c_int;
376 #[cfg(any(ossl110, libressl))]
377 pub fn X509_REQ_get_subject_name(req: *const X509_REQ) -> *mut X509_NAME;
378}
379const_ptr_api! {
380 extern "C" {
381 pub fn X509_REQ_set_subject_name(req: *mut X509_REQ, name: #[const_ptr_if(ossl300)] X509_NAME) -> c_int;
382 }
383}
384extern "C" {
385 pub fn X509_REQ_set_pubkey(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int;
386 pub fn X509_REQ_get_pubkey(req: *mut X509_REQ) -> *mut EVP_PKEY;
387 #[cfg(ossl110)]
388 pub fn X509_REQ_get_X509_PUBKEY(req: *mut X509_REQ) -> *mut X509_PUBKEY;
389 pub fn X509_REQ_get_extensions(req: *mut X509_REQ) -> *mut stack_st_X509_EXTENSION;
390}
391cfg_if! {
392 if #[cfg(tongsuo)] {
393 extern "C" {
394 pub fn X509_set0_sm2_id(x: *mut X509, sm2_id: *mut ASN1_OCTET_STRING);
395 pub fn X509_get0_sm2_id(x: *mut X509) -> *mut ASN1_OCTET_STRING;
396 pub fn X509_REQ_set0_sm2_id(x: *mut X509_REQ, sm2_id: *mut ASN1_OCTET_STRING);
397 pub fn X509_REQ_get0_sm2_id(x: *mut X509_REQ) -> *mut ASN1_OCTET_STRING;
398 }
399 }
400}
401const_ptr_api! {
402 extern "C" {
403 pub fn X509_REQ_add_extensions(req: *mut X509_REQ, exts: #[const_ptr_if(ossl300)] stack_st_X509_EXTENSION)
404 -> c_int;
405 }
406}
407extern "C" {
408 pub fn X509_REQ_get_attr_count(req: *const X509_REQ) -> c_int;
409 pub fn X509_REQ_get_attr_by_NID(req: *const X509_REQ, nid: c_int, lastpos: c_int) -> c_int;
410 pub fn X509_REQ_get_attr(req: *const X509_REQ, loc: c_int) -> *mut X509_ATTRIBUTE;
411 pub fn X509_REQ_delete_attr(req: *mut X509_REQ, loc: c_int) -> *mut X509_ATTRIBUTE;
412 pub fn X509_REQ_add1_attr_by_txt(
413 req: *mut X509_REQ,
414 attrname: *const c_char,
415 chtype: c_int,
416 bytes: *const c_uchar,
417 len: c_int,
418 ) -> c_int;
419 pub fn X509_REQ_add1_attr_by_NID(
420 req: *mut X509_REQ,
421 nid: c_int,
422 chtype: c_int,
423 bytes: *const c_uchar,
424 len: c_int,
425 ) -> c_int;
426 pub fn X509_REQ_add1_attr_by_OBJ(
427 req: *mut X509_REQ,
428 obj: *const ASN1_OBJECT,
429 chtype: c_int,
430 bytes: *const c_uchar,
431 len: c_int,
432 ) -> c_int;
433}
434extern "C" {
435 pub fn X509_set_pubkey(x: *mut X509, pkey: *mut EVP_PKEY) -> c_int;
436 pub fn X509_REQ_verify(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int;
437 #[cfg(any(ossl110, libressl))]
438 pub fn X509_getm_notBefore(x: *const X509) -> *mut ASN1_TIME;
439 #[cfg(any(ossl110, libressl))]
440 pub fn X509_getm_notAfter(x: *const X509) -> *mut ASN1_TIME;
441 #[cfg(any(ossl110, libressl))]
442 pub fn X509_up_ref(x: *mut X509) -> c_int;
443
444 #[cfg(any(ossl110, libressl))]
445 pub fn X509_REVOKED_get0_serialNumber(req: *const X509_REVOKED) -> *const ASN1_INTEGER;
446 #[cfg(any(ossl110, libressl))]
447 pub fn X509_REVOKED_get0_revocationDate(req: *const X509_REVOKED) -> *const ASN1_TIME;
448 #[cfg(any(ossl110, libressl))]
449 pub fn X509_REVOKED_get0_extensions(r: *const X509_REVOKED) -> *const stack_st_X509_EXTENSION;
450
451 pub fn X509_REVOKED_set_serialNumber(r: *mut X509_REVOKED, serial: *mut ASN1_INTEGER) -> c_int;
452 pub fn X509_REVOKED_set_revocationDate(r: *mut X509_REVOKED, tm: *mut ASN1_TIME) -> c_int;
453
454 pub fn X509_CRL_sign(x: *mut X509_CRL, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int;
455 pub fn X509_CRL_digest(
456 x: *const X509_CRL,
457 digest: *const EVP_MD,
458 md: *mut c_uchar,
459 len: *mut c_uint,
460 ) -> c_int;
461 pub fn X509_CRL_verify(crl: *mut X509_CRL, pkey: *mut EVP_PKEY) -> c_int;
462 pub fn X509_CRL_get0_by_cert(
463 x: *mut X509_CRL,
464 ret: *mut *mut X509_REVOKED,
465 cert: *mut X509,
466 ) -> c_int;
467}
468const_ptr_api! {
469 extern "C" {
470 pub fn X509_CRL_get0_by_serial(
471 x: *mut X509_CRL,
472 ret: *mut *mut X509_REVOKED,
473 serial: #[const_ptr_if(ossl300)] ASN1_INTEGER,
474 ) -> c_int;
475 }
476}
477
478extern "C" {
479 pub fn X509_PUBKEY_new() -> *mut X509_PUBKEY;
480 pub fn X509_PUBKEY_free(a: *mut X509_PUBKEY);
481 #[cfg(ossl300)]
482 pub fn X509_PUBKEY_dup(a: *const X509_PUBKEY) -> *mut X509_PUBKEY;
483 #[cfg(ossl300)]
484 pub fn X509_PUBKEY_eq(a: *const X509_PUBKEY, b: *const X509_PUBKEY) -> c_int;
485 pub fn d2i_X509_PUBKEY(
486 a: *mut *mut X509_PUBKEY,
487 in_: *mut *const c_uchar,
488 len: c_long,
489 ) -> *mut X509_PUBKEY;
490 #[cfg(ossl300)]
491 pub fn X509_PUBKEY_new_ex(libctx: *mut OSSL_LIB_CTX, propq: *const c_char) -> *mut X509_PUBKEY;
492 pub fn X509_PUBKEY_set(x: *mut *mut X509_PUBKEY, pkey: *mut EVP_PKEY) -> c_int;
493
494 pub fn X509_PUBKEY_set0_param(
495 pub_: *mut X509_PUBKEY,
496 aobj: *mut ASN1_OBJECT,
497 ptype: c_int,
498 pval: *mut c_void,
499 penc: *mut c_uchar,
500 penclen: c_int,
501 ) -> c_int;
502}
503const_ptr_api! {
504 extern "C" {
505 pub fn i2d_X509_PUBKEY(a: #[const_ptr_if(ossl300)] X509_PUBKEY, out: *mut *mut c_uchar) -> c_int;
506 pub fn X509_PUBKEY_get0_param(
507 ppkalg: *mut *mut ASN1_OBJECT,
508 pk: *mut *const c_uchar,
509 ppklen: *mut c_int,
510 pa: *mut *mut X509_ALGOR,
511 pub_: #[const_ptr_if(ossl300)] X509_PUBKEY,
512 ) -> c_int;
513 pub fn X509_PUBKEY_get(key: #[const_ptr_if(ossl300)] X509_PUBKEY) -> *mut EVP_PKEY;
514 pub fn X509_PUBKEY_get0(key: #[const_ptr_if(ossl300)] X509_PUBKEY) -> *mut EVP_PKEY;
515 }
516}
517
518extern "C" {
519 #[cfg(any(ossl110, libressl))]
520 pub fn X509_CRL_get_REVOKED(crl: *mut X509_CRL) -> *mut stack_st_X509_REVOKED;
521 #[cfg(any(ossl110, libressl))]
522 pub fn X509_CRL_get0_nextUpdate(x: *const X509_CRL) -> *const ASN1_TIME;
523 #[cfg(any(ossl110, libressl))]
524 pub fn X509_CRL_get0_lastUpdate(x: *const X509_CRL) -> *const ASN1_TIME;
525 #[cfg(any(ossl110, libressl))]
526 pub fn X509_CRL_get_issuer(x: *const X509_CRL) -> *mut X509_NAME;
527
528 #[cfg(any(ossl110, libressl))]
529 pub fn X509_get0_extensions(req: *const X509) -> *const stack_st_X509_EXTENSION;
530 #[cfg(any(ossl110, libressl))]
531 pub fn X509_get_X509_PUBKEY(x: *const X509) -> *mut X509_PUBKEY;
532
533 pub fn X509_CRL_set_version(crl: *mut X509_CRL, version: c_long) -> c_int;
534}
535const_ptr_api! {
536 extern "C" {
537 pub fn X509_CRL_set_issuer_name(crl: *mut X509_CRL, name: #[const_ptr_if(ossl300)] X509_NAME) -> c_int;
538 }
539}
540extern "C" {
541 pub fn X509_CRL_sort(crl: *mut X509_CRL) -> c_int;
542
543 #[cfg(any(ossl110, libressl))]
544 pub fn X509_CRL_up_ref(crl: *mut X509_CRL) -> c_int;
545 pub fn X509_CRL_add0_revoked(crl: *mut X509_CRL, rev: *mut X509_REVOKED) -> c_int;
546}
547cfg_if! {
548 if #[cfg(any(ossl110, libressl))] {
549 extern "C" {
550 pub fn X509_CRL_set1_lastUpdate(crl: *mut X509_CRL, tm: *const ASN1_TIME) -> c_int;
551 pub fn X509_CRL_set1_nextUpdate(crl: *mut X509_CRL, tm: *const ASN1_TIME) -> c_int;
552 }
553 } else {
554 extern "C" {
556 pub fn X509_CRL_set_lastUpdate(crl: *mut X509_CRL, tm: *const ASN1_TIME) -> c_int;
557 pub fn X509_CRL_set_nextUpdate(crl: *mut X509_CRL, tm: *const ASN1_TIME) -> c_int;
558 }
559 }
560}
561
562const_ptr_api! {
563 extern "C" {
564 pub fn X509_NAME_entry_count(n: #[const_ptr_if(any(ossl110, libressl))] X509_NAME) -> c_int;
565 pub fn X509_NAME_get_index_by_NID(n: #[const_ptr_if(any(ossl300, libressl))] X509_NAME, nid: c_int, last_pos: c_int) -> c_int;
566 pub fn X509_NAME_get_entry(n: #[const_ptr_if(any(ossl110, libressl))] X509_NAME, loc: c_int) -> *mut X509_NAME_ENTRY;
567 pub fn X509_NAME_add_entry_by_NID(
568 x: *mut X509_NAME,
569 field: c_int,
570 ty: c_int,
571 bytes: #[const_ptr_if(any(ossl110, libressl))] c_uchar,
572 len: c_int,
573 loc: c_int,
574 set: c_int,
575 ) -> c_int;
576 pub fn i2d_X509_NAME(n: #[const_ptr_if(ossl300)] X509_NAME, buf: *mut *mut u8) -> c_int;
577 pub fn X509_NAME_ENTRY_get_object(ne: #[const_ptr_if(any(ossl110, libressl))] X509_NAME_ENTRY) -> *mut ASN1_OBJECT;
578 pub fn X509_NAME_ENTRY_get_data(ne: #[const_ptr_if(any(ossl110, libressl))] X509_NAME_ENTRY) -> *mut ASN1_STRING;
579 }
580}
581extern "C" {
582 pub fn X509_NAME_add_entry_by_txt(
583 x: *mut X509_NAME,
584 field: *const c_char,
585 ty: c_int,
586 bytes: *const c_uchar,
587 len: c_int,
588 loc: c_int,
589 set: c_int,
590 ) -> c_int;
591 pub fn d2i_X509_NAME(
592 n: *mut *mut X509_NAME,
593 pp: *mut *const c_uchar,
594 length: c_long,
595 ) -> *mut X509_NAME;
596}
597
598extern "C" {
600 pub fn X509_delete_ext(x: *mut X509, loc: c_int) -> *mut X509_EXTENSION;
602 pub fn X509_add_ext(x: *mut X509, ext: *mut X509_EXTENSION, loc: c_int) -> c_int;
603 pub fn X509_add1_ext_i2d(
604 x: *mut X509,
605 nid: c_int,
606 value: *mut c_void,
607 crit: c_int,
608 flags: c_ulong,
609 ) -> c_int;
610 pub fn X509_CRL_delete_ext(x: *mut X509_CRL, loc: c_int) -> *mut X509_EXTENSION;
612 pub fn X509_CRL_add_ext(x: *mut X509_CRL, ext: *mut X509_EXTENSION, loc: c_int) -> c_int;
613 pub fn X509_CRL_add1_ext_i2d(
614 x: *mut X509_CRL,
615 nid: c_int,
616 value: *mut c_void,
617 crit: c_int,
618 flags: c_ulong,
619 ) -> c_int;
620 pub fn X509_REVOKED_delete_ext(x: *mut X509_REVOKED, loc: c_int) -> *mut X509_EXTENSION;
622 pub fn X509_REVOKED_add_ext(
623 x: *mut X509_REVOKED,
624 ext: *mut X509_EXTENSION,
625 loc: c_int,
626 ) -> c_int;
627 pub fn X509_REVOKED_add1_ext_i2d(
628 x: *mut X509_REVOKED,
629 nid: c_int,
630 value: *mut c_void,
631 crit: c_int,
632 flags: c_ulong,
633 ) -> c_int;
634 pub fn X509v3_get_ext_count(x: *const stack_st_X509_EXTENSION) -> c_int;
637 pub fn X509v3_get_ext_by_NID(
638 x: *const stack_st_X509_EXTENSION,
639 nid: c_int,
640 lastpos: c_int,
641 ) -> c_int;
642 pub fn X509v3_get_ext_by_critical(
643 x: *const stack_st_X509_EXTENSION,
644 crit: c_int,
645 lastpos: c_int,
646 ) -> c_int;
647 pub fn X509v3_get_ext(x: *const stack_st_X509_EXTENSION, loc: c_int) -> *mut X509_EXTENSION;
648 pub fn X509v3_delete_ext(x: *mut stack_st_X509_EXTENSION, loc: c_int) -> *mut X509_EXTENSION;
649 pub fn X509v3_add_ext(
650 x: *mut *mut stack_st_X509_EXTENSION,
651 ex: *mut X509_EXTENSION,
652 loc: c_int,
653 ) -> *mut stack_st_X509_EXTENSION;
654 pub fn X509_EXTENSION_create_by_NID(
657 ex: *mut *mut X509_EXTENSION,
658 nid: c_int,
659 crit: c_int,
660 data: *mut ASN1_OCTET_STRING,
661 ) -> *mut X509_EXTENSION;
662 pub fn X509_EXTENSION_set_critical(ex: *mut X509_EXTENSION, crit: c_int) -> c_int;
663 pub fn X509_EXTENSION_set_data(ex: *mut X509_EXTENSION, data: *mut ASN1_OCTET_STRING) -> c_int;
664 pub fn X509_EXTENSION_get_object(ext: *mut X509_EXTENSION) -> *mut ASN1_OBJECT;
665 pub fn X509_EXTENSION_get_data(ext: *mut X509_EXTENSION) -> *mut ASN1_OCTET_STRING;
666}
667
668const_ptr_api! {
669 extern "C" {
670 pub fn i2d_X509_EXTENSION(ext: #[const_ptr_if(ossl300)] X509_EXTENSION, pp: *mut *mut c_uchar) -> c_int;
671 }
672}
673
674const_ptr_api! {
675 extern "C" {
676 pub fn X509_get_ext_count(x: #[const_ptr_if(any(ossl110, libressl))] X509) -> c_int;
678 pub fn X509_get_ext_by_NID(x: #[const_ptr_if(any(ossl110, libressl))] X509, nid: c_int, lastpos: c_int) -> c_int;
679 pub fn X509_get_ext_by_OBJ(x: #[const_ptr_if(any(ossl110, libressl))] X509, obj: #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT, lastpos: c_int) -> c_int;
680 pub fn X509_get_ext_by_critical(x: #[const_ptr_if(any(ossl110, libressl))] X509, crit: c_int, lastpos: c_int) -> c_int;
681 pub fn X509_get_ext(x: #[const_ptr_if(any(ossl110, libressl))] X509, loc: c_int) -> *mut X509_EXTENSION;
682 pub fn X509_get_ext_d2i(
683 x: #[const_ptr_if(any(ossl110, libressl))] X509,
684 nid: c_int,
685 crit: *mut c_int,
686 idx: *mut c_int,
687 ) -> *mut c_void;
688 pub fn X509_CRL_get_ext_count(x: #[const_ptr_if(any(ossl110, libressl))] X509_CRL) -> c_int;
690 pub fn X509_CRL_get_ext_by_NID(x: #[const_ptr_if(any(ossl110, libressl))] X509_CRL, nid: c_int, lastpos: c_int) -> c_int;
691 pub fn X509_CRL_get_ext_by_OBJ(x: #[const_ptr_if(any(ossl110, libressl))] X509_CRL, obj: #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT, lastpos: c_int) -> c_int;
692 pub fn X509_CRL_get_ext_by_critical(x: #[const_ptr_if(any(ossl110, libressl))] X509_CRL, crit: c_int, lastpos: c_int) -> c_int;
693 pub fn X509_CRL_get_ext(x: #[const_ptr_if(any(ossl110, libressl))] X509_CRL, loc: c_int) -> *mut X509_EXTENSION;
694 pub fn X509_CRL_get_ext_d2i(
695 x: #[const_ptr_if(any(ossl110, libressl))] X509_CRL,
696 nid: c_int,
697 crit: *mut c_int,
698 idx: *mut c_int,
699 ) -> *mut c_void;
700 pub fn X509_REVOKED_get_ext_count(x: #[const_ptr_if(any(ossl110, libressl))] X509_REVOKED) -> c_int;
702 pub fn X509_REVOKED_get_ext_by_NID(x: #[const_ptr_if(any(ossl110, libressl))] X509_REVOKED, nid: c_int, lastpos: c_int) -> c_int;
703 pub fn X509_REVOKED_get_ext_by_OBJ(x: #[const_ptr_if(any(ossl110, libressl))] X509_REVOKED, obj: #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT, lastpos: c_int) -> c_int;
704 pub fn X509_REVOKED_get_ext_by_critical(x: #[const_ptr_if(any(ossl110, libressl))] X509_REVOKED, crit: c_int, lastpos: c_int) -> c_int;
705 pub fn X509_REVOKED_get_ext(x: #[const_ptr_if(any(ossl110, libressl))] X509_REVOKED, loc: c_int) -> *mut X509_EXTENSION;
706 pub fn X509_REVOKED_get_ext_d2i(
707 x: #[const_ptr_if(any(ossl110, libressl))] X509_REVOKED,
708 nid: c_int,
709 crit: *mut c_int,
710 idx: *mut c_int,
711 ) -> *mut c_void;
712 pub fn X509v3_get_ext_by_OBJ(x: *const stack_st_X509_EXTENSION, obj: #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT, lastpos: c_int) -> c_int;
714 pub fn X509_EXTENSION_create_by_OBJ(ex: *mut *mut X509_EXTENSION, obj: #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT, crit: c_int, data: *mut ASN1_OCTET_STRING) -> *mut X509_EXTENSION;
716 pub fn X509_EXTENSION_set_object(ex: *mut X509_EXTENSION, obj: #[const_ptr_if(any(ossl110, libressl))] ASN1_OBJECT) -> c_int;
717 pub fn X509_EXTENSION_get_critical(ex: #[const_ptr_if(any(ossl110, libressl))] X509_EXTENSION) -> c_int;
718 }
719}
720
721extern "C" {
722 pub fn X509_verify_cert(ctx: *mut X509_STORE_CTX) -> c_int;
723}
724
725const_ptr_api! {
726 extern "C" {
727 #[cfg(any(ossl110, libressl))]
728 pub fn X509_STORE_get0_objects(ctx: #[const_ptr_if(ossl300)] X509_STORE) -> *mut stack_st_X509_OBJECT;
729 #[cfg(ossl330)]
730 pub fn X509_STORE_get1_objects(ctx: *mut X509_STORE) -> *mut stack_st_X509_OBJECT;
731 #[cfg(ossl300)]
732 pub fn X509_STORE_get1_all_certs(ctx: *mut X509_STORE) -> *mut stack_st_X509;
733 }
734}
735
736#[cfg(any(ossl110, libressl))]
737extern "C" {
738 pub fn X509_OBJECT_get0_X509(x: *const X509_OBJECT) -> *mut X509;
739}
740
741cfg_if! {
742 if #[cfg(any(ossl110, libressl))] {
743 extern "C" {
744 pub fn X509_OBJECT_free(a: *mut X509_OBJECT);
745 }
746 } else {
747 extern "C" {
748 pub fn X509_OBJECT_free_contents(a: *mut X509_OBJECT);
749 }
750 }
751}
752
753extern "C" {
754 pub fn X509_get_default_cert_file_env() -> *const c_char;
755 pub fn X509_get_default_cert_file() -> *const c_char;
756 pub fn X509_get_default_cert_dir_env() -> *const c_char;
757 pub fn X509_get_default_cert_dir() -> *const c_char;
758}
759
760extern "C" {
761 pub fn X509_cmp(a: *const X509, b: *const X509) -> c_int;
762 pub fn X509_issuer_and_serial_cmp(a: *const X509, b: *const X509) -> c_int;
763 pub fn X509_issuer_name_cmp(a: *const X509, b: *const X509) -> c_int;
764 pub fn X509_subject_name_cmp(a: *const X509, b: *const X509) -> c_int;
765 pub fn X509_CRL_cmp(a: *const X509_CRL, b: *const X509_CRL) -> c_int;
766 pub fn X509_CRL_match(a: *const X509_CRL, b: *const X509_CRL) -> c_int;
767}
768
769extern "C" {
770 pub fn X509_print(bio: *mut BIO, x509: *mut X509) -> c_int;
771 pub fn X509_REQ_print(bio: *mut BIO, req: *mut X509_REQ) -> c_int;
772}
773
774cfg_if! {
775 if #[cfg(libressl390)] {
776 pub enum X509_PURPOSE {}
777 } else {
778 #[repr(C)]
779 pub struct X509_PURPOSE {
780 pub purpose: c_int,
781 pub trust: c_int, pub flags: c_int,
783 pub check_purpose:
784 Option<unsafe extern "C" fn(*const X509_PURPOSE, *const X509, c_int) -> c_int>,
785 pub name: *mut c_char,
786 pub sname: *mut c_char,
787 pub usr_data: *mut c_void,
788 }
789 }
790}
791
792const_ptr_api! {
793 extern "C" {
794 pub fn X509_PURPOSE_get_by_sname(sname: #[const_ptr_if(any(ossl110, libressl))] c_char) -> c_int;
795 pub fn X509_PURPOSE_get_id(purpose: #[const_ptr_if(any(ossl110, libressl))] X509_PURPOSE) -> c_int;
796 pub fn X509_PURPOSE_get0(idx: c_int) -> #[const_ptr_if(libressl390)] X509_PURPOSE;
797 }
798}
799
800extern "C" {
801 pub fn X509_ATTRIBUTE_new() -> *mut X509_ATTRIBUTE;
802 pub fn X509_ATTRIBUTE_free(attr: *mut X509_ATTRIBUTE);
803 pub fn X509_ATTRIBUTE_create(
804 nid: c_int,
805 atrtype: c_int,
806 value: *mut c_void,
807 ) -> *mut X509_ATTRIBUTE;
808 pub fn X509_ATTRIBUTE_create_by_NID(
809 attr: *mut *mut X509_ATTRIBUTE,
810 nid: c_int,
811 atrtype: c_int,
812 data: *const c_void,
813 len: c_int,
814 ) -> *mut X509_ATTRIBUTE;
815 pub fn X509_ATTRIBUTE_create_by_OBJ(
816 attr: *mut *mut X509_ATTRIBUTE,
817 obj: *const ASN1_OBJECT,
818 atrtype: c_int,
819 data: *const c_void,
820 len: c_int,
821 ) -> *mut X509_ATTRIBUTE;
822 pub fn X509_ATTRIBUTE_create_by_txt(
823 attr: *mut *mut X509_ATTRIBUTE,
824 atrname: *const c_char,
825 atrtype: c_int,
826 bytes: *const c_uchar,
827 len: c_int,
828 ) -> *mut X509_ATTRIBUTE;
829 pub fn X509_ATTRIBUTE_set1_object(attr: *mut X509_ATTRIBUTE, obj: *const ASN1_OBJECT) -> c_int;
830 pub fn X509_ATTRIBUTE_set1_data(
831 attr: *mut X509_ATTRIBUTE,
832 attrtype: c_int,
833 data: *const c_void,
834 len: c_int,
835 ) -> c_int;
836 pub fn X509_ATTRIBUTE_get0_data(
837 attr: *mut X509_ATTRIBUTE,
838 idx: c_int,
839 atrtype: c_int,
840 data: *mut c_void,
841 ) -> *mut c_void;
842 pub fn X509_ATTRIBUTE_get0_object(attr: *mut X509_ATTRIBUTE) -> *mut ASN1_OBJECT;
843 pub fn X509_ATTRIBUTE_get0_type(attr: *mut X509_ATTRIBUTE, idx: c_int) -> *mut ASN1_TYPE;
844 pub fn d2i_X509_ATTRIBUTE(
845 a: *mut *mut X509_ATTRIBUTE,
846 pp: *mut *const c_uchar,
847 length: c_long,
848 ) -> *mut X509_ATTRIBUTE;
849}
850const_ptr_api! {
851 extern "C" {
852 pub fn X509_ATTRIBUTE_count(
853 attr: #[const_ptr_if(any(ossl110, libressl))] X509_ATTRIBUTE ) -> c_int;
855 pub fn i2d_X509_ATTRIBUTE(x: #[const_ptr_if(ossl300)] X509_ATTRIBUTE, buf: *mut *mut u8) -> c_int;
856 pub fn X509_ATTRIBUTE_dup(x: #[const_ptr_if(ossl300)] X509_ATTRIBUTE) -> *mut X509_ATTRIBUTE;
857 }
858}