From b9987fc344db0a0d2ec0cd61a170d20da9771240 Mon Sep 17 00:00:00 2001 From: Tom Cosgrove Date: Mon, 21 Feb 2022 12:26:11 +0000 Subject: [PATCH] Handle MBEDTLS_SHA256_USE_A64_* on Windows on ARM64 too Signed-off-by: Tom Cosgrove --- include/mbedtls/check_config.h | 3 ++- library/sha256.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/mbedtls/check_config.h b/include/mbedtls/check_config.h index a645819881..5734500623 100644 --- a/include/mbedtls/check_config.h +++ b/include/mbedtls/check_config.h @@ -610,7 +610,8 @@ #endif #endif -#if defined(MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY) && !defined(__aarch64__) +#if defined(MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY) && \ + !defined(__aarch64__) && !defined(_M_ARM64) #error "MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY defined on non-Aarch64 system" #endif diff --git a/library/sha256.c b/library/sha256.c index 0db5f4d79d..307887bb3f 100644 --- a/library/sha256.c +++ b/library/sha256.c @@ -52,6 +52,11 @@ # if defined(MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT) && defined(__linux__) # include # endif +#elif defined(_M_ARM64) +# if defined(MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT) || \ + defined(MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY) +# include +# endif #else # undef MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY # undef MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT @@ -72,6 +77,16 @@ static int mbedtls_a64_crypto_sha256_check_support( void ) { return( 1 ); } +#elif defined(_M_ARM64) +#define WIN32_LEAN_AND_MEAN +#include +#include + +static int mbedtls_a64_crypto_sha256_check_support( void ) +{ + return( IsProcessorFeaturePresent( PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE ) ? + 1 : 0 ); +} #elif defined(__unix__) && defined(SIG_SETMASK) /* Detection with SIGILL, setjmp() and longjmp() */ #include