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