1 use libc::*;
2 
3 use *;
4 
5 pub const X509_FILETYPE_PEM: c_int = 1;
6 pub const X509_FILETYPE_ASN1: c_int = 2;
7 pub const X509_FILETYPE_DEFAULT: c_int = 3;
8 
9 #[repr(C)]
10 pub struct X509_VAL {
11     pub notBefore: *mut ASN1_TIME,
12     pub notAfter: *mut ASN1_TIME,
13 }
14 
15 pub enum X509_NAME_ENTRY {}
16 
17 stack!(stack_st_X509_NAME);
18 
19 pub enum X509_EXTENSION {}
20 
21 stack!(stack_st_X509_EXTENSION);
22 
23 stack!(stack_st_X509_ATTRIBUTE);
24 
25 cfg_if! {
26     if #[cfg(ossl110)] {
27         pub enum X509_REQ_INFO {}
28     } else {
29         #[repr(C)]
30         pub struct X509_REQ_INFO {
31             pub enc: ASN1_ENCODING,
32             pub version: *mut ::ASN1_INTEGER,
33             pub subject: *mut ::X509_NAME,
34             pubkey: *mut c_void,
35             pub attributes: *mut stack_st_X509_ATTRIBUTE,
36         }
37     }
38 }
39 
40 cfg_if! {
41     if #[cfg(ossl110)] {
42         pub enum X509_REQ {}
43     } else {
44         #[repr(C)]
45         pub struct X509_REQ {
46             pub req_info: *mut X509_REQ_INFO,
47             sig_alg: *mut c_void,
48             signature: *mut c_void,
49             references: c_int,
50         }
51     }
52 }
53 
54 cfg_if! {
55     if #[cfg(ossl110)] {
56         pub enum X509_CINF {}
57     } else {
58         #[repr(C)]
59         pub struct X509_CINF {
60             version: *mut c_void,
61             serialNumber: *mut c_void,
62             signature: *mut c_void,
63             issuer: *mut c_void,
64             pub validity: *mut X509_VAL,
65             subject: *mut c_void,
66             key: *mut c_void,
67             issuerUID: *mut c_void,
68             subjectUID: *mut c_void,
69             pub extensions: *mut stack_st_X509_EXTENSION,
70             enc: ASN1_ENCODING,
71         }
72     }
73 }
74 
75 stack!(stack_st_X509);
76 
77 extern "C" {
X509_verify_cert_error_string(n: c_long) -> *const c_char78     pub fn X509_verify_cert_error_string(n: c_long) -> *const c_char;
79 
X509_sign(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int80     pub fn X509_sign(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int;
81 
X509_digest( x: *const X509, digest: *const EVP_MD, buf: *mut c_uchar, len: *mut c_uint, ) -> c_int82     pub fn X509_digest(
83         x: *const X509,
84         digest: *const EVP_MD,
85         buf: *mut c_uchar,
86         len: *mut c_uint,
87     ) -> c_int;
88 
X509_REQ_sign(x: *mut X509_REQ, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int89     pub fn X509_REQ_sign(x: *mut X509_REQ, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int;
90 
i2d_X509_bio(b: *mut BIO, x: *mut X509) -> c_int91     pub fn i2d_X509_bio(b: *mut BIO, x: *mut X509) -> c_int;
i2d_X509_REQ_bio(b: *mut BIO, x: *mut X509_REQ) -> c_int92     pub fn i2d_X509_REQ_bio(b: *mut BIO, x: *mut X509_REQ) -> c_int;
i2d_PrivateKey_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int93     pub fn i2d_PrivateKey_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int;
i2d_PUBKEY_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int94     pub fn i2d_PUBKEY_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int;
95 
i2d_PUBKEY(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int96     pub fn i2d_PUBKEY(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int;
d2i_PUBKEY(k: *mut *mut EVP_PKEY, buf: *mut *const u8, len: c_long) -> *mut EVP_PKEY97     pub fn d2i_PUBKEY(k: *mut *mut EVP_PKEY, buf: *mut *const u8, len: c_long) -> *mut EVP_PKEY;
d2i_RSA_PUBKEY(k: *mut *mut RSA, buf: *mut *const u8, len: c_long) -> *mut RSA98     pub fn d2i_RSA_PUBKEY(k: *mut *mut RSA, buf: *mut *const u8, len: c_long) -> *mut RSA;
i2d_RSA_PUBKEY(k: *mut RSA, buf: *mut *mut u8) -> c_int99     pub fn i2d_RSA_PUBKEY(k: *mut RSA, buf: *mut *mut u8) -> c_int;
d2i_DSA_PUBKEY(k: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long) -> *mut DSA100     pub fn d2i_DSA_PUBKEY(k: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long) -> *mut DSA;
i2d_DSA_PUBKEY(a: *mut DSA, pp: *mut *mut c_uchar) -> c_int101     pub fn i2d_DSA_PUBKEY(a: *mut DSA, pp: *mut *mut c_uchar) -> c_int;
i2d_PrivateKey(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int102     pub fn i2d_PrivateKey(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int;
103 
d2i_ECPrivateKey( k: *mut *mut EC_KEY, pp: *mut *const c_uchar, length: c_long, ) -> *mut EC_KEY104     pub fn d2i_ECPrivateKey(
105         k: *mut *mut EC_KEY,
106         pp: *mut *const c_uchar,
107         length: c_long,
108     ) -> *mut EC_KEY;
i2d_ECPrivateKey(ec_key: *mut EC_KEY, pp: *mut *mut c_uchar) -> c_int109     pub fn i2d_ECPrivateKey(ec_key: *mut EC_KEY, pp: *mut *mut c_uchar) -> c_int;
110 }
111 
112 cfg_if! {
113     if #[cfg(ossl110)] {
114         extern "C" {
115             pub fn X509_ALGOR_get0(
116                 paobj: *mut *const ASN1_OBJECT,
117                 pptype: *mut c_int,
118                 ppval: *mut *const c_void,
119                 alg: *const X509_ALGOR,
120             );
121         }
122     } else if #[cfg(ossl102)] {
123         extern "C" {
124             pub fn X509_ALGOR_get0(
125                 paobj: *mut *mut ASN1_OBJECT,
126                 pptype: *mut c_int,
127                 ppval: *mut *mut c_void,
128                 alg: *mut X509_ALGOR,
129             );
130         }
131     }
132 }
133 
134 extern "C" {
X509_gmtime_adj(time: *mut ASN1_TIME, adj: c_long) -> *mut ASN1_TIME135     pub fn X509_gmtime_adj(time: *mut ASN1_TIME, adj: c_long) -> *mut ASN1_TIME;
136 
X509_to_X509_REQ(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> *mut X509_REQ137     pub fn X509_to_X509_REQ(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> *mut X509_REQ;
138 
X509_ALGOR_free(x: *mut X509_ALGOR)139     pub fn X509_ALGOR_free(x: *mut X509_ALGOR);
140 
X509_REQ_new() -> *mut X509_REQ141     pub fn X509_REQ_new() -> *mut X509_REQ;
X509_REQ_free(x: *mut X509_REQ)142     pub fn X509_REQ_free(x: *mut X509_REQ);
d2i_X509_REQ( a: *mut *mut X509_REQ, pp: *mut *const c_uchar, length: c_long, ) -> *mut X509_REQ143     pub fn d2i_X509_REQ(
144         a: *mut *mut X509_REQ,
145         pp: *mut *const c_uchar,
146         length: c_long,
147     ) -> *mut X509_REQ;
i2d_X509_REQ(x: *mut X509_REQ, buf: *mut *mut u8) -> c_int148     pub fn i2d_X509_REQ(x: *mut X509_REQ, buf: *mut *mut u8) -> c_int;
149 }
150 
151 cfg_if! {
152     if #[cfg(any(ossl110, libressl273))] {
153         extern "C" {
154             pub fn X509_get0_signature(
155                 psig: *mut *const ASN1_BIT_STRING,
156                 palg: *mut *const X509_ALGOR,
157                 x: *const X509,
158             );
159         }
160     } else if #[cfg(ossl102)] {
161         extern "C" {
162             pub fn X509_get0_signature(
163                 psig: *mut *mut ASN1_BIT_STRING,
164                 palg: *mut *mut X509_ALGOR,
165                 x: *const X509,
166             );
167         }
168     }
169 }
170 extern "C" {
171     #[cfg(ossl102)]
X509_get_signature_nid(x: *const X509) -> c_int172     pub fn X509_get_signature_nid(x: *const X509) -> c_int;
173 
X509_EXTENSION_free(ext: *mut X509_EXTENSION)174     pub fn X509_EXTENSION_free(ext: *mut X509_EXTENSION);
175 
X509_NAME_ENTRY_free(x: *mut X509_NAME_ENTRY)176     pub fn X509_NAME_ENTRY_free(x: *mut X509_NAME_ENTRY);
177 
X509_NAME_new() -> *mut X509_NAME178     pub fn X509_NAME_new() -> *mut X509_NAME;
X509_NAME_free(x: *mut X509_NAME)179     pub fn X509_NAME_free(x: *mut X509_NAME);
180 
X509_new() -> *mut X509181     pub fn X509_new() -> *mut X509;
X509_free(x: *mut X509)182     pub fn X509_free(x: *mut X509);
i2d_X509(x: *mut X509, buf: *mut *mut u8) -> c_int183     pub fn i2d_X509(x: *mut X509, buf: *mut *mut u8) -> c_int;
d2i_X509(a: *mut *mut X509, pp: *mut *const c_uchar, length: c_long) -> *mut X509184     pub fn d2i_X509(a: *mut *mut X509, pp: *mut *const c_uchar, length: c_long) -> *mut X509;
185 
X509_get_pubkey(x: *mut X509) -> *mut EVP_PKEY186     pub fn X509_get_pubkey(x: *mut X509) -> *mut EVP_PKEY;
187 
X509_set_version(x: *mut X509, version: c_long) -> c_int188     pub fn X509_set_version(x: *mut X509, version: c_long) -> c_int;
X509_set_serialNumber(x: *mut X509, sn: *mut ASN1_INTEGER) -> c_int189     pub fn X509_set_serialNumber(x: *mut X509, sn: *mut ASN1_INTEGER) -> c_int;
X509_get_serialNumber(x: *mut X509) -> *mut ASN1_INTEGER190     pub fn X509_get_serialNumber(x: *mut X509) -> *mut ASN1_INTEGER;
X509_set_issuer_name(x: *mut X509, name: *mut X509_NAME) -> c_int191     pub fn X509_set_issuer_name(x: *mut X509, name: *mut X509_NAME) -> c_int;
192 }
193 cfg_if! {
194     if #[cfg(any(ossl110, libressl280))] {
195         extern "C" {
196             pub fn X509_get_issuer_name(x: *const ::X509) -> *mut ::X509_NAME;
197         }
198     } else {
199         extern "C" {
200             pub fn X509_get_issuer_name(x: *mut ::X509) -> *mut ::X509_NAME;
201         }
202     }
203 }
204 extern "C" {
X509_set_subject_name(x: *mut X509, name: *mut X509_NAME) -> c_int205     pub fn X509_set_subject_name(x: *mut X509, name: *mut X509_NAME) -> c_int;
206 }
207 cfg_if! {
208     if #[cfg(any(ossl110, libressl280))] {
209         extern "C" {
210             pub fn X509_get_subject_name(x: *const ::X509) -> *mut ::X509_NAME;
211         }
212     } else {
213         extern "C" {
214             pub fn X509_get_subject_name(x: *mut ::X509) -> *mut ::X509_NAME;
215         }
216     }
217 }
218 cfg_if! {
219     if #[cfg(ossl110)] {
220         extern "C" {
221             pub fn X509_set1_notBefore(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int;
222             pub fn X509_set1_notAfter(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int;
223         }
224     } else {
225         extern "C" {
226             pub fn X509_set_notBefore(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int;
227             pub fn X509_set_notAfter(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int;
228         }
229     }
230 }
231 extern "C" {
232     #[cfg(ossl110)]
X509_REQ_get_version(req: *const X509_REQ) -> c_long233     pub fn X509_REQ_get_version(req: *const X509_REQ) -> c_long;
X509_REQ_set_version(req: *mut X509_REQ, version: c_long) -> c_int234     pub fn X509_REQ_set_version(req: *mut X509_REQ, version: c_long) -> c_int;
235     #[cfg(ossl110)]
X509_REQ_get_subject_name(req: *const X509_REQ) -> *mut X509_NAME236     pub fn X509_REQ_get_subject_name(req: *const X509_REQ) -> *mut X509_NAME;
X509_REQ_set_subject_name(req: *mut X509_REQ, name: *mut X509_NAME) -> c_int237     pub fn X509_REQ_set_subject_name(req: *mut X509_REQ, name: *mut X509_NAME) -> c_int;
X509_REQ_set_pubkey(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int238     pub fn X509_REQ_set_pubkey(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int;
X509_REQ_get_pubkey(req: *mut X509_REQ) -> *mut EVP_PKEY239     pub fn X509_REQ_get_pubkey(req: *mut X509_REQ) -> *mut EVP_PKEY;
X509_REQ_get_extensions(req: *mut X509_REQ) -> *mut stack_st_X509_EXTENSION240     pub fn X509_REQ_get_extensions(req: *mut X509_REQ) -> *mut stack_st_X509_EXTENSION;
X509_REQ_add_extensions(req: *mut X509_REQ, exts: *mut stack_st_X509_EXTENSION) -> c_int241     pub fn X509_REQ_add_extensions(req: *mut X509_REQ, exts: *mut stack_st_X509_EXTENSION)
242         -> c_int;
X509_set_pubkey(x: *mut X509, pkey: *mut EVP_PKEY) -> c_int243     pub fn X509_set_pubkey(x: *mut X509, pkey: *mut EVP_PKEY) -> c_int;
X509_REQ_verify(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int244     pub fn X509_REQ_verify(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int;
245     #[cfg(any(ossl110, libressl273))]
X509_getm_notBefore(x: *const X509) -> *mut ASN1_TIME246     pub fn X509_getm_notBefore(x: *const X509) -> *mut ASN1_TIME;
247     #[cfg(any(ossl110, libressl273))]
X509_getm_notAfter(x: *const X509) -> *mut ASN1_TIME248     pub fn X509_getm_notAfter(x: *const X509) -> *mut ASN1_TIME;
249     #[cfg(any(ossl110, libressl273))]
X509_up_ref(x: *mut X509) -> c_int250     pub fn X509_up_ref(x: *mut X509) -> c_int;
251 
252     #[cfg(ossl110)]
X509_get0_extensions(req: *const ::X509) -> *const stack_st_X509_EXTENSION253     pub fn X509_get0_extensions(req: *const ::X509) -> *const stack_st_X509_EXTENSION;
254 }
255 
256 cfg_if! {
257     if #[cfg(any(ossl110, libressl280))] {
258         extern "C" {
259             pub fn X509_NAME_entry_count(n: *const X509_NAME) -> c_int;
260         }
261     } else {
262         extern "C" {
263             pub fn X509_NAME_entry_count(n: *mut X509_NAME) -> c_int;
264         }
265     }
266 }
267 
268 cfg_if! {
269     if #[cfg(libressl280)] {
270         extern "C" {
271             pub fn X509_NAME_get_index_by_NID(n: *const X509_NAME, nid: c_int, last_pos: c_int) -> c_int;
272         }
273     } else {
274         extern "C" {
275             pub fn X509_NAME_get_index_by_NID(n: *mut X509_NAME, nid: c_int, last_pos: c_int) -> c_int;
276         }
277     }
278 }
279 cfg_if! {
280     if #[cfg(any(ossl110, libressl280))] {
281         extern "C" {
282             pub fn X509_NAME_get_entry(n: *const X509_NAME, loc: c_int) -> *mut X509_NAME_ENTRY;
283             pub fn X509_NAME_add_entry_by_NID(
284                 x: *mut X509_NAME,
285                 field: c_int,
286                 ty: c_int,
287                 bytes: *const c_uchar,
288                 len: c_int,
289                 loc: c_int,
290                 set: c_int,
291             ) -> c_int;
292             pub fn X509_NAME_ENTRY_get_object(ne: *const X509_NAME_ENTRY) -> *mut ASN1_OBJECT;
293             pub fn X509_NAME_ENTRY_get_data(ne: *const X509_NAME_ENTRY) -> *mut ASN1_STRING;
294         }
295     } else {
296         extern "C" {
297             pub fn X509_NAME_get_entry(n: *mut X509_NAME, loc: c_int) -> *mut X509_NAME_ENTRY;
298             pub fn X509_NAME_add_entry_by_NID(
299                 x: *mut X509_NAME,
300                 field: c_int,
301                 ty: c_int,
302                 bytes: *mut c_uchar,
303                 len: c_int,
304                 loc: c_int,
305                 set: c_int,
306             ) -> c_int;
307             pub fn X509_NAME_ENTRY_get_object(ne: *mut X509_NAME_ENTRY) -> *mut ASN1_OBJECT;
308             pub fn X509_NAME_ENTRY_get_data(ne: *mut X509_NAME_ENTRY) -> *mut ASN1_STRING;
309         }
310     }
311 }
312 extern "C" {
X509_NAME_add_entry_by_txt( x: *mut X509_NAME, field: *const c_char, ty: c_int, bytes: *const c_uchar, len: c_int, loc: c_int, set: c_int, ) -> c_int313     pub fn X509_NAME_add_entry_by_txt(
314         x: *mut X509_NAME,
315         field: *const c_char,
316         ty: c_int,
317         bytes: *const c_uchar,
318         len: c_int,
319         loc: c_int,
320         set: c_int,
321     ) -> c_int;
322 
X509_add_ext(x: *mut X509, ext: *mut X509_EXTENSION, loc: c_int) -> c_int323     pub fn X509_add_ext(x: *mut X509, ext: *mut X509_EXTENSION, loc: c_int) -> c_int;
324 }
325 cfg_if! {
326     if #[cfg(any(ossl110, libressl280))] {
327         extern "C" {
328             pub fn X509_get_ext_d2i(
329                 x: *const ::X509,
330                 nid: c_int,
331                 crit: *mut c_int,
332                 idx: *mut c_int,
333             ) -> *mut c_void;
334         }
335     } else {
336         extern "C" {
337             pub fn X509_get_ext_d2i(
338                 x: *mut ::X509,
339                 nid: c_int,
340                 crit: *mut c_int,
341                 idx: *mut c_int,
342             ) -> *mut c_void;
343         }
344     }
345 }
346 
347 extern "C" {
X509_verify_cert(ctx: *mut X509_STORE_CTX) -> c_int348     pub fn X509_verify_cert(ctx: *mut X509_STORE_CTX) -> c_int;
349 }
350