mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-08-05 19:35:48 +03:00
Merge pull request #8209 from lpy4105/issue/8168/2.28_fix-aesni-selection
2.28: Fix AESNI selection
This commit is contained in:
@@ -36,16 +36,20 @@
|
|||||||
#define MBEDTLS_AESNI_AES 0x02000000u
|
#define MBEDTLS_AESNI_AES 0x02000000u
|
||||||
#define MBEDTLS_AESNI_CLMUL 0x00000002u
|
#define MBEDTLS_AESNI_CLMUL 0x00000002u
|
||||||
|
|
||||||
/* Can we do AESNI with inline assembly?
|
#if !defined(MBEDTLS_HAVE_X86_64) && \
|
||||||
* (Only implemented with gas syntax, only for 64-bit.)
|
(defined(__amd64__) || defined(__x86_64__) || \
|
||||||
*/
|
defined(_M_X64) || defined(_M_AMD64)) && \
|
||||||
#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && \
|
!defined(_M_ARM64EC)
|
||||||
(defined(__amd64__) || defined(__x86_64__)) && \
|
|
||||||
!defined(MBEDTLS_HAVE_X86_64)
|
|
||||||
#define MBEDTLS_HAVE_X86_64
|
#define MBEDTLS_HAVE_X86_64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_AESNI_C)
|
#if !defined(MBEDTLS_HAVE_X86) && \
|
||||||
|
(defined(__i386__) || defined(_M_IX86))
|
||||||
|
#define MBEDTLS_HAVE_X86
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_AESNI_C) && \
|
||||||
|
(defined(MBEDTLS_HAVE_X86_64) || defined(MBEDTLS_HAVE_X86))
|
||||||
|
|
||||||
/* Can we do AESNI with intrinsics?
|
/* Can we do AESNI with intrinsics?
|
||||||
* (Only implemented with certain compilers, only for certain targets.)
|
* (Only implemented with certain compilers, only for certain targets.)
|
||||||
@@ -72,7 +76,11 @@
|
|||||||
* favor the assembly-based implementation if it's available. We intend to
|
* favor the assembly-based implementation if it's available. We intend to
|
||||||
* revise this in a later release of Mbed TLS 3.x. In the long run, we will
|
* revise this in a later release of Mbed TLS 3.x. In the long run, we will
|
||||||
* likely remove the assembly implementation. */
|
* likely remove the assembly implementation. */
|
||||||
#if defined(MBEDTLS_HAVE_X86_64)
|
#if defined(MBEDTLS_HAVE_ASM) && \
|
||||||
|
defined(__GNUC__) && defined(MBEDTLS_HAVE_X86_64)
|
||||||
|
/* Can we do AESNI with inline assembly?
|
||||||
|
* (Only implemented with gas syntax, only for 64-bit.)
|
||||||
|
*/
|
||||||
#define MBEDTLS_AESNI_HAVE_CODE 1 // via assembly
|
#define MBEDTLS_AESNI_HAVE_CODE 1 // via assembly
|
||||||
#elif defined(MBEDTLS_AESNI_HAVE_INTRINSICS)
|
#elif defined(MBEDTLS_AESNI_HAVE_INTRINSICS)
|
||||||
#define MBEDTLS_AESNI_HAVE_CODE 2 // via intrinsics
|
#define MBEDTLS_AESNI_HAVE_CODE 2 // via intrinsics
|
||||||
@@ -168,6 +176,6 @@ int mbedtls_aesni_setkey_enc(unsigned char *rk,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* MBEDTLS_AESNI_HAVE_CODE */
|
#endif /* MBEDTLS_AESNI_HAVE_CODE */
|
||||||
#endif /* MBEDTLS_AESNI_C */
|
#endif /* MBEDTLS_AESNI_C && (MBEDTLS_HAVE_X86_64 || MBEDTLS_HAVE_X86) */
|
||||||
|
|
||||||
#endif /* MBEDTLS_AESNI_H */
|
#endif /* MBEDTLS_AESNI_H */
|
||||||
|
@@ -44,9 +44,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Some versions of ASan result in errors about not enough registers */
|
/* Some versions of ASan result in errors about not enough registers */
|
||||||
#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && defined(__i386__) && \
|
#if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_ASM) && \
|
||||||
|
defined(__GNUC__) && defined(__i386__) && \
|
||||||
!defined(MBEDTLS_HAVE_ASAN)
|
!defined(MBEDTLS_HAVE_ASAN)
|
||||||
|
|
||||||
|
#define MBEDTLS_VIA_PADLOCK_HAVE_CODE
|
||||||
|
|
||||||
#ifndef MBEDTLS_HAVE_X86
|
#ifndef MBEDTLS_HAVE_X86
|
||||||
#define MBEDTLS_HAVE_X86
|
#define MBEDTLS_HAVE_X86
|
||||||
#endif
|
#endif
|
||||||
@@ -120,6 +123,7 @@ int mbedtls_padlock_xcryptcbc(mbedtls_aes_context *ctx,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* HAVE_X86 */
|
#endif /* MBEDTLS_PADLOCK_C && MBEDTLS_HAVE_ASM &&
|
||||||
|
__GNUC__ && __i386__ && !MBEDTLS_HAVE_ASAN */
|
||||||
|
|
||||||
#endif /* padlock.h */
|
#endif /* padlock.h */
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
#define AES_VALIDATE(cond) \
|
#define AES_VALIDATE(cond) \
|
||||||
MBEDTLS_INTERNAL_VALIDATE(cond)
|
MBEDTLS_INTERNAL_VALIDATE(cond)
|
||||||
|
|
||||||
#if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE)
|
||||||
static int aes_padlock_ace = -1;
|
static int aes_padlock_ace = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -548,7 +548,7 @@ void mbedtls_aes_xts_free(mbedtls_aes_xts_context *ctx)
|
|||||||
* Note that the offset is in units of elements of buf, i.e. 32-bit words,
|
* Note that the offset is in units of elements of buf, i.e. 32-bit words,
|
||||||
* i.e. an offset of 1 means 4 bytes and so on.
|
* i.e. an offset of 1 means 4 bytes and so on.
|
||||||
*/
|
*/
|
||||||
#if (defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)) || \
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE) || \
|
||||||
(defined(MBEDTLS_AESNI_C) && MBEDTLS_AESNI_HAVE_CODE == 2)
|
(defined(MBEDTLS_AESNI_C) && MBEDTLS_AESNI_HAVE_CODE == 2)
|
||||||
#define MAY_NEED_TO_ALIGN
|
#define MAY_NEED_TO_ALIGN
|
||||||
#endif
|
#endif
|
||||||
@@ -560,7 +560,7 @@ static unsigned mbedtls_aes_rk_offset(uint32_t *buf)
|
|||||||
#if defined(MAY_NEED_TO_ALIGN)
|
#if defined(MAY_NEED_TO_ALIGN)
|
||||||
int align_16_bytes = 0;
|
int align_16_bytes = 0;
|
||||||
|
|
||||||
#if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE)
|
||||||
if (aes_padlock_ace == -1) {
|
if (aes_padlock_ace == -1) {
|
||||||
aes_padlock_ace = mbedtls_padlock_has_support(MBEDTLS_PADLOCK_ACE);
|
aes_padlock_ace = mbedtls_padlock_has_support(MBEDTLS_PADLOCK_ACE);
|
||||||
}
|
}
|
||||||
@@ -1076,7 +1076,7 @@ int mbedtls_aes_crypt_ecb(mbedtls_aes_context *ctx,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE)
|
||||||
if (aes_padlock_ace) {
|
if (aes_padlock_ace) {
|
||||||
return mbedtls_padlock_xcryptecb(ctx, mode, input, output);
|
return mbedtls_padlock_xcryptecb(ctx, mode, input, output);
|
||||||
}
|
}
|
||||||
@@ -1115,7 +1115,7 @@ int mbedtls_aes_crypt_cbc(mbedtls_aes_context *ctx,
|
|||||||
return MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH;
|
return MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE)
|
||||||
if (aes_padlock_ace) {
|
if (aes_padlock_ace) {
|
||||||
if (mbedtls_padlock_xcryptcbc(ctx, mode, length, iv, input, output) == 0) {
|
if (mbedtls_padlock_xcryptcbc(ctx, mode, length, iv, input, output) == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1875,7 +1875,7 @@ int mbedtls_aes_self_test(int verbose)
|
|||||||
#if defined(MBEDTLS_AES_ALT)
|
#if defined(MBEDTLS_AES_ALT)
|
||||||
mbedtls_printf(" AES note: alternative implementation.\n");
|
mbedtls_printf(" AES note: alternative implementation.\n");
|
||||||
#else /* MBEDTLS_AES_ALT */
|
#else /* MBEDTLS_AES_ALT */
|
||||||
#if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE)
|
||||||
if (mbedtls_padlock_has_support(MBEDTLS_PADLOCK_ACE)) {
|
if (mbedtls_padlock_has_support(MBEDTLS_PADLOCK_ACE)) {
|
||||||
mbedtls_printf(" AES note: using VIA Padlock.\n");
|
mbedtls_printf(" AES note: using VIA Padlock.\n");
|
||||||
} else
|
} else
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
#endif
|
#endif
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
|
||||||
#if defined(MBEDTLS_HAVE_X86)
|
#if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PadLock detection routine
|
* PadLock detection routine
|
||||||
@@ -161,6 +161,6 @@ int mbedtls_padlock_xcryptcbc(mbedtls_aes_context *ctx,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* MBEDTLS_HAVE_X86 */
|
#endif /* MBEDTLS_VIA_PADLOCK_HAVE_CODE */
|
||||||
|
|
||||||
#endif /* MBEDTLS_PADLOCK_C */
|
#endif /* MBEDTLS_PADLOCK_C */
|
||||||
|
Reference in New Issue
Block a user