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}
406const_ptr_api! {
407 extern "C" {
408 pub fn X509_CRL_get_issuer(x: *const X509_CRL) -> #[const_ptr_if(ossl400)] X509_NAME;
409 }
410}
411extern "C" {
412
413 pub fn X509_get0_extensions(req: *const X509) -> *const stack_st_X509_EXTENSION;
414 pub fn X509_get_X509_PUBKEY(x: *const X509) -> *mut X509_PUBKEY;
415
416 pub fn X509_CRL_set_version(crl: *mut X509_CRL, version: c_long) -> c_int;
417}
418const_ptr_api! {
419 extern "C" {
420 pub fn X509_CRL_set_issuer_name(crl: *mut X509_CRL, name: #[const_ptr_if(ossl300)] X509_NAME) -> c_int;
421 }
422}
423extern "C" {
424 pub fn X509_CRL_sort(crl: *mut X509_CRL) -> c_int;
425
426 pub fn X509_CRL_up_ref(crl: *mut X509_CRL) -> c_int;
427 pub fn X509_CRL_add0_revoked(crl: *mut X509_CRL, rev: *mut X509_REVOKED) -> c_int;
428}
429extern "C" {
430 pub fn X509_CRL_set1_lastUpdate(crl: *mut X509_CRL, tm: *const ASN1_TIME) -> c_int;
431 pub fn X509_CRL_set1_nextUpdate(crl: *mut X509_CRL, tm: *const ASN1_TIME) -> c_int;
432}
433
434const_ptr_api! {
435 extern "C" {
436 pub fn X509_NAME_entry_count(n: *const X509_NAME) -> c_int;
437 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;
438 pub fn X509_NAME_get_entry(n: *const X509_NAME, loc: c_int) -> *mut X509_NAME_ENTRY;
439 pub fn X509_NAME_add_entry_by_NID(
440 x: *mut X509_NAME,
441 field: c_int,
442 ty: c_int,
443 bytes: *const c_uchar,
444 len: c_int,
445 loc: c_int,
446 set: c_int,
447 ) -> c_int;
448 pub fn i2d_X509_NAME(n: #[const_ptr_if(ossl300)] X509_NAME, buf: *mut *mut u8) -> c_int;
449 pub fn X509_NAME_ENTRY_get_object(ne: *const X509_NAME_ENTRY) -> #[const_ptr_if(ossl400)] ASN1_OBJECT;
450 pub fn X509_NAME_ENTRY_get_data(ne: *const X509_NAME_ENTRY) -> #[const_ptr_if(ossl400)] ASN1_STRING;
451 }
452}
453extern "C" {
454 pub fn X509_NAME_add_entry_by_txt(
455 x: *mut X509_NAME,
456 field: *const c_char,
457 ty: c_int,
458 bytes: *const c_uchar,
459 len: c_int,
460 loc: c_int,
461 set: c_int,
462 ) -> c_int;
463 pub fn d2i_X509_NAME(
464 n: *mut *mut X509_NAME,
465 pp: *mut *const c_uchar,
466 length: c_long,
467 ) -> *mut X509_NAME;
468}
469
470extern "C" {
472 pub fn X509_delete_ext(x: *mut X509, loc: c_int) -> *mut X509_EXTENSION;
474 pub fn X509_add_ext(x: *mut X509, ext: *mut X509_EXTENSION, loc: c_int) -> c_int;
475 pub fn X509_add1_ext_i2d(
476 x: *mut X509,
477 nid: c_int,
478 value: *mut c_void,
479 crit: c_int,
480 flags: c_ulong,
481 ) -> c_int;
482 pub fn X509_CRL_delete_ext(x: *mut X509_CRL, loc: c_int) -> *mut X509_EXTENSION;
484 pub fn X509_CRL_add_ext(x: *mut X509_CRL, ext: *mut X509_EXTENSION, loc: c_int) -> c_int;
485 pub fn X509_CRL_add1_ext_i2d(
486 x: *mut X509_CRL,
487 nid: c_int,
488 value: *mut c_void,
489 crit: c_int,
490 flags: c_ulong,
491 ) -> c_int;
492 pub fn X509_REVOKED_delete_ext(x: *mut X509_REVOKED, loc: c_int) -> *mut X509_EXTENSION;
494 pub fn X509_REVOKED_add_ext(
495 x: *mut X509_REVOKED,
496 ext: *mut X509_EXTENSION,
497 loc: c_int,
498 ) -> c_int;
499 pub fn X509_REVOKED_add1_ext_i2d(
500 x: *mut X509_REVOKED,
501 nid: c_int,
502 value: *mut c_void,
503 crit: c_int,
504 flags: c_ulong,
505 ) -> c_int;
506 pub fn X509v3_get_ext_count(x: *const stack_st_X509_EXTENSION) -> c_int;
509 pub fn X509v3_get_ext_by_NID(
510 x: *const stack_st_X509_EXTENSION,
511 nid: c_int,
512 lastpos: c_int,
513 ) -> c_int;
514 pub fn X509v3_get_ext_by_critical(
515 x: *const stack_st_X509_EXTENSION,
516 crit: c_int,
517 lastpos: c_int,
518 ) -> c_int;
519 pub fn X509v3_get_ext(x: *const stack_st_X509_EXTENSION, loc: c_int) -> *mut X509_EXTENSION;
520 pub fn X509v3_delete_ext(x: *mut stack_st_X509_EXTENSION, loc: c_int) -> *mut X509_EXTENSION;
521 pub fn X509v3_add_ext(
522 x: *mut *mut stack_st_X509_EXTENSION,
523 ex: *mut X509_EXTENSION,
524 loc: c_int,
525 ) -> *mut stack_st_X509_EXTENSION;
526 pub fn X509_EXTENSION_create_by_NID(
529 ex: *mut *mut X509_EXTENSION,
530 nid: c_int,
531 crit: c_int,
532 data: *mut ASN1_OCTET_STRING,
533 ) -> *mut X509_EXTENSION;
534 pub fn X509_EXTENSION_set_critical(ex: *mut X509_EXTENSION, crit: c_int) -> c_int;
535 pub fn X509_EXTENSION_set_data(ex: *mut X509_EXTENSION, data: *mut ASN1_OCTET_STRING) -> c_int;
536 pub fn X509_EXTENSION_get_object(ext: *mut X509_EXTENSION) -> *mut ASN1_OBJECT;
537 pub fn X509_EXTENSION_get_data(ext: *mut X509_EXTENSION) -> *mut ASN1_OCTET_STRING;
538}
539
540const_ptr_api! {
541 extern "C" {
542 pub fn i2d_X509_EXTENSION(ext: #[const_ptr_if(ossl300)] X509_EXTENSION, pp: *mut *mut c_uchar) -> c_int;
543 }
544}
545
546extern "C" {
547 pub fn X509_get_ext_count(x: *const X509) -> c_int;
549 pub fn X509_get_ext_by_NID(x: *const X509, nid: c_int, lastpos: c_int) -> c_int;
550 pub fn X509_get_ext_by_OBJ(x: *const X509, obj: *const ASN1_OBJECT, lastpos: c_int) -> c_int;
551 pub fn X509_get_ext_by_critical(x: *const X509, crit: c_int, lastpos: c_int) -> c_int;
552 pub fn X509_get_ext(x: *const X509, loc: c_int) -> *mut X509_EXTENSION;
553 pub fn X509_get_ext_d2i(
554 x: *const X509,
555 nid: c_int,
556 crit: *mut c_int,
557 idx: *mut c_int,
558 ) -> *mut c_void;
559 pub fn X509_CRL_get_ext_count(x: *const X509_CRL) -> c_int;
561 pub fn X509_CRL_get_ext_by_NID(x: *const X509_CRL, nid: c_int, lastpos: c_int) -> c_int;
562 pub fn X509_CRL_get_ext_by_OBJ(
563 x: *const X509_CRL,
564 obj: *const ASN1_OBJECT,
565 lastpos: c_int,
566 ) -> c_int;
567 pub fn X509_CRL_get_ext_by_critical(x: *const X509_CRL, crit: c_int, lastpos: c_int) -> c_int;
568 pub fn X509_CRL_get_ext(x: *const X509_CRL, loc: c_int) -> *mut X509_EXTENSION;
569 pub fn X509_CRL_get_ext_d2i(
570 x: *const X509_CRL,
571 nid: c_int,
572 crit: *mut c_int,
573 idx: *mut c_int,
574 ) -> *mut c_void;
575 pub fn X509_REVOKED_get_ext_count(x: *const X509_REVOKED) -> c_int;
577 pub fn X509_REVOKED_get_ext_by_NID(x: *const X509_REVOKED, nid: c_int, lastpos: c_int)
578 -> c_int;
579 pub fn X509_REVOKED_get_ext_by_OBJ(
580 x: *const X509_REVOKED,
581 obj: *const ASN1_OBJECT,
582 lastpos: c_int,
583 ) -> c_int;
584 pub fn X509_REVOKED_get_ext_by_critical(
585 x: *const X509_REVOKED,
586 crit: c_int,
587 lastpos: c_int,
588 ) -> c_int;
589 pub fn X509_REVOKED_get_ext(x: *const X509_REVOKED, loc: c_int) -> *mut X509_EXTENSION;
590 pub fn X509_REVOKED_get_ext_d2i(
591 x: *const X509_REVOKED,
592 nid: c_int,
593 crit: *mut c_int,
594 idx: *mut c_int,
595 ) -> *mut c_void;
596 pub fn X509v3_get_ext_by_OBJ(
598 x: *const stack_st_X509_EXTENSION,
599 obj: *const ASN1_OBJECT,
600 lastpos: c_int,
601 ) -> c_int;
602 pub fn X509_EXTENSION_create_by_OBJ(
604 ex: *mut *mut X509_EXTENSION,
605 obj: *const ASN1_OBJECT,
606 crit: c_int,
607 data: *mut ASN1_OCTET_STRING,
608 ) -> *mut X509_EXTENSION;
609 pub fn X509_EXTENSION_set_object(ex: *mut X509_EXTENSION, obj: *const ASN1_OBJECT) -> c_int;
610 pub fn X509_EXTENSION_get_critical(ex: *const X509_EXTENSION) -> c_int;
611}
612
613extern "C" {
614 pub fn X509_verify_cert(ctx: *mut X509_STORE_CTX) -> c_int;
615}
616
617const_ptr_api! {
618 extern "C" {
619 pub fn X509_STORE_get0_objects(ctx: #[const_ptr_if(ossl300)] X509_STORE) -> *mut stack_st_X509_OBJECT;
620 #[cfg(ossl330)]
621 pub fn X509_STORE_get1_objects(ctx: *mut X509_STORE) -> *mut stack_st_X509_OBJECT;
622 #[cfg(ossl300)]
623 pub fn X509_STORE_get1_all_certs(ctx: *mut X509_STORE) -> *mut stack_st_X509;
624 }
625}
626
627extern "C" {
628 pub fn X509_OBJECT_get0_X509(x: *const X509_OBJECT) -> *mut X509;
629}
630
631extern "C" {
632 pub fn X509_OBJECT_free(a: *mut X509_OBJECT);
633}
634
635extern "C" {
636 pub fn X509_get_default_cert_file_env() -> *const c_char;
637 pub fn X509_get_default_cert_file() -> *const c_char;
638 pub fn X509_get_default_cert_dir_env() -> *const c_char;
639 pub fn X509_get_default_cert_dir() -> *const c_char;
640}
641
642extern "C" {
643 pub fn X509_cmp(a: *const X509, b: *const X509) -> c_int;
644 pub fn X509_issuer_and_serial_cmp(a: *const X509, b: *const X509) -> c_int;
645 pub fn X509_issuer_name_cmp(a: *const X509, b: *const X509) -> c_int;
646 pub fn X509_subject_name_cmp(a: *const X509, b: *const X509) -> c_int;
647 pub fn X509_CRL_cmp(a: *const X509_CRL, b: *const X509_CRL) -> c_int;
648 pub fn X509_CRL_match(a: *const X509_CRL, b: *const X509_CRL) -> c_int;
649}
650
651extern "C" {
652 pub fn X509_print(bio: *mut BIO, x509: *mut X509) -> c_int;
653 pub fn X509_REQ_print(bio: *mut BIO, req: *mut X509_REQ) -> c_int;
654}
655
656cfg_if! {
657 if #[cfg(libressl390)] {
658 pub enum X509_PURPOSE {}
659 } else {
660 #[repr(C)]
661 pub struct X509_PURPOSE {
662 pub purpose: c_int,
663 pub trust: c_int, pub flags: c_int,
665 pub check_purpose:
666 Option<unsafe extern "C" fn(*const X509_PURPOSE, *const X509, c_int) -> c_int>,
667 pub name: *mut c_char,
668 pub sname: *mut c_char,
669 pub usr_data: *mut c_void,
670 }
671 }
672}
673
674const_ptr_api! {
675 extern "C" {
676 pub fn X509_PURPOSE_get_by_sname(sname: *const c_char) -> c_int;
677 pub fn X509_PURPOSE_get_id(purpose: *const X509_PURPOSE) -> c_int;
678 pub fn X509_PURPOSE_get0(idx: c_int) -> #[const_ptr_if(libressl390)] X509_PURPOSE;
679 }
680}
681
682extern "C" {
683 pub fn X509_ATTRIBUTE_new() -> *mut X509_ATTRIBUTE;
684 pub fn X509_ATTRIBUTE_free(attr: *mut X509_ATTRIBUTE);
685 pub fn X509_ATTRIBUTE_create(
686 nid: c_int,
687 atrtype: c_int,
688 value: *mut c_void,
689 ) -> *mut X509_ATTRIBUTE;
690 pub fn X509_ATTRIBUTE_create_by_NID(
691 attr: *mut *mut X509_ATTRIBUTE,
692 nid: c_int,
693 atrtype: c_int,
694 data: *const c_void,
695 len: c_int,
696 ) -> *mut X509_ATTRIBUTE;
697 pub fn X509_ATTRIBUTE_create_by_OBJ(
698 attr: *mut *mut X509_ATTRIBUTE,
699 obj: *const ASN1_OBJECT,
700 atrtype: c_int,
701 data: *const c_void,
702 len: c_int,
703 ) -> *mut X509_ATTRIBUTE;
704 pub fn X509_ATTRIBUTE_create_by_txt(
705 attr: *mut *mut X509_ATTRIBUTE,
706 atrname: *const c_char,
707 atrtype: c_int,
708 bytes: *const c_uchar,
709 len: c_int,
710 ) -> *mut X509_ATTRIBUTE;
711 pub fn X509_ATTRIBUTE_set1_object(attr: *mut X509_ATTRIBUTE, obj: *const ASN1_OBJECT) -> c_int;
712 pub fn X509_ATTRIBUTE_set1_data(
713 attr: *mut X509_ATTRIBUTE,
714 attrtype: c_int,
715 data: *const c_void,
716 len: c_int,
717 ) -> c_int;
718 pub fn X509_ATTRIBUTE_get0_data(
719 attr: *mut X509_ATTRIBUTE,
720 idx: c_int,
721 atrtype: c_int,
722 data: *mut c_void,
723 ) -> *mut c_void;
724 pub fn X509_ATTRIBUTE_get0_object(attr: *mut X509_ATTRIBUTE) -> *mut ASN1_OBJECT;
725 pub fn X509_ATTRIBUTE_get0_type(attr: *mut X509_ATTRIBUTE, idx: c_int) -> *mut ASN1_TYPE;
726 pub fn d2i_X509_ATTRIBUTE(
727 a: *mut *mut X509_ATTRIBUTE,
728 pp: *mut *const c_uchar,
729 length: c_long,
730 ) -> *mut X509_ATTRIBUTE;
731}
732const_ptr_api! {
733 extern "C" {
734 pub fn X509_ATTRIBUTE_count(attr: *const X509_ATTRIBUTE) -> c_int;
735 pub fn i2d_X509_ATTRIBUTE(x: #[const_ptr_if(ossl300)] X509_ATTRIBUTE, buf: *mut *mut u8) -> c_int;
736 pub fn X509_ATTRIBUTE_dup(x: #[const_ptr_if(ossl300)] X509_ATTRIBUTE) -> *mut X509_ATTRIBUTE;
737 }
738}