summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/e_des3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/e_des3.c')
-rw-r--r--src/lib/libcrypto/evp/e_des3.c257
1 files changed, 233 insertions, 24 deletions
diff --git a/src/lib/libcrypto/evp/e_des3.c b/src/lib/libcrypto/evp/e_des3.c
index cc01c69b5e..1d843d9c84 100644
--- a/src/lib/libcrypto/evp/e_des3.c
+++ b/src/lib/libcrypto/evp/e_des3.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_des3.c,v 1.21 2022/09/03 20:12:24 jsing Exp $ */ 1/* $OpenBSD: e_des3.c,v 1.22 2022/09/04 08:54:16 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 *
@@ -89,7 +89,16 @@ static int
89des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 89des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
90 const unsigned char *in, size_t inl) 90 const unsigned char *in, size_t inl)
91{ 91{
92 BLOCK_CIPHER_ecb_loop() 92 size_t i, bl;
93
94 bl = ctx->cipher->block_size;
95
96 if (inl < bl)
97 return 1;
98
99 inl -= bl;
100
101 for (i = 0; i <= inl; i += bl)
93 DES_ecb3_encrypt((const_DES_cblock *)(in + i), (DES_cblock *)(out + i), 102 DES_ecb3_encrypt((const_DES_cblock *)(in + i), (DES_cblock *)(out + i),
94 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, ctx->encrypt); 103 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, ctx->encrypt);
95 return 1; 104 return 1;
@@ -195,34 +204,234 @@ des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
195 return 1; 204 return 1;
196} 205}
197 206
198BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, 207static const EVP_CIPHER des_ede_cbc = {
199 EVP_CIPH_RAND_KEY, des_ede_init_key, NULL, 208 .nid = NID_des_ede_cbc,
200 EVP_CIPHER_set_asn1_iv, 209 .block_size = 8,
201 EVP_CIPHER_get_asn1_iv, 210 .key_len = 16,
202 des3_ctrl) 211 .iv_len = 8,
212 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CBC_MODE,
213 .init = des_ede_init_key,
214 .do_cipher = des_ede_cbc_cipher,
215 .cleanup = NULL,
216 .ctx_size = sizeof(DES_EDE_KEY),
217 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
218 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
219 .ctrl = des3_ctrl,
220 .app_data = NULL,
221};
222
223const EVP_CIPHER *
224EVP_des_ede_cbc(void)
225{
226 return &des_ede_cbc;
227}
228
229static const EVP_CIPHER des_ede_cfb64 = {
230 .nid = NID_des_ede_cfb64,
231 .block_size = 1,
232 .key_len = 16,
233 .iv_len = 8,
234 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
235 .init = des_ede_init_key,
236 .do_cipher = des_ede_cfb64_cipher,
237 .cleanup = NULL,
238 .ctx_size = sizeof(DES_EDE_KEY),
239 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
240 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
241 .ctrl = des3_ctrl,
242 .app_data = NULL,
243};
244
245const EVP_CIPHER *
246EVP_des_ede_cfb64(void)
247{
248 return &des_ede_cfb64;
249}
250
251static const EVP_CIPHER des_ede_ofb = {
252 .nid = NID_des_ede_ofb64,
253 .block_size = 1,
254 .key_len = 16,
255 .iv_len = 8,
256 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_OFB_MODE,
257 .init = des_ede_init_key,
258 .do_cipher = des_ede_ofb_cipher,
259 .cleanup = NULL,
260 .ctx_size = sizeof(DES_EDE_KEY),
261 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
262 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
263 .ctrl = des3_ctrl,
264 .app_data = NULL,
265};
266
267const EVP_CIPHER *
268EVP_des_ede_ofb(void)
269{
270 return &des_ede_ofb;
271}
272
273static const EVP_CIPHER des_ede_ecb = {
274 .nid = NID_des_ede_ecb,
275 .block_size = 8,
276 .key_len = 16,
277 .iv_len = 0,
278 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_ECB_MODE,
279 .init = des_ede_init_key,
280 .do_cipher = des_ede_ecb_cipher,
281 .cleanup = NULL,
282 .ctx_size = sizeof(DES_EDE_KEY),
283 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
284 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
285 .ctrl = des3_ctrl,
286 .app_data = NULL,
287};
288
289const EVP_CIPHER *
290EVP_des_ede_ecb(void)
291{
292 return &des_ede_ecb;
293}
294
203 295
204#define des_ede3_cfb64_cipher des_ede_cfb64_cipher 296#define des_ede3_cfb64_cipher des_ede_cfb64_cipher
205#define des_ede3_ofb_cipher des_ede_ofb_cipher 297#define des_ede3_ofb_cipher des_ede_ofb_cipher
206#define des_ede3_cbc_cipher des_ede_cbc_cipher 298#define des_ede3_cbc_cipher des_ede_cbc_cipher
207#define des_ede3_ecb_cipher des_ede_ecb_cipher 299#define des_ede3_ecb_cipher des_ede_ecb_cipher
208 300
209BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64, 301static const EVP_CIPHER des_ede3_cbc = {
210 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL, 302 .nid = NID_des_ede3_cbc,
211 EVP_CIPHER_set_asn1_iv, 303 .block_size = 8,
212 EVP_CIPHER_get_asn1_iv, 304 .key_len = 24,
213 des3_ctrl) 305 .iv_len = 8,
214 306 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CBC_MODE,
215BLOCK_CIPHER_def_cfb(des_ede3, DES_EDE_KEY, NID_des_ede3, 24, 8, 1, 307 .init = des_ede3_init_key,
216 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL, 308 .do_cipher = des_ede3_cbc_cipher,
217 EVP_CIPHER_set_asn1_iv, 309 .cleanup = NULL,
218 EVP_CIPHER_get_asn1_iv, 310 .ctx_size = sizeof(DES_EDE_KEY),
219 des3_ctrl) 311 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
220 312 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
221BLOCK_CIPHER_def_cfb(des_ede3, DES_EDE_KEY, NID_des_ede3, 24, 8, 8, 313 .ctrl = des3_ctrl,
222 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL, 314 .app_data = NULL,
223 EVP_CIPHER_set_asn1_iv, 315};
224 EVP_CIPHER_get_asn1_iv, 316
225 des3_ctrl) 317const EVP_CIPHER *
318EVP_des_ede3_cbc(void)
319{
320 return &des_ede3_cbc;
321}
322
323static const EVP_CIPHER des_ede3_cfb64 = {
324 .nid = NID_des_ede3_cfb64,
325 .block_size = 1,
326 .key_len = 24,
327 .iv_len = 8,
328 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
329 .init = des_ede3_init_key,
330 .do_cipher = des_ede3_cfb64_cipher,
331 .cleanup = NULL,
332 .ctx_size = sizeof(DES_EDE_KEY),
333 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
334 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
335 .ctrl = des3_ctrl,
336 .app_data = NULL,
337};
338
339const EVP_CIPHER *
340EVP_des_ede3_cfb64(void)
341{
342 return &des_ede3_cfb64;
343}
344
345static const EVP_CIPHER des_ede3_ofb = {
346 .nid = NID_des_ede3_ofb64,
347 .block_size = 1,
348 .key_len = 24,
349 .iv_len = 8,
350 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_OFB_MODE,
351 .init = des_ede3_init_key,
352 .do_cipher = des_ede3_ofb_cipher,
353 .cleanup = NULL,
354 .ctx_size = sizeof(DES_EDE_KEY),
355 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
356 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
357 .ctrl = des3_ctrl,
358 .app_data = NULL,
359};
360
361const EVP_CIPHER *
362EVP_des_ede3_ofb(void)
363{
364 return &des_ede3_ofb;
365}
366
367static const EVP_CIPHER des_ede3_ecb = {
368 .nid = NID_des_ede3_ecb,
369 .block_size = 8,
370 .key_len = 24,
371 .iv_len = 0,
372 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_ECB_MODE,
373 .init = des_ede3_init_key,
374 .do_cipher = des_ede3_ecb_cipher,
375 .cleanup = NULL,
376 .ctx_size = sizeof(DES_EDE_KEY),
377 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
378 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
379 .ctrl = des3_ctrl,
380 .app_data = NULL,
381};
382
383const EVP_CIPHER *
384EVP_des_ede3_ecb(void)
385{
386 return &des_ede3_ecb;
387}
388
389
390static const EVP_CIPHER des_ede3_cfb1 = {
391 .nid = NID_des_ede3_cfb1,
392 .block_size = 1,
393 .key_len = 24,
394 .iv_len = 8,
395 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
396 .init = des_ede3_init_key,
397 .do_cipher = des_ede3_cfb1_cipher,
398 .cleanup = NULL,
399 .ctx_size = sizeof(DES_EDE_KEY),
400 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
401 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
402 .ctrl = des3_ctrl,
403 .app_data = NULL,
404};
405
406const EVP_CIPHER *
407EVP_des_ede3_cfb1(void)
408{
409 return &des_ede3_cfb1;
410}
411
412
413static const EVP_CIPHER des_ede3_cfb8 = {
414 .nid = NID_des_ede3_cfb8,
415 .block_size = 1,
416 .key_len = 24,
417 .iv_len = 8,
418 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
419 .init = des_ede3_init_key,
420 .do_cipher = des_ede3_cfb8_cipher,
421 .cleanup = NULL,
422 .ctx_size = sizeof(DES_EDE_KEY),
423 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
424 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
425 .ctrl = des3_ctrl,
426 .app_data = NULL,
427};
428
429const EVP_CIPHER *
430EVP_des_ede3_cfb8(void)
431{
432 return &des_ede3_cfb8;
433}
434
226 435
227static int 436static int
228des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 437des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,