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