summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/arch
diff options
context:
space:
mode:
authorjsing <>2025-07-21 10:24:23 +0000
committerjsing <>2025-07-21 10:24:23 +0000
commitb73facdeca098be7e538e556c1a293942db3110c (patch)
treeff569faf5125c023700a2783ef5d648c47c81313 /src/lib/libcrypto/arch
parent32c75086555dc2a71cc1500a21b0d024fe48ceaf (diff)
downloadopenbsd-b73facdeca098be7e538e556c1a293942db3110c.tar.gz
openbsd-b73facdeca098be7e538e556c1a293942db3110c.tar.bz2
openbsd-b73facdeca098be7e538e556c1a293942db3110c.zip
Move AES-NI from EVP to AES for CCM mode.
The mode implementation for CCM has two variants - one takes the block function, while the other takes a "ccm64" function. The latter is expected to handle the lower 64 bits of the IV/counter but only for 16 byte blocks. The AES-NI implementation for CCM currently uses the second variant. Provide aes_ccm64_encrypt_internal() as a function that can be replaced on a machine dependent basis, along with an aes_ccm64_encrypt_generic() function that provides the default implementation and can be used as a fallback. Wire up the AES-NI version for amd64 and i386, change EVP's aes_ccm_cipher() to use CRYPTO_ctr128_{en,de}crypt_ccm64() with aes_ccm64_encrypt_internal()) and remove the various AES-NI specific EVP_CIPHER methods for CCM. ok tb@
Diffstat (limited to 'src/lib/libcrypto/arch')
-rw-r--r--src/lib/libcrypto/arch/amd64/crypto_arch.h3
-rw-r--r--src/lib/libcrypto/arch/i386/crypto_arch.h3
2 files changed, 4 insertions, 2 deletions
diff --git a/src/lib/libcrypto/arch/amd64/crypto_arch.h b/src/lib/libcrypto/arch/amd64/crypto_arch.h
index 7c3c89a088..a51021a307 100644
--- a/src/lib/libcrypto/arch/amd64/crypto_arch.h
+++ b/src/lib/libcrypto/arch/amd64/crypto_arch.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_arch.h,v 1.10 2025/07/13 06:01:33 jsing Exp $ */ 1/* $OpenBSD: crypto_arch.h,v 1.11 2025/07/21 10:24:23 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -38,6 +38,7 @@ extern uint64_t crypto_cpu_caps_amd64;
38#define HAVE_AES_ENCRYPT_INTERNAL 38#define HAVE_AES_ENCRYPT_INTERNAL
39#define HAVE_AES_DECRYPT_INTERNAL 39#define HAVE_AES_DECRYPT_INTERNAL
40#define HAVE_AES_CBC_ENCRYPT_INTERNAL 40#define HAVE_AES_CBC_ENCRYPT_INTERNAL
41#define HAVE_AES_CCM64_ENCRYPT_INTERNAL
41#define HAVE_AES_CTR32_ENCRYPT_INTERNAL 42#define HAVE_AES_CTR32_ENCRYPT_INTERNAL
42#define HAVE_AES_XTS_ENCRYPT_INTERNAL 43#define HAVE_AES_XTS_ENCRYPT_INTERNAL
43 44
diff --git a/src/lib/libcrypto/arch/i386/crypto_arch.h b/src/lib/libcrypto/arch/i386/crypto_arch.h
index 8b292165fb..34d041b382 100644
--- a/src/lib/libcrypto/arch/i386/crypto_arch.h
+++ b/src/lib/libcrypto/arch/i386/crypto_arch.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_arch.h,v 1.9 2025/07/13 06:01:33 jsing Exp $ */ 1/* $OpenBSD: crypto_arch.h,v 1.10 2025/07/21 10:24:23 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -38,6 +38,7 @@ extern uint64_t crypto_cpu_caps_i386;
38#define HAVE_AES_ENCRYPT_INTERNAL 38#define HAVE_AES_ENCRYPT_INTERNAL
39#define HAVE_AES_DECRYPT_INTERNAL 39#define HAVE_AES_DECRYPT_INTERNAL
40#define HAVE_AES_CBC_ENCRYPT_INTERNAL 40#define HAVE_AES_CBC_ENCRYPT_INTERNAL
41#define HAVE_AES_CCM64_ENCRYPT_INTERNAL
41#define HAVE_AES_CTR32_ENCRYPT_INTERNAL 42#define HAVE_AES_CTR32_ENCRYPT_INTERNAL
42#define HAVE_AES_XTS_ENCRYPT_INTERNAL 43#define HAVE_AES_XTS_ENCRYPT_INTERNAL
43 44