diff --git a/sha.cpp b/sha.cpp index d120bd93..b752ea24 100644 --- a/sha.cpp +++ b/sha.cpp @@ -60,7 +60,6 @@ #endif #if CRYPTOGAMS_ARM_SHA1 || CRYPTOGAMS_ARM_SHA256 || CRYPTOGAMS_ARM_SHA512 -extern "C" unsigned int CRYPTOGAMS_armcaps; unsigned int CRYPTOGAMS_armcaps = 0; #endif @@ -72,7 +71,7 @@ extern void SHA256_HashMultipleBlocks_SHANI(word32 *state, const word32 *data, s #endif #if CRYPTOGAMS_ARM_SHA1 -extern "C" void sha1_block_data_order(word32* state, const word32 *data, size_t blocks); +extern "C" void sha1_block_data_order(word32* state, const word32 *data, size_t blocks, unsigned int caps); #endif #if CRYPTOPP_ARM_SHA1_AVAILABLE @@ -84,7 +83,7 @@ extern void SHA256_HashMultipleBlocks_ARMV8(word32 *state, const word32 *data, s #endif #if CRYPTOGAMS_ARM_SHA256 -extern "C" void sha256_block_data_order(word32* state, const word32 *data, size_t blocks); +extern "C" void sha256_block_data_order(word32* state, const word32 *data, size_t blocks, unsigned int caps); #endif #if CRYPTOPP_ARM_SHA512_AVAILABLE @@ -97,7 +96,7 @@ extern void SHA512_HashMultipleBlocks_POWER8(word64 *state, const word64 *data, #endif #if CRYPTOGAMS_ARM_SHA512 -extern "C" void sha512_block_data_order(word64* state, const word64 *data, size_t blocks); +extern "C" void sha512_block_data_order(word64* state, const word64 *data, size_t blocks, unsigned int caps); #endif // We add extern to export table to sha_simd.cpp, but it @@ -315,14 +314,13 @@ void SHA1::Transform(word32 *state, const word32 *data) if (HasARMv7()) { static const unsigned int caps = CryptogamsArmCaps(); - CRYPTOPP_UNUSED(caps); # if defined(CRYPTOPP_LITTLE_ENDIAN) word32 dataBuf[16]; ByteReverse(dataBuf, data, SHA1::BLOCKSIZE); - sha1_block_data_order(state, data, 1); + sha1_block_data_order(state, data, 1, caps); # else - sha1_block_data_order(state, data, 1); + sha1_block_data_order(state, data, 1, caps); # endif return; } @@ -353,10 +351,8 @@ size_t SHA1::HashMultipleBlocks(const word32 *input, size_t length) #if CRYPTOGAMS_ARM_SHA1 if (HasARMv7()) { - static const unsigned int caps = CryptogamsArmCaps(); - CRYPTOPP_UNUSED(caps); - - sha1_block_data_order(m_state, input, length / SHA1::BLOCKSIZE); + const unsigned int caps = CryptogamsArmCaps(); + sha1_block_data_order(m_state, input, length / SHA1::BLOCKSIZE, caps); return length & (SHA1::BLOCKSIZE - 1); } #endif @@ -866,14 +862,13 @@ void SHA256::Transform(word32 *state, const word32 *data) if (HasARMv7()) { static const unsigned int caps = CryptogamsArmCaps(); - CRYPTOPP_UNUSED(caps); # if defined(CRYPTOPP_LITTLE_ENDIAN) word32 dataBuf[16]; ByteReverse(dataBuf, data, SHA256::BLOCKSIZE); - sha256_block_data_order(state, data, 1); + sha256_block_data_order(state, data, 1, caps); # else - sha256_block_data_order(state, data, 1); + sha256_block_data_order(state, data, 1, caps); # endif return; } @@ -919,10 +914,8 @@ size_t SHA256::HashMultipleBlocks(const word32 *input, size_t length) #if CRYPTOGAMS_ARM_SHA256 if (HasARMv7()) { - static const unsigned int caps = CryptogamsArmCaps(); - CRYPTOPP_UNUSED(caps); - - sha256_block_data_order(m_state, input, length / SHA256::BLOCKSIZE); + const unsigned int caps = CryptogamsArmCaps(); + sha256_block_data_order(m_state, input, length / SHA256::BLOCKSIZE, caps); return length & (SHA256::BLOCKSIZE - 1); } #endif @@ -986,9 +979,8 @@ size_t SHA224::HashMultipleBlocks(const word32 *input, size_t length) if (HasARMv7()) { static const unsigned int caps = CryptogamsArmCaps(); - CRYPTOPP_UNUSED(caps); - sha256_block_data_order(m_state, input, length / SHA256::BLOCKSIZE); + sha256_block_data_order(m_state, input, length / SHA256::BLOCKSIZE, caps);; return length & (SHA256::BLOCKSIZE - 1); } #endif @@ -1352,14 +1344,13 @@ void SHA512::Transform(word64 *state, const word64 *data) if (HasARMv7()) { static const unsigned int caps = CryptogamsArmCaps(); - CRYPTOPP_UNUSED(caps); # if defined(CRYPTOPP_LITTLE_ENDIAN) word64 dataBuf[16]; ByteReverse(dataBuf, data, SHA512::BLOCKSIZE); - sha512_block_data_order(state, dataBuf, 1); + sha512_block_data_order(state, dataBuf, 1, caps); # else - sha512_block_data_order(state, data, 1); + sha512_block_data_order(state, data, 1, caps); # endif return; } diff --git a/sha1_armv4.S b/sha1_armv4.S index e048adc3..1bcb83d4 100644 --- a/sha1_armv4.S +++ b/sha1_armv4.S @@ -64,10 +64,6 @@ # endif # endif -# ifndef __ASSEMBLER__ -extern unsigned int CRYPTOGAMS_armcaps; -# endif - # define ARMV7_NEON (1<<0) @ JW, MAY 2019: End defines from taken from arm_arch.h @@ -88,15 +84,7 @@ extern unsigned int CRYPTOGAMS_armcaps; .align 5 sha1_block_data_order: #if __ARM_MAX_ARCH__>=7 -.Lsha1_block: - ldr r12,.LCRYPTOGAMS_armcap_loc -# if !defined(_WIN32) - adr r3,.Lsha1_block - ldr r12,[r3,r12] @ CRYPTOGAMS_armcaps -# endif -# if defined(__APPLE__) || defined(_WIN32) - ldr r12,[r12] -# endif + mov r12,r3 tst r12,#ARMV7_NEON bne .LNEON #endif @@ -557,14 +545,6 @@ sha1_block_data_order: .LK_20_39:.word 0x6ed9eba1 .LK_40_59:.word 0x8f1bbcdc .LK_60_79:.word 0xca62c1d6 -#if __ARM_MAX_ARCH__>=7 -.LCRYPTOGAMS_armcap_loc: -# ifdef _WIN32 -.word CRYPTOGAMS_armcaps -# else -.word CRYPTOGAMS_armcaps-.Lsha1_block -# endif -#endif .align 5 #if __ARM_MAX_ARCH__>=7 @@ -1422,7 +1402,3 @@ sha1_block_data_order_neon: ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} .size sha1_block_data_order_neon,.-sha1_block_data_order_neon #endif - -#if __ARM_MAX_ARCH__>=7 -.comm CRYPTOGAMS_armcaps,4,4 -#endif diff --git a/sha256_armv4.S b/sha256_armv4.S index 4b4191d3..80d347d7 100644 --- a/sha256_armv4.S +++ b/sha256_armv4.S @@ -64,10 +64,6 @@ # endif # endif -# ifndef __ASSEMBLER__ -extern unsigned int CRYPTOGAMS_armcaps; -# endif - # define ARMV7_NEON (1<<0) @ JW, MAY 2019: End defines from taken from arm_arch.h @@ -103,33 +99,20 @@ K256: .word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .size K256,.-K256 .word 0 @ terminator -#if __ARM_MAX_ARCH__>=7 -.LCRYPTOGAMS_armcap_loc: -# ifdef _WIN32 -.word CRYPTOGAMS_armcaps -# else -.word CRYPTOGAMS_armcaps-.Lsha256_block_data_order -# endif -#endif -.align 5 +.align 5 .globl sha256_block_data_order .type sha256_block_data_order,%function sha256_block_data_order: .Lsha256_block_data_order: #if __ARM_ARCH__<7 && !defined(__thumb2__) + mov r12,r3 sub r3,pc,#8 @ sha256_block_data_order #else + mov r12,r3 adr r3,.Lsha256_block_data_order #endif #if __ARM_MAX_ARCH__>=7 - ldr r12,.LCRYPTOGAMS_armcap_loc -# if !defined(_WIN32) - ldr r12,[r3,r12] @ CRYPTOGAMS_armcaps -# endif -# if defined(__APPLE__) || defined(_WIN32) - ldr r12,[r12] -# endif tst r12,#ARMV7_NEON bne .LNEON #endif @@ -2686,7 +2669,3 @@ sha256_block_data_order_neon: ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} .size sha256_block_data_order_neon,.-sha256_block_data_order_neon #endif - -#if __ARM_MAX_ARCH__>=7 -.comm CRYPTOGAMS_armcaps,4,4 -#endif diff --git a/sha512_armv4.S b/sha512_armv4.S index 9259fd9d..9d07a9bf 100644 --- a/sha512_armv4.S +++ b/sha512_armv4.S @@ -64,10 +64,6 @@ # endif # endif -# ifndef __ASSEMBLER__ -extern unsigned int CRYPTOGAMS_armcaps; -# endif - # define ARMV7_NEON (1<<0) @ JW, MAY 2019: End defines from taken from arm_arch.h @@ -138,12 +134,6 @@ K512: WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) .size K512,.-K512 #if __ARM_MAX_ARCH__>=7 -.LCRYPTOGAMS_armcap_loc: -# ifdef _WIN32 -.word CRYPTOGAMS_armcaps -# else -.word CRYPTOGAMS_armcaps-.Lsha512_block_data_order -# endif .skip 32-4 #else .skip 32 @@ -154,18 +144,13 @@ K512: sha512_block_data_order: .Lsha512_block_data_order: #if __ARM_ARCH__<7 && !defined(__thumb2__) + mov r12,r3 sub r3,pc,#8 @ sha512_block_data_order #else + mov r12,r3 adr r3,.Lsha512_block_data_order #endif #if __ARM_MAX_ARCH__>=7 - ldr r12,.LCRYPTOGAMS_armcap_loc -# if !defined(_WIN32) - ldr r12,[r3,r12] @ CRYPTOGAMS_armcaps -# endif -# if defined(__APPLE__) || defined(_WIN32) - ldr r12,[r12] -# endif tst r12,#ARMV7_NEON bne .LNEON #endif @@ -1875,7 +1860,3 @@ sha512_block_data_order_neon: bx lr @ .word 0xe12fff1e .size sha512_block_data_order_neon,.-sha512_block_data_order_neon #endif - -#if __ARM_MAX_ARCH__>=7 -.comm CRYPTOGAMS_armcaps,4,4 -#endif