From 0b2c8b09c6eb3ddce22fa88c34a640881f8f2177 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Tue, 9 Aug 2016 09:54:00 +0200 Subject: Windows: Add Magma cipher (GOST-89) --- src/Crypto/GostCipher.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/Crypto/GostCipher.h (limited to 'src/Crypto/GostCipher.h') 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 -- cgit v1.2.3