VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Crypto
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2017-05-21 22:41:56 (GMT)
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2017-05-21 22:43:29 (GMT)
commit7c78c4f4ac7be0116f48e2609e49a0d7d9458073 (patch)
treeb4773b0e0195aef4577014d5c46f729098e9634f /src/Crypto
parente484d0caaeca39b526b2d8df99ed712782a095ab (diff)
downloadVeraCrypt-7c78c4f4ac7be0116f48e2609e49a0d7d9458073.zip
VeraCrypt-7c78c4f4ac7be0116f48e2609e49a0d7d9458073.tar.gz
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/Crypto')
-rw-r--r--src/Crypto/SerpentFast.c4
-rw-r--r--src/Crypto/SerpentFast_simd.cpp4
-rw-r--r--src/Crypto/Sha2.c10
3 files changed, 14 insertions, 4 deletions
diff --git a/src/Crypto/SerpentFast.c b/src/Crypto/SerpentFast.c
index cb14326..3358db1 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 d5d5d65..6e5fd49 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 8075828..9dbb529 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];