1 use libc::*;
2 use *;
3 
4 pub const EVP_MAX_MD_SIZE: c_uint = 64;
5 
6 pub const PKCS5_SALT_LEN: c_int = 8;
7 pub const PKCS12_DEFAULT_ITER: c_int = 2048;
8 
9 pub const EVP_PKEY_RSA: c_int = NID_rsaEncryption;
10 pub const EVP_PKEY_DSA: c_int = NID_dsa;
11 pub const EVP_PKEY_DH: c_int = NID_dhKeyAgreement;
12 pub const EVP_PKEY_EC: c_int = NID_X9_62_id_ecPublicKey;
13 #[cfg(ossl111)]
14 pub const EVP_PKEY_X25519: c_int = NID_X25519;
15 #[cfg(ossl111)]
16 pub const EVP_PKEY_ED25519: c_int = NID_ED25519;
17 #[cfg(ossl111)]
18 pub const EVP_PKEY_X448: c_int = NID_X448;
19 #[cfg(ossl111)]
20 pub const EVP_PKEY_ED448: c_int = NID_ED448;
21 pub const EVP_PKEY_HMAC: c_int = NID_hmac;
22 pub const EVP_PKEY_CMAC: c_int = NID_cmac;
23 
24 pub const EVP_CTRL_GCM_SET_IVLEN: c_int = 0x9;
25 pub const EVP_CTRL_GCM_GET_TAG: c_int = 0x10;
26 pub const EVP_CTRL_GCM_SET_TAG: c_int = 0x11;
27 
EVP_get_digestbynid(type_: c_int) -> *const EVP_MD28 pub unsafe fn EVP_get_digestbynid(type_: c_int) -> *const EVP_MD {
29     EVP_get_digestbyname(OBJ_nid2sn(type_))
30 }
31 
32 cfg_if! {
33     if #[cfg(ossl300)] {
34         extern "C" {
35             pub fn EVP_MD_get_size(md: *const EVP_MD) -> c_int;
36             pub fn EVP_MD_get_type(md: *const EVP_MD) -> c_int;
37 
38             pub fn EVP_CIPHER_get_key_length(cipher: *const EVP_CIPHER) -> c_int;
39             pub fn EVP_CIPHER_get_block_size(cipher: *const EVP_CIPHER) -> c_int;
40             pub fn EVP_CIPHER_get_iv_length(cipher: *const EVP_CIPHER) -> c_int;
41             pub fn EVP_CIPHER_get_nid(cipher: *const EVP_CIPHER) -> c_int;
42             pub fn EVP_CIPHER_fetch(
43                 ctx: *mut OSSL_LIB_CTX,
44                 algorithm: *const c_char,
45                 properties: *const c_char,
46             ) -> *mut EVP_CIPHER;
47             pub fn EVP_CIPHER_free(cipher: *mut EVP_CIPHER);
48 
49             pub fn EVP_CIPHER_CTX_get0_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
50             pub fn EVP_CIPHER_CTX_get_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
51             pub fn EVP_CIPHER_CTX_get_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
52             pub fn EVP_CIPHER_CTX_get_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
53             pub fn EVP_CIPHER_CTX_get_tag_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
54         }
55 
56         #[inline]
57         pub unsafe fn EVP_MD_size(md: *const EVP_MD) -> c_int {
58             EVP_MD_get_size(md)
59         }
60 
61         #[inline]
62         pub unsafe fn EVP_MD_type(md: *const EVP_MD) -> c_int {
63             EVP_MD_get_type(md)
64         }
65 
66         #[inline]
67         pub unsafe fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int {
68             EVP_CIPHER_get_key_length(cipher)
69         }
70 
71         #[inline]
72         pub unsafe fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int {
73             EVP_CIPHER_get_block_size(cipher)
74         }
75 
76         #[inline]
77         pub unsafe fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int {
78             EVP_CIPHER_get_iv_length(cipher)
79         }
80 
81         #[inline]
82         pub unsafe fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int {
83             EVP_CIPHER_get_nid(cipher)
84         }
85 
86         #[inline]
87         pub unsafe fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int {
88             EVP_CIPHER_CTX_get_block_size(ctx)
89         }
90 
91         #[inline]
92         pub unsafe fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int {
93             EVP_CIPHER_CTX_get_key_length(ctx)
94         }
95 
96         #[inline]
97         pub unsafe fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int {
98             EVP_CIPHER_CTX_get_iv_length(ctx)
99         }
100     } else {
101         extern "C" {
102             pub fn EVP_MD_size(md: *const EVP_MD) -> c_int;
103             pub fn EVP_MD_type(md: *const EVP_MD) -> c_int;
104 
105             pub fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int;
106             pub fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int;
107             pub fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int;
108             pub fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int;
109 
110             pub fn EVP_CIPHER_CTX_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
111             pub fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
112             pub fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
113             pub fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
114         }
115     }
116 }
117 
118 cfg_if! {
119     if #[cfg(ossl110)] {
120         extern "C" {
121             pub fn EVP_MD_CTX_new() -> *mut EVP_MD_CTX;
122             pub fn EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX);
123         }
124     } else {
125         extern "C" {
126             pub fn EVP_MD_CTX_create() -> *mut EVP_MD_CTX;
127             pub fn EVP_MD_CTX_destroy(ctx: *mut EVP_MD_CTX);
128         }
129     }
130 }
131 
132 extern "C" {
EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE) -> c_int133     pub fn EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE)
134         -> c_int;
EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int135     pub fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int;
EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int136     pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
137     #[cfg(ossl300)]
EVP_Q_digest( libctx: *mut OSSL_LIB_CTX, name: *const c_char, propq: *const c_char, data: *const c_void, count: size_t, md: *mut c_uchar, size: *mut size_t, ) -> c_int138     pub fn EVP_Q_digest(
139         libctx: *mut OSSL_LIB_CTX,
140         name: *const c_char,
141         propq: *const c_char,
142         data: *const c_void,
143         count: size_t,
144         md: *mut c_uchar,
145         size: *mut size_t,
146     ) -> c_int;
EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int147     pub fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int;
EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int148     pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
149     #[cfg(ossl111)]
EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int150     pub fn EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
151 
152     #[cfg(ossl300)]
EVP_MD_fetch( ctx: *mut OSSL_LIB_CTX, algorithm: *const c_char, properties: *const c_char, ) -> *mut EVP_MD153     pub fn EVP_MD_fetch(
154         ctx: *mut OSSL_LIB_CTX,
155         algorithm: *const c_char,
156         properties: *const c_char,
157     ) -> *mut EVP_MD;
158 
159     #[cfg(ossl300)]
EVP_MD_free(md: *mut EVP_MD)160     pub fn EVP_MD_free(md: *mut EVP_MD);
161 
EVP_BytesToKey( typ: *const EVP_CIPHER, md: *const EVP_MD, salt: *const u8, data: *const u8, datalen: c_int, count: c_int, key: *mut u8, iv: *mut u8, ) -> c_int162     pub fn EVP_BytesToKey(
163         typ: *const EVP_CIPHER,
164         md: *const EVP_MD,
165         salt: *const u8,
166         data: *const u8,
167         datalen: c_int,
168         count: c_int,
169         key: *mut u8,
170         iv: *mut u8,
171     ) -> c_int;
172 
EVP_CipherInit( ctx: *mut EVP_CIPHER_CTX, evp: *const EVP_CIPHER, key: *const u8, iv: *const u8, mode: c_int, ) -> c_int173     pub fn EVP_CipherInit(
174         ctx: *mut EVP_CIPHER_CTX,
175         evp: *const EVP_CIPHER,
176         key: *const u8,
177         iv: *const u8,
178         mode: c_int,
179     ) -> c_int;
EVP_CipherInit_ex( ctx: *mut EVP_CIPHER_CTX, type_: *const EVP_CIPHER, impl_: *mut ENGINE, key: *const c_uchar, iv: *const c_uchar, enc: c_int, ) -> c_int180     pub fn EVP_CipherInit_ex(
181         ctx: *mut EVP_CIPHER_CTX,
182         type_: *const EVP_CIPHER,
183         impl_: *mut ENGINE,
184         key: *const c_uchar,
185         iv: *const c_uchar,
186         enc: c_int,
187     ) -> c_int;
EVP_CipherUpdate( ctx: *mut EVP_CIPHER_CTX, outbuf: *mut u8, outlen: *mut c_int, inbuf: *const u8, inlen: c_int, ) -> c_int188     pub fn EVP_CipherUpdate(
189         ctx: *mut EVP_CIPHER_CTX,
190         outbuf: *mut u8,
191         outlen: *mut c_int,
192         inbuf: *const u8,
193         inlen: c_int,
194     ) -> c_int;
EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int195     pub fn EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int;
196 
EVP_DigestSignInit( ctx: *mut EVP_MD_CTX, pctx: *mut *mut EVP_PKEY_CTX, type_: *const EVP_MD, e: *mut ENGINE, pkey: *mut EVP_PKEY, ) -> c_int197     pub fn EVP_DigestSignInit(
198         ctx: *mut EVP_MD_CTX,
199         pctx: *mut *mut EVP_PKEY_CTX,
200         type_: *const EVP_MD,
201         e: *mut ENGINE,
202         pkey: *mut EVP_PKEY,
203     ) -> c_int;
204 }
205 cfg_if! {
206     if #[cfg(ossl300)] {
207         extern "C" {
208             pub fn EVP_DigestSignUpdate(
209                 ctx: *mut EVP_MD_CTX,
210                 data: *const c_void,
211                 dsize: size_t,
212             ) -> c_int;
213         }
214     } else {
215         #[inline]
216         pub unsafe fn EVP_DigestSignUpdate(
217             ctx: *mut EVP_MD_CTX,
218             data: *const c_void,
219             dsize: size_t,
220         ) -> c_int {
221             EVP_DigestUpdate(ctx, data, dsize)
222         }
223     }
224 }
225 extern "C" {
EVP_DigestSignFinal( ctx: *mut EVP_MD_CTX, sig: *mut c_uchar, siglen: *mut size_t, ) -> c_int226     pub fn EVP_DigestSignFinal(
227         ctx: *mut EVP_MD_CTX,
228         sig: *mut c_uchar,
229         siglen: *mut size_t,
230     ) -> c_int;
EVP_DigestVerifyInit( ctx: *mut EVP_MD_CTX, pctx: *mut *mut EVP_PKEY_CTX, type_: *const EVP_MD, e: *mut ENGINE, pkey: *mut EVP_PKEY, ) -> c_int231     pub fn EVP_DigestVerifyInit(
232         ctx: *mut EVP_MD_CTX,
233         pctx: *mut *mut EVP_PKEY_CTX,
234         type_: *const EVP_MD,
235         e: *mut ENGINE,
236         pkey: *mut EVP_PKEY,
237     ) -> c_int;
238 }
239 cfg_if! {
240     if #[cfg(ossl300)] {
241         extern "C" {
242             pub fn EVP_DigestVerifyUpdate(
243                 ctx: *mut EVP_MD_CTX,
244                 data: *const c_void,
245                 dsize: size_t,
246             ) -> c_int;
247         }
248     } else {
249         #[inline]
250         pub unsafe fn EVP_DigestVerifyUpdate(
251             ctx: *mut EVP_MD_CTX,
252             data: *const c_void,
253             dsize: size_t,
254         ) -> c_int {
255             EVP_DigestUpdate(ctx, data, dsize)
256         }
257     }
258 }
259 extern "C" {
EVP_SealInit( ctx: *mut EVP_CIPHER_CTX, type_: *const EVP_CIPHER, ek: *mut *mut c_uchar, ekl: *mut c_int, iv: *mut c_uchar, pubk: *mut *mut EVP_PKEY, npubk: c_int, ) -> c_int260     pub fn EVP_SealInit(
261         ctx: *mut EVP_CIPHER_CTX,
262         type_: *const EVP_CIPHER,
263         ek: *mut *mut c_uchar,
264         ekl: *mut c_int,
265         iv: *mut c_uchar,
266         pubk: *mut *mut EVP_PKEY,
267         npubk: c_int,
268     ) -> c_int;
EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int269     pub fn EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
EVP_EncryptInit_ex( ctx: *mut EVP_CIPHER_CTX, cipher: *const EVP_CIPHER, impl_: *mut ENGINE, key: *const c_uchar, iv: *const c_uchar, ) -> c_int270     pub fn EVP_EncryptInit_ex(
271         ctx: *mut EVP_CIPHER_CTX,
272         cipher: *const EVP_CIPHER,
273         impl_: *mut ENGINE,
274         key: *const c_uchar,
275         iv: *const c_uchar,
276     ) -> c_int;
EVP_EncryptUpdate( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, in_: *const u8, inl: c_int, ) -> c_int277     pub fn EVP_EncryptUpdate(
278         ctx: *mut EVP_CIPHER_CTX,
279         out: *mut c_uchar,
280         outl: *mut c_int,
281         in_: *const u8,
282         inl: c_int,
283     ) -> c_int;
EVP_EncryptFinal_ex( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, ) -> c_int284     pub fn EVP_EncryptFinal_ex(
285         ctx: *mut EVP_CIPHER_CTX,
286         out: *mut c_uchar,
287         outl: *mut c_int,
288     ) -> c_int;
EVP_OpenInit( ctx: *mut EVP_CIPHER_CTX, type_: *const EVP_CIPHER, ek: *const c_uchar, ekl: c_int, iv: *const c_uchar, priv_: *mut EVP_PKEY, ) -> c_int289     pub fn EVP_OpenInit(
290         ctx: *mut EVP_CIPHER_CTX,
291         type_: *const EVP_CIPHER,
292         ek: *const c_uchar,
293         ekl: c_int,
294         iv: *const c_uchar,
295         priv_: *mut EVP_PKEY,
296     ) -> c_int;
EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int297     pub fn EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
EVP_DecryptInit_ex( ctx: *mut EVP_CIPHER_CTX, cipher: *const EVP_CIPHER, impl_: *mut ENGINE, key: *const c_uchar, iv: *const c_uchar, ) -> c_int298     pub fn EVP_DecryptInit_ex(
299         ctx: *mut EVP_CIPHER_CTX,
300         cipher: *const EVP_CIPHER,
301         impl_: *mut ENGINE,
302         key: *const c_uchar,
303         iv: *const c_uchar,
304     ) -> c_int;
EVP_DecryptUpdate( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, in_: *const u8, inl: c_int, ) -> c_int305     pub fn EVP_DecryptUpdate(
306         ctx: *mut EVP_CIPHER_CTX,
307         out: *mut c_uchar,
308         outl: *mut c_int,
309         in_: *const u8,
310         inl: c_int,
311     ) -> c_int;
EVP_DecryptFinal_ex( ctx: *mut EVP_CIPHER_CTX, outm: *mut c_uchar, outl: *mut c_int, ) -> c_int312     pub fn EVP_DecryptFinal_ex(
313         ctx: *mut EVP_CIPHER_CTX,
314         outm: *mut c_uchar,
315         outl: *mut c_int,
316     ) -> c_int;
317 }
318 cfg_if! {
319     if #[cfg(ossl300)] {
320         extern "C" {
321             pub fn EVP_PKEY_get_size(pkey: *const EVP_PKEY) -> c_int;
322         }
323 
324         #[inline]
325         pub unsafe fn EVP_PKEY_size(pkey: *const EVP_PKEY) -> c_int {
326             EVP_PKEY_get_size(pkey)
327         }
328     } else {
329         const_ptr_api! {
330             extern "C" {
331                 pub fn EVP_PKEY_size(pkey: #[const_ptr_if(any(ossl111b, libressl280))] EVP_PKEY) -> c_int;
332             }
333         }
334     }
335 }
336 cfg_if! {
337     if #[cfg(ossl111)] {
338         extern "C" {
339             pub fn EVP_DigestSign(
340                 ctx: *mut EVP_MD_CTX,
341                 sigret: *mut c_uchar,
342                 siglen: *mut size_t,
343                 tbs: *const c_uchar,
344                 tbslen: size_t
345             ) -> c_int;
346 
347             pub fn EVP_DigestVerify(
348                 ctx: *mut EVP_MD_CTX,
349                 sigret: *const c_uchar,
350                 siglen: size_t,
351                 tbs: *const c_uchar,
352                 tbslen: size_t
353             ) -> c_int;
354         }
355     }
356 }
357 const_ptr_api! {
358     extern "C" {
359         pub fn EVP_DigestVerifyFinal(
360             ctx: *mut EVP_MD_CTX,
361             sigret: #[const_ptr_if(any(ossl102, libressl280))] c_uchar,
362             siglen: size_t,
363         ) -> c_int;
364     }
365 }
366 
367 extern "C" {
EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX368     pub fn EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX;
EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX)369     pub fn EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX);
EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int370     pub fn EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int;
EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int371     pub fn EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int;
EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int372     pub fn EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int;
EVP_CIPHER_CTX_ctrl( ctx: *mut EVP_CIPHER_CTX, type_: c_int, arg: c_int, ptr: *mut c_void, ) -> c_int373     pub fn EVP_CIPHER_CTX_ctrl(
374         ctx: *mut EVP_CIPHER_CTX,
375         type_: c_int,
376         arg: c_int,
377         ptr: *mut c_void,
378     ) -> c_int;
EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int379     pub fn EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int;
380 
EVP_md_null() -> *const EVP_MD381     pub fn EVP_md_null() -> *const EVP_MD;
EVP_md5() -> *const EVP_MD382     pub fn EVP_md5() -> *const EVP_MD;
EVP_sha1() -> *const EVP_MD383     pub fn EVP_sha1() -> *const EVP_MD;
EVP_sha224() -> *const EVP_MD384     pub fn EVP_sha224() -> *const EVP_MD;
EVP_sha256() -> *const EVP_MD385     pub fn EVP_sha256() -> *const EVP_MD;
EVP_sha384() -> *const EVP_MD386     pub fn EVP_sha384() -> *const EVP_MD;
EVP_sha512() -> *const EVP_MD387     pub fn EVP_sha512() -> *const EVP_MD;
388     #[cfg(ossl111)]
EVP_sha3_224() -> *const EVP_MD389     pub fn EVP_sha3_224() -> *const EVP_MD;
390     #[cfg(ossl111)]
EVP_sha3_256() -> *const EVP_MD391     pub fn EVP_sha3_256() -> *const EVP_MD;
392     #[cfg(ossl111)]
EVP_sha3_384() -> *const EVP_MD393     pub fn EVP_sha3_384() -> *const EVP_MD;
394     #[cfg(ossl111)]
EVP_sha3_512() -> *const EVP_MD395     pub fn EVP_sha3_512() -> *const EVP_MD;
396     #[cfg(ossl111)]
EVP_shake128() -> *const EVP_MD397     pub fn EVP_shake128() -> *const EVP_MD;
398     #[cfg(ossl111)]
EVP_shake256() -> *const EVP_MD399     pub fn EVP_shake256() -> *const EVP_MD;
EVP_ripemd160() -> *const EVP_MD400     pub fn EVP_ripemd160() -> *const EVP_MD;
401     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM3")))]
EVP_sm3() -> *const EVP_MD402     pub fn EVP_sm3() -> *const EVP_MD;
EVP_des_ecb() -> *const EVP_CIPHER403     pub fn EVP_des_ecb() -> *const EVP_CIPHER;
EVP_des_ede3() -> *const EVP_CIPHER404     pub fn EVP_des_ede3() -> *const EVP_CIPHER;
EVP_des_ede3_cbc() -> *const EVP_CIPHER405     pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER;
EVP_des_ede3_cfb64() -> *const EVP_CIPHER406     pub fn EVP_des_ede3_cfb64() -> *const EVP_CIPHER;
EVP_des_cbc() -> *const EVP_CIPHER407     pub fn EVP_des_cbc() -> *const EVP_CIPHER;
EVP_rc4() -> *const EVP_CIPHER408     pub fn EVP_rc4() -> *const EVP_CIPHER;
EVP_bf_ecb() -> *const EVP_CIPHER409     pub fn EVP_bf_ecb() -> *const EVP_CIPHER;
EVP_bf_cbc() -> *const EVP_CIPHER410     pub fn EVP_bf_cbc() -> *const EVP_CIPHER;
EVP_bf_cfb64() -> *const EVP_CIPHER411     pub fn EVP_bf_cfb64() -> *const EVP_CIPHER;
EVP_bf_ofb() -> *const EVP_CIPHER412     pub fn EVP_bf_ofb() -> *const EVP_CIPHER;
EVP_aes_128_ecb() -> *const EVP_CIPHER413     pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
EVP_aes_128_cbc() -> *const EVP_CIPHER414     pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
EVP_aes_128_cfb1() -> *const EVP_CIPHER415     pub fn EVP_aes_128_cfb1() -> *const EVP_CIPHER;
EVP_aes_128_cfb8() -> *const EVP_CIPHER416     pub fn EVP_aes_128_cfb8() -> *const EVP_CIPHER;
EVP_aes_128_cfb128() -> *const EVP_CIPHER417     pub fn EVP_aes_128_cfb128() -> *const EVP_CIPHER;
EVP_aes_128_ctr() -> *const EVP_CIPHER418     pub fn EVP_aes_128_ctr() -> *const EVP_CIPHER;
EVP_aes_128_ccm() -> *const EVP_CIPHER419     pub fn EVP_aes_128_ccm() -> *const EVP_CIPHER;
EVP_aes_128_gcm() -> *const EVP_CIPHER420     pub fn EVP_aes_128_gcm() -> *const EVP_CIPHER;
EVP_aes_128_xts() -> *const EVP_CIPHER421     pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
EVP_aes_128_ofb() -> *const EVP_CIPHER422     pub fn EVP_aes_128_ofb() -> *const EVP_CIPHER;
423     #[cfg(ossl110)]
EVP_aes_128_ocb() -> *const EVP_CIPHER424     pub fn EVP_aes_128_ocb() -> *const EVP_CIPHER;
EVP_aes_192_ecb() -> *const EVP_CIPHER425     pub fn EVP_aes_192_ecb() -> *const EVP_CIPHER;
EVP_aes_192_cbc() -> *const EVP_CIPHER426     pub fn EVP_aes_192_cbc() -> *const EVP_CIPHER;
EVP_aes_192_cfb1() -> *const EVP_CIPHER427     pub fn EVP_aes_192_cfb1() -> *const EVP_CIPHER;
EVP_aes_192_cfb8() -> *const EVP_CIPHER428     pub fn EVP_aes_192_cfb8() -> *const EVP_CIPHER;
EVP_aes_192_cfb128() -> *const EVP_CIPHER429     pub fn EVP_aes_192_cfb128() -> *const EVP_CIPHER;
EVP_aes_192_ctr() -> *const EVP_CIPHER430     pub fn EVP_aes_192_ctr() -> *const EVP_CIPHER;
EVP_aes_192_ccm() -> *const EVP_CIPHER431     pub fn EVP_aes_192_ccm() -> *const EVP_CIPHER;
EVP_aes_192_gcm() -> *const EVP_CIPHER432     pub fn EVP_aes_192_gcm() -> *const EVP_CIPHER;
EVP_aes_192_ofb() -> *const EVP_CIPHER433     pub fn EVP_aes_192_ofb() -> *const EVP_CIPHER;
434     #[cfg(ossl110)]
EVP_aes_192_ocb() -> *const EVP_CIPHER435     pub fn EVP_aes_192_ocb() -> *const EVP_CIPHER;
EVP_aes_256_ecb() -> *const EVP_CIPHER436     pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
EVP_aes_256_cbc() -> *const EVP_CIPHER437     pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
EVP_aes_256_cfb1() -> *const EVP_CIPHER438     pub fn EVP_aes_256_cfb1() -> *const EVP_CIPHER;
EVP_aes_256_cfb8() -> *const EVP_CIPHER439     pub fn EVP_aes_256_cfb8() -> *const EVP_CIPHER;
EVP_aes_256_cfb128() -> *const EVP_CIPHER440     pub fn EVP_aes_256_cfb128() -> *const EVP_CIPHER;
EVP_aes_256_ctr() -> *const EVP_CIPHER441     pub fn EVP_aes_256_ctr() -> *const EVP_CIPHER;
EVP_aes_256_ccm() -> *const EVP_CIPHER442     pub fn EVP_aes_256_ccm() -> *const EVP_CIPHER;
EVP_aes_256_gcm() -> *const EVP_CIPHER443     pub fn EVP_aes_256_gcm() -> *const EVP_CIPHER;
EVP_aes_256_xts() -> *const EVP_CIPHER444     pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
EVP_aes_256_ofb() -> *const EVP_CIPHER445     pub fn EVP_aes_256_ofb() -> *const EVP_CIPHER;
446     #[cfg(ossl110)]
EVP_aes_256_ocb() -> *const EVP_CIPHER447     pub fn EVP_aes_256_ocb() -> *const EVP_CIPHER;
448     #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
EVP_chacha20() -> *const ::EVP_CIPHER449     pub fn EVP_chacha20() -> *const ::EVP_CIPHER;
450     #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
EVP_chacha20_poly1305() -> *const ::EVP_CIPHER451     pub fn EVP_chacha20_poly1305() -> *const ::EVP_CIPHER;
452     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_cbc() -> *const EVP_CIPHER453     pub fn EVP_seed_cbc() -> *const EVP_CIPHER;
454     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_cfb128() -> *const EVP_CIPHER455     pub fn EVP_seed_cfb128() -> *const EVP_CIPHER;
456     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_ecb() -> *const EVP_CIPHER457     pub fn EVP_seed_ecb() -> *const EVP_CIPHER;
458     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_ofb() -> *const EVP_CIPHER459     pub fn EVP_seed_ofb() -> *const EVP_CIPHER;
460 
461     #[cfg(not(ossl110))]
OPENSSL_add_all_algorithms_noconf()462     pub fn OPENSSL_add_all_algorithms_noconf();
463 
EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD464     pub fn EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD;
EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER465     pub fn EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER;
466 }
467 
468 cfg_if! {
469     if #[cfg(ossl300)] {
470         extern "C" {
471             pub fn EVP_PKEY_get_id(pkey: *const EVP_PKEY) -> c_int;
472             pub fn EVP_PKEY_get_bits(key: *const EVP_PKEY) -> c_int;
473         }
474 
475         #[inline]
476         pub unsafe fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int {
477             EVP_PKEY_get_id(pkey)
478         }
479 
480         #[inline]
481         pub unsafe fn EVP_PKEY_bits(pkey: *const EVP_PKEY) -> c_int {
482             EVP_PKEY_get_bits(pkey)
483         }
484     } else {
485         extern "C" {
486             pub fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int;
487         }
488         const_ptr_api! {
489             extern "C" {
490                 pub fn EVP_PKEY_bits(key: #[const_ptr_if(any(ossl110, libressl280))] EVP_PKEY) -> c_int;
491             }
492         }
493     }
494 }
495 extern "C" {
EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int496     pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int;
497 
EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int498     pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA499     pub fn EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA;
EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA500     pub fn EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA;
EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH501     pub fn EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH;
EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY502     pub fn EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY;
503 
EVP_PKEY_new() -> *mut EVP_PKEY504     pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
EVP_PKEY_free(k: *mut EVP_PKEY)505     pub fn EVP_PKEY_free(k: *mut EVP_PKEY);
506     #[cfg(any(ossl110, libressl270))]
EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int507     pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int;
508 
d2i_AutoPrivateKey( a: *mut *mut EVP_PKEY, pp: *mut *const c_uchar, length: c_long, ) -> *mut EVP_PKEY509     pub fn d2i_AutoPrivateKey(
510         a: *mut *mut EVP_PKEY,
511         pp: *mut *const c_uchar,
512         length: c_long,
513     ) -> *mut EVP_PKEY;
514 
EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int515     pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
516 
EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int517     pub fn EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int;
518 
PKCS5_PBKDF2_HMAC_SHA1( pass: *const c_char, passlen: c_int, salt: *const u8, saltlen: c_int, iter: c_int, keylen: c_int, out: *mut u8, ) -> c_int519     pub fn PKCS5_PBKDF2_HMAC_SHA1(
520         pass: *const c_char,
521         passlen: c_int,
522         salt: *const u8,
523         saltlen: c_int,
524         iter: c_int,
525         keylen: c_int,
526         out: *mut u8,
527     ) -> c_int;
PKCS5_PBKDF2_HMAC( pass: *const c_char, passlen: c_int, salt: *const c_uchar, saltlen: c_int, iter: c_int, digest: *const EVP_MD, keylen: c_int, out: *mut u8, ) -> c_int528     pub fn PKCS5_PBKDF2_HMAC(
529         pass: *const c_char,
530         passlen: c_int,
531         salt: *const c_uchar,
532         saltlen: c_int,
533         iter: c_int,
534         digest: *const EVP_MD,
535         keylen: c_int,
536         out: *mut u8,
537     ) -> c_int;
538 
539     #[cfg(ossl110)]
EVP_PBE_scrypt( pass: *const c_char, passlen: size_t, salt: *const c_uchar, saltlen: size_t, N: u64, r: u64, p: u64, maxmem: u64, key: *mut c_uchar, keylen: size_t, ) -> c_int540     pub fn EVP_PBE_scrypt(
541         pass: *const c_char,
542         passlen: size_t,
543         salt: *const c_uchar,
544         saltlen: size_t,
545         N: u64,
546         r: u64,
547         p: u64,
548         maxmem: u64,
549         key: *mut c_uchar,
550         keylen: size_t,
551     ) -> c_int;
552 }
553 
554 pub const EVP_PKEY_OP_KEYGEN: c_int = 1 << 2;
555 cfg_if! {
556     if #[cfg(ossl300)] {
557         pub const EVP_PKEY_OP_SIGN: c_int = 1 << 4;
558         pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 5;
559         pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 6;
560         pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 7;
561         pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 8;
562         pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 9;
563         pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 10;
564     } else {
565         pub const EVP_PKEY_OP_SIGN: c_int = 1 << 3;
566         pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 4;
567         pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 5;
568         pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 6;
569         pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 7;
570         pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 8;
571         pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 9;
572     }
573 }
574 
575 pub const EVP_PKEY_OP_TYPE_SIG: c_int = EVP_PKEY_OP_SIGN
576     | EVP_PKEY_OP_VERIFY
577     | EVP_PKEY_OP_VERIFYRECOVER
578     | EVP_PKEY_OP_SIGNCTX
579     | EVP_PKEY_OP_VERIFYCTX;
580 
581 pub const EVP_PKEY_OP_TYPE_CRYPT: c_int = EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT;
582 
583 pub const EVP_PKEY_CTRL_SET_MAC_KEY: c_int = 6;
584 
585 pub const EVP_PKEY_CTRL_CIPHER: c_int = 12;
586 
587 pub const EVP_PKEY_ALG_CTRL: c_int = 0x1000;
588 
589 extern "C" {
EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX590     pub fn EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX591     pub fn EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX)592     pub fn EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX);
593 
EVP_PKEY_CTX_ctrl( ctx: *mut EVP_PKEY_CTX, keytype: c_int, optype: c_int, cmd: c_int, p1: c_int, p2: *mut c_void, ) -> c_int594     pub fn EVP_PKEY_CTX_ctrl(
595         ctx: *mut EVP_PKEY_CTX,
596         keytype: c_int,
597         optype: c_int,
598         cmd: c_int,
599         p1: c_int,
600         p2: *mut c_void,
601     ) -> c_int;
602 
EVP_PKEY_new_mac_key( type_: c_int, e: *mut ENGINE, key: *const c_uchar, keylen: c_int, ) -> *mut EVP_PKEY603     pub fn EVP_PKEY_new_mac_key(
604         type_: c_int,
605         e: *mut ENGINE,
606         key: *const c_uchar,
607         keylen: c_int,
608     ) -> *mut EVP_PKEY;
609 
EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int610     pub fn EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int611     pub fn EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int;
EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int612     pub fn EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int;
613 
614     #[cfg(ossl300)]
EVP_PKEY_Q_keygen( libctx: *mut OSSL_LIB_CTX, propq: *const c_char, type_: *const c_char, ... ) -> *mut EVP_PKEY615     pub fn EVP_PKEY_Q_keygen(
616         libctx: *mut OSSL_LIB_CTX,
617         propq: *const c_char,
618         type_: *const c_char,
619         ...
620     ) -> *mut EVP_PKEY;
EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int621     pub fn EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int622     pub fn EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
623 
EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int624     pub fn EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_encrypt( ctx: *mut EVP_PKEY_CTX, pout: *mut c_uchar, poutlen: *mut size_t, pin: *const c_uchar, pinlen: size_t, ) -> c_int625     pub fn EVP_PKEY_encrypt(
626         ctx: *mut EVP_PKEY_CTX,
627         pout: *mut c_uchar,
628         poutlen: *mut size_t,
629         pin: *const c_uchar,
630         pinlen: size_t,
631     ) -> c_int;
EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int632     pub fn EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_decrypt( ctx: *mut EVP_PKEY_CTX, pout: *mut c_uchar, poutlen: *mut size_t, pin: *const c_uchar, pinlen: size_t, ) -> c_int633     pub fn EVP_PKEY_decrypt(
634         ctx: *mut EVP_PKEY_CTX,
635         pout: *mut c_uchar,
636         poutlen: *mut size_t,
637         pin: *const c_uchar,
638         pinlen: size_t,
639     ) -> c_int;
640 }
641 
642 const_ptr_api! {
643     extern "C" {
644         pub fn EVP_PKCS82PKEY(p8: #[const_ptr_if(any(ossl110, libressl280))] PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
645     }
646 }
647 
648 cfg_if! {
649     if #[cfg(any(ossl111))] {
650         extern "C" {
651             pub fn EVP_PKEY_get_raw_public_key(
652                 pkey: *const EVP_PKEY,
653                 ppub: *mut c_uchar,
654                 len: *mut size_t,
655             ) -> c_int;
656             pub fn EVP_PKEY_new_raw_public_key(
657                 ttype: c_int,
658                 e: *mut ENGINE,
659                 key: *const c_uchar,
660                 keylen: size_t,
661             ) -> *mut EVP_PKEY;
662             pub fn EVP_PKEY_get_raw_private_key(
663                 pkey: *const EVP_PKEY,
664                 ppriv: *mut c_uchar,
665                 len: *mut size_t,
666             ) -> c_int;
667             pub fn EVP_PKEY_new_raw_private_key(
668                 ttype: c_int,
669                 e: *mut ENGINE,
670                 key: *const c_uchar,
671                 keylen: size_t,
672             ) -> *mut EVP_PKEY;
673         }
674     }
675 }
676 
677 extern "C" {
EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int678     pub fn EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int679     pub fn EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
680 }
681