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