1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-12 03:18:26 -06:00

Crypto: Add optimized Twofish assembly implementation for x86_64.

This commit is contained in:
Mounir IDRASSI
2016-11-28 00:29:36 +01:00
parent 68fababbe8
commit 263abeee3a
13 changed files with 1049 additions and 421 deletions

View File

@@ -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)
}