I'd like to get the library tested under VS2017. I have the build tools installed, but I have not been able to get a 64-bit ARM developer prompt.
If someone could perform the following, then it would be greatly appreciated. ...
Forgot to mention... config.h is what activates the ARMv8 code paths. For Microsoft toolchains, its the CRYPTOPP_MSC_VERSION >= 2000:
# if defined(__ARM_FEATURE_CRC32) || (CRYPTOPP_MSC_VERSION >= 2000) || \
defined(__aarch32__) || defined(__aarch64__)
# define CRYPTOPP_ARM_CRC32_AVAILABLE 1
# endif
For the AMRv8 gear, you are looking for the following symbols:
$ grep "_ARMV8(" *.h *.cpp
cpu.cpp:extern bool CPU_TryAES_ARMV8();
cpu.cpp:extern bool CPU_TrySHA1_ARMV8();
cpu.cpp:extern bool CPU_TrySHA2_ARMV8();
cpu.cpp:extern bool CPU_TryCRC32_ARMV8();
cpu.cpp:extern bool CPU_TryPMULL_ARMV8();
cpu.cpp: g_hasPMULL = CPU_TryPMULL_ARMV8();
cpu.cpp: g_hasCRC32 = CPU_TryCRC32_ARMV8();
cpu.cpp: g_hasSHA1 = CPU_TrySHA1_ARMV8();
cpu.cpp: g_hasSHA2 = CPU_TrySHA2_ARMV8();
crc.cpp:extern void CRC32_Update_ARMV8(const byte *s, size_t n, word32& c);
crc.cpp:extern void CRC32C_Update_ARMV8(const byte *s, size_t n, word32& c);
crc.cpp: CRC32_Update_ARMV8(s, n, m_crc);
crc.cpp: CRC32C_Update_ARMV8(s, n, m_crc);
crc-simd.cpp:bool CPU_TryCRC32_ARMV8()
crc-simd.cpp:void CRC32_Update_ARMV8(const byte *s, size_t n, word32& c)
crc-simd.cpp:void CRC32C_Update_ARMV8(const byte *s, size_t n, word32& c)
gcm-simd.cpp:bool CPU_TryPMULL_ARMV8()
sha.cpp:extern void SHA1_Transform_ARMV8(word32 *state, const word32 *data);
sha.cpp:extern void CRYPTOPP_FASTCALL SHA256_HashBlocks_ARMV8(word32 *state, const word32 *data, size_t length);
sha.cpp:static void SHA256_Transform_ARMV8(word32 *state, const word32 *data)
sha-simd.cpp:bool CPU_TrySHA1_ARMV8()
sha-simd.cpp:bool CPU_TrySHA2_ARMV8()
sha-simd.cpp:void SHA1_Transform_ARMV8(word32 *state, const word32 *data)
sha-simd.cpp:void CRYPTOPP_FASTCALL SHA256_HashBlocks_ARMV8(word32 *state, const word32 *data, size_t length)
You can verify a symbol is present in an object file with dumpbin. For example, below is checking for NEON in BLAKE2:
;; From a developer command prompt
c:\cryptopp-fork>dumpbin /symbols blake2.obj | find "NEON"
832 00000000 SECT21D notype () External | ?HasNEON@CryptoPP@@YA_NXZ (bool
__cdecl CryptoPP::HasNEON(void))
835 00000000 UNDEF notype () External | ?BLAKE2_Compress32_NEON@CryptoPP
@@YAXPBEAAU?$BLAKE2_State@I$0A@@1@@Z (void __cdecl CryptoPP::BLAKE2_Compress32_N
EON(unsigned char const *,struct CryptoPP::BLAKE2_State<unsigned int,0> &))
836 00000000 UNDEF notype () External | ?BLAKE2_Compress64_NEON@CryptoPP
@@YAXPBEAAU?$BLAKE2_State@_K$00@1@@Z (void __cdecl CryptoPP::BLAKE2_Compress64_N
EON(unsigned char const *,struct CryptoPP::BLAKE2_State<unsigned __int64,1> &))
11AB 00000000 SECT484 notype Static | $pdata1$?HasNEON@CryptoPP@@YA_N
XZ
12B8 00000000 UNDEF notype External | ?g_hasNEON@CryptoPP@@3_NA (bool
CryptoPP::g_hasNEON)
Jeff