summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/e_aes.c
diff options
context:
space:
mode:
authorjsing <>2025-05-19 01:49:23 +0000
committerjsing <>2025-05-19 01:49:23 +0000
commitdbe0564d1cb9d64e3c92a2a76d70de8f71f75b6a (patch)
treeee91a9ff0248f5701535d28cb535254d0e55e5ed /src/lib/libcrypto/evp/e_aes.c
parentacc0eedcf426632ede939ed94b1e1299e1ae3e05 (diff)
downloadopenbsd-dbe0564d1cb9d64e3c92a2a76d70de8f71f75b6a.tar.gz
openbsd-dbe0564d1cb9d64e3c92a2a76d70de8f71f75b6a.tar.bz2
openbsd-dbe0564d1cb9d64e3c92a2a76d70de8f71f75b6a.zip
Simplify EVP AES code for CFB.
Provide AES-NI with its own aesni_cfb*_cipher() functions, which then allows us to change the existing aes_cfb*_cipher() functions to () to call AES_cfb*_encrypt() directly. ok beck@ tb@
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/evp/e_aes.c104
1 files changed, 79 insertions, 25 deletions
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c
index 23710a5a9b..b16a1e930e 100644
--- a/src/lib/libcrypto/evp/e_aes.c
+++ b/src/lib/libcrypto/evp/e_aes.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_aes.c,v 1.65 2025/05/18 11:11:12 jsing Exp $ */ 1/* $OpenBSD: e_aes.c,v 1.66 2025/05/19 01:49:23 jsing Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -198,6 +198,57 @@ aesni_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
198} 198}
199 199
200static int 200static int
201aesni_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
202 const unsigned char *in, size_t len)
203{
204 EVP_AES_KEY *eak = ctx->cipher_data;
205
206 CRYPTO_cfb128_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num,
207 ctx->encrypt, (block128_f)aesni_encrypt);
208
209 return 1;
210}
211
212static int
213aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
214 const unsigned char *in, size_t len)
215{
216 EVP_AES_KEY *eak = ctx->cipher_data;
217
218 CRYPTO_cfb128_8_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num,
219 ctx->encrypt, (block128_f)aesni_encrypt);
220
221 return 1;
222}
223
224static int
225aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
226 const unsigned char *in, size_t len)
227{
228 EVP_AES_KEY *eak = ctx->cipher_data;
229
230 if ((ctx->flags & EVP_CIPH_FLAG_LENGTH_BITS) != 0) {
231 CRYPTO_cfb128_1_encrypt(in, out, len, &eak->ks, ctx->iv,
232 &ctx->num, ctx->encrypt, (block128_f)aesni_encrypt);
233 return 1;
234 }
235
236 while (len >= MAXBITCHUNK) {
237 CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &eak->ks,
238 ctx->iv, &ctx->num, ctx->encrypt, (block128_f)aesni_encrypt);
239 len -= MAXBITCHUNK;
240 in += MAXBITCHUNK;
241 out += MAXBITCHUNK;
242 }
243 if (len > 0) {
244 CRYPTO_cfb128_1_encrypt(in, out, len * 8, &eak->ks,
245 ctx->iv, &ctx->num, ctx->encrypt, (block128_f)aesni_encrypt);
246 }
247
248 return 1;
249}
250
251static int
201aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 252aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
202 const unsigned char *in, size_t len) 253 const unsigned char *in, size_t len)
203{ 254{
@@ -412,10 +463,11 @@ static int
412aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 463aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
413 const unsigned char *in, size_t len) 464 const unsigned char *in, size_t len)
414{ 465{
415 EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data; 466 EVP_AES_KEY *eak = ctx->cipher_data;
467
468 AES_cfb128_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num,
469 ctx->encrypt);
416 470
417 CRYPTO_cfb128_encrypt(in, out, len, &dat->ks, ctx->iv, &ctx->num,
418 ctx->encrypt, dat->block);
419 return 1; 471 return 1;
420} 472}
421 473
@@ -423,10 +475,11 @@ static int
423aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 475aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
424 const unsigned char *in, size_t len) 476 const unsigned char *in, size_t len)
425{ 477{
426 EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data; 478 EVP_AES_KEY *eak = ctx->cipher_data;
479
480 AES_cfb8_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num,
481 ctx->encrypt);
427 482
428 CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks, ctx->iv, &ctx->num,
429 ctx->encrypt, dat->block);
430 return 1; 483 return 1;
431} 484}
432 485
@@ -434,24 +487,25 @@ static int
434aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 487aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
435 const unsigned char *in, size_t len) 488 const unsigned char *in, size_t len)
436{ 489{
437 EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data; 490 EVP_AES_KEY *eak = ctx->cipher_data;
438 491
439 if (ctx->flags&EVP_CIPH_FLAG_LENGTH_BITS) { 492 if ((ctx->flags & EVP_CIPH_FLAG_LENGTH_BITS) != 0) {
440 CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks, ctx->iv, 493 AES_cfb1_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num,
441 &ctx->num, ctx->encrypt, dat->block); 494 ctx->encrypt);
442 return 1; 495 return 1;
443 } 496 }
444 497
445 while (len >= MAXBITCHUNK) { 498 while (len >= MAXBITCHUNK) {
446 CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK*8, &dat->ks, 499 AES_cfb1_encrypt(in, out, MAXBITCHUNK * 8, &eak->ks, ctx->iv,
447 ctx->iv, &ctx->num, ctx->encrypt, dat->block); 500 &ctx->num, ctx->encrypt);
448 len -= MAXBITCHUNK; 501 len -= MAXBITCHUNK;
449 in += MAXBITCHUNK; 502 in += MAXBITCHUNK;
450 out += MAXBITCHUNK; 503 out += MAXBITCHUNK;
451 } 504 }
452 if (len) 505 if (len > 0) {
453 CRYPTO_cfb128_1_encrypt(in, out, len*8, &dat->ks, 506 AES_cfb1_encrypt(in, out, len * 8, &eak->ks, ctx->iv, &ctx->num,
454 ctx->iv, &ctx->num, ctx->encrypt, dat->block); 507 ctx->encrypt);
508 }
455 509
456 return 1; 510 return 1;
457} 511}
@@ -583,7 +637,7 @@ static const EVP_CIPHER aesni_128_cfb = {
583 .iv_len = 16, 637 .iv_len = 16,
584 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CFB_MODE, 638 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CFB_MODE,
585 .init = aesni_init_key, 639 .init = aesni_init_key,
586 .do_cipher = aes_cfb_cipher, 640 .do_cipher = aesni_cfb_cipher,
587 .ctx_size = sizeof(EVP_AES_KEY), 641 .ctx_size = sizeof(EVP_AES_KEY),
588}; 642};
589#endif 643#endif
@@ -618,7 +672,7 @@ static const EVP_CIPHER aesni_128_cfb1 = {
618 .iv_len = 16, 672 .iv_len = 16,
619 .flags = EVP_CIPH_CFB_MODE, 673 .flags = EVP_CIPH_CFB_MODE,
620 .init = aesni_init_key, 674 .init = aesni_init_key,
621 .do_cipher = aes_cfb1_cipher, 675 .do_cipher = aesni_cfb1_cipher,
622 .ctx_size = sizeof(EVP_AES_KEY), 676 .ctx_size = sizeof(EVP_AES_KEY),
623}; 677};
624#endif 678#endif
@@ -653,7 +707,7 @@ static const EVP_CIPHER aesni_128_cfb8 = {
653 .iv_len = 16, 707 .iv_len = 16,
654 .flags = EVP_CIPH_CFB_MODE, 708 .flags = EVP_CIPH_CFB_MODE,
655 .init = aesni_init_key, 709 .init = aesni_init_key,
656 .do_cipher = aes_cfb8_cipher, 710 .do_cipher = aesni_cfb8_cipher,
657 .ctx_size = sizeof(EVP_AES_KEY), 711 .ctx_size = sizeof(EVP_AES_KEY),
658}; 712};
659#endif 713#endif
@@ -829,7 +883,7 @@ static const EVP_CIPHER aesni_192_cfb = {
829 .iv_len = 16, 883 .iv_len = 16,
830 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CFB_MODE, 884 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CFB_MODE,
831 .init = aesni_init_key, 885 .init = aesni_init_key,
832 .do_cipher = aes_cfb_cipher, 886 .do_cipher = aesni_cfb_cipher,
833 .ctx_size = sizeof(EVP_AES_KEY), 887 .ctx_size = sizeof(EVP_AES_KEY),
834}; 888};
835#endif 889#endif
@@ -864,7 +918,7 @@ static const EVP_CIPHER aesni_192_cfb1 = {
864 .iv_len = 16, 918 .iv_len = 16,
865 .flags = EVP_CIPH_CFB_MODE, 919 .flags = EVP_CIPH_CFB_MODE,
866 .init = aesni_init_key, 920 .init = aesni_init_key,
867 .do_cipher = aes_cfb1_cipher, 921 .do_cipher = aesni_cfb1_cipher,
868 .ctx_size = sizeof(EVP_AES_KEY), 922 .ctx_size = sizeof(EVP_AES_KEY),
869}; 923};
870#endif 924#endif
@@ -899,7 +953,7 @@ static const EVP_CIPHER aesni_192_cfb8 = {
899 .iv_len = 16, 953 .iv_len = 16,
900 .flags = EVP_CIPH_CFB_MODE, 954 .flags = EVP_CIPH_CFB_MODE,
901 .init = aesni_init_key, 955 .init = aesni_init_key,
902 .do_cipher = aes_cfb8_cipher, 956 .do_cipher = aesni_cfb8_cipher,
903 .ctx_size = sizeof(EVP_AES_KEY), 957 .ctx_size = sizeof(EVP_AES_KEY),
904}; 958};
905#endif 959#endif
@@ -1075,7 +1129,7 @@ static const EVP_CIPHER aesni_256_cfb = {
1075 .iv_len = 16, 1129 .iv_len = 16,
1076 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CFB_MODE, 1130 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CFB_MODE,
1077 .init = aesni_init_key, 1131 .init = aesni_init_key,
1078 .do_cipher = aes_cfb_cipher, 1132 .do_cipher = aesni_cfb_cipher,
1079 .ctx_size = sizeof(EVP_AES_KEY), 1133 .ctx_size = sizeof(EVP_AES_KEY),
1080}; 1134};
1081#endif 1135#endif
@@ -1110,7 +1164,7 @@ static const EVP_CIPHER aesni_256_cfb1 = {
1110 .iv_len = 16, 1164 .iv_len = 16,
1111 .flags = EVP_CIPH_CFB_MODE, 1165 .flags = EVP_CIPH_CFB_MODE,
1112 .init = aesni_init_key, 1166 .init = aesni_init_key,
1113 .do_cipher = aes_cfb1_cipher, 1167 .do_cipher = aesni_cfb1_cipher,
1114 .ctx_size = sizeof(EVP_AES_KEY), 1168 .ctx_size = sizeof(EVP_AES_KEY),
1115}; 1169};
1116#endif 1170#endif
@@ -1145,7 +1199,7 @@ static const EVP_CIPHER aesni_256_cfb8 = {
1145 .iv_len = 16, 1199 .iv_len = 16,
1146 .flags = EVP_CIPH_CFB_MODE, 1200 .flags = EVP_CIPH_CFB_MODE,
1147 .init = aesni_init_key, 1201 .init = aesni_init_key,
1148 .do_cipher = aes_cfb8_cipher, 1202 .do_cipher = aesni_cfb8_cipher,
1149 .ctx_size = sizeof(EVP_AES_KEY), 1203 .ctx_size = sizeof(EVP_AES_KEY),
1150}; 1204};
1151#endif 1205#endif