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