1 use libc::*;
2 use *;
3
4 pub const EVP_MAX_MD_SIZE: c_uint = 64;
5
6 pub const PKCS5_SALT_LEN: c_int = 8;
7 pub const PKCS12_DEFAULT_ITER: c_int = 2048;
8
9 pub const EVP_PKEY_RSA: c_int = NID_rsaEncryption;
10 pub const EVP_PKEY_DSA: c_int = NID_dsa;
11 pub const EVP_PKEY_DH: c_int = NID_dhKeyAgreement;
12 pub const EVP_PKEY_EC: c_int = NID_X9_62_id_ecPublicKey;
13 #[cfg(ossl111)]
14 pub const EVP_PKEY_X25519: c_int = NID_X25519;
15 #[cfg(ossl111)]
16 pub const EVP_PKEY_ED25519: c_int = NID_ED25519;
17 #[cfg(ossl111)]
18 pub const EVP_PKEY_X448: c_int = NID_X448;
19 #[cfg(ossl111)]
20 pub const EVP_PKEY_ED448: c_int = NID_ED448;
21 pub const EVP_PKEY_HMAC: c_int = NID_hmac;
22 pub const EVP_PKEY_CMAC: c_int = NID_cmac;
23
24 pub const EVP_CTRL_GCM_SET_IVLEN: c_int = 0x9;
25 pub const EVP_CTRL_GCM_GET_TAG: c_int = 0x10;
26 pub const EVP_CTRL_GCM_SET_TAG: c_int = 0x11;
27
EVP_get_digestbynid(type_: c_int) -> *const EVP_MD28 pub unsafe fn EVP_get_digestbynid(type_: c_int) -> *const EVP_MD {
29 EVP_get_digestbyname(OBJ_nid2sn(type_))
30 }
31
32 cfg_if! {
33 if #[cfg(ossl300)] {
34 extern "C" {
35 pub fn EVP_MD_get_size(md: *const EVP_MD) -> c_int;
36 pub fn EVP_MD_get_type(md: *const EVP_MD) -> c_int;
37
38 pub fn EVP_CIPHER_get_key_length(cipher: *const EVP_CIPHER) -> c_int;
39 pub fn EVP_CIPHER_get_block_size(cipher: *const EVP_CIPHER) -> c_int;
40 pub fn EVP_CIPHER_get_iv_length(cipher: *const EVP_CIPHER) -> c_int;
41 pub fn EVP_CIPHER_get_nid(cipher: *const EVP_CIPHER) -> c_int;
42 pub fn EVP_CIPHER_fetch(
43 ctx: *mut OSSL_LIB_CTX,
44 algorithm: *const c_char,
45 properties: *const c_char,
46 ) -> *mut EVP_CIPHER;
47 pub fn EVP_CIPHER_free(cipher: *mut EVP_CIPHER);
48
49 pub fn EVP_CIPHER_CTX_get0_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
50 pub fn EVP_CIPHER_CTX_get_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
51 pub fn EVP_CIPHER_CTX_get_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
52 pub fn EVP_CIPHER_CTX_get_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
53 pub fn EVP_CIPHER_CTX_get_tag_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
54 }
55
56 #[inline]
57 pub unsafe fn EVP_MD_size(md: *const EVP_MD) -> c_int {
58 EVP_MD_get_size(md)
59 }
60
61 #[inline]
62 pub unsafe fn EVP_MD_type(md: *const EVP_MD) -> c_int {
63 EVP_MD_get_type(md)
64 }
65
66 #[inline]
67 pub unsafe fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int {
68 EVP_CIPHER_get_key_length(cipher)
69 }
70
71 #[inline]
72 pub unsafe fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int {
73 EVP_CIPHER_get_block_size(cipher)
74 }
75
76 #[inline]
77 pub unsafe fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int {
78 EVP_CIPHER_get_iv_length(cipher)
79 }
80
81 #[inline]
82 pub unsafe fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int {
83 EVP_CIPHER_get_nid(cipher)
84 }
85
86 #[inline]
87 pub unsafe fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int {
88 EVP_CIPHER_CTX_get_block_size(ctx)
89 }
90
91 #[inline]
92 pub unsafe fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int {
93 EVP_CIPHER_CTX_get_key_length(ctx)
94 }
95
96 #[inline]
97 pub unsafe fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int {
98 EVP_CIPHER_CTX_get_iv_length(ctx)
99 }
100 } else {
101 extern "C" {
102 pub fn EVP_MD_size(md: *const EVP_MD) -> c_int;
103 pub fn EVP_MD_type(md: *const EVP_MD) -> c_int;
104
105 pub fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int;
106 pub fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int;
107 pub fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int;
108 pub fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int;
109
110 pub fn EVP_CIPHER_CTX_cipher(ctx: *const EVP_CIPHER_CTX) -> *const EVP_CIPHER;
111 pub fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int;
112 pub fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
113 pub fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int;
114 }
115 }
116 }
117
118 cfg_if! {
119 if #[cfg(ossl110)] {
120 extern "C" {
121 pub fn EVP_MD_CTX_new() -> *mut EVP_MD_CTX;
122 pub fn EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX);
123 }
124 } else {
125 extern "C" {
126 pub fn EVP_MD_CTX_create() -> *mut EVP_MD_CTX;
127 pub fn EVP_MD_CTX_destroy(ctx: *mut EVP_MD_CTX);
128 }
129 }
130 }
131
132 extern "C" {
EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE) -> c_int133 pub fn EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE)
134 -> c_int;
EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int135 pub fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int;
EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int136 pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
137 #[cfg(ossl300)]
EVP_Q_digest( libctx: *mut OSSL_LIB_CTX, name: *const c_char, propq: *const c_char, data: *const c_void, count: size_t, md: *mut c_uchar, size: *mut size_t, ) -> c_int138 pub fn EVP_Q_digest(
139 libctx: *mut OSSL_LIB_CTX,
140 name: *const c_char,
141 propq: *const c_char,
142 data: *const c_void,
143 count: size_t,
144 md: *mut c_uchar,
145 size: *mut size_t,
146 ) -> c_int;
EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int147 pub fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int;
EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int148 pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
149 #[cfg(ossl111)]
EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int150 pub fn EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
151
152 #[cfg(ossl300)]
EVP_MD_fetch( ctx: *mut OSSL_LIB_CTX, algorithm: *const c_char, properties: *const c_char, ) -> *mut EVP_MD153 pub fn EVP_MD_fetch(
154 ctx: *mut OSSL_LIB_CTX,
155 algorithm: *const c_char,
156 properties: *const c_char,
157 ) -> *mut EVP_MD;
158
159 #[cfg(ossl300)]
EVP_MD_free(md: *mut EVP_MD)160 pub fn EVP_MD_free(md: *mut EVP_MD);
161
EVP_BytesToKey( typ: *const EVP_CIPHER, md: *const EVP_MD, salt: *const u8, data: *const u8, datalen: c_int, count: c_int, key: *mut u8, iv: *mut u8, ) -> c_int162 pub fn EVP_BytesToKey(
163 typ: *const EVP_CIPHER,
164 md: *const EVP_MD,
165 salt: *const u8,
166 data: *const u8,
167 datalen: c_int,
168 count: c_int,
169 key: *mut u8,
170 iv: *mut u8,
171 ) -> c_int;
172
EVP_CipherInit( ctx: *mut EVP_CIPHER_CTX, evp: *const EVP_CIPHER, key: *const u8, iv: *const u8, mode: c_int, ) -> c_int173 pub fn EVP_CipherInit(
174 ctx: *mut EVP_CIPHER_CTX,
175 evp: *const EVP_CIPHER,
176 key: *const u8,
177 iv: *const u8,
178 mode: c_int,
179 ) -> c_int;
EVP_CipherInit_ex( ctx: *mut EVP_CIPHER_CTX, type_: *const EVP_CIPHER, impl_: *mut ENGINE, key: *const c_uchar, iv: *const c_uchar, enc: c_int, ) -> c_int180 pub fn EVP_CipherInit_ex(
181 ctx: *mut EVP_CIPHER_CTX,
182 type_: *const EVP_CIPHER,
183 impl_: *mut ENGINE,
184 key: *const c_uchar,
185 iv: *const c_uchar,
186 enc: c_int,
187 ) -> c_int;
EVP_CipherUpdate( ctx: *mut EVP_CIPHER_CTX, outbuf: *mut u8, outlen: *mut c_int, inbuf: *const u8, inlen: c_int, ) -> c_int188 pub fn EVP_CipherUpdate(
189 ctx: *mut EVP_CIPHER_CTX,
190 outbuf: *mut u8,
191 outlen: *mut c_int,
192 inbuf: *const u8,
193 inlen: c_int,
194 ) -> c_int;
EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int195 pub fn EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int;
196
EVP_DigestSignInit( ctx: *mut EVP_MD_CTX, pctx: *mut *mut EVP_PKEY_CTX, type_: *const EVP_MD, e: *mut ENGINE, pkey: *mut EVP_PKEY, ) -> c_int197 pub fn EVP_DigestSignInit(
198 ctx: *mut EVP_MD_CTX,
199 pctx: *mut *mut EVP_PKEY_CTX,
200 type_: *const EVP_MD,
201 e: *mut ENGINE,
202 pkey: *mut EVP_PKEY,
203 ) -> c_int;
204 }
205 cfg_if! {
206 if #[cfg(ossl300)] {
207 extern "C" {
208 pub fn EVP_DigestSignUpdate(
209 ctx: *mut EVP_MD_CTX,
210 data: *const c_void,
211 dsize: size_t,
212 ) -> c_int;
213 }
214 } else {
215 #[inline]
216 pub unsafe fn EVP_DigestSignUpdate(
217 ctx: *mut EVP_MD_CTX,
218 data: *const c_void,
219 dsize: size_t,
220 ) -> c_int {
221 EVP_DigestUpdate(ctx, data, dsize)
222 }
223 }
224 }
225 extern "C" {
EVP_DigestSignFinal( ctx: *mut EVP_MD_CTX, sig: *mut c_uchar, siglen: *mut size_t, ) -> c_int226 pub fn EVP_DigestSignFinal(
227 ctx: *mut EVP_MD_CTX,
228 sig: *mut c_uchar,
229 siglen: *mut size_t,
230 ) -> c_int;
EVP_DigestVerifyInit( ctx: *mut EVP_MD_CTX, pctx: *mut *mut EVP_PKEY_CTX, type_: *const EVP_MD, e: *mut ENGINE, pkey: *mut EVP_PKEY, ) -> c_int231 pub fn EVP_DigestVerifyInit(
232 ctx: *mut EVP_MD_CTX,
233 pctx: *mut *mut EVP_PKEY_CTX,
234 type_: *const EVP_MD,
235 e: *mut ENGINE,
236 pkey: *mut EVP_PKEY,
237 ) -> c_int;
238 }
239 cfg_if! {
240 if #[cfg(ossl300)] {
241 extern "C" {
242 pub fn EVP_DigestVerifyUpdate(
243 ctx: *mut EVP_MD_CTX,
244 data: *const c_void,
245 dsize: size_t,
246 ) -> c_int;
247 }
248 } else {
249 #[inline]
250 pub unsafe fn EVP_DigestVerifyUpdate(
251 ctx: *mut EVP_MD_CTX,
252 data: *const c_void,
253 dsize: size_t,
254 ) -> c_int {
255 EVP_DigestUpdate(ctx, data, dsize)
256 }
257 }
258 }
259 extern "C" {
EVP_SealInit( ctx: *mut EVP_CIPHER_CTX, type_: *const EVP_CIPHER, ek: *mut *mut c_uchar, ekl: *mut c_int, iv: *mut c_uchar, pubk: *mut *mut EVP_PKEY, npubk: c_int, ) -> c_int260 pub fn EVP_SealInit(
261 ctx: *mut EVP_CIPHER_CTX,
262 type_: *const EVP_CIPHER,
263 ek: *mut *mut c_uchar,
264 ekl: *mut c_int,
265 iv: *mut c_uchar,
266 pubk: *mut *mut EVP_PKEY,
267 npubk: c_int,
268 ) -> c_int;
EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int269 pub fn EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
EVP_EncryptInit_ex( ctx: *mut EVP_CIPHER_CTX, cipher: *const EVP_CIPHER, impl_: *mut ENGINE, key: *const c_uchar, iv: *const c_uchar, ) -> c_int270 pub fn EVP_EncryptInit_ex(
271 ctx: *mut EVP_CIPHER_CTX,
272 cipher: *const EVP_CIPHER,
273 impl_: *mut ENGINE,
274 key: *const c_uchar,
275 iv: *const c_uchar,
276 ) -> c_int;
EVP_EncryptUpdate( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, in_: *const u8, inl: c_int, ) -> c_int277 pub fn EVP_EncryptUpdate(
278 ctx: *mut EVP_CIPHER_CTX,
279 out: *mut c_uchar,
280 outl: *mut c_int,
281 in_: *const u8,
282 inl: c_int,
283 ) -> c_int;
EVP_EncryptFinal_ex( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, ) -> c_int284 pub fn EVP_EncryptFinal_ex(
285 ctx: *mut EVP_CIPHER_CTX,
286 out: *mut c_uchar,
287 outl: *mut c_int,
288 ) -> c_int;
EVP_OpenInit( ctx: *mut EVP_CIPHER_CTX, type_: *const EVP_CIPHER, ek: *const c_uchar, ekl: c_int, iv: *const c_uchar, priv_: *mut EVP_PKEY, ) -> c_int289 pub fn EVP_OpenInit(
290 ctx: *mut EVP_CIPHER_CTX,
291 type_: *const EVP_CIPHER,
292 ek: *const c_uchar,
293 ekl: c_int,
294 iv: *const c_uchar,
295 priv_: *mut EVP_PKEY,
296 ) -> c_int;
EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int297 pub fn EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int;
EVP_DecryptInit_ex( ctx: *mut EVP_CIPHER_CTX, cipher: *const EVP_CIPHER, impl_: *mut ENGINE, key: *const c_uchar, iv: *const c_uchar, ) -> c_int298 pub fn EVP_DecryptInit_ex(
299 ctx: *mut EVP_CIPHER_CTX,
300 cipher: *const EVP_CIPHER,
301 impl_: *mut ENGINE,
302 key: *const c_uchar,
303 iv: *const c_uchar,
304 ) -> c_int;
EVP_DecryptUpdate( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, in_: *const u8, inl: c_int, ) -> c_int305 pub fn EVP_DecryptUpdate(
306 ctx: *mut EVP_CIPHER_CTX,
307 out: *mut c_uchar,
308 outl: *mut c_int,
309 in_: *const u8,
310 inl: c_int,
311 ) -> c_int;
EVP_DecryptFinal_ex( ctx: *mut EVP_CIPHER_CTX, outm: *mut c_uchar, outl: *mut c_int, ) -> c_int312 pub fn EVP_DecryptFinal_ex(
313 ctx: *mut EVP_CIPHER_CTX,
314 outm: *mut c_uchar,
315 outl: *mut c_int,
316 ) -> c_int;
317 }
318 cfg_if! {
319 if #[cfg(ossl300)] {
320 extern "C" {
321 pub fn EVP_PKEY_get_size(pkey: *const EVP_PKEY) -> c_int;
322 }
323
324 #[inline]
325 pub unsafe fn EVP_PKEY_size(pkey: *const EVP_PKEY) -> c_int {
326 EVP_PKEY_get_size(pkey)
327 }
328 } else {
329 const_ptr_api! {
330 extern "C" {
331 pub fn EVP_PKEY_size(pkey: #[const_ptr_if(any(ossl111b, libressl280))] EVP_PKEY) -> c_int;
332 }
333 }
334 }
335 }
336 cfg_if! {
337 if #[cfg(ossl111)] {
338 extern "C" {
339 pub fn EVP_DigestSign(
340 ctx: *mut EVP_MD_CTX,
341 sigret: *mut c_uchar,
342 siglen: *mut size_t,
343 tbs: *const c_uchar,
344 tbslen: size_t
345 ) -> c_int;
346
347 pub fn EVP_DigestVerify(
348 ctx: *mut EVP_MD_CTX,
349 sigret: *const c_uchar,
350 siglen: size_t,
351 tbs: *const c_uchar,
352 tbslen: size_t
353 ) -> c_int;
354 }
355 }
356 }
357 const_ptr_api! {
358 extern "C" {
359 pub fn EVP_DigestVerifyFinal(
360 ctx: *mut EVP_MD_CTX,
361 sigret: #[const_ptr_if(any(ossl102, libressl280))] c_uchar,
362 siglen: size_t,
363 ) -> c_int;
364 }
365 }
366
367 extern "C" {
EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX368 pub fn EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX;
EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX)369 pub fn EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX);
EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int370 pub fn EVP_MD_CTX_copy_ex(dst: *mut EVP_MD_CTX, src: *const EVP_MD_CTX) -> c_int;
EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int371 pub fn EVP_CIPHER_CTX_set_key_length(ctx: *mut EVP_CIPHER_CTX, keylen: c_int) -> c_int;
EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int372 pub fn EVP_CIPHER_CTX_set_padding(ctx: *mut EVP_CIPHER_CTX, padding: c_int) -> c_int;
EVP_CIPHER_CTX_ctrl( ctx: *mut EVP_CIPHER_CTX, type_: c_int, arg: c_int, ptr: *mut c_void, ) -> c_int373 pub fn EVP_CIPHER_CTX_ctrl(
374 ctx: *mut EVP_CIPHER_CTX,
375 type_: c_int,
376 arg: c_int,
377 ptr: *mut c_void,
378 ) -> c_int;
EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int379 pub fn EVP_CIPHER_CTX_rand_key(ctx: *mut EVP_CIPHER_CTX, key: *mut c_uchar) -> c_int;
380
EVP_md_null() -> *const EVP_MD381 pub fn EVP_md_null() -> *const EVP_MD;
EVP_md5() -> *const EVP_MD382 pub fn EVP_md5() -> *const EVP_MD;
EVP_sha1() -> *const EVP_MD383 pub fn EVP_sha1() -> *const EVP_MD;
EVP_sha224() -> *const EVP_MD384 pub fn EVP_sha224() -> *const EVP_MD;
EVP_sha256() -> *const EVP_MD385 pub fn EVP_sha256() -> *const EVP_MD;
EVP_sha384() -> *const EVP_MD386 pub fn EVP_sha384() -> *const EVP_MD;
EVP_sha512() -> *const EVP_MD387 pub fn EVP_sha512() -> *const EVP_MD;
388 #[cfg(ossl111)]
EVP_sha3_224() -> *const EVP_MD389 pub fn EVP_sha3_224() -> *const EVP_MD;
390 #[cfg(ossl111)]
EVP_sha3_256() -> *const EVP_MD391 pub fn EVP_sha3_256() -> *const EVP_MD;
392 #[cfg(ossl111)]
EVP_sha3_384() -> *const EVP_MD393 pub fn EVP_sha3_384() -> *const EVP_MD;
394 #[cfg(ossl111)]
EVP_sha3_512() -> *const EVP_MD395 pub fn EVP_sha3_512() -> *const EVP_MD;
396 #[cfg(ossl111)]
EVP_shake128() -> *const EVP_MD397 pub fn EVP_shake128() -> *const EVP_MD;
398 #[cfg(ossl111)]
EVP_shake256() -> *const EVP_MD399 pub fn EVP_shake256() -> *const EVP_MD;
EVP_ripemd160() -> *const EVP_MD400 pub fn EVP_ripemd160() -> *const EVP_MD;
401 #[cfg(all(any(ossl111, libressl291), not(osslconf = "OPENSSL_NO_SM3")))]
EVP_sm3() -> *const EVP_MD402 pub fn EVP_sm3() -> *const EVP_MD;
EVP_des_ecb() -> *const EVP_CIPHER403 pub fn EVP_des_ecb() -> *const EVP_CIPHER;
EVP_des_ede3() -> *const EVP_CIPHER404 pub fn EVP_des_ede3() -> *const EVP_CIPHER;
EVP_des_ede3_cbc() -> *const EVP_CIPHER405 pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER;
EVP_des_ede3_cfb64() -> *const EVP_CIPHER406 pub fn EVP_des_ede3_cfb64() -> *const EVP_CIPHER;
EVP_des_cbc() -> *const EVP_CIPHER407 pub fn EVP_des_cbc() -> *const EVP_CIPHER;
EVP_rc4() -> *const EVP_CIPHER408 pub fn EVP_rc4() -> *const EVP_CIPHER;
EVP_bf_ecb() -> *const EVP_CIPHER409 pub fn EVP_bf_ecb() -> *const EVP_CIPHER;
EVP_bf_cbc() -> *const EVP_CIPHER410 pub fn EVP_bf_cbc() -> *const EVP_CIPHER;
EVP_bf_cfb64() -> *const EVP_CIPHER411 pub fn EVP_bf_cfb64() -> *const EVP_CIPHER;
EVP_bf_ofb() -> *const EVP_CIPHER412 pub fn EVP_bf_ofb() -> *const EVP_CIPHER;
EVP_aes_128_ecb() -> *const EVP_CIPHER413 pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
EVP_aes_128_cbc() -> *const EVP_CIPHER414 pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
EVP_aes_128_cfb1() -> *const EVP_CIPHER415 pub fn EVP_aes_128_cfb1() -> *const EVP_CIPHER;
EVP_aes_128_cfb8() -> *const EVP_CIPHER416 pub fn EVP_aes_128_cfb8() -> *const EVP_CIPHER;
EVP_aes_128_cfb128() -> *const EVP_CIPHER417 pub fn EVP_aes_128_cfb128() -> *const EVP_CIPHER;
EVP_aes_128_ctr() -> *const EVP_CIPHER418 pub fn EVP_aes_128_ctr() -> *const EVP_CIPHER;
EVP_aes_128_ccm() -> *const EVP_CIPHER419 pub fn EVP_aes_128_ccm() -> *const EVP_CIPHER;
EVP_aes_128_gcm() -> *const EVP_CIPHER420 pub fn EVP_aes_128_gcm() -> *const EVP_CIPHER;
EVP_aes_128_xts() -> *const EVP_CIPHER421 pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
EVP_aes_128_ofb() -> *const EVP_CIPHER422 pub fn EVP_aes_128_ofb() -> *const EVP_CIPHER;
423 #[cfg(ossl110)]
EVP_aes_128_ocb() -> *const EVP_CIPHER424 pub fn EVP_aes_128_ocb() -> *const EVP_CIPHER;
EVP_aes_192_ecb() -> *const EVP_CIPHER425 pub fn EVP_aes_192_ecb() -> *const EVP_CIPHER;
EVP_aes_192_cbc() -> *const EVP_CIPHER426 pub fn EVP_aes_192_cbc() -> *const EVP_CIPHER;
EVP_aes_192_cfb1() -> *const EVP_CIPHER427 pub fn EVP_aes_192_cfb1() -> *const EVP_CIPHER;
EVP_aes_192_cfb8() -> *const EVP_CIPHER428 pub fn EVP_aes_192_cfb8() -> *const EVP_CIPHER;
EVP_aes_192_cfb128() -> *const EVP_CIPHER429 pub fn EVP_aes_192_cfb128() -> *const EVP_CIPHER;
EVP_aes_192_ctr() -> *const EVP_CIPHER430 pub fn EVP_aes_192_ctr() -> *const EVP_CIPHER;
EVP_aes_192_ccm() -> *const EVP_CIPHER431 pub fn EVP_aes_192_ccm() -> *const EVP_CIPHER;
EVP_aes_192_gcm() -> *const EVP_CIPHER432 pub fn EVP_aes_192_gcm() -> *const EVP_CIPHER;
EVP_aes_192_ofb() -> *const EVP_CIPHER433 pub fn EVP_aes_192_ofb() -> *const EVP_CIPHER;
434 #[cfg(ossl110)]
EVP_aes_192_ocb() -> *const EVP_CIPHER435 pub fn EVP_aes_192_ocb() -> *const EVP_CIPHER;
EVP_aes_256_ecb() -> *const EVP_CIPHER436 pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
EVP_aes_256_cbc() -> *const EVP_CIPHER437 pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
EVP_aes_256_cfb1() -> *const EVP_CIPHER438 pub fn EVP_aes_256_cfb1() -> *const EVP_CIPHER;
EVP_aes_256_cfb8() -> *const EVP_CIPHER439 pub fn EVP_aes_256_cfb8() -> *const EVP_CIPHER;
EVP_aes_256_cfb128() -> *const EVP_CIPHER440 pub fn EVP_aes_256_cfb128() -> *const EVP_CIPHER;
EVP_aes_256_ctr() -> *const EVP_CIPHER441 pub fn EVP_aes_256_ctr() -> *const EVP_CIPHER;
EVP_aes_256_ccm() -> *const EVP_CIPHER442 pub fn EVP_aes_256_ccm() -> *const EVP_CIPHER;
EVP_aes_256_gcm() -> *const EVP_CIPHER443 pub fn EVP_aes_256_gcm() -> *const EVP_CIPHER;
EVP_aes_256_xts() -> *const EVP_CIPHER444 pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
EVP_aes_256_ofb() -> *const EVP_CIPHER445 pub fn EVP_aes_256_ofb() -> *const EVP_CIPHER;
446 #[cfg(ossl110)]
EVP_aes_256_ocb() -> *const EVP_CIPHER447 pub fn EVP_aes_256_ocb() -> *const EVP_CIPHER;
448 #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
EVP_chacha20() -> *const ::EVP_CIPHER449 pub fn EVP_chacha20() -> *const ::EVP_CIPHER;
450 #[cfg(all(ossl110, not(osslconf = "OPENSSL_NO_CHACHA")))]
EVP_chacha20_poly1305() -> *const ::EVP_CIPHER451 pub fn EVP_chacha20_poly1305() -> *const ::EVP_CIPHER;
452 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_cbc() -> *const EVP_CIPHER453 pub fn EVP_seed_cbc() -> *const EVP_CIPHER;
454 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_cfb128() -> *const EVP_CIPHER455 pub fn EVP_seed_cfb128() -> *const EVP_CIPHER;
456 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_ecb() -> *const EVP_CIPHER457 pub fn EVP_seed_ecb() -> *const EVP_CIPHER;
458 #[cfg(not(osslconf = "OPENSSL_NO_SEED"))]
EVP_seed_ofb() -> *const EVP_CIPHER459 pub fn EVP_seed_ofb() -> *const EVP_CIPHER;
460
461 #[cfg(not(ossl110))]
OPENSSL_add_all_algorithms_noconf()462 pub fn OPENSSL_add_all_algorithms_noconf();
463
EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD464 pub fn EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD;
EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER465 pub fn EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER;
466 }
467
468 cfg_if! {
469 if #[cfg(ossl300)] {
470 extern "C" {
471 pub fn EVP_PKEY_get_id(pkey: *const EVP_PKEY) -> c_int;
472 pub fn EVP_PKEY_get_bits(key: *const EVP_PKEY) -> c_int;
473 }
474
475 #[inline]
476 pub unsafe fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int {
477 EVP_PKEY_get_id(pkey)
478 }
479
480 #[inline]
481 pub unsafe fn EVP_PKEY_bits(pkey: *const EVP_PKEY) -> c_int {
482 EVP_PKEY_get_bits(pkey)
483 }
484 } else {
485 extern "C" {
486 pub fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int;
487 }
488 const_ptr_api! {
489 extern "C" {
490 pub fn EVP_PKEY_bits(key: #[const_ptr_if(any(ossl110, libressl280))] EVP_PKEY) -> c_int;
491 }
492 }
493 }
494 }
495 extern "C" {
EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int496 pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int;
497
EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int498 pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA499 pub fn EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA;
EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA500 pub fn EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA;
EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH501 pub fn EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH;
EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY502 pub fn EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY;
503
EVP_PKEY_new() -> *mut EVP_PKEY504 pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
EVP_PKEY_free(k: *mut EVP_PKEY)505 pub fn EVP_PKEY_free(k: *mut EVP_PKEY);
506 #[cfg(any(ossl110, libressl270))]
EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int507 pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int;
508
d2i_AutoPrivateKey( a: *mut *mut EVP_PKEY, pp: *mut *const c_uchar, length: c_long, ) -> *mut EVP_PKEY509 pub fn d2i_AutoPrivateKey(
510 a: *mut *mut EVP_PKEY,
511 pp: *mut *const c_uchar,
512 length: c_long,
513 ) -> *mut EVP_PKEY;
514
EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int515 pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
516
EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int517 pub fn EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int;
518
PKCS5_PBKDF2_HMAC_SHA1( pass: *const c_char, passlen: c_int, salt: *const u8, saltlen: c_int, iter: c_int, keylen: c_int, out: *mut u8, ) -> c_int519 pub fn PKCS5_PBKDF2_HMAC_SHA1(
520 pass: *const c_char,
521 passlen: c_int,
522 salt: *const u8,
523 saltlen: c_int,
524 iter: c_int,
525 keylen: c_int,
526 out: *mut u8,
527 ) -> c_int;
PKCS5_PBKDF2_HMAC( pass: *const c_char, passlen: c_int, salt: *const c_uchar, saltlen: c_int, iter: c_int, digest: *const EVP_MD, keylen: c_int, out: *mut u8, ) -> c_int528 pub fn PKCS5_PBKDF2_HMAC(
529 pass: *const c_char,
530 passlen: c_int,
531 salt: *const c_uchar,
532 saltlen: c_int,
533 iter: c_int,
534 digest: *const EVP_MD,
535 keylen: c_int,
536 out: *mut u8,
537 ) -> c_int;
538
539 #[cfg(ossl110)]
EVP_PBE_scrypt( pass: *const c_char, passlen: size_t, salt: *const c_uchar, saltlen: size_t, N: u64, r: u64, p: u64, maxmem: u64, key: *mut c_uchar, keylen: size_t, ) -> c_int540 pub fn EVP_PBE_scrypt(
541 pass: *const c_char,
542 passlen: size_t,
543 salt: *const c_uchar,
544 saltlen: size_t,
545 N: u64,
546 r: u64,
547 p: u64,
548 maxmem: u64,
549 key: *mut c_uchar,
550 keylen: size_t,
551 ) -> c_int;
552 }
553
554 pub const EVP_PKEY_OP_KEYGEN: c_int = 1 << 2;
555 cfg_if! {
556 if #[cfg(ossl300)] {
557 pub const EVP_PKEY_OP_SIGN: c_int = 1 << 4;
558 pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 5;
559 pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 6;
560 pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 7;
561 pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 8;
562 pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 9;
563 pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 10;
564 } else {
565 pub const EVP_PKEY_OP_SIGN: c_int = 1 << 3;
566 pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 4;
567 pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 5;
568 pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 6;
569 pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 7;
570 pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 8;
571 pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 9;
572 }
573 }
574
575 pub const EVP_PKEY_OP_TYPE_SIG: c_int = EVP_PKEY_OP_SIGN
576 | EVP_PKEY_OP_VERIFY
577 | EVP_PKEY_OP_VERIFYRECOVER
578 | EVP_PKEY_OP_SIGNCTX
579 | EVP_PKEY_OP_VERIFYCTX;
580
581 pub const EVP_PKEY_OP_TYPE_CRYPT: c_int = EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT;
582
583 pub const EVP_PKEY_CTRL_SET_MAC_KEY: c_int = 6;
584
585 pub const EVP_PKEY_CTRL_CIPHER: c_int = 12;
586
587 pub const EVP_PKEY_ALG_CTRL: c_int = 0x1000;
588
589 extern "C" {
EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX590 pub fn EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX591 pub fn EVP_PKEY_CTX_new_id(id: c_int, e: *mut ENGINE) -> *mut EVP_PKEY_CTX;
EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX)592 pub fn EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX);
593
EVP_PKEY_CTX_ctrl( ctx: *mut EVP_PKEY_CTX, keytype: c_int, optype: c_int, cmd: c_int, p1: c_int, p2: *mut c_void, ) -> c_int594 pub fn EVP_PKEY_CTX_ctrl(
595 ctx: *mut EVP_PKEY_CTX,
596 keytype: c_int,
597 optype: c_int,
598 cmd: c_int,
599 p1: c_int,
600 p2: *mut c_void,
601 ) -> c_int;
602
EVP_PKEY_new_mac_key( type_: c_int, e: *mut ENGINE, key: *const c_uchar, keylen: c_int, ) -> *mut EVP_PKEY603 pub fn EVP_PKEY_new_mac_key(
604 type_: c_int,
605 e: *mut ENGINE,
606 key: *const c_uchar,
607 keylen: c_int,
608 ) -> *mut EVP_PKEY;
609
EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int610 pub fn EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int611 pub fn EVP_PKEY_derive_set_peer(ctx: *mut EVP_PKEY_CTX, peer: *mut EVP_PKEY) -> c_int;
EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int612 pub fn EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int;
613
614 #[cfg(ossl300)]
EVP_PKEY_Q_keygen( libctx: *mut OSSL_LIB_CTX, propq: *const c_char, type_: *const c_char, ... ) -> *mut EVP_PKEY615 pub fn EVP_PKEY_Q_keygen(
616 libctx: *mut OSSL_LIB_CTX,
617 propq: *const c_char,
618 type_: *const c_char,
619 ...
620 ) -> *mut EVP_PKEY;
EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int621 pub fn EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int622 pub fn EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
623
EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int624 pub fn EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_encrypt( ctx: *mut EVP_PKEY_CTX, pout: *mut c_uchar, poutlen: *mut size_t, pin: *const c_uchar, pinlen: size_t, ) -> c_int625 pub fn EVP_PKEY_encrypt(
626 ctx: *mut EVP_PKEY_CTX,
627 pout: *mut c_uchar,
628 poutlen: *mut size_t,
629 pin: *const c_uchar,
630 pinlen: size_t,
631 ) -> c_int;
EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int632 pub fn EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int;
EVP_PKEY_decrypt( ctx: *mut EVP_PKEY_CTX, pout: *mut c_uchar, poutlen: *mut size_t, pin: *const c_uchar, pinlen: size_t, ) -> c_int633 pub fn EVP_PKEY_decrypt(
634 ctx: *mut EVP_PKEY_CTX,
635 pout: *mut c_uchar,
636 poutlen: *mut size_t,
637 pin: *const c_uchar,
638 pinlen: size_t,
639 ) -> c_int;
640 }
641
642 const_ptr_api! {
643 extern "C" {
644 pub fn EVP_PKCS82PKEY(p8: #[const_ptr_if(any(ossl110, libressl280))] PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
645 }
646 }
647
648 cfg_if! {
649 if #[cfg(any(ossl111))] {
650 extern "C" {
651 pub fn EVP_PKEY_get_raw_public_key(
652 pkey: *const EVP_PKEY,
653 ppub: *mut c_uchar,
654 len: *mut size_t,
655 ) -> c_int;
656 pub fn EVP_PKEY_new_raw_public_key(
657 ttype: c_int,
658 e: *mut ENGINE,
659 key: *const c_uchar,
660 keylen: size_t,
661 ) -> *mut EVP_PKEY;
662 pub fn EVP_PKEY_get_raw_private_key(
663 pkey: *const EVP_PKEY,
664 ppriv: *mut c_uchar,
665 len: *mut size_t,
666 ) -> c_int;
667 pub fn EVP_PKEY_new_raw_private_key(
668 ttype: c_int,
669 e: *mut ENGINE,
670 key: *const c_uchar,
671 keylen: size_t,
672 ) -> *mut EVP_PKEY;
673 }
674 }
675 }
676
677 extern "C" {
EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int678 pub fn EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int679 pub fn EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
680 }
681