From 5493de11d57159b8c048b33a71d9783b405cf2e8 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 19 Dec 2016 17:46:38 +0100 Subject: [PATCH] Windows: Enable Twofish optimized 64-bit assembly for UEFI bootloader since a pre-compiled object file was included to its build system. --- src/Common/Crypto.c | 6 +++--- src/Crypto/Twofish.c | 8 ++++---- src/Crypto/Twofish.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Common/Crypto.c b/src/Common/Crypto.c index e44ad1ba..808c8af7 100644 --- a/src/Common/Crypto.c +++ b/src/Common/Crypto.c @@ -247,7 +247,7 @@ void EncipherBlocks (int cipher, void *dataPtr, void *ks, size_t blockCount) #endif } #endif -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 else if (cipher == TWOFISH) { twofish_encrypt_blocks(ks, data, data, (uint32) blockCount); } @@ -347,7 +347,7 @@ void DecipherBlocks (int cipher, void *dataPtr, void *ks, size_t blockCount) #endif } #endif -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 else if (cipher == TWOFISH) { twofish_decrypt_blocks(ks, data, data, (uint32) blockCount); } @@ -428,7 +428,7 @@ BOOL CipherSupportsIntraDataUnitParallelization (int cipher) #if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI) || (cipher == SERPENT && HasSSE2()) #endif -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 || (cipher == TWOFISH) #endif ; diff --git a/src/Crypto/Twofish.c b/src/Crypto/Twofish.c index 23a5dfda..8ab59081 100644 --- a/src/Crypto/Twofish.c +++ b/src/Crypto/Twofish.c @@ -54,7 +54,7 @@ #define UNROLL_TWOFISH #endif -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 /* these are 64-bit assembly implementation taken from https://github.com/jkivilin/supercop-blockciphers Copyright © 2011-2013 Jussi Kivilinna @@ -630,7 +630,7 @@ void twofish_set_key(TwofishInstance *instance, const u4byte in_key[]) uint32 b = rotl32(MDSQ[0][Q[0][Q[0][Q[1][Q[1][i + 1] ^ key[28]] ^ key[20]] ^ key[12]] ^ key[4]] ^ MDSQ[1][Q[0][Q[1][Q[1][Q[0][i + 1] ^ key[29]] ^ key[21]] ^ key[13]] ^ key[5]] ^ MDSQ[2][Q[1][Q[0][Q[0][Q[0][i + 1] ^ key[30]] ^ key[22]] ^ key[14]] ^ key[6]] ^ MDSQ[3][Q[1][Q[1][Q[0][Q[1][i + 1] ^ key[31]] ^ key[23]] ^ key[15]] ^ key[7]], 8); a += b; -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 if (i < 8) { instance->w[i] = a; @@ -998,7 +998,7 @@ void twofish_set_key(TwofishInstance *instance, const u4byte in_key[]) #ifndef TC_MINIMIZE_CODE_SIZE -#if (CRYPTOPP_BOOL_X64 == 0) || defined(_UEFI) +#if (CRYPTOPP_BOOL_X64 == 0) void twofish_encrypt(TwofishInstance *ks, const u4byte in_blk[4], u4byte out_blk[4]) { uint32* rk = ks->l_key; @@ -1071,7 +1071,7 @@ void twofish_encrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte o #ifndef TC_MINIMIZE_CODE_SIZE -#if (CRYPTOPP_BOOL_X64 == 0) || defined(_UEFI) +#if (CRYPTOPP_BOOL_X64 == 0) void twofish_decrypt(TwofishInstance *ks, const u4byte in_blk[4], u4byte out_blk[4]) { uint32* rk = ks->l_key; diff --git a/src/Crypto/Twofish.h b/src/Crypto/Twofish.h index 57723138..b2d44ddb 100644 --- a/src/Crypto/Twofish.h +++ b/src/Crypto/Twofish.h @@ -35,7 +35,7 @@ extern "C" #endif typedef struct { -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 u4byte mk_tab[4][256], w[8], k[32]; #else u4byte l_key[40]; @@ -52,7 +52,7 @@ typedef struct /* in_key must be 32-bytes long */ void twofish_set_key(TwofishInstance *instance, const u4byte in_key[]); -#if CRYPTOPP_BOOL_X64 && !defined(_UEFI) +#if CRYPTOPP_BOOL_X64 void twofish_encrypt_blocks(TwofishInstance *instance, const byte* in_blk, byte* out_blk, uint32 blockCount); void twofish_decrypt_blocks(TwofishInstance *instance, const byte* in_blk, byte* out_blk, uint32 blockCount); #define twofish_encrypt(instance,in_blk,out_blk) twofish_encrypt_blocks(instance, (const byte*) in_blk, (byte*) out_blk, 1)