VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Crypto/GostCipher.h
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2016-08-09 09:54:00 +0200
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2016-08-15 01:09:10 +0200
commit0b2c8b09c6eb3ddce22fa88c34a640881f8f2177 (patch)
tree9985d4c18308f1e052fea3a6a3a05b45df80cb55 /src/Crypto/GostCipher.h
parent460f552a4173f8d798f52c2ad82c06a240094b17 (diff)
downloadVeraCrypt-0b2c8b09c6eb3ddce22fa88c34a640881f8f2177.tar.gz
VeraCrypt-0b2c8b09c6eb3ddce22fa88c34a640881f8f2177.zip
Windows: Add Magma cipher (GOST-89)
Diffstat (limited to 'src/Crypto/GostCipher.h')
-rw-r--r--src/Crypto/GostCipher.h61
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