aboutsummaryrefslogtreecommitdiff
path: root/test_gost89.c
diff options
context:
space:
mode:
authorVitaly Chikunov <vt@altlinux.org>2018-12-21 20:56:35 +0300
committerVitaly Chikunov <vt@altlinux.org>2018-12-21 21:38:46 +0300
commit9b3fe585952cddaf6381f0ff54aa02dd1320f717 (patch)
treef8ba61c4bb9483fbbc64f5f78ce228ca627d3dd6 /test_gost89.c
parentecd98a3759889d8a34c00b559b800b107c8e5857 (diff)
downloadgost-engine-9b3fe585952cddaf6381f0ff54aa02dd1320f717.zip
gost-engine-9b3fe585952cddaf6381f0ff54aa02dd1320f717.tar.gz
gost-engine-9b3fe585952cddaf6381f0ff54aa02dd1320f717.tar.bz2
Move tests from gost89.c into test_gost89.c.
Diffstat (limited to 'test_gost89.c')
-rw-r--r--test_gost89.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/test_gost89.c b/test_gost89.c
new file mode 100644
index 0000000..cdba842
--- /dev/null
+++ b/test_gost89.c
@@ -0,0 +1,73 @@
+/**********************************************************************
+ * gost89.c *
+ * Copyright (c) 2005-2006 Cryptocom LTD *
+ * This file is distributed under the same license as OpenSSL *
+ * *
+ * Implementation of GOST 28147-89 encryption algorithm *
+ * No OpenSSL libraries required to compile and use *
+ * this code *
+ **********************************************************************/
+#include <string.h>
+#include "gost89.h"
+#include <stdio.h>
+#include <string.h>
+
+static void hexdump(FILE *f, const char *title, const unsigned char *s, int l)
+{
+ int n = 0;
+
+ fprintf(f, "%s", title);
+ for (; n < l; ++n) {
+ if ((n % 16) == 0)
+ fprintf(f, "\n%04x", n);
+ fprintf(f, " %02x", s[n]);
+ }
+ fprintf(f, "\n");
+}
+
+int main(void)
+{
+ int ret = 0;
+
+ const unsigned char initial_key[] = {
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF,
+ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
+ };
+
+ const unsigned char meshed_key[] = {
+ 0x86, 0x3E, 0xA0, 0x17, 0x84, 0x2C, 0x3D, 0x37,
+ 0x2B, 0x18, 0xA8, 0x5A, 0x28, 0xE2, 0x31, 0x7D,
+ 0x74, 0xBE, 0xFC, 0x10, 0x77, 0x20, 0xDE, 0x0C,
+ 0x9E, 0x8A, 0xB9, 0x74, 0xAB, 0xD0, 0x0C, 0xA0,
+ };
+
+ unsigned char buf[32];
+
+ gost_ctx ctx;
+ kboxinit(&ctx, &Gost28147_TC26ParamSetZ);
+ magma_key(&ctx, initial_key);
+ magma_get_key(&ctx, buf);
+
+ hexdump(stdout, "Initial key", buf, 32);
+
+ acpkm_magma_key_meshing(&ctx);
+ magma_get_key(&ctx, buf);
+ hexdump(stdout, "Meshed key - K2", buf, 32);
+
+ if (memcmp(meshed_key, buf, 32)) {
+ fprintf(stderr, "Magma meshing failed");
+ ret = 1;
+ }
+
+ acpkm_magma_key_meshing(&ctx);
+ magma_get_key(&ctx, buf);
+ hexdump(stdout, "Meshed key - K3", buf, 32);
+
+ acpkm_magma_key_meshing(&ctx);
+ magma_get_key(&ctx, buf);
+ hexdump(stdout, "Meshed key - K4", buf, 32);
+
+ return ret;
+}