diff --git a/blake2-simd.cpp b/blake2-simd.cpp index 383f110b..1a835577 100644 --- a/blake2-simd.cpp +++ b/blake2-simd.cpp @@ -44,6 +44,8 @@ ANONYMOUS_NAMESPACE_BEGIN using CryptoPP::word32; using CryptoPP::word64; +#if (CRYPTOPP_SSE41_AVAILABLE || CRYPTOPP_ARM_NEON_AVAILABLE) + CRYPTOPP_ALIGN_DATA(16) const word32 BLAKE2S_IV[8] = { 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, @@ -58,6 +60,8 @@ const word64 BLAKE2B_IV[8] = { W64LIT(0x1f83d9abfb41bd6b), W64LIT(0x5be0cd19137e2179) }; +#endif // CRYPTOPP_SSE41_AVAILABLE || CRYPTOPP_ARM_NEON_AVAILABLE + ANONYMOUS_NAMESPACE_END NAMESPACE_BEGIN(CryptoPP) diff --git a/cryptest.nmake b/cryptest.nmake index 4438aa66..56ffeb92 100644 --- a/cryptest.nmake +++ b/cryptest.nmake @@ -1,28 +1,33 @@ # cryptest.nmake - written and placed in public domain by Jeffrey Walton. # Copyright assigned to the Crypto++ project. -# This makefile is used for testing and building cryptlib.lib and cryptest.exe under nmake. Open a -# Visual Studio Developer Prompt and then run "nmake /f cryptest.nmake". The build procedure will -# reveal not-so-readily-apparent problems under Microsoft ARM and Metro UI apps. +# This makefile is used for testing and building cryptlib.lib and cryptest.exe +# under nmake. Open a Visual Studio Developer Prompt and then run +# "nmake /f cryptest.nmake". The build procedure will reveal not so readily +# apparent problems under Microsoft ARM and Metro UI apps. -# The makefile is not intended for production use, though it may be used as a starting point. -# For example, you can add switches like /MT and /MTd for dynamic runtime linking against -# the Microsoft C++ Runtime libraries. If you are building for Windows Phone or Windows Store, then -# you probably want to remove /D_MBCS. The resulting cryptlib.lib may be suitable as a starting -# point for a DLL project using Crypto++. +# The makefile is not intended for production use, though it may be used as a +# starting point. For example, you can add switches like /MT and /MTd for +# dynamic runtime linking against the Microsoft C++ Runtime libraries. If you +# are building for Windows Phone or Windows Store, then you probably want to +# remove /D_MBCS. The resulting cryptlib.lib may be suitable as a starting +# point for a DLL project using Crypto++. -# You must also add /DCRYPTOPP_DEBUG or /DDEBUG if you want a debug build with the library's assert. -# The library moved from Posix NDEBUG and assert() to CRYPTOPP_ASSERT at 5.6.5 due to CVE-2016-7420. -# CRYPTOPP_ASSERT has the additional benefit of using DebugBreak(), and the program does not crash -# while you are debugging it like would happen with Posix assert(). +# You must also add /DCRYPTOPP_DEBUG or /DDEBUG if you want a debug build with +# the library's assert. The library moved from Posix NDEBUG and assert() to +# CRYPTOPP_ASSERT at 5.6.5 due to CVE-2016-7420. CRYPTOPP_ASSERT has the +# additional benefit of using DebugBreak(), and the program does not crash +# while you are debugging it like would happen with Posix assert(). -# The list of LIB_SRCS and TEST_SRCS was generated under Linux with "make sources". The list of -# LIB_OBJS and TEST_OBJS was generated under Linux with "make sources | sed 's|.cpp|.obj|g'". -# The order of the firt three object files are significant. See C++ Static Initialization Order -# Fisaco on the Crypto++ wiki for details. +# The list of LIB_SRCS and TEST_SRCS was generated under Linux with +# "make sources | fold -w74 -s". The list of LIB_OBJS and TEST_OBJS was +# generated with "make sources | fold -w74 -s | sed 's|.cpp|.obj|g'". The +# order of the first three object files are significant. See C++ Static +# Initialization Order Fisaco on the Crypto++ wiki for details. -# You are free to add and remove files to the list. For example, you can remove rdrand.asm -# build it using NASM, and then include the NASM object file rdrand_x86.obj or rdrand_x64.obj. +# You are free to add and remove files to the list. For example, you can remove +# rdrand.asm build it using NASM, and then include the NASM object file +# rdrand_x86.obj or rdrand_x64.obj. ########################################################################################### @@ -45,13 +50,75 @@ ########################################################################################### -LIB_SRCS = cryptlib.cpp cpu.cpp integer.cpp 3way.cpp adler32.cpp algebra.cpp algparam.cpp arc4.cpp aria-simd.cpp aria.cpp ariatab.cpp asn.cpp authenc.cpp base32.cpp base64.cpp basecode.cpp bfinit.cpp blake2-simd.cpp blake2.cpp blowfish.cpp blumshub.cpp camellia.cpp cast.cpp casts.cpp cbcmac.cpp ccm.cpp chacha.cpp cham.cpp cham-simd.cpp channels.cpp cmac.cpp crc-simd.cpp crc.cpp default.cpp des.cpp dessp.cpp dh.cpp dh2.cpp dll.cpp dsa.cpp eax.cpp ec2n.cpp eccrypto.cpp ecp.cpp elgamal.cpp emsa2.cpp eprecomp.cpp esign.cpp files.cpp filters.cpp fips140.cpp fipstest.cpp gcm-simd.cpp gcm.cpp gf256.cpp gf2_32.cpp gf2n.cpp gfpcrypt.cpp gost.cpp gzip.cpp hc128.cpp hc256.cpp hex.cpp hight.cpp hmac.cpp hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp kalynatab.cpp keccak.cpp keccakc.cpp lea.cpp lea-simd.cpp luc.cpp mars.cpp marss.cpp md2.cpp md4.cpp md5.cpp misc.cpp modes.cpp mqueue.cpp mqv.cpp nbtheory.cpp neon-simd.cpp oaep.cpp osrng.cpp padlkrng.cpp panama.cpp pkcspad.cpp poly1305.cpp polynomi.cpp pssr.cpp pubkey.cpp queue.cpp rabin.cpp randpool.cpp rabbit.cpp rc2.cpp rc5.cpp rc6.cpp rdrand.cpp rdtables.cpp rijndael-simd.cpp rijndael.cpp ripemd.cpp rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp scrypt.cpp seal.cpp seed.cpp serpent.cpp sha-simd.cpp sha.cpp sha3.cpp shacal2-simd.cpp shacal2.cpp shark.cpp sharkbox.cpp simeck-simd.cpp simeck.cpp simon.cpp simon64-simd.cpp simon128-simd.cpp skipjack.cpp sm3.cpp sm4.cpp sm4-simd.cpp sosemanuk.cpp speck.cpp speck64-simd.cpp speck128-simd.cpp square.cpp squaretb.cpp sse-simd.cpp strciphr.cpp tea.cpp tftables.cpp threefish.cpp tiger.cpp tigertab.cpp ttmac.cpp tweetnacl.cpp twofish.cpp vmac.cpp wake.cpp whrlpool.cp xtr.cpp xtrcrypt.cpp zdeflate.cpp zinflate.cpp zlib.cpp +LIB_SRCS = \ + cryptlib.cpp cpu.cpp integer.cpp 3way.cpp adler32.cpp algebra.cpp \ + algparam.cpp arc4.cpp aria-simd.cpp aria.cpp ariatab.cpp asn.cpp \ + authenc.cpp base32.cpp base64.cpp basecode.cpp bfinit.cpp blake2-simd.cpp \ + blake2.cpp blowfish.cpp blumshub.cpp camellia.cpp cast.cpp casts.cpp \ + cbcmac.cpp ccm.cpp chacha.cpp cham-simd.cpp cham.cpp channels.cpp \ + cmac.cpp crc-simd.cpp crc.cpp default.cpp des.cpp dessp.cpp dh.cpp \ + dh2.cpp dll.cpp dsa.cpp eax.cpp ec2n.cpp eccrypto.cpp ecp.cpp elgamal.cpp \ + emsa2.cpp eprecomp.cpp esign.cpp files.cpp filters.cpp fips140.cpp \ + fipstest.cpp gcm-simd.cpp gcm.cpp gf256.cpp gf2_32.cpp gf2n.cpp \ + gfpcrypt.cpp gost.cpp gzip.cpp hc128.cpp hc256.cpp hex.cpp hight.cpp \ + hmac.cpp hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp \ + kalynatab.cpp keccak.cpp keccakc.cpp lea-simd.cpp lea.cpp luc.cpp \ + mars.cpp marss.cpp md2.cpp md4.cpp md5.cpp misc.cpp modes.cpp mqueue.cpp \ + mqv.cpp nbtheory.cpp neon-simd.cpp oaep.cpp osrng.cpp padlkrng.cpp \ + panama.cpp pkcspad.cpp poly1305.cpp polynomi.cpp ppc-simd.cpp pssr.cpp \ + pubkey.cpp queue.cpp rabbit.cpp rabin.cpp randpool.cpp rc2.cpp rc5.cpp \ + rc6.cpp rdrand.cpp rdtables.cpp rijndael-simd.cpp rijndael.cpp ripemd.cpp \ + rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp scrypt.cpp seal.cpp seed.cpp \ + serpent.cpp sha-simd.cpp sha.cpp sha3.cpp shacal2-simd.cpp shacal2.cpp \ + shark.cpp sharkbox.cpp simeck-simd.cpp simeck.cpp simon.cpp \ + simon128-simd.cpp simon64-simd.cpp skipjack.cpp sm3.cpp sm4-simd.cpp \ + sm4.cpp sosemanuk.cpp speck.cpp speck128-simd.cpp speck64-simd.cpp \ + square.cpp squaretb.cpp sse-simd.cpp strciphr.cpp tea.cpp tftables.cpp \ + threefish.cpp tiger.cpp tigertab.cpp ttmac.cpp tweetnacl.cpp twofish.cpp \ + vmac.cpp wake.cpp whrlpool.cpp xtr.cpp xtrcrypt.cpp zdeflate.cpp \ + zinflate.cpp zlib.cpp -LIB_OBJS = cryptlib.obj cpu.obj integer.obj 3way.obj adler32.obj algebra.obj algparam.obj arc4.obj aria-simd.obj aria.obj ariatab.obj asn.obj authenc.obj base32.obj base64.obj basecode.obj bfinit.obj blake2-simd.obj blake2.obj blowfish.obj blumshub.obj camellia.obj cast.obj casts.obj cbcmac.obj ccm.obj chacha.obj cham.obj cham-simd.obj channels.obj cmac.obj crc-simd.obj crc.obj default.obj des.obj dessp.obj dh.obj dh2.obj dll.obj dsa.obj eax.obj ec2n.obj eccrypto.obj ecp.obj elgamal.obj emsa2.obj eprecomp.obj esign.obj files.obj filters.obj fips140.obj fipstest.obj gcm-simd.obj gcm.obj gf256.obj gf2_32.obj gf2n.obj gfpcrypt.obj gost.obj gzip.obj hc128.obj hc256.obj hex.obj hight.obj hmac.obj hrtimer.obj ida.obj idea.obj iterhash.obj kalyna.obj kalynatab.obj keccak.obj keccakc.obj lea.obj lea-simd.obj luc.obj mars.obj marss.obj md2.obj md4.obj md5.obj misc.obj modes.obj mqueue.obj mqv.obj nbtheory.obj neon-simd.obj oaep.obj osrng.obj padlkrng.obj panama.obj pkcspad.obj poly1305.obj polynomi.obj pssr.obj pubkey.obj queue.obj rabin.obj randpool.obj rabbit.obj rc2.obj rc5.obj rc6.obj rdrand.obj rdtables.obj rijndael-simd.obj rijndael.obj ripemd.obj rng.obj rsa.obj rw.obj safer.obj salsa.obj scrypt.obj seal.obj seed.obj serpent.obj sha-simd.obj sha.obj sha3.obj shacal2-simd.obj shacal2.obj shark.obj sharkbox.obj simeck-simd.obj simeck.obj simon.obj simon64-simd.obj simon128-simd.obj skipjack.obj sm3.obj sm4.obj sm4-simd.obj sosemanuk.obj speck.obj speck64-simd.obj speck128-simd.obj square.obj squaretb.obj sse-simd.obj strciphr.obj tea.obj tftables.obj threefish.obj tiger.obj tigertab.obj ttmac.obj tweetnacl.obj twofish.obj vmac.obj wake.obj whrlpool.obj xtr.obj xtrcrypt.obj zdeflate.obj zinflate.obj zlib.obj +LIB_OBJS = \ + cryptlib.obj cpu.obj integer.obj 3way.obj adler32.obj algebra.obj \ + algparam.obj arc4.obj aria-simd.obj aria.obj ariatab.obj asn.obj \ + authenc.obj base32.obj base64.obj basecode.obj bfinit.obj blake2-simd.obj \ + blake2.obj blowfish.obj blumshub.obj camellia.obj cast.obj casts.obj \ + cbcmac.obj ccm.obj chacha.obj cham-simd.obj cham.obj channels.obj \ + cmac.obj crc-simd.obj crc.obj default.obj des.obj dessp.obj dh.obj \ + dh2.obj dll.obj dsa.obj eax.obj ec2n.obj eccrypto.obj ecp.obj elgamal.obj \ + emsa2.obj eprecomp.obj esign.obj files.obj filters.obj fips140.obj \ + fipstest.obj gcm-simd.obj gcm.obj gf256.obj gf2_32.obj gf2n.obj \ + gfpcrypt.obj gost.obj gzip.obj hc128.obj hc256.obj hex.obj hight.obj \ + hmac.obj hrtimer.obj ida.obj idea.obj iterhash.obj kalyna.obj \ + kalynatab.obj keccak.obj keccakc.obj lea-simd.obj lea.obj luc.obj \ + mars.obj marss.obj md2.obj md4.obj md5.obj misc.obj modes.obj mqueue.obj \ + mqv.obj nbtheory.obj neon-simd.obj oaep.obj osrng.obj padlkrng.obj \ + panama.obj pkcspad.obj poly1305.obj polynomi.obj ppc-simd.obj pssr.obj \ + pubkey.obj queue.obj rabbit.obj rabin.obj randpool.obj rc2.obj rc5.obj \ + rc6.obj rdrand.obj rdtables.obj rijndael-simd.obj rijndael.obj ripemd.obj \ + rng.obj rsa.obj rw.obj safer.obj salsa.obj scrypt.obj seal.obj seed.obj \ + serpent.obj sha-simd.obj sha.obj sha3.obj shacal2-simd.obj shacal2.obj \ + shark.obj sharkbox.obj simeck-simd.obj simeck.obj simon.obj \ + simon128-simd.obj simon64-simd.obj skipjack.obj sm3.obj sm4-simd.obj \ + sm4.obj sosemanuk.obj speck.obj speck128-simd.obj speck64-simd.obj \ + square.obj squaretb.obj sse-simd.obj strciphr.obj tea.obj tftables.obj \ + threefish.obj tiger.obj tigertab.obj ttmac.obj tweetnacl.obj twofish.obj \ + vmac.obj wake.obj whrlpool.obj xtr.obj xtrcrypt.obj zdeflate.obj \ + zinflate.obj zlib.obj -TEST_SRCS = bench1.cpp bench2.cpp bench3.cpp test.cpp validat0.cpp validat1.cpp validat2.cpp validat3.cpp validat4.cpp validat5.cpp validat6.cpp validat7.cpp validat8.cpp validat9.cpp validat10.cpp datatest.cpp regtest1.cpp regtest2.cpp regtest3.cpp regtest4.cpp fipsalgt.cpp dlltest.cpp fipstest.cpp +TEST_SRCS = \ + test.cpp bench1.cpp bench2.cpp bench3.cpp datatest.cpp \ + dlltest.cpp fipsalgt.cpp validat0.cpp validat1.cpp validat2.cpp \ + validat3.cpp validat4.cpp validat5.cpp validat6.cpp validat7.cpp \ + validat8.cpp validat9.cpp validat10.cpp regtest1.cpp regtest2.cpp \ + regtest3.cpp regtest4.cpp -TEST_OBJS = bench1.obj bench2.obj bench3.obj test.obj validat0.obj validat1.obj validat2.obj validat3.obj validat4.obj validat5.obj validat6.obj validat7.obj validat8.obj validat9.obj validat10.obj datatest.obj regtest1.obj regtest2.obj regtest3.obj regtest4.obj fipsalgt.obj dlltest.obj fipstest.obj +TEST_OBJS = \ + test.obj bench1.obj bench2.obj bench3.obj datatest.obj \ + dlltest.obj fipsalgt.obj validat0.obj validat1.obj validat2.obj \ + validat3.obj validat4.obj validat5.obj validat6.obj validat7.obj \ + validat8.obj validat9.obj validat10.obj regtest1.obj regtest2.obj \ + regtest3.obj regtest4.obj CXX = cl.exe LD = link.exe @@ -64,10 +131,11 @@ LDFLAGS = /nologo /SUBSYSTEM:CONSOLE /DEBUG ARFLAGS = /nologo LDLIBS = -# Debug build. Add /DEBUG to linker. -CXXFLAGS = $(CXXFLAGS) /DDEBUG /D_DEBUG /Oi /Oy- /Od /MTd -# Release build -# CXXFLAGS = $(CXXFLAGS) /DNDEBUG /D_NDEBUG /Oi /Oy /O2 /MT +# Debug build. +# CXXFLAGS = $(CXXFLAGS) /DDEBUG /D_DEBUG /Oi /Oy- /Od /MTd +# Release build. Add /OPT:REF to linker +CXXFLAGS = $(CXXFLAGS) /DNDEBUG /D_NDEBUG /Oi /Oy /O2 /MT +LDFLAGS = $(LDFLAGS) /OPT:REF # Attempt to detect when and are available # http://stackoverflow.com/q/40577415 ?