summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2025-05-19 03:55:09 +0000
committerjsing <>2025-05-19 03:55:09 +0000
commitd3be13ea69460bd1cf2b43c5af62e441ad586942 (patch)
tree54d0b7d13be221d4b222e3b498e5d706d0fa82e2
parentdbe0564d1cb9d64e3c92a2a76d70de8f71f75b6a (diff)
downloadopenbsd-d3be13ea69460bd1cf2b43c5af62e441ad586942.tar.gz
openbsd-d3be13ea69460bd1cf2b43c5af62e441ad586942.tar.bz2
openbsd-d3be13ea69460bd1cf2b43c5af62e441ad586942.zip
Simplify EVP AES code for OFB.
Provide AES-NI with its own aesni_ofb_cipher() and switch aes_ofb_cipher() to call AES_ofb128_encrypt() directly. ok joshua@ tb@
-rw-r--r--src/lib/libcrypto/evp/e_aes.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c
index b16a1e930e..d0bcb2b3dd 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.66 2025/05/19 01:49:23 jsing Exp $ */ 1/* $OpenBSD: e_aes.c,v 1.67 2025/05/19 03:55:09 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 *
@@ -278,6 +278,18 @@ aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
278} 278}
279 279
280static int 280static int
281aesni_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
282 const unsigned char *in, size_t len)
283{
284 EVP_AES_KEY *eak = ctx->cipher_data;
285
286 CRYPTO_ofb128_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num,
287 (block128_f)aesni_encrypt);
288
289 return 1;
290}
291
292static int
281aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 293aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
282 const unsigned char *iv, int enc) 294 const unsigned char *iv, int enc)
283{ 295{
@@ -452,10 +464,10 @@ static int
452aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 464aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
453 const unsigned char *in, size_t len) 465 const unsigned char *in, size_t len)
454{ 466{
455 EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data; 467 EVP_AES_KEY *eak = ctx->cipher_data;
468
469 AES_ofb128_encrypt(in, out, len, &eak->ks, ctx->iv, &ctx->num);
456 470
457 CRYPTO_ofb128_encrypt(in, out, len, &dat->ks, ctx->iv, &ctx->num,
458 dat->block);
459 return 1; 471 return 1;
460} 472}
461 473
@@ -602,7 +614,7 @@ static const EVP_CIPHER aesni_128_ofb = {
602 .iv_len = 16, 614 .iv_len = 16,
603 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_OFB_MODE, 615 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_OFB_MODE,
604 .init = aesni_init_key, 616 .init = aesni_init_key,
605 .do_cipher = aes_ofb_cipher, 617 .do_cipher = aesni_ofb_cipher,
606 .ctx_size = sizeof(EVP_AES_KEY), 618 .ctx_size = sizeof(EVP_AES_KEY),
607}; 619};
608#endif 620#endif
@@ -848,7 +860,7 @@ static const EVP_CIPHER aesni_192_ofb = {
848 .iv_len = 16, 860 .iv_len = 16,
849 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_OFB_MODE, 861 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_OFB_MODE,
850 .init = aesni_init_key, 862 .init = aesni_init_key,
851 .do_cipher = aes_ofb_cipher, 863 .do_cipher = aesni_ofb_cipher,
852 .ctx_size = sizeof(EVP_AES_KEY), 864 .ctx_size = sizeof(EVP_AES_KEY),
853}; 865};
854#endif 866#endif
@@ -1094,7 +1106,7 @@ static const EVP_CIPHER aesni_256_ofb = {
1094 .iv_len = 16, 1106 .iv_len = 16,
1095 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_OFB_MODE, 1107 .flags = EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_OFB_MODE,
1096 .init = aesni_init_key, 1108 .init = aesni_init_key,
1097 .do_cipher = aes_ofb_cipher, 1109 .do_cipher = aesni_ofb_cipher,
1098 .ctx_size = sizeof(EVP_AES_KEY), 1110 .ctx_size = sizeof(EVP_AES_KEY),
1099}; 1111};
1100#endif 1112#endif