diff options
Diffstat (limited to 'src/Crypto/GostCipher.h')
-rw-r--r-- | src/Crypto/GostCipher.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/Crypto/GostCipher.h b/src/Crypto/GostCipher.h new file mode 100644 index 00000000..9b9e18b4 --- /dev/null +++ b/src/Crypto/GostCipher.h @@ -0,0 +1,61 @@ + +/* + Copyright (c) 2008-2011 TrueCrypt Developers Association. All rights reserved. + + Governed by the TrueCrypt License 3.0 the full text of which is contained in + the file License.txt included in TrueCrypt binary and source code distribution + packages. +*/ + + + +#ifndef GOST_CIPHER_H +#define GOST_CIPHER_H + +//In unsigned chars +#define GOST_KEYSIZE 32 +#define GOST_BLOCKSIZE 8 +#define GOST_SBOX_SIZE 16 + +//Production setting, but can be turned off to compare the algorithm with other implementations +#define CIPHER_GOST89 +#define GOST_DYNAMIC_SBOXES + +#if defined(CIPHER_GOST89) + +#ifndef rotl32 +#define rotl32(b, shift) ((b << shift) | (b >> (32 - shift))) +#endif + +typedef unsigned char byte; +#ifdef GST_WINDOWS_BOOT +typedef int gst_word; +typedef long gst_dword; +typedef unsigned int gst_uword; +typedef unsigned long gst_udword; +#else +typedef short gst_word; +typedef int gst_dword; +typedef unsigned short gst_uword; +typedef unsigned int gst_udword; +#endif + +typedef struct gost_kds +{ + byte key[32]; + gst_udword sbox_cvt[256 * 4]; + byte sbox[8][16]; +} gost_kds; + +#define GOST_KS (sizeof(gost_kds)) + +void gost_encrypt(byte *in, byte *out, gost_kds *ks, int count); +void gost_decrypt(byte *in, byte *out, gost_kds *ks, int count); +void gost_set_key(byte *key, gost_kds *ks); + +#else +#define GOST_KS (0) +#endif + + +#endif |