From 7c78c4f4ac7be0116f48e2609e49a0d7d9458073 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 22 May 2017 00:41:56 +0200 Subject: Windows Driver: fix "__chkstk" link error in debug build caused by some crypto functions using too much stack space for local variables. --- src/Crypto/SerpentFast.c | 4 ++-- src/Crypto/SerpentFast_simd.cpp | 4 ++-- src/Crypto/Sha2.c | 10 ++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Crypto/SerpentFast.c b/src/Crypto/SerpentFast.c index cb143262..3358db13 100644 --- a/src/Crypto/SerpentFast.c +++ b/src/Crypto/SerpentFast.c @@ -80,7 +80,7 @@ void serpent_encrypt_blocks(const unsigned __int8* in, unsigned __int8* out, siz unsigned __int32 B0, B1, B2, B3; unsigned __int32* round_key = ((unsigned __int32*) ks) + 8; size_t i; -#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE +#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && (!defined (DEBUG) || !defined (TC_WINDOWS_DRIVER)) if(HasSSE2() && (blocks >= 4)) { while(blocks >= 4) @@ -159,7 +159,7 @@ void serpent_decrypt_blocks(const unsigned __int8* in, unsigned __int8* out, siz unsigned __int32 B0, B1, B2, B3; unsigned __int32* round_key = ((unsigned __int32*) ks) + 8; size_t i; -#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE +#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && (!defined (DEBUG) || !defined (TC_WINDOWS_DRIVER)) if(HasSSE2() && (blocks >= 4)) { while(blocks >= 4) diff --git a/src/Crypto/SerpentFast_simd.cpp b/src/Crypto/SerpentFast_simd.cpp index d5d5d65b..6e5fd49b 100644 --- a/src/Crypto/SerpentFast_simd.cpp +++ b/src/Crypto/SerpentFast_simd.cpp @@ -218,7 +218,7 @@ typedef SIMD_4x32 SIMD_32; } while(0); - +#if (!defined (DEBUG) || !defined (TC_WINDOWS_DRIVER)) /* * SIMD Serpent Encryption of 4 blocks in parallel */ @@ -330,7 +330,7 @@ extern "C" void serpent_simd_decrypt_blocks_4(const unsigned __int8 in[], unsign B2.store_le(out + 32); B3.store_le(out + 48); } - +#endif #undef key_xor #undef transform #undef i_transform diff --git a/src/Crypto/Sha2.c b/src/Crypto/Sha2.c index 80758285..9dbb529f 100644 --- a/src/Crypto/Sha2.c +++ b/src/Crypto/Sha2.c @@ -498,11 +498,20 @@ const uint_64t k512[80] = VOID_RETURN sha512_compile(sha512_ctx ctx[1]) { uint_64t v[8], *p = ctx->wbuf; uint_32t j; +#if defined (TC_WINDOWS_DRIVER) && defined (DEBUG) + uint_32t i; +#endif memcpy(v, ctx->hash, 8 * sizeof(uint_64t)); for(j = 0; j < 80; j += 16) { +#if defined (TC_WINDOWS_DRIVER) && defined (DEBUG) + for (i = 0; i < 16; i++) + { + v_cycle( i, j); + } +#else v_cycle( 0, j); v_cycle( 1, j); v_cycle( 2, j); v_cycle( 3, j); v_cycle( 4, j); v_cycle( 5, j); @@ -511,6 +520,7 @@ VOID_RETURN sha512_compile(sha512_ctx ctx[1]) v_cycle(10, j); v_cycle(11, j); v_cycle(12, j); v_cycle(13, j); v_cycle(14, j); v_cycle(15, j); +#endif } ctx->hash[0] += v[0]; ctx->hash[1] += v[1]; -- cgit v1.2.3