diff options
author | jsing <> | 2022-09-04 08:18:07 +0000 |
---|---|---|
committer | jsing <> | 2022-09-04 08:18:07 +0000 |
commit | 2bca87d03ddc64d23589b89c1d3668c43ae06bcb (patch) | |
tree | da75a633abc6924aa21857b55102b022e915b424 | |
parent | 02944a9859a546d84ce056fb2c8df1832dba3fc4 (diff) | |
download | openbsd-2bca87d03ddc64d23589b89c1d3668c43ae06bcb.tar.gz openbsd-2bca87d03ddc64d23589b89c1d3668c43ae06bcb.tar.bz2 openbsd-2bca87d03ddc64d23589b89c1d3668c43ae06bcb.zip |
Mechanically expand BLOCK_CIPHER_* ciphers.
This includes the wonderful BLOCK_CIPHER_ecb_loop - a for loop in a macro.
No change in generated assembly.
-rw-r--r-- | src/lib/libcrypto/evp/e_des.c | 162 |
1 files changed, 145 insertions, 17 deletions
diff --git a/src/lib/libcrypto/evp/e_des.c b/src/lib/libcrypto/evp/e_des.c index 118e59695f..1064c0b7cc 100644 --- a/src/lib/libcrypto/evp/e_des.c +++ b/src/lib/libcrypto/evp/e_des.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: e_des.c,v 1.15 2022/09/03 20:12:24 jsing Exp $ */ | 1 | /* $OpenBSD: e_des.c,v 1.16 2022/09/04 08:18:07 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -76,7 +76,16 @@ static int | |||
76 | des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 76 | des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
77 | const unsigned char *in, size_t inl) | 77 | const unsigned char *in, size_t inl) |
78 | { | 78 | { |
79 | BLOCK_CIPHER_ecb_loop() | 79 | size_t i, bl; |
80 | |||
81 | bl = ctx->cipher->block_size; | ||
82 | |||
83 | if (inl < bl) | ||
84 | return 1; | ||
85 | |||
86 | inl -= bl; | ||
87 | |||
88 | for (i = 0; i <= inl; i += bl) | ||
80 | DES_ecb_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), | 89 | DES_ecb_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), |
81 | ctx->cipher_data, ctx->encrypt); | 90 | ctx->cipher_data, ctx->encrypt); |
82 | return 1; | 91 | return 1; |
@@ -181,21 +190,140 @@ des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
181 | return 1; | 190 | return 1; |
182 | } | 191 | } |
183 | 192 | ||
184 | BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, | 193 | static const EVP_CIPHER des_cbc = { |
185 | EVP_CIPH_RAND_KEY, des_init_key, NULL, | 194 | .nid = NID_des_cbc, |
186 | EVP_CIPHER_set_asn1_iv, | 195 | .block_size = 8, |
187 | EVP_CIPHER_get_asn1_iv, | 196 | .key_len = 8, |
188 | des_ctrl) | 197 | .iv_len = 8, |
189 | 198 | .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CBC_MODE, | |
190 | BLOCK_CIPHER_def_cfb(des, DES_key_schedule, NID_des, 8, 8, 1, | 199 | .init = des_init_key, |
191 | EVP_CIPH_RAND_KEY, des_init_key, NULL, | 200 | .do_cipher = des_cbc_cipher, |
192 | EVP_CIPHER_set_asn1_iv, | 201 | .cleanup = NULL, |
193 | EVP_CIPHER_get_asn1_iv, des_ctrl) | 202 | .ctx_size = sizeof(DES_key_schedule), |
194 | 203 | .set_asn1_parameters = EVP_CIPHER_set_asn1_iv, | |
195 | BLOCK_CIPHER_def_cfb(des, DES_key_schedule, NID_des, 8, 8, 8, | 204 | .get_asn1_parameters = EVP_CIPHER_get_asn1_iv, |
196 | EVP_CIPH_RAND_KEY, des_init_key, NULL, | 205 | .ctrl = des_ctrl, |
197 | EVP_CIPHER_set_asn1_iv, | 206 | .app_data = NULL, |
198 | EVP_CIPHER_get_asn1_iv, des_ctrl) | 207 | }; |
208 | |||
209 | const EVP_CIPHER * | ||
210 | EVP_des_cbc(void) | ||
211 | { | ||
212 | return &des_cbc; | ||
213 | } | ||
214 | |||
215 | static const EVP_CIPHER des_cfb64 = { | ||
216 | .nid = NID_des_cfb64, | ||
217 | .block_size = 1, | ||
218 | .key_len = 8, | ||
219 | .iv_len = 8, | ||
220 | .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE, | ||
221 | .init = des_init_key, | ||
222 | .do_cipher = des_cfb64_cipher, | ||
223 | .cleanup = NULL, | ||
224 | .ctx_size = sizeof(DES_key_schedule), | ||
225 | .set_asn1_parameters = EVP_CIPHER_set_asn1_iv, | ||
226 | .get_asn1_parameters = EVP_CIPHER_get_asn1_iv, | ||
227 | .ctrl = des_ctrl, | ||
228 | .app_data = NULL, | ||
229 | }; | ||
230 | |||
231 | const EVP_CIPHER * | ||
232 | EVP_des_cfb64(void) | ||
233 | { | ||
234 | return &des_cfb64; | ||
235 | } | ||
236 | |||
237 | static const EVP_CIPHER des_ofb = { | ||
238 | .nid = NID_des_ofb64, | ||
239 | .block_size = 1, | ||
240 | .key_len = 8, | ||
241 | .iv_len = 8, | ||
242 | .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_OFB_MODE, | ||
243 | .init = des_init_key, | ||
244 | .do_cipher = des_ofb_cipher, | ||
245 | .cleanup = NULL, | ||
246 | .ctx_size = sizeof(DES_key_schedule), | ||
247 | .set_asn1_parameters = EVP_CIPHER_set_asn1_iv, | ||
248 | .get_asn1_parameters = EVP_CIPHER_get_asn1_iv, | ||
249 | .ctrl = des_ctrl, | ||
250 | .app_data = NULL, | ||
251 | }; | ||
252 | |||
253 | const EVP_CIPHER * | ||
254 | EVP_des_ofb(void) | ||
255 | { | ||
256 | return &des_ofb; | ||
257 | } | ||
258 | |||
259 | static const EVP_CIPHER des_ecb = { | ||
260 | .nid = NID_des_ecb, | ||
261 | .block_size = 8, | ||
262 | .key_len = 8, | ||
263 | .iv_len = 0, | ||
264 | .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_ECB_MODE, | ||
265 | .init = des_init_key, | ||
266 | .do_cipher = des_ecb_cipher, | ||
267 | .cleanup = NULL, | ||
268 | .ctx_size = sizeof(DES_key_schedule), | ||
269 | .set_asn1_parameters = EVP_CIPHER_set_asn1_iv, | ||
270 | .get_asn1_parameters = EVP_CIPHER_get_asn1_iv, | ||
271 | .ctrl = des_ctrl, | ||
272 | .app_data = NULL, | ||
273 | }; | ||
274 | |||
275 | const EVP_CIPHER * | ||
276 | EVP_des_ecb(void) | ||
277 | { | ||
278 | return &des_ecb; | ||
279 | } | ||
280 | |||
281 | |||
282 | static const EVP_CIPHER des_cfb1 = { | ||
283 | .nid = NID_des_cfb1, | ||
284 | .block_size = 1, | ||
285 | .key_len = 8, | ||
286 | .iv_len = 8, | ||
287 | .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE, | ||
288 | .init = des_init_key, | ||
289 | .do_cipher = des_cfb1_cipher, | ||
290 | .cleanup = NULL, | ||
291 | .ctx_size = sizeof(DES_key_schedule), | ||
292 | .set_asn1_parameters = EVP_CIPHER_set_asn1_iv, | ||
293 | .get_asn1_parameters = EVP_CIPHER_get_asn1_iv, | ||
294 | .ctrl = des_ctrl, | ||
295 | .app_data = NULL, | ||
296 | }; | ||
297 | |||
298 | const EVP_CIPHER * | ||
299 | EVP_des_cfb1(void) | ||
300 | { | ||
301 | return &des_cfb1; | ||
302 | } | ||
303 | |||
304 | |||
305 | static const EVP_CIPHER des_cfb8 = { | ||
306 | .nid = NID_des_cfb8, | ||
307 | .block_size = 1, | ||
308 | .key_len = 8, | ||
309 | .iv_len = 8, | ||
310 | .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE, | ||
311 | .init = des_init_key, | ||
312 | .do_cipher = des_cfb8_cipher, | ||
313 | .cleanup = NULL, | ||
314 | .ctx_size = sizeof(DES_key_schedule), | ||
315 | .set_asn1_parameters = EVP_CIPHER_set_asn1_iv, | ||
316 | .get_asn1_parameters = EVP_CIPHER_get_asn1_iv, | ||
317 | .ctrl = des_ctrl, | ||
318 | .app_data = NULL, | ||
319 | }; | ||
320 | |||
321 | const EVP_CIPHER * | ||
322 | EVP_des_cfb8(void) | ||
323 | { | ||
324 | return &des_cfb8; | ||
325 | } | ||
326 | |||
199 | 327 | ||
200 | static int | 328 | static int |
201 | des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 329 | des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |