From 6215e1d2e309ec939dddfb91f0bc0cbc2a16b962 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 10 Feb 2022 21:29:30 -0500 Subject: Use CRYPTOPP_ARM_NEON_AVAILABLE in sha.cpp --- sha.cpp | 51 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 11 deletions(-) (limited to 'sha.cpp') diff --git a/sha.cpp b/sha.cpp index 30d6529f..3388a442 100644 --- a/sha.cpp +++ b/sha.cpp @@ -258,8 +258,11 @@ std::string SHA1::AlgorithmProvider() const return "SSE2"; #endif #if CRYPTOGAMS_ARM_SHA1 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) return "NEON"; + else +# endif if (HasARMv7()) return "ARMv7"; #endif @@ -291,18 +294,22 @@ void SHA1::Transform(word32 *state, const word32 *data) return; } #endif +// Disabled at the moment due to MDC and SEAL failures #if CRYPTOGAMS_ARM_SHA1 && 0 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) { -# if defined(CRYPTOPP_LITTLE_ENDIAN) +# if defined(CRYPTOPP_LITTLE_ENDIAN) word32 dataBuf[16]; ByteReverse(dataBuf, data, SHA1::BLOCKSIZE); + cryptogams_sha1_block_data_order_neon(state, dataBuf, 1); +# else cryptogams_sha1_block_data_order_neon(state, data, 1); -# else - cryptogams_sha1_block_data_order_neon(state, data, 1); -# endif +# endif return; } + else +# endif if (HasARMv7()) { # if defined(CRYPTOPP_LITTLE_ENDIAN) @@ -339,11 +346,14 @@ size_t SHA1::HashMultipleBlocks(const word32 *input, size_t length) } #endif #if CRYPTOGAMS_ARM_SHA1 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) { cryptogams_sha1_block_data_order_neon(m_state, input, length / SHA1::BLOCKSIZE); return length & (SHA1::BLOCKSIZE - 1); } + else +# endif if (HasARMv7()) { cryptogams_sha1_block_data_order(m_state, input, length / SHA1::BLOCKSIZE); @@ -464,8 +474,11 @@ std::string SHA256_AlgorithmProvider() return "SSE2"; #endif #if CRYPTOGAMS_ARM_SHA256 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) return "NEON"; + else +# endif if (HasARMv7()) return "ARMv7"; #endif @@ -852,18 +865,22 @@ void SHA256::Transform(word32 *state, const word32 *data) return; } #endif +// Disabled at the moment due to MDC and SEAL failures #if CRYPTOGAMS_ARM_SHA256 && 0 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) { -# if defined(CRYPTOPP_LITTLE_ENDIAN) +# if defined(CRYPTOPP_LITTLE_ENDIAN) word32 dataBuf[16]; ByteReverse(dataBuf, data, SHA256::BLOCKSIZE); + cryptogams_sha256_block_data_order_neon(state, dataBuf, 1); +# else cryptogams_sha256_block_data_order_neon(state, data, 1); -# else - cryptogams_sha256_block_data_order_neon(state, data, 1); -# endif +# endif return; } + else +# endif if (HasARMv7()) { # if defined(CRYPTOPP_LITTLE_ENDIAN) @@ -915,11 +932,14 @@ size_t SHA256::HashMultipleBlocks(const word32 *input, size_t length) } #endif #if CRYPTOGAMS_ARM_SHA256 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) { cryptogams_sha256_block_data_order_neon(m_state, input, length / SHA256::BLOCKSIZE); return length & (SHA256::BLOCKSIZE - 1); } + else +# endif if (HasARMv7()) { cryptogams_sha256_block_data_order(m_state, input, length / SHA256::BLOCKSIZE); @@ -983,11 +1003,14 @@ size_t SHA224::HashMultipleBlocks(const word32 *input, size_t length) } #endif #if CRYPTOGAMS_ARM_SHA256 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) { cryptogams_sha256_block_data_order_neon(m_state, input, length / SHA256::BLOCKSIZE); return length & (SHA256::BLOCKSIZE - 1); } + else +# endif if (HasARMv7()) { cryptogams_sha256_block_data_order(m_state, input, length / SHA256::BLOCKSIZE); @@ -1039,8 +1062,11 @@ std::string SHA512_AlgorithmProvider() return "SSE2"; #endif #if CRYPTOGAMS_ARM_SHA512 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) return "NEON"; + else +# endif if (HasARMv7()) return "ARMv7"; #endif @@ -1351,17 +1377,20 @@ void SHA512::Transform(word64 *state, const word64 *data) } #endif #if CRYPTOGAMS_ARM_SHA512 +# if CRYPTOPP_ARM_NEON_AVAILABLE if (HasNEON()) { -# if (CRYPTOPP_LITTLE_ENDIAN) +# if (CRYPTOPP_LITTLE_ENDIAN) word64 dataBuf[16]; ByteReverse(dataBuf, data, SHA512::BLOCKSIZE); cryptogams_sha512_block_data_order_neon(state, dataBuf, 1); -# else +# else cryptogams_sha512_block_data_order_neon(state, data, 1); -# endif +# endif return; } + else +# endif if (HasARMv7()) { # if (CRYPTOPP_LITTLE_ENDIAN) -- cgit v1.2.1