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(ossl110)] {
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
68extern "C" {
69 pub fn EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE)
70 -> c_int;
71 pub fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int;
72 pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
73 #[cfg(ossl300)]
74 pub fn EVP_Q_digest(
75 libctx: *mut OSSL_LIB_CTX,
76 name: *const c_char,
77 propq: *const c_char,
78 data: *const c_void,
79 count: size_t,
80 md: *mut c_uchar,
81 size: *mut size_t,
82 ) -> c_int;
83 pub fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int;
84 pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
85 #[cfg(ossl111)]
86 pub fn EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
87
88 #[cfg(ossl300)]
89 pub fn EVP_MD_fetch(
90 ctx: *mut OSSL_LIB_CTX,
91 algorithm: *const c_char,
92 properties: *const c_char,
93 ) -> *mut EVP_MD;
94
95 #[cfg(ossl300)]
96 pub fn EVP_MD_free(md: *mut EVP_MD);
97
98 pub fn EVP_BytesToKey(
99 typ: *const EVP_CIPHER,
100 md: *const EVP_MD,
101 salt: *const u8,
102 data: *const u8,
103 datalen: c_int,
104 count: c_int,
105 key: *mut u8,
106 iv: *mut u8,
107 ) -> c_int;
108
109 pub fn EVP_CipherInit(
110 ctx: *mut EVP_CIPHER_CTX,
111 evp: *const EVP_CIPHER,
112 key: *const u8,
113 iv: *const u8,
114 mode: c_int,
115 ) -> c_int;
116 pub fn EVP_CipherInit_ex(
117 ctx: *mut EVP_CIPHER_CTX,
118 type_: *const EVP_CIPHER,
119 impl_: *mut ENGINE,
120 key: *const c_uchar,
121 iv: *const c_uchar,
122 enc: c_int,
123 ) -> c_int;
124 pub fn EVP_CipherUpdate(
125 ctx: *mut EVP_CIPHER_CTX,
126 outbuf: *mut u8,
127 outlen: *mut c_int,
128 inbuf: *const u8,
129 inlen: c_int,
130 ) -> c_int;
131 pub fn EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int;
132
133 pub fn EVP_DigestSignInit(
134 ctx: *mut EVP_MD_CTX,
135 pctx: *mut *mut EVP_PKEY_CTX,
136 type_: *const EVP_MD,
137 e: *mut ENGINE,
138 pkey: *mut EVP_PKEY,
139 ) -> c_int;
140
141 #[cfg(ossl300)]
142 pub fn EVP_DigestSignUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, dsize: size_t) -> c_int;
143 pub fn EVP_DigestSignFinal(
144 ctx: *mut EVP_MD_CTX,
145 sig: *mut c_uchar,
146 siglen: *mut size_t,
147 ) -> c_int;
148 pub fn EVP_DigestVerifyInit(
149 ctx: *mut EVP_MD_CTX,
150 pctx: *mut *mut EVP_PKEY_CTX,
151 type_: *const EVP_MD,
152 e: *mut ENGINE,
153 pkey: *mut EVP_PKEY,
154 ) -> c_int;
155 #[cfg(ossl300)]
156 pub fn EVP_DigestVerifyUpdate(
157 ctx: *mut EVP_MD_CTX,
158 data: *const c_void,
159 dsize: size_t,
160 ) -> c_int;
161 pub fn EVP_SealInit(
162 ctx: *mut EVP_CIPHER_CTX,
163 type_: *const EVP_CIPHER,
164 ek: *mut *mut c_uchar,
165 ekl: *mut c_int,
166 iv: *mut c_uchar,
167 pubk: *mut *mut EVP_PKEY,
168 npubk: c_int,
169 ) -> c_int;
170 pub fn EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
171 pub fn EVP_EncryptInit_ex(
172 ctx: *mut EVP_CIPHER_CTX,
173 cipher: *const EVP_CIPHER,
174 impl_: *mut ENGINE,
175 key: *const c_uchar,
176 iv: *const c_uchar,
177 ) -> c_int;
178 pub fn EVP_EncryptUpdate(
179 ctx: *mut EVP_CIPHER_CTX,
180 out: *mut c_uchar,
181 outl: *mut c_int,
182 in_: *const u8,
183 inl: c_int,
184 ) -> c_int;
185 pub fn EVP_EncryptFinal_ex(
186 ctx: *mut EVP_CIPHER_CTX,
187 out: *mut c_uchar,
188 outl: *mut c_int,
189 ) -> c_int;
190 pub fn EVP_OpenInit(
191 ctx: *mut EVP_CIPHER_CTX,
192 type_: *const EVP_CIPHER,
193 ek: *const c_uchar,
194 ekl: c_int,
195 iv: *const c_uchar,
196 priv_: *mut EVP_PKEY,
197 ) -> c_int;
198 pub fn EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
199 pub fn EVP_DecryptInit_ex(
200 ctx: *mut EVP_CIPHER_CTX,
201 cipher: *const EVP_CIPHER,
202 impl_: *mut ENGINE,
203 key: *const c_uchar,
204 iv: *const c_uchar,
205 ) -> c_int;
206 pub fn EVP_DecryptUpdate(
207 ctx: *mut EVP_CIPHER_CTX,
208 out: *mut c_uchar,
209 outl: *mut c_int,
210 in_: *const u8,
211 inl: c_int,
212 ) -> c_int;
213 pub fn EVP_DecryptFinal_ex(
214 ctx: *mut EVP_CIPHER_CTX,
215 outm: *mut c_uchar,
216 outl: *mut c_int,
217 ) -> c_int;
218}
219cfg_if! {
220 if #[cfg(ossl300)] {
221 extern "C" {
222 pub fn EVP_PKEY_get_size(pkey: *const EVP_PKEY) -> c_int;
223 }
224 } else {
225 const_ptr_api! {
226 extern "C" {
227 pub fn EVP_PKEY_size(pkey: #[const_ptr_if(any(ossl111b, libressl280))] EVP_PKEY) -> c_int;
228 }
229 }
230 }
231}
232cfg_if! {
233 if #[cfg(any(ossl111, libressl370))] {
234 extern "C" {
235 pub fn EVP_DigestSign(
236 ctx: *mut EVP_MD_CTX,
237 sigret: *mut c_uchar,
238 siglen: *mut size_t,
239 tbs: *const c_uchar,
240 tbslen: size_t
241 ) -> c_int;
242
243 pub fn EVP_DigestVerify(
244 ctx: *mut EVP_MD_CTX,
245 sigret: *const c_uchar,
246 siglen: size_t,
247 tbs: *const c_uchar,
248 tbslen: size_t
249 ) -> c_int;
250 }
251 }
252}
253const_ptr_api! {
254 extern "C" {
255 pub fn EVP_DigestVerifyFinal(
256 ctx: *mut EVP_MD_CTX,
257 sigret: #[const_ptr_if(any(ossl102, libressl280))] c_uchar,
258 siglen: size_t,
259 ) -> c_int;
260 }
261}
262
263extern "C" {
264 pub fn EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX;
265 pub fn EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX);
266 pub fn EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int;
267 #[cfg(ossl111)]
268 pub fn EVP_MD_CTX_reset(ctx: *mut EVP_MD_CTX) -> c_int;
269 pub fn EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int;
270 pub fn EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int;
271 pub fn EVP_CIPHER_CTX_ctrl(
272 ctx: *mut EVP_CIPHER_CTX,
273 type_: c_int,
274 arg: c_int,
275 ptr: *mut c_void,
276 ) -> c_int;
277 pub fn EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int;
278
279 pub fn EVP_md_null() -> *const EVP_MD;
280 pub fn EVP_md5() -> *const EVP_MD;
281 pub fn EVP_sha1() -> *const EVP_MD;
282 pub fn EVP_sha224() -> *const EVP_MD;
283 pub fn EVP_sha256() -> *const EVP_MD;
284 pub fn EVP_sha384() -> *const EVP_MD;
285 pub fn EVP_sha512() -> *const EVP_MD;
286 #[cfg(ossl111)]
287 pub fn EVP_sha3_224() -> *const EVP_MD;
288 #[cfg(ossl111)]
289 pub fn EVP_sha3_256() -> *const EVP_MD;
290 #[cfg(ossl111)]
291 pub fn EVP_sha3_384() -> *const EVP_MD;
292 #[cfg(ossl111)]
293 pub fn EVP_sha3_512() -> *const EVP_MD;
294 #[cfg(ossl111)]
295 pub fn EVP_shake128() -> *const EVP_MD;
296 #[cfg(ossl111)]
297 pub fn EVP_shake256() -> *const EVP_MD;
298 pub fn EVP_ripemd160() -> *const EVP_MD;
299 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM3")))]
300 pub fn EVP_sm3() -> *const EVP_MD;
301 pub fn EVP_des_ecb() -> *const EVP_CIPHER;
302 pub fn EVP_des_ede3() -> *const EVP_CIPHER;
303 pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER;
304 pub fn EVP_des_ede3_cfb64() -> *const EVP_CIPHER;
305 pub fn EVP_des_cbc() -> *const EVP_CIPHER;
306 pub fn EVP_rc4() -> *const EVP_CIPHER;
307 pub fn EVP_bf_ecb() -> *const EVP_CIPHER;
308 pub fn EVP_bf_cbc() -> *const EVP_CIPHER;
309 pub fn EVP_bf_cfb64() -> *const EVP_CIPHER;
310 pub fn EVP_bf_ofb() -> *const EVP_CIPHER;
311 pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
312 pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
313 pub fn EVP_aes_128_cfb1() -> *const EVP_CIPHER;
314 pub fn EVP_aes_128_cfb8() -> *const EVP_CIPHER;
315 pub fn EVP_aes_128_cfb128() -> *const EVP_CIPHER;
316 pub fn EVP_aes_128_ctr() -> *const EVP_CIPHER;
317 pub fn EVP_aes_128_ccm() -> *const EVP_CIPHER;
318 pub fn EVP_aes_128_gcm() -> *const EVP_CIPHER;
319 pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
320 pub fn EVP_aes_128_ofb() -> *const EVP_CIPHER;
321 #[cfg(ossl110)]
322 pub fn EVP_aes_128_ocb() -> *const EVP_CIPHER;
323 pub fn EVP_aes_192_ecb() -> *const EVP_CIPHER;
324 pub fn EVP_aes_192_cbc() -> *const EVP_CIPHER;
325 pub fn EVP_aes_192_cfb1() -> *const EVP_CIPHER;
326 pub fn EVP_aes_192_cfb8() -> *const EVP_CIPHER;
327 pub fn EVP_aes_192_cfb128() -> *const EVP_CIPHER;
328 pub fn EVP_aes_192_ctr() -> *const EVP_CIPHER;
329 pub fn EVP_aes_192_ccm() -> *const EVP_CIPHER;
330 pub fn EVP_aes_192_gcm() -> *const EVP_CIPHER;
331 pub fn EVP_aes_192_ofb() -> *const EVP_CIPHER;
332 #[cfg(ossl110)]
333 pub fn EVP_aes_192_ocb() -> *const EVP_CIPHER;
334 pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
335 pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
336 pub fn EVP_aes_256_cfb1() -> *const EVP_CIPHER;
337 pub fn EVP_aes_256_cfb8() -> *const EVP_CIPHER;
338 pub fn EVP_aes_256_cfb128() -> *const EVP_CIPHER;
339 pub fn EVP_aes_256_ctr() -> *const EVP_CIPHER;
340 pub fn EVP_aes_256_ccm() -> *const EVP_CIPHER;
341 pub fn EVP_aes_256_gcm() -> *const EVP_CIPHER;
342 pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
343 pub fn EVP_aes_256_ofb() -> *const EVP_CIPHER;
344 #[cfg(ossl110)]
345 pub fn EVP_aes_256_ocb() -> *const EVP_CIPHER;
346 #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
347 pub fn EVP_chacha20() -> *const EVP_CIPHER;
348 #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
349 pub fn EVP_chacha20_poly1305() -> *const EVP_CIPHER;
350 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
351 pub fn EVP_seed_cbc() -> *const EVP_CIPHER;
352 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
353 pub fn EVP_seed_cfb128() -> *const EVP_CIPHER;
354 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
355 pub fn EVP_seed_ecb() -> *const EVP_CIPHER;
356 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
357 pub fn EVP_seed_ofb() -> *const EVP_CIPHER;
358
359 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
360 pub fn EVP_sm4_ecb() -> *const EVP_CIPHER;
361 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
362 pub fn EVP_sm4_cbc() -> *const EVP_CIPHER;
363 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
364 pub fn EVP_sm4_cfb128() -> *const EVP_CIPHER;
365 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
366 pub fn EVP_sm4_ofb() -> *const EVP_CIPHER;
367 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM4")))]
368 pub fn EVP_sm4_ctr() -> *const EVP_CIPHER;
369
370 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
371 pub fn EVP_camellia_128_cfb128() -> *const EVP_CIPHER;
372 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
373 pub fn EVP_camellia_128_ecb() -> *const EVP_CIPHER;
374 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
375 pub fn EVP_camellia_192_cfb128() -> *const EVP_CIPHER;
376 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
377 pub fn EVP_camellia_192_ecb() -> *const EVP_CIPHER;
378 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
379 pub fn EVP_camellia_256_cfb128() -> *const EVP_CIPHER;
380 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAMELLIA")))]
381 pub fn EVP_camellia_256_ecb() -> *const EVP_CIPHER;
382
383 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAST")))]
384 pub fn EVP_cast5_cfb64() -> *const EVP_CIPHER;
385 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_CAST")))]
386 pub fn EVP_cast5_ecb() -> *const EVP_CIPHER;
387
388 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_IDEA")))]
389 pub fn EVP_idea_cfb64() -> *const EVP_CIPHER;
390 #[cfg(not(any(boringssl, osslconf = "OPENSSL_NO_IDEA")))]
391 pub fn EVP_idea_ecb() -> *const EVP_CIPHER;
392
393 #[cfg(not(ossl110))]
394 pub fn OPENSSL_add_all_algorithms_noconf();
395
396 pub fn EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD;
397 pub fn EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER;
398}
399
400cfg_if! {
401 if #[cfg(ossl300)] {
402 extern "C" {
403 pub fn EVP_PKEY_get_id(pkey: *const EVP_PKEY) -> c_int;
404 pub fn EVP_PKEY_get_bits(key: *const EVP_PKEY) -> c_int;
405 pub fn EVP_PKEY_get_security_bits(key: *const EVP_PKEY) -> c_int;
406 }
407
408 #[inline]
409 pub unsafe fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int {
410 EVP_PKEY_get_id(pkey)
411 }
412
413 #[inline]
414 pub unsafe fn EVP_PKEY_bits(pkey: *const EVP_PKEY) -> c_int {
415 EVP_PKEY_get_bits(pkey)
416 }
417
418 #[inline]
419 pub unsafe fn EVP_PKEY_security_bits(pkey: *const EVP_PKEY) -> c_int {
420 EVP_PKEY_get_security_bits(pkey)
421 }
422
423 } else {
424 extern "C" {
425 pub fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int;
426 }
427 const_ptr_api! {
428 extern "C" {
429 pub fn EVP_PKEY_bits(key: #[const_ptr_if(any(ossl110, libressl280))] EVP_PKEY) -> c_int;
430 #[cfg(any(ossl110, libressl360))]
431 pub fn EVP_PKEY_security_bits(pkey: #[const_ptr_if(any(ossl110, libressl280))] EVP_PKEY) -> c_int;
432 }
433 }
434 }
435}
436extern "C" {
437 pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int;
438
439 pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
440 pub fn EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA;
441 pub fn EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA;
442 pub fn EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH;
443 pub fn EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY;
444
445 pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
446 pub fn EVP_PKEY_free(k: *mut EVP_PKEY);
447 #[cfg(any(ossl110, libressl270))]
448 pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int;
449
450 pub fn d2i_AutoPrivateKey(
451 a: *mut *mut EVP_PKEY,
452 pp: *mut *const c_uchar,
453 length: c_long,
454 ) -> *mut EVP_PKEY;
455
456 pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
457
458 pub fn EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int;
459
460 pub fn PKCS5_PBKDF2_HMAC_SHA1(
461 pass: *const c_char,
462 passlen: c_int,
463 salt: *const u8,
464 saltlen: c_int,
465 iter: c_int,
466 keylen: c_int,
467 out: *mut u8,
468 ) -> c_int;
469 pub fn PKCS5_PBKDF2_HMAC(
470 pass: *const c_char,
471 passlen: c_int,
472 salt: *const c_uchar,
473 saltlen: c_int,
474 iter: c_int,
475 digest: *const EVP_MD,
476 keylen: c_int,
477 out: *mut u8,
478 ) -> c_int;
479
480 #[cfg(ossl110)]
481 pub fn EVP_PBE_scrypt(
482 pass: *const c_char,
483 passlen: size_t,
484 salt: *const c_uchar,
485 saltlen: size_t,
486 N: u64,
487 r: u64,
488 p: u64,
489 maxmem: u64,
490 key: *mut c_uchar,
491 keylen: size_t,
492 ) -> c_int;
493
494 pub fn EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
495 pub fn EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
496 pub fn EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX);
497
498 pub fn EVP_PKEY_CTX_ctrl(
499 ctx: *mut EVP_PKEY_CTX,
500 keytype: c_int,
501 optype: c_int,
502 cmd: c_int,
503 p1: c_int,
504 p2: *mut c_void,
505 ) -> c_int;
506
507 pub fn EVP_PKEY_new_mac_key(
508 type_: c_int,
509 e: *mut ENGINE,
510 key: *const c_uchar,
511 keylen: c_int,
512 ) -> *mut EVP_PKEY;
513
514 pub fn EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
515 pub fn EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int;
516 pub fn EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int;
517
518 #[cfg(ossl300)]
519 pub fn EVP_PKEY_Q_keygen(
520 libctx: *mut OSSL_LIB_CTX,
521 propq: *const c_char,
522 type_: *const c_char,
523 ...
524 ) -> *mut EVP_PKEY;
525 pub fn EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
526 pub fn EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
527
528 pub fn EVP_PKEY_sign_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
529 pub fn EVP_PKEY_sign(
530 ctx: *mut EVP_PKEY_CTX,
531 sig: *mut c_uchar,
532 siglen: *mut size_t,
533 tbs: *const c_uchar,
534 tbslen: size_t,
535 ) -> c_int;
536 pub fn EVP_PKEY_verify_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
537 pub fn EVP_PKEY_verify(
538 ctx: *mut EVP_PKEY_CTX,
539 sig: *const c_uchar,
540 siglen: size_t,
541 tbs: *const c_uchar,
542 tbslen: size_t,
543 ) -> c_int;
544 pub fn EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
545 pub fn EVP_PKEY_encrypt(
546 ctx: *mut EVP_PKEY_CTX,
547 pout: *mut c_uchar,
548 poutlen: *mut size_t,
549 pin: *const c_uchar,
550 pinlen: size_t,
551 ) -> c_int;
552 pub fn EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
553 pub fn EVP_PKEY_decrypt(
554 ctx: *mut EVP_PKEY_CTX,
555 pout: *mut c_uchar,
556 poutlen: *mut size_t,
557 pin: *const c_uchar,
558 pinlen: size_t,
559 ) -> c_int;
560}
561
562const_ptr_api! {
563 extern "C" {
564 pub fn EVP_PKCS82PKEY(p8: #[const_ptr_if(any(ossl110, libressl280))] PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
565 }
566}
567
568cfg_if! {
569 if #[cfg(any(ossl111, libressl370))] {
570 extern "C" {
571 pub fn EVP_PKEY_get_raw_public_key(
572 pkey: *const EVP_PKEY,
573 ppub: *mut c_uchar,
574 len: *mut size_t,
575 ) -> c_int;
576 pub fn EVP_PKEY_new_raw_public_key(
577 ttype: c_int,
578 e: *mut ENGINE,
579 key: *const c_uchar,
580 keylen: size_t,
581 ) -> *mut EVP_PKEY;
582 pub fn EVP_PKEY_get_raw_private_key(
583 pkey: *const EVP_PKEY,
584 ppriv: *mut c_uchar,
585 len: *mut size_t,
586 ) -> c_int;
587 pub fn EVP_PKEY_new_raw_private_key(
588 ttype: c_int,
589 e: *mut ENGINE,
590 key: *const c_uchar,
591 keylen: size_t,
592 ) -> *mut EVP_PKEY;
593 }
594 }
595}
596
597extern "C" {
598 pub fn EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
599 pub fn EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
600}