variant_ssl_sys/handwritten/
evp.rs

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