From 21f197b94f09a8b6de66c56aa04111ef1724351c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Sat, 3 Sep 2016 13:59:02 +0200 Subject: [PATCH] Test for memeql_sec. --- ChangeLog | 4 +++ testsuite/.test-rules.make | 3 +++ testsuite/Makefile.in | 2 +- testsuite/memeql-test.c | 53 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 testsuite/memeql-test.c diff --git a/ChangeLog b/ChangeLog index 56e4b4b9..4784d19e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -51,6 +51,10 @@ * 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. diff --git a/testsuite/.test-rules.make b/testsuite/.test-rules.make index 3c74b88b..b263e1fd 100644 --- a/testsuite/.test-rules.make +++ b/testsuite/.test-rules.make @@ -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) diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in index 02c18fc8..689d4325 100644 --- a/testsuite/Makefile.in +++ b/testsuite/Makefile.in @@ -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 index 00000000..356671d6 --- /dev/null +++ b/testsuite/memeql-test.c @@ -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]; + } + } +} -- GitLab