]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Test for memeql_sec.
authorNiels Möller <nisse@lysator.liu.se>
Sat, 3 Sep 2016 11:59:02 +0000 (13:59 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Mon, 5 Sep 2016 21:26:24 +0000 (23:26 +0200)
ChangeLog
testsuite/.test-rules.make
testsuite/Makefile.in
testsuite/memeql-test.c [new file with mode: 0644]

index 56e4b4b91daa354ae6e61593696a28bb9b2054fd..4784d19e9b5ee8e1b0eee8ef832784299b3cb16d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
        * memops.h: New header file, generalizing memxor.h.
 
+       * testsuite/memeql-test.c (test_main): New test case.
+       (memeql_sec_for_test): Wrapper to get valgrind to check for
+       side-channel silence.
+
 2016-08-29  Niels Möller  <nisse@lysator.liu.se>
 
        * sexp-format.c (strlen_u8): New helper function.
index 3c74b88bd0fe897f262e4ea51aa540ab352dc0ec..b263e1fdd40e999ed81fa1db9dde8130571a114f 100644 (file)
@@ -46,6 +46,9 @@ md5-test$(EXEEXT): md5-test.$(OBJEXT)
 md5-compat-test$(EXEEXT): md5-compat-test.$(OBJEXT)
        $(LINK) md5-compat-test.$(OBJEXT) $(TEST_OBJS) -o md5-compat-test$(EXEEXT)
 
+memeql-test$(EXEEXT): memeql-test.$(OBJEXT)
+       $(LINK) memeql-test.$(OBJEXT) $(TEST_OBJS) -o memeql-test$(EXEEXT)
+
 memxor-test$(EXEEXT): memxor-test.$(OBJEXT)
        $(LINK) memxor-test.$(OBJEXT) $(TEST_OBJS) -o memxor-test$(EXEEXT)
 
index 02c18fc8ebe5f860a414bd5ce4537362b9067260..689d4325cc2842e2266ec72c37b3125a7e06a0f4 100644 (file)
@@ -16,7 +16,7 @@ TS_NETTLE_SOURCES = aes-test.c arcfour-test.c arctwo-test.c \
                    camellia-test.c chacha-test.c \
                    des-test.c des3-test.c des-compat-test.c \
                    md2-test.c md4-test.c md5-test.c md5-compat-test.c \
-                   memxor-test.c gosthash94-test.c \
+                   memeql-test.c memxor-test.c gosthash94-test.c \
                    ripemd160-test.c \
                    salsa20-test.c \
                    sha1-test.c sha224-test.c sha256-test.c \
diff --git a/testsuite/memeql-test.c b/testsuite/memeql-test.c
new file mode 100644 (file)
index 0000000..356671d
--- /dev/null
@@ -0,0 +1,53 @@
+#include "testutils.h"
+#include "knuth-lfib.h"
+#include "memops.h"
+
+#if HAVE_VALGRIND_MEMCHECK_H
+# include <valgrind/memcheck.h>
+static int
+memeql_sec_for_test(const void *a, const void *b, size_t n)
+{
+  int res;
+
+  /* Makes valgrind trigger on any branches depending on the input
+     data. */
+  VALGRIND_MAKE_MEM_UNDEFINED (a, n);
+  VALGRIND_MAKE_MEM_UNDEFINED (b, n);
+
+  res = memeql_sec (a, b, n);
+  VALGRIND_MAKE_MEM_DEFINED (&res, sizeof(res));
+  return res;
+}
+#else
+#define memeql_sec_for_test memeql_sec
+#endif
+
+#define MAX_SIZE 50
+void
+test_main(void)
+{
+  uint8_t orig[MAX_SIZE];
+  uint8_t a[MAX_SIZE];
+  uint8_t b[MAX_SIZE];
+  struct knuth_lfib_ctx random_ctx;
+
+  knuth_lfib_init (&random_ctx, 11);
+
+  size_t size;
+  for (size = 0; size < 50; size++)
+    {
+      size_t i;
+      uint8_t bit;
+      knuth_lfib_random (&random_ctx, size, orig);
+      memcpy (a, orig, size);
+      memcpy (b, orig, size);
+      ASSERT (memeql_sec_for_test (a, b, size));
+      for (i = 0; i < size; i++)
+       for (bit = 0x80; bit; bit >>= 1)
+         {
+           b[i] = orig[i] ^ bit;
+           ASSERT (!memeql_sec_for_test (a, b, size));
+           b[i] = orig[i];
+         }
+    }
+}