Windows/Linux/macOS: implement AES hardware support on ARM64 (ARMv8)

This commit is contained in:
Mounir IDRASSI committed 2025-01-17 00:58:54 +01:00
1 parent c79f8102e0
commit 54bd819990
22 files changed
+492 -49

No files matched your search

+38
View File
@@ -469,3 +469,41 @@ void DisableCPUExtendedFeatures ()
#endif
#if CRYPTOPP_BOOL_ARMV8
volatile int g_hasAESARM = 0;
#ifndef HWCAP_AES
# define HWCAP_AES (1 << 3)
#endif
inline int CPU_QueryAES()
{
#if defined(CRYPTOPP_ARM_AES_AVAILABLE)
#if defined(__linux__) && defined(__aarch64__)
if ((getauxval(AT_HWCAP) & HWCAP_AES) != 0)
return 1;
#elif defined(__APPLE__) && defined(__aarch64__)
// Apple Sillcon (M1) and later
return 1;
#elif defined(_WIN32) && defined(_M_ARM64)
#ifdef TC_WINDOWS_DRIVER
if (ExIsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) != 0)
return 1;
#else
if (IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) != 0)
return 1;
#endif
#endif
return 0;
#else
return 0;
#endif
}
void DetectArmFeatures()
{
g_hasAESARM = CPU_QueryAES();
}
#endif