1 use super::super::*;
2 use libc::*;
3 
4 cfg_if! {
5     if #[cfg(ossl300)] {
6         extern "C" {
EVP_MD_get_block_sizenull7             pub fn EVP_MD_get_block_size(md: *const EVP_MD) -> c_int;
EVP_MD_get_sizenull8             pub fn EVP_MD_get_size(md: *const EVP_MD) -> c_int;
EVP_MD_get_typenull9             pub fn EVP_MD_get_type(md: *const EVP_MD) -> c_int;
10 
EVP_MD_CTX_get0_mdnull11             pub fn EVP_MD_CTX_get0_md(ctx: *const EVP_MD_CTX) -> *const EVP_MD;
12 
EVP_CIPHER_get_key_lengthnull13             pub fn EVP_CIPHER_get_key_length(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_get_block_sizenull14             pub fn EVP_CIPHER_get_block_size(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_get_iv_lengthnull15             pub fn EVP_CIPHER_get_iv_length(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_get_nidnull16             pub fn EVP_CIPHER_get_nid(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_fetchnull17             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;
EVP_CIPHER_freenull22             pub fn EVP_CIPHER_free(cipher: *mut EVP_CIPHER);
23 
EVP_CIPHER_CTX_get0_ciphernull24             pub fn EVP_CIPHER_CTX_get0_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
EVP_CIPHER_CTX_get_block_sizenull25             pub fn EVP_CIPHER_CTX_get_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
EVP_CIPHER_CTX_get_key_lengthnull26             pub fn EVP_CIPHER_CTX_get_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
EVP_CIPHER_CTX_get_iv_lengthnull27             pub fn EVP_CIPHER_CTX_get_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
EVP_CIPHER_CTX_get_tag_lengthnull28             pub fn EVP_CIPHER_CTX_get_tag_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
EVP_CIPHER_CTX_get_numnull29             pub fn EVP_CIPHER_CTX_get_num(ctx: *const EVP_CIPHER_CTX) -> c_int;
30         }
31     } else {
32         extern "C" {
EVP_MD_block_sizenull33             pub fn EVP_MD_block_size(md: *const EVP_MD) -> c_int;
EVP_MD_sizenull34             pub fn EVP_MD_size(md: *const EVP_MD) -> c_int;
EVP_MD_typenull35             pub fn EVP_MD_type(md: *const EVP_MD) -> c_int;
36 
EVP_MD_CTX_mdnull37             pub fn EVP_MD_CTX_md(ctx: *const EVP_MD_CTX) -> *const EVP_MD;
38 
EVP_CIPHER_key_lengthnull39             pub fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_block_sizenull40             pub fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_iv_lengthnull41             pub fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_nidnull42             pub fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int;
43 
EVP_CIPHER_CTX_ciphernull44             pub fn EVP_CIPHER_CTX_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
EVP_CIPHER_CTX_block_sizenull45             pub fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
EVP_CIPHER_CTX_key_lengthnull46             pub fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
EVP_CIPHER_CTX_iv_lengthnull47             pub fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
48             #[cfg(ossl110)]
EVP_CIPHER_CTX_numnull49             pub fn EVP_CIPHER_CTX_num(ctx: *const EVP_CIPHER_CTX) -> c_int;
50         }
51     }
52 }
53 
54 cfg_if! {
55     if #[cfg(ossl110)] {
56         extern "C" {
EVP_MD_CTX_newnull57             pub fn EVP_MD_CTX_new() -> *mut EVP_MD_CTX;
EVP_MD_CTX_freenull58             pub fn EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX);
59         }
60     } else {
61         extern "C" {
EVP_MD_CTX_createnull62             pub fn EVP_MD_CTX_create() -> *mut EVP_MD_CTX;
EVP_MD_CTX_destroynull63             pub fn EVP_MD_CTX_destroy(ctx: *mut EVP_MD_CTX);
64         }
65     }
66 }
67 
68 cfg_if! {
69     if #[cfg(ossl300)] {
70         extern "C" {
EVP_default_properties_is_fips_enablednull71             pub fn EVP_default_properties_is_fips_enabled(libctx: *mut OSSL_LIB_CTX) -> c_int;
72         }
73     }
74 }
75 
76 extern "C" {
EVP_DigestInit_exnull77     pub fn EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE)
78         -> c_int;
EVP_DigestUpdatenull79     pub fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int;
EVP_DigestFinal_exnull80     pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
81     #[cfg(ossl300)]
EVP_Q_digestnull82     pub fn EVP_Q_digest(
83         libctx: *mut OSSL_LIB_CTX,
84         name: *const c_char,
85         propq: *const c_char,
86         data: *const c_void,
87         count: size_t,
88         md: *mut c_uchar,
89         size: *mut size_t,
90     ) -> c_int;
EVP_DigestInitnull91     pub fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int;
EVP_DigestFinalnull92     pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
93     #[cfg(ossl111)]
EVP_DigestFinalXOFnull94     pub fn EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
95 
96     #[cfg(ossl300)]
EVP_MD_fetchnull97     pub fn EVP_MD_fetch(
98         ctx: *mut OSSL_LIB_CTX,
99         algorithm: *const c_char,
100         properties: *const c_char,
101     ) -> *mut EVP_MD;
102 
103     #[cfg(ossl300)]
EVP_MD_freenull104     pub fn EVP_MD_free(md: *mut EVP_MD);
105 
EVP_BytesToKeynull106     pub fn EVP_BytesToKey(
107         typ: *const EVP_CIPHER,
108         md: *const EVP_MD,
109         salt: *const u8,
110         data: *const u8,
111         datalen: c_int,
112         count: c_int,
113         key: *mut u8,
114         iv: *mut u8,
115     ) -> c_int;
116 
EVP_CipherInitnull117     pub fn EVP_CipherInit(
118         ctx: *mut EVP_CIPHER_CTX,
119         evp: *const EVP_CIPHER,
120         key: *const u8,
121         iv: *const u8,
122         mode: c_int,
123     ) -> c_int;
EVP_CipherInit_exnull124     pub fn EVP_CipherInit_ex(
125         ctx: *mut EVP_CIPHER_CTX,
126         type_: *const EVP_CIPHER,
127         impl_: *mut ENGINE,
128         key: *const c_uchar,
129         iv: *const c_uchar,
130         enc: c_int,
131     ) -> c_int;
EVP_CipherUpdatenull132     pub fn EVP_CipherUpdate(
133         ctx: *mut EVP_CIPHER_CTX,
134         outbuf: *mut u8,
135         outlen: *mut c_int,
136         inbuf: *const u8,
137         inlen: c_int,
138     ) -> c_int;
EVP_CipherFinalnull139     pub fn EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int;
140 
EVP_DigestSignInitnull141     pub fn EVP_DigestSignInit(
142         ctx: *mut EVP_MD_CTX,
143         pctx: *mut *mut EVP_PKEY_CTX,
144         type_: *const EVP_MD,
145         e: *mut ENGINE,
146         pkey: *mut EVP_PKEY,
147     ) -> c_int;
148 
149     #[cfg(ossl300)]
EVP_DigestSignUpdatenull150     pub fn EVP_DigestSignUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, dsize: size_t) -> c_int;
EVP_DigestSignFinalnull151     pub fn EVP_DigestSignFinal(
152         ctx: *mut EVP_MD_CTX,
153         sig: *mut c_uchar,
154         siglen: *mut size_t,
155     ) -> c_int;
EVP_DigestVerifyInitnull156     pub fn EVP_DigestVerifyInit(
157         ctx: *mut EVP_MD_CTX,
158         pctx: *mut *mut EVP_PKEY_CTX,
159         type_: *const EVP_MD,
160         e: *mut ENGINE,
161         pkey: *mut EVP_PKEY,
162     ) -> c_int;
163     #[cfg(ossl300)]
EVP_DigestVerifyUpdatenull164     pub fn EVP_DigestVerifyUpdate(
165         ctx: *mut EVP_MD_CTX,
166         data: *const c_void,
167         dsize: size_t,
168     ) -> c_int;
EVP_SealInitnull169     pub fn EVP_SealInit(
170         ctx: *mut EVP_CIPHER_CTX,
171         type_: *const EVP_CIPHER,
172         ek: *mut *mut c_uchar,
173         ekl: *mut c_int,
174         iv: *mut c_uchar,
175         pubk: *mut *mut EVP_PKEY,
176         npubk: c_int,
177     ) -> c_int;
EVP_SealFinalnull178     pub fn EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
EVP_EncryptInit_exnull179     pub fn EVP_EncryptInit_ex(
180         ctx: *mut EVP_CIPHER_CTX,
181         cipher: *const EVP_CIPHER,
182         impl_: *mut ENGINE,
183         key: *const c_uchar,
184         iv: *const c_uchar,
185     ) -> c_int;
EVP_EncryptUpdatenull186     pub fn EVP_EncryptUpdate(
187         ctx: *mut EVP_CIPHER_CTX,
188         out: *mut c_uchar,
189         outl: *mut c_int,
190         in_: *const u8,
191         inl: c_int,
192     ) -> c_int;
EVP_EncryptFinal_exnull193     pub fn EVP_EncryptFinal_ex(
194         ctx: *mut EVP_CIPHER_CTX,
195         out: *mut c_uchar,
196         outl: *mut c_int,
197     ) -> c_int;
EVP_OpenInitnull198     pub fn EVP_OpenInit(
199         ctx: *mut EVP_CIPHER_CTX,
200         type_: *const EVP_CIPHER,
201         ek: *const c_uchar,
202         ekl: c_int,
203         iv: *const c_uchar,
204         priv_: *mut EVP_PKEY,
205     ) -> c_int;
EVP_OpenFinalnull206     pub fn EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
EVP_DecryptInit_exnull207     pub fn EVP_DecryptInit_ex(
208         ctx: *mut EVP_CIPHER_CTX,
209         cipher: *const EVP_CIPHER,
210         impl_: *mut ENGINE,
211         key: *const c_uchar,
212         iv: *const c_uchar,
213     ) -> c_int;
EVP_DecryptUpdatenull214     pub fn EVP_DecryptUpdate(
215         ctx: *mut EVP_CIPHER_CTX,
216         out: *mut c_uchar,
217         outl: *mut c_int,
218         in_: *const u8,
219         inl: c_int,
220     ) -> c_int;
EVP_DecryptFinal_exnull221     pub fn EVP_DecryptFinal_ex(
222         ctx: *mut EVP_CIPHER_CTX,
223         outm: *mut c_uchar,
224         outl: *mut c_int,
225     ) -> c_int;
226 }
227 cfg_if! {
228     if #[cfg(ossl300)] {
229         extern "C" {
EVP_PKEY_get_sizenull230             pub fn EVP_PKEY_get_size(pkey: *const EVP_PKEY) -> c_int;
231         }
232     } else {
233         const_ptr_api! {
234             extern "C" {
EVP_PKEY_sizenull235                 pub fn EVP_PKEY_size(pkey: #[const_ptr_if(any(ossl111b, libressl280))] EVP_PKEY) -> c_int;
236             }
237         }
238     }
239 }
240 cfg_if! {
241     if #[cfg(any(ossl111, libressl370))] {
242         extern "C" {
EVP_DigestSignnull243             pub fn EVP_DigestSign(
244                 ctx: *mut EVP_MD_CTX,
245                 sigret: *mut c_uchar,
246                 siglen: *mut size_t,
247                 tbs: *const c_uchar,
248                 tbslen: size_t
249             ) -> c_int;
250 
EVP_DigestVerifynull251             pub fn EVP_DigestVerify(
252                 ctx: *mut EVP_MD_CTX,
253                 sigret: *const c_uchar,
254                 siglen: size_t,
255                 tbs: *const c_uchar,
256                 tbslen: size_t
257             ) -> c_int;
258         }
259     }
260 }
261 const_ptr_api! {
262     extern "C" {
EVP_DigestVerifyFinalnull263         pub fn EVP_DigestVerifyFinal(
264             ctx: *mut EVP_MD_CTX,
265             sigret: #[const_ptr_if(any(ossl102, libressl280))] c_uchar,
266             siglen: size_t,
267         ) -> c_int;
268     }
269 }
270 
271 extern "C" {
EVP_CIPHER_CTX_newnull272     pub fn EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX;
EVP_CIPHER_CTX_freenull273     pub fn EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX);
EVP_MD_CTX_copy_exnull274     pub fn EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int;
275     #[cfg(ossl111)]
EVP_MD_CTX_resetnull276     pub fn EVP_MD_CTX_reset(ctx: *mut EVP_MD_CTX) -> c_int;
EVP_CIPHER_CTX_set_key_lengthnull277     pub fn EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int;
EVP_CIPHER_CTX_set_paddingnull278     pub fn EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int;
EVP_CIPHER_CTX_ctrlnull279     pub fn EVP_CIPHER_CTX_ctrl(
280         ctx: *mut EVP_CIPHER_CTX,
281         type_: c_int,
282         arg: c_int,
283         ptr: *mut c_void,
284     ) -> c_int;
EVP_CIPHER_CTX_rand_keynull285     pub fn EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int;
EVP_CIPHER_CTX_set_flagsnull286     pub fn EVP_CIPHER_CTX_set_flags(ctx: *mut EVP_CIPHER_CTX, flags: c_int);
287 
EVP_md_nullnull288     pub fn EVP_md_null() -> *const EVP_MD;
EVP_md5null289     pub fn EVP_md5() -> *const EVP_MD;
EVP_sha1null290     pub fn EVP_sha1() -> *const EVP_MD;
EVP_sha224null291     pub fn EVP_sha224() -> *const EVP_MD;
EVP_sha256null292     pub fn EVP_sha256() -> *const EVP_MD;
EVP_sha384null293     pub fn EVP_sha384() -> *const EVP_MD;
EVP_sha512null294     pub fn EVP_sha512() -> *const EVP_MD;
295     #[cfg(ossl111)]
EVP_sha3_224null296     pub fn EVP_sha3_224() -> *const EVP_MD;
297     #[cfg(ossl111)]
EVP_sha3_256null298     pub fn EVP_sha3_256() -> *const EVP_MD;
299     #[cfg(ossl111)]
EVP_sha3_384null300     pub fn EVP_sha3_384() -> *const EVP_MD;
301     #[cfg(ossl111)]
EVP_sha3_512null302     pub fn EVP_sha3_512() -> *const EVP_MD;
303     #[cfg(ossl111)]
EVP_shake128null304     pub fn EVP_shake128() -> *const EVP_MD;
305     #[cfg(ossl111)]
EVP_shake256null306     pub fn EVP_shake256() -> *const EVP_MD;
EVP_ripemd160null307     pub fn EVP_ripemd160() -> *const EVP_MD;
308     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM3")))]
EVP_sm3null309     pub fn EVP_sm3() -> *const EVP_MD;
EVP_des_ecbnull310     pub fn EVP_des_ecb() -> *const EVP_CIPHER;
EVP_des_ede3null311     pub fn EVP_des_ede3() -> *const EVP_CIPHER;
EVP_des_ede3_cbcnull312     pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER;
EVP_des_ede3_cfb64null313     pub fn EVP_des_ede3_cfb64() -> *const EVP_CIPHER;
EVP_des_cbcnull314     pub fn EVP_des_cbc() -> *const EVP_CIPHER;
315     #[cfg(not(osslconf = "OPENSSL_NO_RC4"))]
EVP_rc4null316     pub fn EVP_rc4() -> *const EVP_CIPHER;
EVP_bf_ecbnull317     pub fn EVP_bf_ecb() -> *const EVP_CIPHER;
EVP_bf_cbcnull318     pub fn EVP_bf_cbc() -> *const EVP_CIPHER;
EVP_bf_cfb64null319     pub fn EVP_bf_cfb64() -> *const EVP_CIPHER;
EVP_bf_ofbnull320     pub fn EVP_bf_ofb() -> *const EVP_CIPHER;
EVP_aes_128_ecbnull321     pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
EVP_aes_128_cbcnull322     pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
EVP_aes_128_cfb1null323     pub fn EVP_aes_128_cfb1() -> *const EVP_CIPHER;
EVP_aes_128_cfb8null324     pub fn EVP_aes_128_cfb8() -> *const EVP_CIPHER;
EVP_aes_128_cfb128null325     pub fn EVP_aes_128_cfb128() -> *const EVP_CIPHER;
EVP_aes_128_ctrnull326     pub fn EVP_aes_128_ctr() -> *const EVP_CIPHER;
EVP_aes_128_ccmnull327     pub fn EVP_aes_128_ccm() -> *const EVP_CIPHER;
EVP_aes_128_gcmnull328     pub fn EVP_aes_128_gcm() -> *const EVP_CIPHER;
EVP_aes_128_xtsnull329     pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
EVP_aes_128_ofbnull330     pub fn EVP_aes_128_ofb() -> *const EVP_CIPHER;
331     #[cfg(ossl110)]
EVP_aes_128_ocbnull332     pub fn EVP_aes_128_ocb() -> *const EVP_CIPHER;
333     #[cfg(ossl102)]
EVP_aes_128_wrapnull334     pub fn EVP_aes_128_wrap() -> *const EVP_CIPHER;
335     #[cfg(ossl110)]
EVP_aes_128_wrap_padnull336     pub fn EVP_aes_128_wrap_pad() -> *const EVP_CIPHER;
EVP_aes_192_ecbnull337     pub fn EVP_aes_192_ecb() -> *const EVP_CIPHER;
EVP_aes_192_cbcnull338     pub fn EVP_aes_192_cbc() -> *const EVP_CIPHER;
EVP_aes_192_cfb1null339     pub fn EVP_aes_192_cfb1() -> *const EVP_CIPHER;
EVP_aes_192_cfb8null340     pub fn EVP_aes_192_cfb8() -> *const EVP_CIPHER;
EVP_aes_192_cfb128null341     pub fn EVP_aes_192_cfb128() -> *const EVP_CIPHER;
EVP_aes_192_ctrnull342     pub fn EVP_aes_192_ctr() -> *const EVP_CIPHER;
EVP_aes_192_ccmnull343     pub fn EVP_aes_192_ccm() -> *const EVP_CIPHER;
EVP_aes_192_gcmnull344     pub fn EVP_aes_192_gcm() -> *const EVP_CIPHER;
EVP_aes_192_ofbnull345     pub fn EVP_aes_192_ofb() -> *const EVP_CIPHER;
346     #[cfg(ossl110)]
EVP_aes_192_ocbnull347     pub fn EVP_aes_192_ocb() -> *const EVP_CIPHER;
348     #[cfg(ossl102)]
EVP_aes_192_wrapnull349     pub fn EVP_aes_192_wrap() -> *const EVP_CIPHER;
350     #[cfg(ossl110)]
EVP_aes_192_wrap_padnull351     pub fn EVP_aes_192_wrap_pad() -> *const EVP_CIPHER;
EVP_aes_256_ecbnull352     pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
EVP_aes_256_cbcnull353     pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
EVP_aes_256_cfb1null354     pub fn EVP_aes_256_cfb1() -> *const EVP_CIPHER;
EVP_aes_256_cfb8null355     pub fn EVP_aes_256_cfb8() -> *const EVP_CIPHER;
EVP_aes_256_cfb128null356     pub fn EVP_aes_256_cfb128() -> *const EVP_CIPHER;
EVP_aes_256_ctrnull357     pub fn EVP_aes_256_ctr() -> *const EVP_CIPHER;
EVP_aes_256_ccmnull358     pub fn EVP_aes_256_ccm() -> *const EVP_CIPHER;
EVP_aes_256_gcmnull359     pub fn EVP_aes_256_gcm() -> *const EVP_CIPHER;
EVP_aes_256_xtsnull360     pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
EVP_aes_256_ofbnull361     pub fn EVP_aes_256_ofb() -> *const EVP_CIPHER;
362     #[cfg(ossl110)]
EVP_aes_256_ocbnull363     pub fn EVP_aes_256_ocb() -> *const EVP_CIPHER;
364     #[cfg(ossl102)]
EVP_aes_256_wrapnull365     pub fn EVP_aes_256_wrap() -> *const EVP_CIPHER;
366     #[cfg(ossl110)]
EVP_aes_256_wrap_padnull367     pub fn EVP_aes_256_wrap_pad() -> *const EVP_CIPHER;
368     #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
EVP_chacha20null369     pub fn EVP_chacha20() -> *const EVP_CIPHER;
370     #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
EVP_chacha20_poly1305null371     pub fn EVP_chacha20_poly1305() -> *const EVP_CIPHER;
372     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_cbcnull373     pub fn EVP_seed_cbc() -> *const EVP_CIPHER;
374     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_cfb128null375     pub fn EVP_seed_cfb128() -> *const EVP_CIPHER;
376     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_ecbnull377     pub fn EVP_seed_ecb() -> *const EVP_CIPHER;
378     #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_ofbnull379     pub fn EVP_seed_ofb() -> *const EVP_CIPHER;
380 
381     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
EVP_sm4_ecbnull382     pub fn EVP_sm4_ecb() -> *const EVP_CIPHER;
383     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
EVP_sm4_cbcnull384     pub fn EVP_sm4_cbc() -> *const EVP_CIPHER;
385     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
EVP_sm4_cfb128null386     pub fn EVP_sm4_cfb128() -> *const EVP_CIPHER;
387     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
EVP_sm4_ofbnull388     pub fn EVP_sm4_ofb() -> *const EVP_CIPHER;
389     #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
EVP_sm4_ctrnull390     pub fn EVP_sm4_ctr() -> *const EVP_CIPHER;
391 
392     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
EVP_camellia_128_cfb128null393     pub fn EVP_camellia_128_cfb128() -> *const EVP_CIPHER;
394     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
EVP_camellia_128_ecbnull395     pub fn EVP_camellia_128_ecb() -> *const EVP_CIPHER;
396     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
EVP_camellia_192_cfb128null397     pub fn EVP_camellia_192_cfb128() -> *const EVP_CIPHER;
398     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
EVP_camellia_192_ecbnull399     pub fn EVP_camellia_192_ecb() -> *const EVP_CIPHER;
400     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
EVP_camellia_256_cfb128null401     pub fn EVP_camellia_256_cfb128() -> *const EVP_CIPHER;
402     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
EVP_camellia_256_ecbnull403     pub fn EVP_camellia_256_ecb() -> *const EVP_CIPHER;
404 
405     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAST")))]
EVP_cast5_cfb64null406     pub fn EVP_cast5_cfb64() -> *const EVP_CIPHER;
407     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAST")))]
EVP_cast5_ecbnull408     pub fn EVP_cast5_ecb() -> *const EVP_CIPHER;
409 
410     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_IDEA")))]
EVP_idea_cfb64null411     pub fn EVP_idea_cfb64() -> *const EVP_CIPHER;
412     #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_IDEA")))]
EVP_idea_ecbnull413     pub fn EVP_idea_ecb() -> *const EVP_CIPHER;
414 
415     #[cfg(not(ossl110))]
OPENSSL_add_all_algorithms_noconfnull416     pub fn OPENSSL_add_all_algorithms_noconf();
417 
EVP_get_digestbynamenull418     pub fn EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD;
EVP_get_cipherbynamenull419     pub fn EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER;
420 }
421 
422 cfg_if! {
423     if #[cfg(ossl300)] {
424         extern "C" {
EVP_PKEY_get_idnull425             pub fn EVP_PKEY_get_id(pkey: *const EVP_PKEY) -> c_int;
EVP_PKEY_get_bitsnull426             pub fn EVP_PKEY_get_bits(key: *const EVP_PKEY) -> c_int;
EVP_PKEY_get_security_bitsnull427             pub fn EVP_PKEY_get_security_bits(key: *const EVP_PKEY) -> c_int;
428         }
429     } else {
430         extern "C" {
EVP_PKEY_idnull431             pub fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int;
432         }
433         const_ptr_api! {
434             extern "C" {
EVP_PKEY_bitsnull435                 pub fn EVP_PKEY_bits(key: #[const_ptr_if(any(ossl110, libressl280))] EVP_PKEY) -> c_int;
436                 #[cfg(any(ossl110, libressl360))]
EVP_PKEY_security_bitsnull437                 pub fn EVP_PKEY_security_bits(pkey: #[const_ptr_if(any(ossl110, libressl280))] EVP_PKEY) -> c_int;
438             }
439         }
440     }
441 }
442 extern "C" {
EVP_PKEY_assignnull443     pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int;
444 
EVP_PKEY_set1_RSAnull445     pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
EVP_PKEY_get1_RSAnull446     pub fn EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA;
EVP_PKEY_get1_DSAnull447     pub fn EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA;
EVP_PKEY_get1_DHnull448     pub fn EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH;
EVP_PKEY_get1_EC_KEYnull449     pub fn EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY;
450 
EVP_PKEY_newnull451     pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
EVP_PKEY_freenull452     pub fn EVP_PKEY_free(k: *mut EVP_PKEY);
453     #[cfg(any(ossl110, libressl270))]
EVP_PKEY_up_refnull454     pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int;
455 
d2i_AutoPrivateKeynull456     pub fn d2i_AutoPrivateKey(
457         a: *mut *mut EVP_PKEY,
458         pp: *mut *const c_uchar,
459         length: c_long,
460     ) -> *mut EVP_PKEY;
461 
EVP_PKEY_cmpnull462     pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
463 
EVP_PKEY_copy_parametersnull464     pub fn EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int;
465 
PKCS5_PBKDF2_HMAC_SHA1null466     pub fn PKCS5_PBKDF2_HMAC_SHA1(
467         pass: *const c_char,
468         passlen: c_int,
469         salt: *const u8,
470         saltlen: c_int,
471         iter: c_int,
472         keylen: c_int,
473         out: *mut u8,
474     ) -> c_int;
PKCS5_PBKDF2_HMACnull475     pub fn PKCS5_PBKDF2_HMAC(
476         pass: *const c_char,
477         passlen: c_int,
478         salt: *const c_uchar,
479         saltlen: c_int,
480         iter: c_int,
481         digest: *const EVP_MD,
482         keylen: c_int,
483         out: *mut u8,
484     ) -> c_int;
485 
486     #[cfg(ossl110)]
EVP_PBE_scryptnull487     pub fn EVP_PBE_scrypt(
488         pass: *const c_char,
489         passlen: size_t,
490         salt: *const c_uchar,
491         saltlen: size_t,
492         N: u64,
493         r: u64,
494         p: u64,
495         maxmem: u64,
496         key: *mut c_uchar,
497         keylen: size_t,
498     ) -> c_int;
499 
EVP_PKEY_CTX_newnull500     pub fn EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
EVP_PKEY_CTX_new_idnull501     pub fn EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
EVP_PKEY_CTX_freenull502     pub fn EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX);
503 
EVP_PKEY_CTX_ctrlnull504     pub fn EVP_PKEY_CTX_ctrl(
505         ctx: *mut EVP_PKEY_CTX,
506         keytype: c_int,
507         optype: c_int,
508         cmd: c_int,
509         p1: c_int,
510         p2: *mut c_void,
511     ) -> c_int;
512 
513     #[cfg(ossl300)]
EVP_PKEY_CTX_set_signature_mdnull514     pub fn EVP_PKEY_CTX_set_signature_md(ctx: *mut EVP_PKEY_CTX, md: *const EVP_MD) -> c_int;
515 
EVP_PKEY_new_mac_keynull516     pub fn EVP_PKEY_new_mac_key(
517         type_: c_int,
518         e: *mut ENGINE,
519         key: *const c_uchar,
520         keylen: c_int,
521     ) -> *mut EVP_PKEY;
522 
EVP_PKEY_derive_initnull523     pub fn EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_derive_set_peernull524     pub fn EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int;
525     #[cfg(ossl300)]
EVP_PKEY_derive_set_peer_exnull526     pub fn EVP_PKEY_derive_set_peer_ex(
527         ctx: *mut EVP_PKEY_CTX,
528         peer: *mut EVP_PKEY,
529         validate_peer: c_int,
530     ) -> c_int;
EVP_PKEY_derivenull531     pub fn EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int;
532 
533     #[cfg(ossl300)]
EVP_PKEY_Q_keygennull534     pub fn EVP_PKEY_Q_keygen(
535         libctx: *mut OSSL_LIB_CTX,
536         propq: *const c_char,
537         type_: *const c_char,
538         ...
539     ) -> *mut EVP_PKEY;
EVP_PKEY_keygen_initnull540     pub fn EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_keygennull541     pub fn EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
542 
EVP_PKEY_sign_initnull543     pub fn EVP_PKEY_sign_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_signnull544     pub fn EVP_PKEY_sign(
545         ctx: *mut EVP_PKEY_CTX,
546         sig: *mut c_uchar,
547         siglen: *mut size_t,
548         tbs: *const c_uchar,
549         tbslen: size_t,
550     ) -> c_int;
EVP_PKEY_verify_initnull551     pub fn EVP_PKEY_verify_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_verifynull552     pub fn EVP_PKEY_verify(
553         ctx: *mut EVP_PKEY_CTX,
554         sig: *const c_uchar,
555         siglen: size_t,
556         tbs: *const c_uchar,
557         tbslen: size_t,
558     ) -> c_int;
EVP_PKEY_encrypt_initnull559     pub fn EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_encryptnull560     pub fn EVP_PKEY_encrypt(
561         ctx: *mut EVP_PKEY_CTX,
562         pout: *mut c_uchar,
563         poutlen: *mut size_t,
564         pin: *const c_uchar,
565         pinlen: size_t,
566     ) -> c_int;
EVP_PKEY_decrypt_initnull567     pub fn EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_decryptnull568     pub fn EVP_PKEY_decrypt(
569         ctx: *mut EVP_PKEY_CTX,
570         pout: *mut c_uchar,
571         poutlen: *mut size_t,
572         pin: *const c_uchar,
573         pinlen: size_t,
574     ) -> c_int;
EVP_PKEY_verify_recover_initnull575     pub fn EVP_PKEY_verify_recover_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_verify_recovernull576     pub fn EVP_PKEY_verify_recover(
577         ctx: *mut EVP_PKEY_CTX,
578         rout: *mut c_uchar,
579         routlen: *mut size_t,
580         sig: *const c_uchar,
581         siglen: size_t,
582     ) -> c_int;
583 }
584 
585 const_ptr_api! {
586     extern "C" {
EVP_PKCS82PKEYnull587         pub fn EVP_PKCS82PKEY(p8: #[const_ptr_if(any(ossl110, libressl280))] PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
588     }
589 }
590 
591 cfg_if! {
592     if #[cfg(any(ossl111, libressl370))] {
593         extern "C" {
EVP_PKEY_get_raw_public_keynull594             pub fn EVP_PKEY_get_raw_public_key(
595                 pkey: *const EVP_PKEY,
596                 ppub: *mut c_uchar,
597                 len: *mut size_t,
598             ) -> c_int;
EVP_PKEY_new_raw_public_keynull599             pub fn EVP_PKEY_new_raw_public_key(
600                 ttype: c_int,
601                 e: *mut ENGINE,
602                 key: *const c_uchar,
603                 keylen: size_t,
604             ) -> *mut EVP_PKEY;
EVP_PKEY_get_raw_private_keynull605             pub fn EVP_PKEY_get_raw_private_key(
606                 pkey: *const EVP_PKEY,
607                 ppriv: *mut c_uchar,
608                 len: *mut size_t,
609             ) -> c_int;
EVP_PKEY_new_raw_private_keynull610             pub fn EVP_PKEY_new_raw_private_key(
611                 ttype: c_int,
612                 e: *mut ENGINE,
613                 key: *const c_uchar,
614                 keylen: size_t,
615             ) -> *mut EVP_PKEY;
616         }
617     }
618 }
619 
620 extern "C" {
EVP_EncodeBlocknull621     pub fn EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
EVP_DecodeBlocknull622     pub fn EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
623 }
624