Skip to main content

openssl_sys/handwritten/
x509.rs

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