diff --git a/ChangeLog b/ChangeLog index ca7d7bf7dae8610a3752e69454485bcedb292923..623c60bb3cfe1b2d6305dd52355e329cc167500f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,9 @@ * ecc-mod-arith.c (ecc_mod_addmul_1): Use assert_maybe. * ecc-curve448.c (ecc_curve448_modp): Likewise. + * ecc-curve25519.c (ecc_curve25519_modq): Likewise. + * eddsa-hash.c (_eddsa_hash): Likewise. + * eddsa-sign.c (_eddsa_sign): Likewise. * testsuite/curve25519-dh-test.c (test_g): Add calls to mark_bytes_undefined and mark_bytes_defined. @@ -9,11 +12,16 @@ (test_main): Skip side-channel tests in builds with mini-gmp or extra asserts enabled. * testsuite/curve448-dh-test.c: Analogous changes. + * testsuite/ed448-test.c (test_one): Analogous changes. + * testsuite/ed25519-test.c: Analogous changes. * testsuite/Makefile.in (TS_SC_HOGWEED): New make variable. Added - sc-curve25519-dh-test and sc-curve448-dh-test to list. + sc-curve25519-dh-test, sc-curve448-dh-test, sc-ed25519-test, and + sc-ed448-test to list. * testsuite/sc-curve25519-dh-test: New testcase. * testsuite/sc-curve448-dh-test: New testcase. + * testsuite/sc-ed448-test: New testcase. + * testsuite/sc-ed25519-test: New testcase. 2023-11-14 Niels Möller <nisse@lysator.liu.se> diff --git a/ecc-curve25519.c b/ecc-curve25519.c index 539bff2211b4fec9e23ace15b078c1353f47a53e..db301252ec5f3f089a1ba7a2237c4ae16d0f5dc6 100644 --- a/ecc-curve25519.c +++ b/ecc-curve25519.c @@ -89,13 +89,13 @@ ecc_curve25519_modq (const struct ecc_modulo *q, mp_limb_t *rp, mp_limb_t *xp) q->B_shifted, ECC_LIMB_SIZE, xp[n + ECC_LIMB_SIZE]); /* Top limb of mBmodq_shifted is zero, so we get cy == 0 or 1 */ - assert (cy < 2); + assert_maybe (cy < 2); mpn_cnd_add_n (cy, xp+n, xp+n, q->m, ECC_LIMB_SIZE); } cy = mpn_submul_1 (xp, q->m, ECC_LIMB_SIZE, xp[ECC_LIMB_SIZE-1] >> (GMP_NUMB_BITS - QHIGH_BITS)); - assert (cy < 2); + assert_maybe (cy < 2); mpn_cnd_add_n (cy, rp, xp, q->m, ECC_LIMB_SIZE); } diff --git a/eddsa-hash.c b/eddsa-hash.c index 6ebbe9773e73468e58896990d877d0a043d5af9a..f14c16c8e663fd2c1d168324bb424f3a7bff79aa 100644 --- a/eddsa-hash.c +++ b/eddsa-hash.c @@ -71,9 +71,9 @@ _eddsa_hash (const struct ecc_modulo *m, assert (nlimbs == 2*m->size + 1); hi = mpn_addmul_1 (rp + m->size, m->B, m->size, hi); - assert (hi <= 1); + assert_maybe (hi <= 1); hi = mpn_cnd_add_n (hi, rp + m->size, rp + m->size, m->B, m->size); - assert (hi == 0); + assert_maybe (hi == 0); } m->mod (m, rp + m->size , rp); /* Ensure canonical reduction. */ diff --git a/eddsa-sign.c b/eddsa-sign.c index f5dda6f01bb213cb7d295f11a9f150e212876088..007b2af99d4b3ab30e9e4bb1e611fb3a6b6a41a7 100644 --- a/eddsa-sign.c +++ b/eddsa-sign.c @@ -116,9 +116,9 @@ _eddsa_sign (const struct ecc_curve *ecc, } cy = mpn_submul_1 (sp, ecc->q.m, ecc->p.size, q); - assert (cy < 2); + assert_maybe (cy < 2); cy -= mpn_cnd_add_n (cy, sp, sp, ecc->q.m, ecc->p.size); - assert (cy == 0); + assert_maybe (cy == 0); mpn_get_base256_le (signature + nbytes, nbytes, sp, ecc->q.size); #undef rp diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in index cf3d962cb108399f4ecb9513ba274ee19537eaf8..8fc416df7d11ad53bd3dd58d3c13a263ff64783c 100644 --- a/testsuite/Makefile.in +++ b/testsuite/Makefile.in @@ -67,7 +67,8 @@ 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 sc-curve448-dh-test + sc-ecdsa-sign-test sc-curve25519-dh-test sc-curve448-dh-test \ + sc-ed25519-test sc-ed448-test TS_SC = sc-cnd-memcpy-test sc-gcm-test sc-memeql-test \ @IF_HOGWEED@ $(TS_SC_HOGWEED) diff --git a/testsuite/ed25519-test.c b/testsuite/ed25519-test.c index abcef34effee5d6f50656b74bd6809c1515c206e..7e13881c0ba5ecceb73d5799c8e6ed764ea22833 100644 --- a/testsuite/ed25519-test.c +++ b/testsuite/ed25519-test.c @@ -92,10 +92,15 @@ test_one (const char *line) decode_hex (msg_size, msg, mp); + mark_bytes_undefined (ED25519_KEY_SIZE, sk); ed25519_sha512_public_key (t, sk); + mark_bytes_defined (ED25519_KEY_SIZE, t); + ASSERT (MEMEQ(ED25519_KEY_SIZE, t, pk)); ed25519_sha512_sign (pk, sk, msg_size, msg, s2); + mark_bytes_defined (ED25519_SIGNATURE_SIZE, s2); + ASSERT (MEMEQ (ED25519_SIGNATURE_SIZE, s, s2)); ASSERT (ed25519_sha512_verify (pk, msg_size, msg, s)); @@ -158,6 +163,10 @@ getline(char **lineptr, size_t *n, FILE *f) void test_main(void) { +#if NETTLE_USE_MINI_GMP || WITH_EXTRA_ASSERTS + if (test_side_channel) + SKIP(); +#endif const char *input = getenv ("ED25519_SIGN_INPUT"); if (input) { diff --git a/testsuite/ed448-test.c b/testsuite/ed448-test.c index a46b85c6b734029bb0576b6347fc932f77ba75dd..7ea2da4f9b00d990bd8547176e3c6ba8e1732c6c 100644 --- a/testsuite/ed448-test.c +++ b/testsuite/ed448-test.c @@ -93,10 +93,15 @@ test_one (const char *line) decode_hex (msg_size, msg, mp); + mark_bytes_undefined (ED448_KEY_SIZE, sk); ed448_shake256_public_key (t, sk); + mark_bytes_defined (ED448_KEY_SIZE, t); + ASSERT (MEMEQ(ED448_KEY_SIZE, t, pk)); ed448_shake256_sign (pk, sk, msg_size, msg, s2); + mark_bytes_defined (ED448_SIGNATURE_SIZE, s2); + ASSERT (MEMEQ (ED448_SIGNATURE_SIZE, s, s2)); ASSERT (ed448_shake256_verify (pk, msg_size, msg, s)); @@ -159,6 +164,10 @@ getline(char **lineptr, size_t *n, FILE *f) void test_main(void) { +#if NETTLE_USE_MINI_GMP || WITH_EXTRA_ASSERTS + if (test_side_channel) + SKIP(); +#endif const char *input = getenv ("ED448_SIGN_INPUT"); if (input) { diff --git a/testsuite/sc-ed25519-test b/testsuite/sc-ed25519-test new file mode 100755 index 0000000000000000000000000000000000000000..81be04e95d59e44e2858195b1632ec599338c883 --- /dev/null +++ b/testsuite/sc-ed25519-test @@ -0,0 +1,6 @@ +#! /bin/sh + +srcdir=`dirname $0` +. "${srcdir}/sc-valgrind.sh" + +with_valgrind ./ed25519-test diff --git a/testsuite/sc-ed448-test b/testsuite/sc-ed448-test new file mode 100755 index 0000000000000000000000000000000000000000..d0efdbafdafd93d1d833e04464429c94e87e7949 --- /dev/null +++ b/testsuite/sc-ed448-test @@ -0,0 +1,6 @@ +#! /bin/sh + +srcdir=`dirname $0` +. "${srcdir}/sc-valgrind.sh" + +with_valgrind ./ed448-test