• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use super::*;
2 use libc::*;
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_SM2: c_int = NID_sm2;
15 #[cfg(any(ossl111, libressl370))]
16 pub const EVP_PKEY_X25519: c_int = NID_X25519;
17 #[cfg(any(ossl111, libressl370))]
18 pub const EVP_PKEY_ED25519: c_int = NID_ED25519;
19 #[cfg(ossl111)]
20 pub const EVP_PKEY_X448: c_int = NID_X448;
21 #[cfg(ossl111)]
22 pub const EVP_PKEY_ED448: c_int = NID_ED448;
23 pub const EVP_PKEY_HMAC: c_int = NID_hmac;
24 pub const EVP_PKEY_CMAC: c_int = NID_cmac;
25 #[cfg(ossl111)]
26 pub const EVP_PKEY_POLY1305: c_int = NID_poly1305;
27 #[cfg(ossl110)]
28 pub const EVP_PKEY_HKDF: c_int = NID_hkdf;
29 
30 #[cfg(ossl102)]
31 pub const EVP_CIPHER_CTX_FLAG_WRAP_ALLOW: c_int = 0x1;
32 
33 pub const EVP_CTRL_GCM_SET_IVLEN: c_int = 0x9;
34 pub const EVP_CTRL_GCM_GET_TAG: c_int = 0x10;
35 pub const EVP_CTRL_GCM_SET_TAG: c_int = 0x11;
36 
EVP_get_digestbynid(type_: c_int) -> *const EVP_MD37 pub unsafe fn EVP_get_digestbynid(type_: c_int) -> *const EVP_MD {
38     EVP_get_digestbyname(OBJ_nid2sn(type_))
39 }
40 
41 cfg_if! {
42     if #[cfg(ossl300)] {
43         #[inline]
44         pub unsafe fn EVP_MD_CTX_md(ctx: *const EVP_MD_CTX) -> *const EVP_MD {
45             EVP_MD_CTX_get0_md(ctx)
46         }
47 
48         #[inline]
49         pub unsafe fn EVP_MD_CTX_get_size(ctx: *const EVP_MD_CTX) -> c_int {
50             EVP_MD_get_size(EVP_MD_CTX_get0_md(ctx))
51         }
52 
53         #[inline]
54         pub unsafe fn EVP_MD_CTX_size(ctx: *const EVP_MD_CTX) -> c_int {
55             EVP_MD_CTX_get_size(ctx)
56         }
57 
58         #[inline]
59         pub unsafe fn EVP_MD_block_size(md: *const EVP_MD) -> c_int {
60             EVP_MD_get_block_size(md)
61         }
62 
63         #[inline]
64         pub unsafe fn EVP_MD_size(md: *const EVP_MD) -> c_int {
65             EVP_MD_get_size(md)
66         }
67 
68         #[inline]
69         pub unsafe fn EVP_MD_type(md: *const EVP_MD) -> c_int {
70             EVP_MD_get_type(md)
71         }
72 
73         #[inline]
74         pub unsafe fn EVP_CIPHER_key_length(cipher: *const EVP_CIPHER) -> c_int {
75             EVP_CIPHER_get_key_length(cipher)
76         }
77 
78         #[inline]
79         pub unsafe fn EVP_CIPHER_block_size(cipher: *const EVP_CIPHER) -> c_int {
80             EVP_CIPHER_get_block_size(cipher)
81         }
82 
83         #[inline]
84         pub unsafe fn EVP_CIPHER_iv_length(cipher: *const EVP_CIPHER) -> c_int {
85             EVP_CIPHER_get_iv_length(cipher)
86         }
87 
88         #[inline]
89         pub unsafe fn EVP_CIPHER_nid(cipher: *const EVP_CIPHER) -> c_int {
90             EVP_CIPHER_get_nid(cipher)
91         }
92 
93         #[inline]
94         pub unsafe fn EVP_CIPHER_CTX_block_size(ctx: *const EVP_CIPHER_CTX) -> c_int {
95             EVP_CIPHER_CTX_get_block_size(ctx)
96         }
97 
98         #[inline]
99         pub unsafe fn EVP_CIPHER_CTX_key_length(ctx: *const EVP_CIPHER_CTX) -> c_int {
100             EVP_CIPHER_CTX_get_key_length(ctx)
101         }
102 
103         #[inline]
104         pub unsafe fn EVP_CIPHER_CTX_iv_length(ctx: *const EVP_CIPHER_CTX) -> c_int {
105             EVP_CIPHER_CTX_get_iv_length(ctx)
106         }
107 
108         #[inline]
109         pub unsafe fn EVP_CIPHER_CTX_num(ctx: *const EVP_CIPHER_CTX) -> c_int {
110             EVP_CIPHER_CTX_get_num(ctx)
111         }
112     } else {
113         pub unsafe fn EVP_MD_CTX_size(ctx: *const EVP_MD_CTX) -> c_int {
114             EVP_MD_size(EVP_MD_CTX_md(ctx))
115         }
116     }
117 }
118 #[cfg(not(ossl300))]
119 #[inline]
EVP_DigestSignUpdate( ctx: *mut EVP_MD_CTX, data: *const c_void, dsize: size_t, ) -> c_int120 pub unsafe fn EVP_DigestSignUpdate(
121     ctx: *mut EVP_MD_CTX,
122     data: *const c_void,
123     dsize: size_t,
124 ) -> c_int {
125     EVP_DigestUpdate(ctx, data, dsize)
126 }
127 #[cfg(not(ossl300))]
128 #[inline]
EVP_DigestVerifyUpdate( ctx: *mut EVP_MD_CTX, data: *const c_void, dsize: size_t, ) -> c_int129 pub unsafe fn EVP_DigestVerifyUpdate(
130     ctx: *mut EVP_MD_CTX,
131     data: *const c_void,
132     dsize: size_t,
133 ) -> c_int {
134     EVP_DigestUpdate(ctx, data, dsize)
135 }
136 #[cfg(ossl300)]
137 #[inline]
EVP_PKEY_size(pkey: *const EVP_PKEY) -> c_int138 pub unsafe fn EVP_PKEY_size(pkey: *const EVP_PKEY) -> c_int {
139     EVP_PKEY_get_size(pkey)
140 }
141 
142 cfg_if! {
143     if #[cfg(ossl300)] {
144         #[inline]
145         pub unsafe fn EVP_PKEY_id(pkey: *const EVP_PKEY) -> c_int {
146             EVP_PKEY_get_id(pkey)
147         }
148 
149         #[inline]
150         pub unsafe fn EVP_PKEY_bits(pkey: *const EVP_PKEY) -> c_int {
151             EVP_PKEY_get_bits(pkey)
152         }
153 
154         #[inline]
155         pub unsafe fn EVP_PKEY_security_bits(pkey: *const EVP_PKEY) -> c_int {
156             EVP_PKEY_get_security_bits(pkey)
157         }
158     }
159 }
160 
161 pub const EVP_PKEY_OP_KEYGEN: c_int = 1 << 2;
162 cfg_if! {
163     if #[cfg(ossl300)] {
164         pub const EVP_PKEY_OP_SIGN: c_int = 1 << 4;
165         pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 5;
166         pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 6;
167         pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 7;
168         pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 8;
169         pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 9;
170         pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 10;
171         pub const EVP_PKEY_OP_DERIVE: c_int = 1 << 11;
172     } else {
173         pub const EVP_PKEY_OP_SIGN: c_int = 1 << 3;
174         pub const EVP_PKEY_OP_VERIFY: c_int = 1 << 4;
175         pub const EVP_PKEY_OP_VERIFYRECOVER: c_int = 1 << 5;
176         pub const EVP_PKEY_OP_SIGNCTX: c_int = 1 << 6;
177         pub const EVP_PKEY_OP_VERIFYCTX: c_int = 1 << 7;
178         pub const EVP_PKEY_OP_ENCRYPT: c_int = 1 << 8;
179         pub const EVP_PKEY_OP_DECRYPT: c_int = 1 << 9;
180         pub const EVP_PKEY_OP_DERIVE: c_int = 1 << 10;
181     }
182 }
183 
184 pub const EVP_PKEY_OP_TYPE_SIG: c_int = EVP_PKEY_OP_SIGN
185     | EVP_PKEY_OP_VERIFY
186     | EVP_PKEY_OP_VERIFYRECOVER
187     | EVP_PKEY_OP_SIGNCTX
188     | EVP_PKEY_OP_VERIFYCTX;
189 
190 pub const EVP_PKEY_OP_TYPE_CRYPT: c_int = EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT;
191 
192 pub const EVP_PKEY_CTRL_MD: c_int = 1;
193 
194 pub const EVP_PKEY_CTRL_SET_MAC_KEY: c_int = 6;
195 
196 pub const EVP_PKEY_CTRL_CIPHER: c_int = 12;
197 
198 pub const EVP_PKEY_ALG_CTRL: c_int = 0x1000;
199 
200 #[cfg(ossl111)]
201 pub const EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND: c_int = 0;
202 
203 #[cfg(ossl111)]
204 pub const EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY: c_int = 1;
205 
206 #[cfg(ossl111)]
207 pub const EVP_PKEY_HKDEF_MODE_EXPAND_ONLY: c_int = 2;
208 
209 #[cfg(ossl110)]
210 pub const EVP_PKEY_CTRL_HKDF_MD: c_int = EVP_PKEY_ALG_CTRL + 3;
211 
212 #[cfg(ossl110)]
213 pub const EVP_PKEY_CTRL_HKDF_SALT: c_int = EVP_PKEY_ALG_CTRL + 4;
214 
215 #[cfg(ossl110)]
216 pub const EVP_PKEY_CTRL_HKDF_KEY: c_int = EVP_PKEY_ALG_CTRL + 5;
217 
218 #[cfg(ossl110)]
219 pub const EVP_PKEY_CTRL_HKDF_INFO: c_int = EVP_PKEY_ALG_CTRL + 6;
220 
221 #[cfg(ossl111)]
222 pub const EVP_PKEY_CTRL_HKDF_MODE: c_int = EVP_PKEY_ALG_CTRL + 7;
223 
224 #[cfg(all(ossl111, not(ossl300)))]
EVP_PKEY_CTX_set_hkdf_mode(ctx: *mut EVP_PKEY_CTX, mode: c_int) -> c_int225 pub unsafe fn EVP_PKEY_CTX_set_hkdf_mode(ctx: *mut EVP_PKEY_CTX, mode: c_int) -> c_int {
226     EVP_PKEY_CTX_ctrl(
227         ctx,
228         -1,
229         EVP_PKEY_OP_DERIVE,
230         EVP_PKEY_CTRL_HKDF_MODE,
231         mode,
232         std::ptr::null_mut(),
233     )
234 }
235 
236 #[cfg(all(ossl110, not(ossl300)))]
EVP_PKEY_CTX_set_hkdf_md(ctx: *mut EVP_PKEY_CTX, md: *const EVP_MD) -> c_int237 pub unsafe fn EVP_PKEY_CTX_set_hkdf_md(ctx: *mut EVP_PKEY_CTX, md: *const EVP_MD) -> c_int {
238     EVP_PKEY_CTX_ctrl(
239         ctx,
240         -1,
241         EVP_PKEY_OP_DERIVE,
242         EVP_PKEY_CTRL_HKDF_MD,
243         0,
244         md as *mut c_void,
245     )
246 }
247 
248 #[cfg(all(ossl110, not(ossl300)))]
EVP_PKEY_CTX_set1_hkdf_salt( ctx: *mut EVP_PKEY_CTX, salt: *const u8, saltlen: c_int, ) -> c_int249 pub unsafe fn EVP_PKEY_CTX_set1_hkdf_salt(
250     ctx: *mut EVP_PKEY_CTX,
251     salt: *const u8,
252     saltlen: c_int,
253 ) -> c_int {
254     EVP_PKEY_CTX_ctrl(
255         ctx,
256         -1,
257         EVP_PKEY_OP_DERIVE,
258         EVP_PKEY_CTRL_HKDF_SALT,
259         saltlen,
260         salt as *mut c_void,
261     )
262 }
263 
264 #[cfg(all(ossl110, not(ossl300)))]
EVP_PKEY_CTX_set1_hkdf_key( ctx: *mut EVP_PKEY_CTX, key: *const u8, keylen: c_int, ) -> c_int265 pub unsafe fn EVP_PKEY_CTX_set1_hkdf_key(
266     ctx: *mut EVP_PKEY_CTX,
267     key: *const u8,
268     keylen: c_int,
269 ) -> c_int {
270     EVP_PKEY_CTX_ctrl(
271         ctx,
272         -1,
273         EVP_PKEY_OP_DERIVE,
274         EVP_PKEY_CTRL_HKDF_KEY,
275         keylen,
276         key as *mut c_void,
277     )
278 }
279 
280 #[cfg(all(ossl110, not(ossl300)))]
EVP_PKEY_CTX_add1_hkdf_info( ctx: *mut EVP_PKEY_CTX, info: *const u8, infolen: c_int, ) -> c_int281 pub unsafe fn EVP_PKEY_CTX_add1_hkdf_info(
282     ctx: *mut EVP_PKEY_CTX,
283     info: *const u8,
284     infolen: c_int,
285 ) -> c_int {
286     EVP_PKEY_CTX_ctrl(
287         ctx,
288         -1,
289         EVP_PKEY_OP_DERIVE,
290         EVP_PKEY_CTRL_HKDF_INFO,
291         infolen,
292         info as *mut c_void,
293     )
294 }
295 
296 #[cfg(all(not(ossl300), not(boringssl)))]
EVP_PKEY_CTX_set_signature_md(cxt: *mut EVP_PKEY_CTX, md: *mut EVP_MD) -> c_int297 pub unsafe fn EVP_PKEY_CTX_set_signature_md(cxt: *mut EVP_PKEY_CTX, md: *mut EVP_MD) -> c_int {
298     EVP_PKEY_CTX_ctrl(
299         cxt,
300         -1,
301         EVP_PKEY_OP_TYPE_SIG,
302         EVP_PKEY_CTRL_MD,
303         0,
304         md as *mut c_void,
305     )
306 }
307 
EVP_PKEY_assign_RSA(pkey: *mut EVP_PKEY, rsa: *mut RSA) -> c_int308 pub unsafe fn EVP_PKEY_assign_RSA(pkey: *mut EVP_PKEY, rsa: *mut RSA) -> c_int {
309     EVP_PKEY_assign(pkey, EVP_PKEY_RSA, rsa as *mut c_void)
310 }
311 
EVP_PKEY_assign_DSA(pkey: *mut EVP_PKEY, dsa: *mut DSA) -> c_int312 pub unsafe fn EVP_PKEY_assign_DSA(pkey: *mut EVP_PKEY, dsa: *mut DSA) -> c_int {
313     EVP_PKEY_assign(pkey, EVP_PKEY_DSA, dsa as *mut c_void)
314 }
315 
EVP_PKEY_assign_DH(pkey: *mut EVP_PKEY, dh: *mut DH) -> c_int316 pub unsafe fn EVP_PKEY_assign_DH(pkey: *mut EVP_PKEY, dh: *mut DH) -> c_int {
317     EVP_PKEY_assign(pkey, EVP_PKEY_DH, dh as *mut c_void)
318 }
319 
EVP_PKEY_assign_EC_KEY(pkey: *mut EVP_PKEY, ec_key: *mut EC_KEY) -> c_int320 pub unsafe fn EVP_PKEY_assign_EC_KEY(pkey: *mut EVP_PKEY, ec_key: *mut EC_KEY) -> c_int {
321     EVP_PKEY_assign(pkey, EVP_PKEY_EC, ec_key as *mut c_void)
322 }
323