From 660e482f8df70f6b2aeea3953c0869611aa981d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Fri, 11 Jul 2014 23:03:12 +0200 Subject: [PATCH] New testcase for curve25519 dup. --- ChangeLog | 4 ++ testsuite/.test-rules.make | 3 ++ testsuite/Makefile.in | 1 + testsuite/curve25519-dup-test.c | 74 +++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 testsuite/curve25519-dup-test.c diff --git a/ChangeLog b/ChangeLog index 9af0e57a..f0909d70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2014-07-11 Niels Möller <nisse@lysator.liu.se> + * testsuite/curve25519-dup-test.c: New testcase. + * testsuite/Makefile.in (TS_HOGWEED_SOURCES): Added + curve25519-dup-test.c. + * testsuite/testutils.c (test_ecc_point): Made non-static. * testsuite/testutils.h (struct ecc_ref_point): Moved here, from testutils.h. diff --git a/testsuite/.test-rules.make b/testsuite/.test-rules.make index 8fc7ed41..9ea44c98 100644 --- a/testsuite/.test-rules.make +++ b/testsuite/.test-rules.make @@ -187,6 +187,9 @@ dsa-test$(EXEEXT): dsa-test.$(OBJEXT) dsa-keygen-test$(EXEEXT): dsa-keygen-test.$(OBJEXT) $(LINK) dsa-keygen-test.$(OBJEXT) $(TEST_OBJS) -o dsa-keygen-test$(EXEEXT) +curve25519-dup-test$(EXEEXT): curve25519-dup-test.$(OBJEXT) + $(LINK) curve25519-dup-test.$(OBJEXT) $(TEST_OBJS) -o curve25519-dup-test$(EXEEXT) + ecc-mod-test$(EXEEXT): ecc-mod-test.$(OBJEXT) $(LINK) ecc-mod-test.$(OBJEXT) $(TEST_OBJS) -o ecc-mod-test$(EXEEXT) diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in index 34c43087..7da79497 100644 --- a/testsuite/Makefile.in +++ b/testsuite/Makefile.in @@ -38,6 +38,7 @@ TS_HOGWEED_SOURCES = sexp-test.c sexp-format-test.c \ pkcs1-test.c \ rsa-test.c rsa-encrypt-test.c rsa-keygen-test.c \ dsa-test.c dsa-keygen-test.c \ + curve25519-dup-test.c \ ecc-mod-test.c ecc-modinv-test.c ecc-redc-test.c \ ecc-mul-g-test.c ecc-mul-a-test.c \ ecdsa-sign-test.c ecdsa-verify-test.c ecdsa-keygen-test.c diff --git a/testsuite/curve25519-dup-test.c b/testsuite/curve25519-dup-test.c new file mode 100644 index 00000000..21975438 --- /dev/null +++ b/testsuite/curve25519-dup-test.c @@ -0,0 +1,74 @@ +#include "testutils.h" + +static int +point_zero_p (const struct ecc_curve *ecc, const mp_limb_t *p) +{ + mp_limb_t *d; + int ret; + mp_size_t i; + d = xalloc_limbs (ecc->size); + ecc_modp_sub (ecc, d, p + ecc->size, p + 2*ecc->size); + while (mpn_cmp (d, ecc->p, ecc->size) >= 0) + mpn_sub_n (d, d, ecc->p, ecc->size); + + for (i = 0, ret = 1; i < ecc->size; i++) + if (d[i]) + { + ret = 0; + break; + } + + free (d); + return ret; +} + +void +test_main (void) +{ + const struct ecc_curve *ecc = &nettle_curve25519; + mp_limb_t *g; + mp_limb_t *z; + mp_limb_t *pe; + mp_limb_t *pa; + mp_limb_t *scratch; + const struct ecc_ref_point g2 = + { /* In Edwards coordinates: + x = 0x1a1c31f8665368131698fecfd54233fcdc638bb46d25cc61d8bc4bcdbfbb4459, + y = 0x2260cdf3092329c21da25ee8c9a21f5697390f51643851560e5f46ae6af8a3c9 + */ + "20d342d51873f1b7d9750c687d157114" + "8f3f5ced1e350b5c5cae469cdd684efb", + "13b57e011700e8ae050a00945d2ba2f3" + "77659eb28d8d391ebcd70465c72df563" + }; + + g = xalloc_limbs (ecc_size_j (ecc)); + z = xalloc_limbs (ecc_size_j (ecc)); + pe = xalloc_limbs (ecc_size_j (ecc)); + pa = xalloc_limbs (ecc_size_j (ecc)); + scratch = xalloc_limbs (ECC_DUP_EH_ITCH(ecc->size)); + + mpn_copyi (g, ecc->g, 2*ecc->size); + g[2*ecc->size] = 1; + mpn_zero (g+2*ecc->size + 1, ecc->size - 1); + + /* Zero point has x = 0, y = 1, z = 1 */ + mpn_zero (z, 3*ecc->size); + z[ecc->size] = z[2*ecc->size] = 1; + + ecc_dup_eh (ecc, pe, z, scratch); + if (!point_zero_p (ecc, pe)) + die ("dup of zero point failed.\n"); + + ecc_dup_eh (ecc, pe, g, scratch); + gmp_fprintf (stderr, "g2 (edwards):\n" + "x = %Nx\n" + "y = %Nx\n" + "z = %Nx\n", + pe, ecc->size, + pe + ecc->size, ecc->size, + pe + 2*ecc->size, ecc->size); + + ecc_eh_to_a (ecc, 0, pa, pe, scratch); + test_ecc_point (ecc, &g2, pa); +} -- GitLab