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