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}