From 263abeee3a8c97e98fec49ee0ce628d6c5c5df50 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 28 Nov 2016 00:29:36 +0100 Subject: Crypto: Add optimized Twofish assembly implementation for x86_64. --- src/Crypto/Twofish.h | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/Crypto/Twofish.h') diff --git a/src/Crypto/Twofish.h b/src/Crypto/Twofish.h index aebb6ea0..b2d44ddb 100644 --- a/src/Crypto/Twofish.h +++ b/src/Crypto/Twofish.h @@ -2,6 +2,7 @@ #define TWOFISH_H #include "Common/Tcdefs.h" +#include "config.h" #if defined(__cplusplus) extern "C" @@ -34,21 +35,32 @@ extern "C" #endif typedef struct { +#if CRYPTOPP_BOOL_X64 + u4byte mk_tab[4][256], w[8], k[32]; +#else u4byte l_key[40]; #ifdef TC_MINIMIZE_CODE_SIZE u4byte s_key[4]; -#endif -#if !defined (TC_MINIMIZE_CODE_SIZE) || defined (TC_WINDOWS_BOOT_TWOFISH) u4byte mk_tab[4 * 256]; +#else + u4byte mk_tab[4][256]; +#endif #endif } TwofishInstance; #define TWOFISH_KS sizeof(TwofishInstance) /* in_key must be 32-bytes long */ -u4byte * twofish_set_key(TwofishInstance *instance, const u4byte in_key[]); -void twofish_encrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte out_blk[]); +void twofish_set_key(TwofishInstance *instance, const u4byte in_key[]); +#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) +#define twofish_decrypt(instance,in_blk,out_blk) twofish_decrypt_blocks(instance, (const byte*) in_blk, (byte*) out_blk, 1) +#else +void twofish_encrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte out_blk[4]); void twofish_decrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte out_blk[4]); +#endif #if defined(__cplusplus) } -- cgit v1.2.3