#include "testutils.h" #include "knuth-lfib.h" #include "memops.h" #if HAVE_VALGRIND_MEMCHECK_H # include 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]; } } }