diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2017-05-22 00:41:56 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2017-05-22 00:43:29 +0200 |
commit | 7c78c4f4ac7be0116f48e2609e49a0d7d9458073 (patch) | |
tree | b4773b0e0195aef4577014d5c46f729098e9634f /src | |
parent | e484d0caaeca39b526b2d8df99ed712782a095ab (diff) | |
download | VeraCrypt-7c78c4f4ac7be0116f48e2609e49a0d7d9458073.tar.gz VeraCrypt-7c78c4f4ac7be0116f48e2609e49a0d7d9458073.zip |
Windows Driver: fix "__chkstk" link error in debug build caused by some crypto functions using too much stack space for local variables.
Diffstat (limited to 'src')
-rw-r--r-- | src/Crypto/SerpentFast.c | 4 | ||||
-rw-r--r-- | src/Crypto/SerpentFast_simd.cpp | 4 | ||||
-rw-r--r-- | 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]; |