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_ED25519: c_int = NID_ED25519;
15 #[cfg(ossl111)]
16 pub const EVP_PKEY_ED448: c_int = NID_ED448;
17 pub const EVP_PKEY_HMAC: c_int = NID_hmac;
18 pub const EVP_PKEY_CMAC: c_int = NID_cmac;
19 
20 pub const EVP_CTRL_GCM_SET_IVLEN: c_int = 0x9;
21 pub const EVP_CTRL_GCM_GET_TAG: c_int = 0x10;
22 pub const EVP_CTRL_GCM_SET_TAG: c_int = 0x11;
23 
EVP_get_digestbynid(type_: c_int) -> *const EVP_MD24 pub unsafe fn EVP_get_digestbynid(type_: c_int) -> *const EVP_MD {
25     EVP_get_digestbyname(OBJ_nid2sn(type_))
26 }
27 
28 extern "C" {
EVP_MD_size(md: *const EVP_MD) -> c_int29     pub fn EVP_MD_size(md: *const EVP_MD) -> c_int;
EVP_MD_type(md: *const EVP_MD) -> c_int30     pub fn EVP_MD_type(md: *const EVP_MD) -> c_int;
31 
EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int32     pub fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int33     pub fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int;
EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int34     pub fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int;
35 }
36 
37 cfg_if! {
38     if #[cfg(ossl110)] {
39         extern "C" {
40             pub fn EVP_MD_CTX_new() -> *mut EVP_MD_CTX;
41             pub fn EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX);
42         }
43     } else {
44         extern "C" {
45             pub fn EVP_MD_CTX_create() -> *mut EVP_MD_CTX;
46             pub fn EVP_MD_CTX_destroy(ctx: *mut EVP_MD_CTX);
47         }
48     }
49 }
50 
51 extern "C" {
EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE) -> c_int52     pub fn EVP_DigestInit_ex(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD, imple: *mut ENGINE)
53         -> c_int;
EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int54     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_int55     pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int56     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_int57     pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
58     #[cfg(ossl111)]
EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int59     pub fn EVP_DigestFinalXOF(ctx: *mut EVP_MD_CTX, res: *mut u8, len: usize) -> c_int;
60 
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_int61     pub fn EVP_BytesToKey(
62         typ: *const EVP_CIPHER,
63         md: *const EVP_MD,
64         salt: *const u8,
65         data: *const u8,
66         datalen: c_int,
67         count: c_int,
68         key: *mut u8,
69         iv: *mut u8,
70     ) -> c_int;
71 
EVP_CipherInit( ctx: *mut EVP_CIPHER_CTX, evp: *const EVP_CIPHER, key: *const u8, iv: *const u8, mode: c_int, ) -> c_int72     pub fn EVP_CipherInit(
73         ctx: *mut EVP_CIPHER_CTX,
74         evp: *const EVP_CIPHER,
75         key: *const u8,
76         iv: *const u8,
77         mode: c_int,
78     ) -> 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_int79     pub fn EVP_CipherInit_ex(
80         ctx: *mut EVP_CIPHER_CTX,
81         type_: *const EVP_CIPHER,
82         impl_: *mut ENGINE,
83         key: *const c_uchar,
84         iv: *const c_uchar,
85         enc: c_int,
86     ) -> c_int;
EVP_CipherUpdate( ctx: *mut EVP_CIPHER_CTX, outbuf: *mut u8, outlen: *mut c_int, inbuf: *const u8, inlen: c_int, ) -> c_int87     pub fn EVP_CipherUpdate(
88         ctx: *mut EVP_CIPHER_CTX,
89         outbuf: *mut u8,
90         outlen: *mut c_int,
91         inbuf: *const u8,
92         inlen: c_int,
93     ) -> c_int;
EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int94     pub fn EVP_CipherFinal(ctx: *mut EVP_CIPHER_CTX, res: *mut u8, len: *mut c_int) -> c_int;
95 
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_int96     pub fn EVP_DigestSignInit(
97         ctx: *mut EVP_MD_CTX,
98         pctx: *mut *mut EVP_PKEY_CTX,
99         type_: *const EVP_MD,
100         e: *mut ENGINE,
101         pkey: *mut EVP_PKEY,
102     ) -> c_int;
EVP_DigestSignFinal( ctx: *mut EVP_MD_CTX, sig: *mut c_uchar, siglen: *mut size_t, ) -> c_int103     pub fn EVP_DigestSignFinal(
104         ctx: *mut EVP_MD_CTX,
105         sig: *mut c_uchar,
106         siglen: *mut size_t,
107     ) -> 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_int108     pub fn EVP_DigestVerifyInit(
109         ctx: *mut EVP_MD_CTX,
110         pctx: *mut *mut EVP_PKEY_CTX,
111         type_: *const EVP_MD,
112         e: *mut ENGINE,
113         pkey: *mut EVP_PKEY,
114     ) -> c_int;
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_int115     pub fn EVP_SealInit(
116         ctx: *mut EVP_CIPHER_CTX,
117         type_: *const EVP_CIPHER,
118         ek: *mut *mut c_uchar,
119         ekl: *mut c_int,
120         iv: *mut c_uchar,
121         pubk: *mut *mut EVP_PKEY,
122         npubk: c_int,
123     ) -> c_int;
EVP_SealFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int124     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_int125     pub fn EVP_EncryptInit_ex(
126         ctx: *mut EVP_CIPHER_CTX,
127         cipher: *const EVP_CIPHER,
128         impl_: *mut ENGINE,
129         key: *const c_uchar,
130         iv: *const c_uchar,
131     ) -> c_int;
EVP_EncryptUpdate( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, in_: *const u8, inl: c_int, ) -> c_int132     pub fn EVP_EncryptUpdate(
133         ctx: *mut EVP_CIPHER_CTX,
134         out: *mut c_uchar,
135         outl: *mut c_int,
136         in_: *const u8,
137         inl: c_int,
138     ) -> c_int;
EVP_EncryptFinal_ex( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, ) -> c_int139     pub fn EVP_EncryptFinal_ex(
140         ctx: *mut EVP_CIPHER_CTX,
141         out: *mut c_uchar,
142         outl: *mut c_int,
143     ) -> 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_int144     pub fn EVP_OpenInit(
145         ctx: *mut EVP_CIPHER_CTX,
146         type_: *const EVP_CIPHER,
147         ek: *const c_uchar,
148         ekl: c_int,
149         iv: *const c_uchar,
150         priv_: *mut EVP_PKEY,
151     ) -> c_int;
EVP_OpenFinal(ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int) -> c_int152     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_int153     pub fn EVP_DecryptInit_ex(
154         ctx: *mut EVP_CIPHER_CTX,
155         cipher: *const EVP_CIPHER,
156         impl_: *mut ENGINE,
157         key: *const c_uchar,
158         iv: *const c_uchar,
159     ) -> c_int;
EVP_DecryptUpdate( ctx: *mut EVP_CIPHER_CTX, out: *mut c_uchar, outl: *mut c_int, in_: *const u8, inl: c_int, ) -> c_int160     pub fn EVP_DecryptUpdate(
161         ctx: *mut EVP_CIPHER_CTX,
162         out: *mut c_uchar,
163         outl: *mut c_int,
164         in_: *const u8,
165         inl: c_int,
166     ) -> c_int;
EVP_DecryptFinal_ex( ctx: *mut EVP_CIPHER_CTX, outm: *mut c_uchar, outl: *mut c_int, ) -> c_int167     pub fn EVP_DecryptFinal_ex(
168         ctx: *mut EVP_CIPHER_CTX,
169         outm: *mut c_uchar,
170         outl: *mut c_int,
171     ) -> c_int;
172 }
173 cfg_if! {
174     if #[cfg(any(ossl111b, libressl280))] {
175         extern "C" {
176             pub fn EVP_PKEY_size(pkey: *const EVP_PKEY) -> c_int;
177         }
178     } else {
179         extern "C" {
180             pub fn EVP_PKEY_size(pkey: *mut EVP_PKEY) -> c_int;
181         }
182     }
183 }
184 cfg_if! {
185     if #[cfg(ossl111)] {
186         extern "C" {
187             pub fn EVP_DigestSign(
188                 ctx: *mut EVP_MD_CTX,
189                 sigret: *mut c_uchar,
190                 siglen: *mut size_t,
191                 tbs: *const c_uchar,
192                 tbslen: size_t
193             ) -> c_int;
194 
195             pub fn EVP_DigestVerify(
196                 ctx: *mut EVP_MD_CTX,
197                 sigret: *const c_uchar,
198                 siglen: size_t,
199                 tbs: *const c_uchar,
200                 tbslen: size_t
201             ) -> c_int;
202         }
203     }
204 }
205 cfg_if! {
206     if #[cfg(any(ossl102, libressl280))] {
207         extern "C" {
208             pub fn EVP_DigestVerifyFinal(
209                 ctx: *mut EVP_MD_CTX,
210                 sigret: *const c_uchar,
211                 siglen: size_t,
212             ) -> c_int;
213         }
214     } else {
215         extern "C" {
216             pub fn EVP_DigestVerifyFinal(
217                 ctx: *mut EVP_MD_CTX,
218                 sigret: *mut c_uchar,
219                 siglen: size_t,
220             ) -> c_int;
221         }
222     }
223 }
224 
225 extern "C" {
EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX226     pub fn EVP_CIPHER_CTX_new() -> *mut EVP_CIPHER_CTX;
EVP_CIPHER_CTX_free(ctx: *mut EVP_CIPHER_CTX)227     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_int228     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_int229     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_int230     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_int231     pub fn EVP_CIPHER_CTX_ctrl(
232         ctx: *mut EVP_CIPHER_CTX,
233         type_: c_int,
234         arg: c_int,
235         ptr: *mut c_void,
236     ) -> c_int;
237 
EVP_md_null() -> *const EVP_MD238     pub fn EVP_md_null() -> *const EVP_MD;
EVP_md5() -> *const EVP_MD239     pub fn EVP_md5() -> *const EVP_MD;
EVP_sha1() -> *const EVP_MD240     pub fn EVP_sha1() -> *const EVP_MD;
EVP_sha224() -> *const EVP_MD241     pub fn EVP_sha224() -> *const EVP_MD;
EVP_sha256() -> *const EVP_MD242     pub fn EVP_sha256() -> *const EVP_MD;
EVP_sha384() -> *const EVP_MD243     pub fn EVP_sha384() -> *const EVP_MD;
EVP_sha512() -> *const EVP_MD244     pub fn EVP_sha512() -> *const EVP_MD;
245     #[cfg(ossl111)]
EVP_sha3_224() -> *const EVP_MD246     pub fn EVP_sha3_224() -> *const EVP_MD;
247     #[cfg(ossl111)]
EVP_sha3_256() -> *const EVP_MD248     pub fn EVP_sha3_256() -> *const EVP_MD;
249     #[cfg(ossl111)]
EVP_sha3_384() -> *const EVP_MD250     pub fn EVP_sha3_384() -> *const EVP_MD;
251     #[cfg(ossl111)]
EVP_sha3_512() -> *const EVP_MD252     pub fn EVP_sha3_512() -> *const EVP_MD;
253     #[cfg(ossl111)]
EVP_shake128() -> *const EVP_MD254     pub fn EVP_shake128() -> *const EVP_MD;
255     #[cfg(ossl111)]
EVP_shake256() -> *const EVP_MD256     pub fn EVP_shake256() -> *const EVP_MD;
EVP_ripemd160() -> *const EVP_MD257     pub fn EVP_ripemd160() -> *const EVP_MD;
EVP_des_ecb() -> *const EVP_CIPHER258     pub fn EVP_des_ecb() -> *const EVP_CIPHER;
EVP_des_ede3() -> *const EVP_CIPHER259     pub fn EVP_des_ede3() -> *const EVP_CIPHER;
EVP_des_ede3_cbc() -> *const EVP_CIPHER260     pub fn EVP_des_ede3_cbc() -> *const EVP_CIPHER;
EVP_des_ede3_cfb64() -> *const EVP_CIPHER261     pub fn EVP_des_ede3_cfb64() -> *const EVP_CIPHER;
EVP_des_cbc() -> *const EVP_CIPHER262     pub fn EVP_des_cbc() -> *const EVP_CIPHER;
EVP_rc4() -> *const EVP_CIPHER263     pub fn EVP_rc4() -> *const EVP_CIPHER;
EVP_bf_ecb() -> *const EVP_CIPHER264     pub fn EVP_bf_ecb() -> *const EVP_CIPHER;
EVP_bf_cbc() -> *const EVP_CIPHER265     pub fn EVP_bf_cbc() -> *const EVP_CIPHER;
EVP_bf_cfb64() -> *const EVP_CIPHER266     pub fn EVP_bf_cfb64() -> *const EVP_CIPHER;
EVP_bf_ofb() -> *const EVP_CIPHER267     pub fn EVP_bf_ofb() -> *const EVP_CIPHER;
EVP_aes_128_ecb() -> *const EVP_CIPHER268     pub fn EVP_aes_128_ecb() -> *const EVP_CIPHER;
EVP_aes_128_cbc() -> *const EVP_CIPHER269     pub fn EVP_aes_128_cbc() -> *const EVP_CIPHER;
EVP_aes_128_cfb1() -> *const EVP_CIPHER270     pub fn EVP_aes_128_cfb1() -> *const EVP_CIPHER;
EVP_aes_128_cfb8() -> *const EVP_CIPHER271     pub fn EVP_aes_128_cfb8() -> *const EVP_CIPHER;
EVP_aes_128_cfb128() -> *const EVP_CIPHER272     pub fn EVP_aes_128_cfb128() -> *const EVP_CIPHER;
EVP_aes_128_ctr() -> *const EVP_CIPHER273     pub fn EVP_aes_128_ctr() -> *const EVP_CIPHER;
EVP_aes_128_ccm() -> *const EVP_CIPHER274     pub fn EVP_aes_128_ccm() -> *const EVP_CIPHER;
EVP_aes_128_gcm() -> *const EVP_CIPHER275     pub fn EVP_aes_128_gcm() -> *const EVP_CIPHER;
EVP_aes_128_xts() -> *const EVP_CIPHER276     pub fn EVP_aes_128_xts() -> *const EVP_CIPHER;
EVP_aes_128_ofb() -> *const EVP_CIPHER277     pub fn EVP_aes_128_ofb() -> *const EVP_CIPHER;
278     #[cfg(ossl110)]
EVP_aes_128_ocb() -> *const EVP_CIPHER279     pub fn EVP_aes_128_ocb() -> *const EVP_CIPHER;
EVP_aes_192_ecb() -> *const EVP_CIPHER280     pub fn EVP_aes_192_ecb() -> *const EVP_CIPHER;
EVP_aes_192_cbc() -> *const EVP_CIPHER281     pub fn EVP_aes_192_cbc() -> *const EVP_CIPHER;
EVP_aes_192_cfb1() -> *const EVP_CIPHER282     pub fn EVP_aes_192_cfb1() -> *const EVP_CIPHER;
EVP_aes_192_cfb8() -> *const EVP_CIPHER283     pub fn EVP_aes_192_cfb8() -> *const EVP_CIPHER;
EVP_aes_192_cfb128() -> *const EVP_CIPHER284     pub fn EVP_aes_192_cfb128() -> *const EVP_CIPHER;
EVP_aes_192_ctr() -> *const EVP_CIPHER285     pub fn EVP_aes_192_ctr() -> *const EVP_CIPHER;
EVP_aes_192_ccm() -> *const EVP_CIPHER286     pub fn EVP_aes_192_ccm() -> *const EVP_CIPHER;
EVP_aes_192_gcm() -> *const EVP_CIPHER287     pub fn EVP_aes_192_gcm() -> *const EVP_CIPHER;
EVP_aes_192_ofb() -> *const EVP_CIPHER288     pub fn EVP_aes_192_ofb() -> *const EVP_CIPHER;
289     #[cfg(ossl110)]
EVP_aes_192_ocb() -> *const EVP_CIPHER290     pub fn EVP_aes_192_ocb() -> *const EVP_CIPHER;
EVP_aes_256_ecb() -> *const EVP_CIPHER291     pub fn EVP_aes_256_ecb() -> *const EVP_CIPHER;
EVP_aes_256_cbc() -> *const EVP_CIPHER292     pub fn EVP_aes_256_cbc() -> *const EVP_CIPHER;
EVP_aes_256_cfb1() -> *const EVP_CIPHER293     pub fn EVP_aes_256_cfb1() -> *const EVP_CIPHER;
EVP_aes_256_cfb8() -> *const EVP_CIPHER294     pub fn EVP_aes_256_cfb8() -> *const EVP_CIPHER;
EVP_aes_256_cfb128() -> *const EVP_CIPHER295     pub fn EVP_aes_256_cfb128() -> *const EVP_CIPHER;
EVP_aes_256_ctr() -> *const EVP_CIPHER296     pub fn EVP_aes_256_ctr() -> *const EVP_CIPHER;
EVP_aes_256_ccm() -> *const EVP_CIPHER297     pub fn EVP_aes_256_ccm() -> *const EVP_CIPHER;
EVP_aes_256_gcm() -> *const EVP_CIPHER298     pub fn EVP_aes_256_gcm() -> *const EVP_CIPHER;
EVP_aes_256_xts() -> *const EVP_CIPHER299     pub fn EVP_aes_256_xts() -> *const EVP_CIPHER;
EVP_aes_256_ofb() -> *const EVP_CIPHER300     pub fn EVP_aes_256_ofb() -> *const EVP_CIPHER;
301     #[cfg(ossl110)]
EVP_aes_256_ocb() -> *const EVP_CIPHER302     pub fn EVP_aes_256_ocb() -> *const EVP_CIPHER;
303     #[cfg(ossl110)]
EVP_chacha20() -> *const ::EVP_CIPHER304     pub fn EVP_chacha20() -> *const ::EVP_CIPHER;
305     #[cfg(ossl110)]
EVP_chacha20_poly1305() -> *const ::EVP_CIPHER306     pub fn EVP_chacha20_poly1305() -> *const ::EVP_CIPHER;
307 
308     #[cfg(not(ossl110))]
OPENSSL_add_all_algorithms_noconf()309     pub fn OPENSSL_add_all_algorithms_noconf();
310 
EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD311     pub fn EVP_get_digestbyname(name: *const c_char) -> *const EVP_MD;
EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER312     pub fn EVP_get_cipherbyname(name: *const c_char) -> *const EVP_CIPHER;
313 
EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int314     pub fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int;
315 }
316 cfg_if! {
317     if #[cfg(any(ossl110, libressl280))] {
318         extern "C" {
319             pub fn EVP_PKEY_bits(key: *const EVP_PKEY) -> c_int;
320         }
321     } else {
322         extern "C" {
323             pub fn EVP_PKEY_bits(key: *mut EVP_PKEY) -> c_int;
324         }
325     }
326 }
327 extern "C" {
EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int328     pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *mut c_void) -> c_int;
329 
EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int330     pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int;
EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA331     pub fn EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA;
EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA332     pub fn EVP_PKEY_get1_DSA(k: *mut EVP_PKEY) -> *mut DSA;
EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH333     pub fn EVP_PKEY_get1_DH(k: *mut EVP_PKEY) -> *mut DH;
EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY334     pub fn EVP_PKEY_get1_EC_KEY(k: *mut EVP_PKEY) -> *mut EC_KEY;
335 
EVP_PKEY_new() -> *mut EVP_PKEY336     pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
EVP_PKEY_free(k: *mut EVP_PKEY)337     pub fn EVP_PKEY_free(k: *mut EVP_PKEY);
338     #[cfg(any(ossl110, libressl270))]
EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int339     pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> c_int;
340 
d2i_AutoPrivateKey( a: *mut *mut EVP_PKEY, pp: *mut *const c_uchar, length: c_long, ) -> *mut EVP_PKEY341     pub fn d2i_AutoPrivateKey(
342         a: *mut *mut EVP_PKEY,
343         pp: *mut *const c_uchar,
344         length: c_long,
345     ) -> *mut EVP_PKEY;
346 
EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int347     pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int;
348 
EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int349     pub fn EVP_PKEY_copy_parameters(to: *mut EVP_PKEY, from: *const EVP_PKEY) -> c_int;
350 
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_int351     pub fn PKCS5_PBKDF2_HMAC_SHA1(
352         pass: *const c_char,
353         passlen: c_int,
354         salt: *const u8,
355         saltlen: c_int,
356         iter: c_int,
357         keylen: c_int,
358         out: *mut u8,
359     ) -> 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_int360     pub fn PKCS5_PBKDF2_HMAC(
361         pass: *const c_char,
362         passlen: c_int,
363         salt: *const c_uchar,
364         saltlen: c_int,
365         iter: c_int,
366         digest: *const EVP_MD,
367         keylen: c_int,
368         out: *mut u8,
369     ) -> c_int;
370 
371     #[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_int372     pub fn EVP_PBE_scrypt(
373         pass: *const c_char,
374         passlen: size_t,
375         salt: *const c_uchar,
376         saltlen: size_t,
377         N: u64,
378         r: u64,
379         p: u64,
380         maxmem: u64,
381         key: *mut c_uchar,
382         keylen: size_t,
383     ) -> c_int;
384 }
385 
386 pub const EVP_PKEY_OP_KEYGEN: c_int = 1 << 2;
387 pub const EVP_PKEY_OP_SIGN: c_int = 1 << 3;
388 pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 4;
389 pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 5;
390 pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 6;
391 pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 7;
392 pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 8;
393 pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 9;
394 
395 pub const EVP_PKEY_OP_TYPE_SIG: c_int = EVP_PKEY_OP_SIGN
396     | EVP_PKEY_OP_VERIFY
397     | EVP_PKEY_OP_VERIFYRECOVER
398     | EVP_PKEY_OP_SIGNCTX
399     | EVP_PKEY_OP_VERIFYCTX;
400 
401 pub const EVP_PKEY_OP_TYPE_CRYPT: c_int = EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT;
402 
403 pub const EVP_PKEY_CTRL_SET_MAC_KEY: c_int = 6;
404 
405 pub const EVP_PKEY_CTRL_CIPHER: c_int = 12;
406 
407 pub const EVP_PKEY_ALG_CTRL: c_int = 0x1000;
408 
409 extern "C" {
EVP_PKEY_CTX_new(k: *mut EVP_PKEY, e: *mut ENGINE) -> *mut EVP_PKEY_CTX410     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_CTX411     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)412     pub fn EVP_PKEY_CTX_free(ctx: *mut EVP_PKEY_CTX);
413 
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_int414     pub fn EVP_PKEY_CTX_ctrl(
415         ctx: *mut EVP_PKEY_CTX,
416         keytype: c_int,
417         optype: c_int,
418         cmd: c_int,
419         p1: c_int,
420         p2: *mut c_void,
421     ) -> c_int;
422 
EVP_PKEY_new_mac_key( type_: c_int, e: *mut ENGINE, key: *const c_uchar, keylen: c_int, ) -> *mut EVP_PKEY423     pub fn EVP_PKEY_new_mac_key(
424         type_: c_int,
425         e: *mut ENGINE,
426         key: *const c_uchar,
427         keylen: c_int,
428     ) -> *mut EVP_PKEY;
429 
EVP_PKEY_derive_init(ctx: *mut EVP_PKEY_CTX) -> c_int430     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_int431     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_int432     pub fn EVP_PKEY_derive(ctx: *mut EVP_PKEY_CTX, key: *mut c_uchar, size: *mut size_t) -> c_int;
433 
EVP_PKEY_keygen_init(ctx: *mut EVP_PKEY_CTX) -> c_int434     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_int435     pub fn EVP_PKEY_keygen(ctx: *mut EVP_PKEY_CTX, key: *mut *mut EVP_PKEY) -> c_int;
436 
EVP_PKEY_encrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int437     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_int438     pub fn EVP_PKEY_encrypt(
439         ctx: *mut EVP_PKEY_CTX,
440         pout: *mut c_uchar,
441         poutlen: *mut size_t,
442         pin: *const c_uchar,
443         pinlen: size_t,
444     ) -> c_int;
EVP_PKEY_decrypt_init(ctx: *mut EVP_PKEY_CTX) -> c_int445     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_int446     pub fn EVP_PKEY_decrypt(
447         ctx: *mut EVP_PKEY_CTX,
448         pout: *mut c_uchar,
449         poutlen: *mut size_t,
450         pin: *const c_uchar,
451         pinlen: size_t,
452     ) -> c_int;
453 }
454 
455 cfg_if! {
456     if #[cfg(any(ossl110, libressl280))] {
457         extern "C" {
458             pub fn EVP_PKCS82PKEY(p8: *const PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
459         }
460     } else {
461         extern "C" {
462             pub fn EVP_PKCS82PKEY(p8: *mut PKCS8_PRIV_KEY_INFO) -> *mut EVP_PKEY;
463         }
464     }
465 }
466 
467 cfg_if! {
468     if #[cfg(any(ossl111))] {
469         extern "C" {
470             pub fn EVP_PKEY_get_raw_public_key(
471                 pkey: *const EVP_PKEY,
472                 ppub: *mut c_uchar,
473                 len: *mut size_t,
474             ) -> c_int;
475             pub fn EVP_PKEY_new_raw_public_key(
476                 ttype: c_int,
477                 e: *mut ENGINE,
478                 key: *const c_uchar,
479                 keylen: size_t,
480             ) -> *mut EVP_PKEY;
481             pub fn EVP_PKEY_get_raw_private_key(
482                 pkey: *const EVP_PKEY,
483                 ppriv: *mut c_uchar,
484                 len: *mut size_t,
485             ) -> c_int;
486             pub fn EVP_PKEY_new_raw_private_key(
487                 ttype: c_int,
488                 e: *mut ENGINE,
489                 key: *const c_uchar,
490                 keylen: size_t,
491             ) -> *mut EVP_PKEY;
492         }
493     }
494 }
495 
496 extern "C" {
EVP_EncodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int497     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_int498     pub fn EVP_DecodeBlock(dst: *mut c_uchar, src: *const c_uchar, src_len: c_int) -> c_int;
499 }
500