+2023-11-15 Niels Möller <nisse@lysator.liu.se>
+
+ * testsuite/curve25519-dh-test.c (test_g): Add calls to
+ mark_bytes_undefined and mark_bytes_defined.
+ (test_a): Likewise.
+ (test_main): Skip side-channel tests in builds with mini-gmp or
+ extra asserts enabled.
+
+ * ecc-mod-arith.c (ecc_mod_addmul_1): Use assert_maybe.
+
+ * testsuite/Makefile.in (TS_SC_HOGWEED): New make variable. Added
+ sc-curve25519-dh-test to list.
+
+ * testsuite/sc-curve25519-dh-test: New testcase.
+
2023-11-14 Niels Möller <nisse@lysator.liu.se>
Add a first side-channel test for the ECC code.
assert (b <= 0xffffffff);
hi = mpn_addmul_1 (rp, ap, m->size, b);
hi = mpn_addmul_1 (rp, m->B, m->size, hi);
- assert (hi <= 1);
+ assert_maybe (hi <= 1);
hi = mpn_cnd_add_n (hi, rp, rp, m->B, m->size);
/* Sufficient roughly if b < B^size / p */
- assert (hi == 0);
+ assert_maybe (hi == 0);
}
void
TS_C = $(TS_NETTLE) @IF_HOGWEED@ $(TS_HOGWEED)
TS_CXX = @IF_CXX@ $(CXX_SOURCES:.cxx=$(EXEEXT))
TARGETS = $(TS_C) $(TS_CXX)
+TS_SC_HOGWEED = sc-pkcs1-sec-decrypt-test sc-rsa-sec-decrypt-test \
+ sc-ecdsa-sign-test sc-curve25519-dh-test
TS_SC = sc-cnd-memcpy-test sc-gcm-test sc-memeql-test \
- @IF_HOGWEED@ sc-pkcs1-sec-decrypt-test sc-rsa-sec-decrypt-test sc-ecdsa-sign-test
+ @IF_HOGWEED@ $(TS_SC_HOGWEED)
TS_SH = symbols-test @IF_VALGRIND@ $(TS_SC)
TS_ALL = $(TARGETS) $(TS_SH) @IF_DLOPEN_TEST@ dlopen-test$(EXEEXT)
test_g (const uint8_t *s, const uint8_t *r)
{
uint8_t p[CURVE25519_SIZE];
+
+ mark_bytes_undefined (CURVE25519_SIZE, s);
curve25519_mul_g (p, s);
+ mark_bytes_defined (CURVE25519_SIZE, p);
+
if (!MEMEQ (CURVE25519_SIZE, p, r))
{
printf ("curve25519_mul_g failure:\ns = ");
test_a (const uint8_t *s, const uint8_t *b, const uint8_t *r)
{
uint8_t p[CURVE25519_SIZE];
+
+ mark_bytes_undefined (CURVE25519_SIZE, b);
+ mark_bytes_undefined (CURVE25519_SIZE, s);
curve25519_mul (p, s, b);
-
+ mark_bytes_defined (CURVE25519_SIZE, p);
+
if (!MEMEQ (CURVE25519_SIZE, p, r))
{
printf ("curve25519_mul failure:\ns = ");
void
test_main (void)
{
+#if NETTLE_USE_MINI_GMP || WITH_EXTRA_ASSERTS
+ if (test_side_channel)
+ SKIP();
+#endif
/* From RFC 7748. */
test_g (H("77076d0a7318a57d3c16c17251b26645"
"df4c2f87ebc0992ab177fba51db92c2a"),
--- /dev/null
+#! /bin/sh
+
+srcdir=`dirname $0`
+. "${srcdir}/sc-valgrind.sh"
+
+with_valgrind ./curve25519-dh-test