Skip to main content

variant_ssl_sys/handwritten/
evp.rs

1use super::super::*;
2use libc::size_t;
3use std::ffi::{c_char, c_int, c_long, c_uchar, c_ulong, c_void};
4
5cfg_if! {
6    if #[cfg(ossl300)] {
7        extern "C" {
8            pub fn EVP_MD_get_block_size(md: *const EVP_MD) -> c_int;
9            pub fn EVP_MD_get_size(md: *const EVP_MD) -> c_int;
10            pub fn EVP_MD_get_type(md: *const EVP_MD) -> c_int;
11
12            pub fn EVP_MD_CTX_get0_md(ctx: *const EVP_MD_CTX) -> *const EVP_MD;
13
14            pub fn EVP_CIPHER_get_key_length(cipher: *const EVP_CIPHER) -> c_int;
15            pub fn EVP_CIPHER_get_block_size(cipher: *const EVP_CIPHER) -> c_int;
16            pub fn EVP_CIPHER_get_iv_length(cipher: *const EVP_CIPHER) -> c_int;
17            pub fn EVP_CIPHER_get_nid(cipher: *const EVP_CIPHER) -> c_int;
18            pub fn EVP_CIPHER_get_flags(cipher: *const EVP_CIPHER) -> c_ulong;
19            pub fn EVP_CIPHER_fetch(
20                ctx: *mut OSSL_LIB_CTX,
21                algorithm: *const c_char,
22                properties: *const c_char,
23            ) -> *mut EVP_CIPHER;
24            pub fn EVP_CIPHER_free(cipher: *mut EVP_CIPHER);
25
26            pub fn EVP_CIPHER_CTX_get0_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
27            pub fn EVP_CIPHER_CTX_get_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
28            pub fn EVP_CIPHER_CTX_get_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
29            pub fn EVP_CIPHER_CTX_get_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
30            pub fn EVP_CIPHER_CTX_get_tag_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
31            pub fn EVP_CIPHER_CTX_get_num(ctx: *const EVP_CIPHER_CTX) -> c_int;
32        }
33    } else {
34        extern "C" {
35            pub fn EVP_MD_block_size(md: *const EVP_MD) -> c_int;
36            pub fn EVP_MD_size(md: *const EVP_MD) -> c_int;
37            pub fn EVP_MD_type(md: *const EVP_MD) -> c_int;
38
39            pub fn EVP_MD_CTX_md(ctx: *const EVP_MD_CTX) -> *const EVP_MD;
40
41            pub fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int;
42            pub fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int;
43            pub fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int;
44            pub fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int;
45            pub fn EVP_CIPHER_flags(cipher: *const EVP_CIPHER) -> c_ulong;
46
47            pub fn EVP_CIPHER_CTX_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
48            pub fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
49            pub fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
50            pub fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
51            #[cfg(ossl110)]
52            pub fn EVP_CIPHER_CTX_num(ctx: *const EVP_CIPHER_CTX) -> c_int;
53        }
54    }
55}
56
57cfg_if! {
58    if #[cfg(any(ossl110, libressl382))] {
59        extern "C" {
60            pub fn EVP_MD_CTX_new() -> *mut EVP_MD_CTX;
61            pub fn EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX);
62        }
63    } else {
64        extern "C" {
65            pub fn EVP_MD_CTX_create() -> *mut EVP_MD_CTX;
66            pub fn EVP_MD_CTX_destroy(ctx: *mut EVP_MD_CTX);
67        }
68    }
69}
70
71cfg_if! {
72    if #[cfg(ossl300)] {
73        extern "C" {
74            pub fn EVP_default_properties_is_fips_enabled(libctx: *mut OSSL_LIB_CTX) -> c_int;
75            pub fn EVP_default_properties_enable_fips(libctx: *mut OSSL_LIB_CTX, enable: c_int) -> c_int;
76        }
77    }
78}
79
80extern "C" {
81    pub fn EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE)
82        -> c_int;
83    pub fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int;
84    pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
85    #[cfg(ossl300)]
86    pub fn EVP_Q_digest(
87        libctx: *mut OSSL_LIB_CTX,
88        name: *const c_char,
89        propq: *const c_char,
90        data: *const c_void,
91        count: size_t,
92        md: *mut c_uchar,
93        size: *mut size_t,
94    ) -> c_int;
95    pub fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int;
96    pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
97    #[cfg(ossl111)]
98    pub fn EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
99    #[cfg(any(ossl330, awslc))]
100    pub fn EVP_DigestSqueeze(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
101
102    #[cfg(ossl300)]
103    pub fn EVP_MD_fetch(
104        ctx: *mut OSSL_LIB_CTX,
105        algorithm: *const c_char,
106        properties: *const c_char,
107    ) -> *mut EVP_MD;
108
109    #[cfg(ossl300)]
110    pub fn EVP_MD_free(md: *mut EVP_MD);
111
112    pub fn EVP_BytesToKey(
113        typ: *const EVP_CIPHER,
114        md: *const EVP_MD,
115        salt: *const u8,
116        data: *const u8,
117        datalen: c_int,
118        count: c_int,
119        key: *mut u8,
120        iv: *mut u8,
121    ) -> c_int;
122
123    pub fn EVP_CipherInit(
124        ctx: *mut EVP_CIPHER_CTX,
125        evp: *const EVP_CIPHER,
126        key: *const u8,
127        iv: *const u8,
128        mode: c_int,
129    ) -> c_int;
130    pub fn EVP_CipherInit_ex(
131        ctx: *mut EVP_CIPHER_CTX,
132        type_: *const EVP_CIPHER,
133        impl_: *mut ENGINE,
134        key: *const c_uchar,
135        iv: *const c_uchar,
136        enc: c_int,
137    ) -> c_int;
138    pub fn EVP_CipherUpdate(
139        ctx: *mut EVP_CIPHER_CTX,
140        outbuf: *mut u8,
141        outlen: *mut c_int,
142        inbuf: *const u8,
143        inlen: c_int,
144    ) -> c_int;
145    pub fn EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int;
146
147    pub fn EVP_DigestSignInit(
148        ctx: *mut EVP_MD_CTX,
149        pctx: *mut *mut EVP_PKEY_CTX,
150        type_: *const EVP_MD,
151        e: *mut ENGINE,
152        pkey: *mut EVP_PKEY,
153    ) -> c_int;
154
155    #[cfg(ossl300)]
156    pub fn EVP_DigestSignUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, dsize: size_t) -> c_int;
157    pub fn EVP_DigestSignFinal(
158        ctx: *mut EVP_MD_CTX,
159        sig: *mut c_uchar,
160        siglen: *mut size_t,
161    ) -> c_int;
162    pub fn EVP_DigestVerifyInit(
163        ctx: *mut EVP_MD_CTX,
164        pctx: *mut *mut EVP_PKEY_CTX,
165        type_: *const EVP_MD,
166        e: *mut ENGINE,
167        pkey: *mut EVP_PKEY,
168    ) -> c_int;
169    #[cfg(ossl300)]
170    pub fn EVP_DigestVerifyUpdate(
171        ctx: *mut EVP_MD_CTX,
172        data: *const c_void,
173        dsize: size_t,
174    ) -> c_int;
175    pub fn EVP_DigestVerifyFinal(
176        ctx: *mut EVP_MD_CTX,
177        sigret: *const c_uchar,
178        siglen: size_t,
179    ) -> c_int;
180    pub fn EVP_SealInit(
181        ctx: *mut EVP_CIPHER_CTX,
182        type_: *const EVP_CIPHER,
183        ek: *mut *mut c_uchar,
184        ekl: *mut c_int,
185        iv: *mut c_uchar,
186        pubk: *mut *mut EVP_PKEY,
187        npubk: c_int,
188    ) -> c_int;
189    pub fn EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
190    pub fn EVP_EncryptInit_ex(
191        ctx: *mut EVP_CIPHER_CTX,
192        cipher: *const EVP_CIPHER,
193        impl_: *mut ENGINE,
194        key: *const c_uchar,
195        iv: *const c_uchar,
196    ) -> c_int;
197    pub fn EVP_EncryptUpdate(
198        ctx: *mut EVP_CIPHER_CTX,
199        out: *mut c_uchar,
200        outl: *mut c_int,
201        in_: *const u8,
202        inl: c_int,
203    ) -> c_int;
204    pub fn EVP_EncryptFinal_ex(
205        ctx: *mut EVP_CIPHER_CTX,
206        out: *mut c_uchar,
207        outl: *mut c_int,
208    ) -> c_int;
209    pub fn EVP_OpenInit(
210        ctx: *mut EVP_CIPHER_CTX,
211        type_: *const EVP_CIPHER,
212        ek: *const c_uchar,
213        ekl: c_int,
214        iv: *const c_uchar,
215        priv_: *mut EVP_PKEY,
216    ) -> c_int;
217    pub fn EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
218    pub fn EVP_DecryptInit_ex(
219        ctx: *mut EVP_CIPHER_CTX,
220        cipher: *const EVP_CIPHER,
221        impl_: *mut ENGINE,
222        key: *const c_uchar,
223        iv: *const c_uchar,
224    ) -> c_int;
225    pub fn EVP_DecryptUpdate(
226        ctx: *mut EVP_CIPHER_CTX,
227        out: *mut c_uchar,
228        outl: *mut c_int,
229        in_: *const u8,
230        inl: c_int,
231    ) -> c_int;
232    pub fn EVP_DecryptFinal_ex(
233        ctx: *mut EVP_CIPHER_CTX,
234        outm: *mut c_uchar,
235        outl: *mut c_int,
236    ) -> c_int;
237}
238cfg_if! {
239    if #[cfg(ossl300)] {
240        extern "C" {
241            pub fn EVP_PKEY_get_size(pkey: *const EVP_PKEY) -> c_int;
242        }
243    } else {
244        const_ptr_api! {
245            extern "C" {
246                pub fn EVP_PKEY_size(pkey: #[const_ptr_if(any(ossl111b, libressl))] EVP_PKEY) -> c_int;
247            }
248        }
249    }
250}
251cfg_if! {
252    if #[cfg(any(ossl111, libressl))] {
253        extern "C" {
254            pub fn EVP_DigestSign(
255                ctx: *mut EVP_MD_CTX,
256                sigret: *mut c_uchar,
257                siglen: *mut size_t,
258                tbs: *const c_uchar,
259                tbslen: size_t
260            ) -> c_int;
261
262            pub fn EVP_DigestVerify(
263                ctx: *mut EVP_MD_CTX,
264                sigret: *const c_uchar,
265                siglen: size_t,
266                tbs: *const c_uchar,
267                tbslen: size_t
268            ) -> c_int;
269        }
270    }
271}
272
273extern "C" {
274    pub fn EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX;
275    pub fn EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX);
276    pub fn EVP_CIPHER_CTX_copy(dst: *mut EVP_CIPHER_CTX, src: *const EVP_CIPHER_CTX) -> c_int;
277    #[cfg(any(ossl110, libressl))]
278    pub fn EVP_CIPHER_CTX_reset(c: *mut EVP_CIPHER_CTX) -> c_int;
279
280    pub fn EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int;
281    #[cfg(any(ossl111, libressl))]
282    pub fn EVP_MD_CTX_reset(ctx: *mut EVP_MD_CTX) -> c_int;
283    pub fn EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int;
284    pub fn EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int;
285    pub fn EVP_CIPHER_CTX_ctrl(
286        ctx: *mut EVP_CIPHER_CTX,
287        type_: c_int,
288        arg: c_int,
289        ptr: *mut c_void,
290    ) -> c_int;
291    pub fn EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int;
292    pub fn EVP_CIPHER_CTX_set_flags(ctx: *mut EVP_CIPHER_CTX, flags: c_int);
293
294    pub fn EVP_md_null() -> *const EVP_MD;
295    pub fn EVP_md5() -> *const EVP_MD;
296    pub fn EVP_sha1() -> *const EVP_MD;
297    pub fn EVP_sha224() -> *const EVP_MD;
298    pub fn EVP_sha256() -> *const EVP_MD;
299    pub fn EVP_sha384() -> *const EVP_MD;
300    pub fn EVP_sha512() -> *const EVP_MD;
301    #[cfg(any(ossl111, libressl380))]
302    pub fn EVP_sha3_224() -> *const EVP_MD;
303    #[cfg(any(ossl111, libressl380))]
304    pub fn EVP_sha3_256() -> *const EVP_MD;
305    #[cfg(any(ossl111, libressl380))]
306    pub fn EVP_sha3_384() -> *const EVP_MD;
307    #[cfg(any(ossl111, libressl380))]
308    pub fn EVP_sha3_512() -> *const EVP_MD;
309    #[cfg(ossl111)]
310    pub fn EVP_shake128() -> *const EVP_MD;
311    #[cfg(ossl111)]
312    pub fn EVP_shake256() -> *const EVP_MD;
313    pub fn EVP_ripemd160() -> *const EVP_MD;
314    #[cfg(all(any(ossl111, libressl), not(osslconf = "OPENSSL_NO_SM3")))]
315    pub fn EVP_sm3() -> *const EVP_MD;
316    pub fn EVP_des_ecb() -> *const EVP_CIPHER;
317    pub fn EVP_des_ede3() -> *const EVP_CIPHER;
318    pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER;
319    pub fn EVP_des_ede3_ecb() -> *const EVP_CIPHER;
320    pub fn EVP_des_ede3_cfb64() -> *const EVP_CIPHER;
321    pub fn EVP_des_ede3_cfb8() -> *const EVP_CIPHER;
322    pub fn EVP_des_ede3_ofb() -> *const EVP_CIPHER;
323    pub fn EVP_des_cbc() -> *const EVP_CIPHER;
324    #[cfg(not(osslconf = "OPENSSL_NO_RC4"))]
325    pub fn EVP_rc4() -> *const EVP_CIPHER;
326    pub fn EVP_bf_ecb() -> *const EVP_CIPHER;
327    pub fn EVP_bf_cbc() -> *const EVP_CIPHER;
328    pub fn EVP_bf_cfb64() -> *const EVP_CIPHER;
329    pub fn EVP_bf_ofb() -> *const EVP_CIPHER;
330    pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
331    pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
332    pub fn EVP_aes_128_cfb1() -> *const EVP_CIPHER;
333    pub fn EVP_aes_128_cfb8() -> *const EVP_CIPHER;
334    pub fn EVP_aes_128_cfb128() -> *const EVP_CIPHER;
335    pub fn EVP_aes_128_ctr() -> *const EVP_CIPHER;
336    pub fn EVP_aes_128_ccm() -> *const EVP_CIPHER;
337    pub fn EVP_aes_128_gcm() -> *const EVP_CIPHER;
338    pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
339    pub fn EVP_aes_128_ofb() -> *const EVP_CIPHER;
340    #[cfg(ossl110)]
341    pub fn EVP_aes_128_ocb() -> *const EVP_CIPHER;
342    #[cfg(ossl110)]
343    pub fn EVP_aes_128_wrap() -> *const EVP_CIPHER;
344    #[cfg(ossl110)]
345    pub fn EVP_aes_128_wrap_pad() -> *const EVP_CIPHER;
346    pub fn EVP_aes_192_ecb() -> *const EVP_CIPHER;
347    pub fn EVP_aes_192_cbc() -> *const EVP_CIPHER;
348    pub fn EVP_aes_192_cfb1() -> *const EVP_CIPHER;
349    pub fn EVP_aes_192_cfb8() -> *const EVP_CIPHER;
350    pub fn EVP_aes_192_cfb128() -> *const EVP_CIPHER;
351    pub fn EVP_aes_192_ctr() -> *const EVP_CIPHER;
352    pub fn EVP_aes_192_ccm() -> *const EVP_CIPHER;
353    pub fn EVP_aes_192_gcm() -> *const EVP_CIPHER;
354    pub fn EVP_aes_192_ofb() -> *const EVP_CIPHER;
355    #[cfg(ossl110)]
356    pub fn EVP_aes_192_ocb() -> *const EVP_CIPHER;
357    #[cfg(ossl110)]
358    pub fn EVP_aes_192_wrap() -> *const EVP_CIPHER;
359    #[cfg(ossl110)]
360    pub fn EVP_aes_192_wrap_pad() -> *const EVP_CIPHER;
361    pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
362    pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
363    pub fn EVP_aes_256_cfb1() -> *const EVP_CIPHER;
364    pub fn EVP_aes_256_cfb8() -> *const EVP_CIPHER;
365    pub fn EVP_aes_256_cfb128() -> *const EVP_CIPHER;
366    pub fn EVP_aes_256_ctr() -> *const EVP_CIPHER;
367    pub fn EVP_aes_256_ccm() -> *const EVP_CIPHER;
368    pub fn EVP_aes_256_gcm() -> *const EVP_CIPHER;
369    pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
370    pub fn EVP_aes_256_ofb() -> *const EVP_CIPHER;
371    #[cfg(ossl110)]
372    pub fn EVP_aes_256_ocb() -> *const EVP_CIPHER;
373    #[cfg(ossl110)]
374    pub fn EVP_aes_256_wrap() -> *const EVP_CIPHER;
375    #[cfg(ossl110)]
376    pub fn EVP_aes_256_wrap_pad() -> *const EVP_CIPHER;
377    #[cfg(not(osslconf = "OPENSSL_NO_CHACHA"))]
378    pub fn EVP_chacha20() -> *const EVP_CIPHER;
379    #[cfg(all(any(ossl110, libressl360), not(osslconf = "OPENSSL_NO_CHACHA")))]
380    pub fn EVP_chacha20_poly1305() -> *const EVP_CIPHER;
381    #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
382    pub fn EVP_seed_cbc() -> *const EVP_CIPHER;
383    #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
384    pub fn EVP_seed_cfb128() -> *const EVP_CIPHER;
385    #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
386    pub fn EVP_seed_ecb() -> *const EVP_CIPHER;
387    #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
388    pub fn EVP_seed_ofb() -> *const EVP_CIPHER;
389
390    #[cfg(all(any(ossl111, libressl), not(osslconf = "OPENSSL_NO_SM4")))]
391    pub fn EVP_sm4_ecb() -> *const EVP_CIPHER;
392    #[cfg(all(any(ossl111, libressl), not(osslconf = "OPENSSL_NO_SM4")))]
393    pub fn EVP_sm4_cbc() -> *const EVP_CIPHER;
394    #[cfg(all(any(ossl111, libressl), not(osslconf = "OPENSSL_NO_SM4")))]
395    pub fn EVP_sm4_cfb128() -> *const EVP_CIPHER;
396    #[cfg(all(any(ossl111, libressl), not(osslconf = "OPENSSL_NO_SM4")))]
397    pub fn EVP_sm4_ofb() -> *const EVP_CIPHER;
398    #[cfg(all(any(ossl111, libressl), not(osslconf = "OPENSSL_NO_SM4")))]
399    pub fn EVP_sm4_ctr() -> *const EVP_CIPHER;
400    #[cfg(tongsuo)]
401    pub fn EVP_sm4_gcm() -> *const EVP_CIPHER;
402    #[cfg(tongsuo)]
403    pub fn EVP_sm4_ccm() -> *const EVP_CIPHER;
404
405    #[cfg(tongsuo)]
406    pub fn EVP_eea3() -> *const EVP_CIPHER;
407
408    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
409    pub fn EVP_camellia_128_cfb128() -> *const EVP_CIPHER;
410    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
411    pub fn EVP_camellia_128_ecb() -> *const EVP_CIPHER;
412    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
413    pub fn EVP_camellia_128_cbc() -> *const EVP_CIPHER;
414    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
415    pub fn EVP_camellia_128_ofb() -> *const EVP_CIPHER;
416    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
417    pub fn EVP_camellia_192_cfb128() -> *const EVP_CIPHER;
418    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
419    pub fn EVP_camellia_192_ecb() -> *const EVP_CIPHER;
420    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
421    pub fn EVP_camellia_192_cbc() -> *const EVP_CIPHER;
422    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
423    pub fn EVP_camellia_192_ofb() -> *const EVP_CIPHER;
424    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
425    pub fn EVP_camellia_256_cfb128() -> *const EVP_CIPHER;
426    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
427    pub fn EVP_camellia_256_ecb() -> *const EVP_CIPHER;
428    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
429    pub fn EVP_camellia_256_cbc() -> *const EVP_CIPHER;
430    #[cfg(not(osslconf = "OPENSSL_NO_CAMELLIA"))]
431    pub fn EVP_camellia_256_ofb() -> *const EVP_CIPHER;
432
433    #[cfg(not(osslconf = "OPENSSL_NO_CAST"))]
434    pub fn EVP_cast5_cfb64() -> *const EVP_CIPHER;
435    #[cfg(not(osslconf = "OPENSSL_NO_CAST"))]
436    pub fn EVP_cast5_ecb() -> *const EVP_CIPHER;
437    #[cfg(not(osslconf = "OPENSSL_NO_CAST"))]
438    pub fn EVP_cast5_cbc() -> *const EVP_CIPHER;
439    #[cfg(not(osslconf = "OPENSSL_NO_CAST"))]
440    pub fn EVP_cast5_ofb() -> *const EVP_CIPHER;
441
442    #[cfg(not(osslconf = "OPENSSL_NO_IDEA"))]
443    pub fn EVP_idea_cfb64() -> *const EVP_CIPHER;
444    #[cfg(not(osslconf = "OPENSSL_NO_IDEA"))]
445    pub fn EVP_idea_ecb() -> *const EVP_CIPHER;
446    #[cfg(not(osslconf = "OPENSSL_NO_IDEA"))]
447    pub fn EVP_idea_cbc() -> *const EVP_CIPHER;
448    #[cfg(not(osslconf = "OPENSSL_NO_IDEA"))]
449    pub fn EVP_idea_ofb() -> *const EVP_CIPHER;
450
451    #[cfg(not(osslconf = "OPENSSL_NO_RC2"))]
452    pub fn EVP_rc2_cbc() -> *const EVP_CIPHER;
453    #[cfg(not(osslconf = "OPENSSL_NO_RC2"))]
454    pub fn EVP_rc2_40_cbc() -> *const EVP_CIPHER;
455
456    #[cfg(not(ossl110))]
457    pub fn OPENSSL_add_all_algorithms_noconf();
458
459    pub fn EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD;
460    pub fn EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER;
461}
462
463cfg_if! {
464    if #[cfg(ossl300)] {
465        extern "C" {
466            pub fn EVP_PKEY_get_id(pkey: *const EVP_PKEY) -> c_int;
467            pub fn EVP_PKEY_get_bits(key: *const EVP_PKEY) -> c_int;
468            pub fn EVP_PKEY_get_security_bits(key: *const EVP_PKEY) -> c_int;
469        }
470    } else {
471        extern "C" {
472            pub fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int;
473            pub fn EVP_PKEY_bits(key: *const EVP_PKEY) -> c_int;
474            #[cfg(any(ossl110, libressl360))]
475            pub fn EVP_PKEY_security_bits(pkey: *const EVP_PKEY) -> c_int;
476        }
477    }
478}
479#[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
480const_ptr_api! {
481    extern "C" {
482        pub fn EVP_PKEY_get1_RSA(k: #[const_ptr_if(libressl420)] EVP_PKEY) -> *mut RSA;
483        pub fn EVP_PKEY_get1_DSA(k: #[const_ptr_if(libressl420)] EVP_PKEY) -> *mut DSA;
484        pub fn EVP_PKEY_get1_DH(k: #[const_ptr_if(libressl420)] EVP_PKEY) -> *mut DH;
485        pub fn EVP_PKEY_get1_EC_KEY(k: #[const_ptr_if(libressl420)] EVP_PKEY) -> *mut EC_KEY;
486    }
487}
488#[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
489extern "C" {
490    pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int;
491
492    pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
493    pub fn EVP_PKEY_set1_DSA(k: *mut EVP_PKEY, k: *mut DSA) -> c_int;
494    pub fn EVP_PKEY_set1_DH(k: *mut EVP_PKEY, k: *mut DH) -> c_int;
495    pub fn EVP_PKEY_set1_EC_KEY(k: *mut EVP_PKEY, k: *mut EC_KEY) -> c_int;
496
497    pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
498}
499
500extern "C" {
501    pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
502    pub fn EVP_PKEY_free(k: *mut EVP_PKEY);
503    pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int;
504
505    #[cfg(ossl300)]
506    pub fn EVP_PKEY_fromdata_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
507
508    #[cfg(ossl300)]
509    pub fn EVP_PKEY_fromdata(
510        ctx: *mut EVP_PKEY_CTX,
511        ppkey: *mut *mut EVP_PKEY,
512        selection: c_int,
513        param: *mut OSSL_PARAM,
514    ) -> c_int;
515
516    #[cfg(ossl300)]
517    pub fn EVP_PKEY_todata(
518        ppkey: *const EVP_PKEY,
519        selection: c_int,
520        param: *mut *mut OSSL_PARAM,
521    ) -> c_int;
522
523    #[cfg(ossl300)]
524    pub fn EVP_PKEY_generate(ctx: *mut EVP_PKEY_CTX, k: *mut *mut EVP_PKEY) -> c_int;
525
526    pub fn d2i_AutoPrivateKey(
527        a: *mut *mut EVP_PKEY,
528        pp: *mut *const c_uchar,
529        length: c_long,
530    ) -> *mut EVP_PKEY;
531
532    #[cfg(ossl300)]
533    pub fn EVP_PKEY_eq(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
534    #[cfg(ossl300)]
535    pub fn EVP_PKEY_parameters_eq(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
536
537    pub fn EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int;
538
539    pub fn PKCS5_PBKDF2_HMAC_SHA1(
540        pass: *const c_char,
541        passlen: c_int,
542        salt: *const u8,
543        saltlen: c_int,
544        iter: c_int,
545        keylen: c_int,
546        out: *mut u8,
547    ) -> c_int;
548    pub fn PKCS5_PBKDF2_HMAC(
549        pass: *const c_char,
550        passlen: c_int,
551        salt: *const c_uchar,
552        saltlen: c_int,
553        iter: c_int,
554        digest: *const EVP_MD,
555        keylen: c_int,
556        out: *mut u8,
557    ) -> c_int;
558
559    #[cfg(ossl110)]
560    pub fn EVP_PBE_scrypt(
561        pass: *const c_char,
562        passlen: size_t,
563        salt: *const c_uchar,
564        saltlen: size_t,
565        N: u64,
566        r: u64,
567        p: u64,
568        maxmem: u64,
569        key: *mut c_uchar,
570        keylen: size_t,
571    ) -> c_int;
572
573    pub fn EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
574    pub fn EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
575    #[cfg(ossl300)]
576    pub fn EVP_PKEY_CTX_new_from_name(
577        libctx: *mut OSSL_LIB_CTX,
578        name: *const c_char,
579        propquery: *const c_char,
580    ) -> *mut EVP_PKEY_CTX;
581    pub fn EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX);
582
583    pub fn EVP_PKEY_CTX_ctrl(
584        ctx: *mut EVP_PKEY_CTX,
585        keytype: c_int,
586        optype: c_int,
587        cmd: c_int,
588        p1: c_int,
589        p2: *mut c_void,
590    ) -> c_int;
591
592    #[cfg(ossl300)]
593    pub fn EVP_PKEY_CTX_set_signature_md(ctx: *mut EVP_PKEY_CTX, md: *const EVP_MD) -> c_int;
594
595    #[cfg(ossl300)]
596    pub fn EVP_PKEY_CTX_set_params(ctx: *mut EVP_PKEY_CTX, params: *const OSSL_PARAM) -> c_int;
597
598    #[cfg(ossl300)]
599    pub fn EVP_PKEY_CTX_get_params(ctx: *mut EVP_PKEY_CTX, params: *mut OSSL_PARAM) -> c_int;
600
601    pub fn EVP_PKEY_new_mac_key(
602        type_: c_int,
603        e: *mut ENGINE,
604        key: *const c_uchar,
605        keylen: c_int,
606    ) -> *mut EVP_PKEY;
607
608    pub fn EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
609    pub fn EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int;
610    #[cfg(ossl300)]
611    pub fn EVP_PKEY_derive_set_peer_ex(
612        ctx: *mut EVP_PKEY_CTX,
613        peer: *mut EVP_PKEY,
614        validate_peer: c_int,
615    ) -> c_int;
616    pub fn EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int;
617
618    #[cfg(ossl300)]
619    pub fn EVP_PKEY_Q_keygen(
620        libctx: *mut OSSL_LIB_CTX,
621        propq: *const c_char,
622        type_: *const c_char,
623        ...
624    ) -> *mut EVP_PKEY;
625    pub fn EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
626    pub fn EVP_PKEY_paramgen_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
627    pub fn EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
628    pub fn EVP_PKEY_paramgen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
629
630    #[cfg(ossl111)]
631    pub fn EVP_PKEY_param_check(ctx: *mut EVP_PKEY_CTX) -> c_int;
632    #[cfg(ossl111)]
633    pub fn EVP_PKEY_public_check(ctx: *mut EVP_PKEY_CTX) -> c_int;
634    #[cfg(ossl111)]
635    pub fn EVP_PKEY_check(ctx: *mut EVP_PKEY_CTX) -> c_int;
636
637    pub fn EVP_PKEY_sign_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
638
639    #[cfg(ossl340)]
640    pub fn EVP_PKEY_sign_message_init(
641        ctx: *mut EVP_PKEY_CTX,
642        algo: *mut EVP_SIGNATURE,
643        params: *const OSSL_PARAM,
644    ) -> c_int;
645
646    pub fn EVP_PKEY_sign(
647        ctx: *mut EVP_PKEY_CTX,
648        sig: *mut c_uchar,
649        siglen: *mut size_t,
650        tbs: *const c_uchar,
651        tbslen: size_t,
652    ) -> c_int;
653    pub fn EVP_PKEY_verify_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
654
655    #[cfg(ossl340)]
656    pub fn EVP_PKEY_verify_message_init(
657        ctx: *mut EVP_PKEY_CTX,
658        algo: *mut EVP_SIGNATURE,
659        params: *const OSSL_PARAM,
660    ) -> c_int;
661
662    pub fn EVP_PKEY_verify(
663        ctx: *mut EVP_PKEY_CTX,
664        sig: *const c_uchar,
665        siglen: size_t,
666        tbs: *const c_uchar,
667        tbslen: size_t,
668    ) -> c_int;
669    pub fn EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
670    pub fn EVP_PKEY_encrypt(
671        ctx: *mut EVP_PKEY_CTX,
672        pout: *mut c_uchar,
673        poutlen: *mut size_t,
674        pin: *const c_uchar,
675        pinlen: size_t,
676    ) -> c_int;
677    pub fn EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
678    pub fn EVP_PKEY_decrypt(
679        ctx: *mut EVP_PKEY_CTX,
680        pout: *mut c_uchar,
681        poutlen: *mut size_t,
682        pin: *const c_uchar,
683        pinlen: size_t,
684    ) -> c_int;
685    pub fn EVP_PKEY_verify_recover_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
686    pub fn EVP_PKEY_verify_recover(
687        ctx: *mut EVP_PKEY_CTX,
688        rout: *mut c_uchar,
689        routlen: *mut size_t,
690        sig: *const c_uchar,
691        siglen: size_t,
692    ) -> c_int;
693
694    #[cfg(ossl300)]
695    pub fn EVP_PKEY_encapsulate_init(ctx: *mut EVP_PKEY_CTX, params: *const OSSL_PARAM) -> c_int;
696    #[cfg(ossl300)]
697    pub fn EVP_PKEY_encapsulate(
698        ctx: *mut EVP_PKEY_CTX,
699        wrappedkey: *mut c_uchar,
700        wrappedkeylen: *mut size_t,
701        genkey: *mut c_uchar,
702        genkeylen: *mut size_t,
703    ) -> c_int;
704
705    #[cfg(ossl300)]
706    pub fn EVP_PKEY_decapsulate_init(ctx: *mut EVP_PKEY_CTX, params: *const OSSL_PARAM) -> c_int;
707    #[cfg(ossl300)]
708    pub fn EVP_PKEY_decapsulate(
709        ctx: *mut EVP_PKEY_CTX,
710        genkey: *mut c_uchar,
711        genkeylen: *mut size_t,
712        wrappedkey: *const c_uchar,
713        wrappedkeylen: size_t,
714    ) -> c_int;
715}
716
717const_ptr_api! {
718    extern "C" {
719        pub fn EVP_PKCS82PKEY(p8: *const PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
720        pub fn EVP_PKEY2PKCS8(pkey: #[const_ptr_if(any(ossl300))] EVP_PKEY) -> *mut PKCS8_PRIV_KEY_INFO;
721    }
722}
723
724cfg_if! {
725    if #[cfg(any(ossl111, libressl370))] {
726        extern "C" {
727            pub fn EVP_PKEY_get_raw_public_key(
728                pkey: *const EVP_PKEY,
729                ppub: *mut c_uchar,
730                len: *mut size_t,
731            ) -> c_int;
732            pub fn EVP_PKEY_new_raw_public_key(
733                ttype: c_int,
734                e: *mut ENGINE,
735                key: *const c_uchar,
736                keylen: size_t,
737            ) -> *mut EVP_PKEY;
738            pub fn EVP_PKEY_get_raw_private_key(
739                pkey: *const EVP_PKEY,
740                ppriv: *mut c_uchar,
741                len: *mut size_t,
742            ) -> c_int;
743            pub fn EVP_PKEY_new_raw_private_key(
744                ttype: c_int,
745                e: *mut ENGINE,
746                key: *const c_uchar,
747                keylen: size_t,
748            ) -> *mut EVP_PKEY;
749        }
750    }
751}
752
753cfg_if! {
754    if #[cfg(tongsuo)] {
755        extern "C" {
756            pub fn EVP_PKEY_get0_eia3(pkey: *const EVP_PKEY, len: *mut size_t) -> *const ::libc::c_uchar;
757            pub fn EVP_PKEY_is_sm2(pkey: *mut EVP_PKEY) -> ::libc::c_int;
758        }
759    }
760}
761
762cfg_if! {
763    if #[cfg(ossl300)] {
764        extern "C" {
765            pub fn EVP_PKEY_new_raw_private_key_ex(
766                ctx: *mut OSSL_LIB_CTX,
767                keytype: *const c_char,
768                propq: *const c_char,
769                key: *const c_uchar,
770                keylen: size_t
771            ) -> *mut EVP_PKEY;
772            pub fn EVP_PKEY_new_raw_public_key_ex(
773                ctx: *mut OSSL_LIB_CTX,
774                keytype: *const c_char,
775                propq: *const c_char,
776                key: *const c_uchar,
777                keylen: size_t
778            ) -> *mut EVP_PKEY;
779            pub fn EVP_PKEY_is_a(
780                pkey: *const EVP_PKEY,
781                name: *const c_char
782            ) -> c_int;
783        }
784    }
785}
786
787extern "C" {
788    pub fn EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
789    pub fn EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
790}
791
792cfg_if! {
793    if #[cfg(ossl300)] {
794        extern "C" {
795            pub fn EVP_PKEY_gettable_params(pkey: *const EVP_PKEY) -> *const OSSL_PARAM;
796            pub fn EVP_PKEY_get_params(pkey: *const EVP_PKEY, params: *mut OSSL_PARAM) -> c_int;
797            pub fn EVP_PKEY_get_int_param(
798                pkey: *const EVP_PKEY,
799                key_name: *const c_char,
800                out: *mut c_int,
801            ) -> c_int;
802            pub fn EVP_PKEY_get_size_t_param(
803                pkey: *const EVP_PKEY,
804                key_name: *const c_char,
805                out: *mut size_t,
806            ) -> c_int;
807            pub fn EVP_PKEY_get_bn_param(
808                pkey: *const EVP_PKEY,
809                key_name: *const c_char,
810                out: *mut *mut BIGNUM,
811            ) -> c_int;
812            pub fn EVP_PKEY_get_utf8_string_param(
813                pkey: *const EVP_PKEY,
814                key_name: *const c_char,
815                str: *mut c_char,
816                max_buf_sz: size_t,
817                out_len: *mut size_t,
818            ) -> c_int;
819            pub fn EVP_PKEY_get_octet_string_param(
820                pkey: *const EVP_PKEY,
821                key_name: *const c_char,
822                buf: *mut c_uchar,
823                max_buf_sz: size_t,
824                out_len: *mut size_t,
825            ) -> c_int;
826
827            pub fn EVP_PKEY_settable_params(pkey: *const EVP_PKEY) -> *const OSSL_PARAM;
828            pub fn EVP_PKEY_set_params(pkey: *mut EVP_PKEY, params: *mut OSSL_PARAM) -> c_int;
829            pub fn EVP_PKEY_set_int_param(
830                pkey: *mut EVP_PKEY,
831                key_name: *const c_char,
832                in_val: c_int,
833            ) -> c_int;
834            pub fn EVP_PKEY_set_size_t_param(
835                pkey: *mut EVP_PKEY,
836                key_name: *const c_char,
837                in_val: size_t,
838            ) -> c_int;
839            pub fn EVP_PKEY_set_bn_param(
840                pkey: *mut EVP_PKEY,
841                key_name: *const c_char,
842                bn: *const BIGNUM,
843            ) -> c_int;
844            pub fn EVP_PKEY_set_utf8_string_param(
845                pkey: *mut EVP_PKEY,
846                key_name: *const c_char,
847                str: *const c_char,
848            ) -> c_int;
849            pub fn EVP_PKEY_set_octet_string_param(
850                pkey: *mut EVP_PKEY,
851                key_name: *const c_char,
852                buf: *const c_uchar,
853                bsize: size_t,
854            ) -> c_int;
855            pub fn EVP_SIGNATURE_free(s: *mut EVP_SIGNATURE);
856            pub fn EVP_SIGNATURE_up_ref(s: *mut EVP_SIGNATURE) -> c_int;
857            pub fn EVP_SIGNATURE_fetch(ctx: *mut OSSL_LIB_CTX,
858                                       algorithm: *const c_char,
859                                       properties: *const c_char)
860                                       -> *mut EVP_SIGNATURE;
861            pub fn EVP_SIGNATURE_get0_name(s: *const EVP_SIGNATURE) -> *const c_char;
862            pub fn EVP_SIGNATURE_get0_description(s: *const EVP_SIGNATURE) -> *const c_char;
863        }
864    }
865}
866
867cfg_if! {
868    if #[cfg(ossl300)] {
869        extern "C" {
870            pub fn EVP_MAC_fetch(libctx: *mut OSSL_LIB_CTX, algorithm: *const c_char, properties: *const c_char) -> *mut EVP_MAC;
871            pub fn EVP_MAC_up_ref(mac: *mut EVP_MAC) -> c_int;
872            pub fn EVP_MAC_free(mac: *mut EVP_MAC);
873            pub fn EVP_MAC_is_a(mac: *const EVP_MAC, name: *const c_char) -> c_int;
874            pub fn EVP_MAC_get0_name(mac: *const EVP_MAC) -> *const c_char;
875            pub fn EVP_MAC_get0_description(mac: *const EVP_MAC) -> *const c_char;
876            pub fn EVP_MAC_get0_provider(mac: *const EVP_MAC) -> *const OSSL_PROVIDER;
877            pub fn EVP_MAC_get_params(mac: *mut EVP_MAC, params: *mut OSSL_PARAM) -> c_int;
878
879            pub fn EVP_MAC_CTX_new(mac: *mut EVP_MAC) -> *mut EVP_MAC_CTX;
880            pub fn EVP_MAC_CTX_free(ctx: *mut EVP_MAC_CTX);
881            pub fn EVP_MAC_CTX_dup(src: *const EVP_MAC_CTX) -> *mut EVP_MAC_CTX;
882            pub fn EVP_MAC_CTX_get0_mac(ctx: *mut EVP_MAC_CTX) -> *mut EVP_MAC;
883            pub fn EVP_MAC_CTX_get_params(ctx: *mut EVP_MAC_CTX, params: *mut OSSL_PARAM) -> c_int;
884            pub fn EVP_MAC_CTX_set_params(ctx: *mut EVP_MAC_CTX, params: *const OSSL_PARAM) -> c_int;
885
886            pub fn EVP_MAC_CTX_get_mac_size(ctx: *mut EVP_MAC_CTX) -> size_t;
887            pub fn EVP_MAC_CTX_get_block_size(ctx: *mut EVP_MAC_CTX) -> size_t;
888
889            pub fn EVP_MAC_init(ctx: *mut EVP_MAC_CTX, key: *const c_uchar, keylen: size_t, params: *const OSSL_PARAM) -> c_int;
890            pub fn EVP_MAC_update(ctx: *mut EVP_MAC_CTX, data: *const c_uchar, datalen: size_t) -> c_int;
891            pub fn EVP_MAC_final(ctx: *mut EVP_MAC_CTX, out: *mut c_uchar, outl: *mut size_t, outsize: size_t) -> c_int;
892            pub fn EVP_MAC_finalXOF(ctx: *mut EVP_MAC_CTX, out: *mut c_uchar, outsize: size_t) -> c_int;
893
894            pub fn EVP_MAC_gettable_params(mac: *const EVP_MAC) -> *const OSSL_PARAM;
895            pub fn EVP_MAC_gettable_ctx_params(mac: *const EVP_MAC) -> *const OSSL_PARAM;
896            pub fn EVP_MAC_settable_ctx_params(mac: *const EVP_MAC) -> *const OSSL_PARAM;
897            pub fn EVP_MAC_CTX_gettable_params(ctx: *mut EVP_MAC_CTX) -> *const OSSL_PARAM;
898            pub fn EVP_MAC_CTX_settable_params(ctx: *mut EVP_MAC_CTX) -> *const OSSL_PARAM;
899        }
900    }
901}