17#if SYMCRYPT_CPU_ARM64 && SYMCRYPT_PLATFORM_WINDOWS
18#undef UNREFERENCED_PARAMETER
22#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
31 SYMCRYPT_CPU_FEATURE_NEON |
32 SYMCRYPT_CPU_FEATURE_NEON_AES |
33 SYMCRYPT_CPU_FEATURE_NEON_PMULL |
34 SYMCRYPT_CPU_FEATURE_NEON_SHA256
41#elif SYMCRYPT_CPU_ARM64 && SYMCRYPT_GNUC
43#if SYMCRYPT_PLATFORM_APPLE
44#include <sys/sysctl.h>
58 size_t len =
sizeof(has_feature);
61 if( sysctlbyname(
"hw.optional.arm.FEAT_AES", &has_feature, &
len,
NULL, 0) == 0 && has_feature )
63 result &= ~SYMCRYPT_CPU_FEATURE_NEON_AES;
68 len =
sizeof(has_feature);
69 if( sysctlbyname(
"hw.optional.arm.FEAT_PMULL", &has_feature, &
len,
NULL, 0) == 0 && has_feature )
71 result &= ~SYMCRYPT_CPU_FEATURE_NEON_PMULL;
76 len =
sizeof(has_feature);
77 if( sysctlbyname(
"hw.optional.arm.FEAT_SHA256", &has_feature, &
len,
NULL, 0) == 0 && has_feature )
79 result &= ~SYMCRYPT_CPU_FEATURE_NEON_SHA256;
90#define HWCAP_AES (1 << 3)
91#define HWCAP_PMULL (1 << 4)
92#define HWCAP_SHA2 (1 << 6)
98 unsigned long hwcaps = getauxval( AT_HWCAP );
101 SYMCRYPT_CPU_FEATURE_NEON |
102 SYMCRYPT_CPU_FEATURE_NEON_AES |
103 SYMCRYPT_CPU_FEATURE_NEON_PMULL |
104 SYMCRYPT_CPU_FEATURE_NEON_SHA256
111 if( !(hwcaps & HWCAP_AES) )
113 result |= SYMCRYPT_CPU_FEATURE_NEON_AES;
116 if( !(hwcaps & HWCAP_PMULL) )
118 result |= SYMCRYPT_CPU_FEATURE_NEON_PMULL;
121 if( !(hwcaps & HWCAP_SHA2) )
123 result |= SYMCRYPT_CPU_FEATURE_NEON_SHA256;
BOOL WINAPI IsProcessorFeaturePresent(IN DWORD ProcessorFeature)
VOID SYMCRYPT_CALL SymCryptDetectCpuFeaturesFromIsProcessorFeaturePresent(void)
UINT32 SYMCRYPT_CPU_FEATURES
SYMCRYPT_CPU_FEATURES g_SymCryptCpuFeaturesNotPresent
#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE