diff --git a/ChangeLog b/ChangeLog index 44cf8557acc6d4b5f19706edb7d47d93b25d7bbc..8ef735499f6adf659e44eb8c5ef0040fbc6bd343 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,14 @@ 2014-10-03 Niels Möller <nisse@lysator.liu.se> - * testsuite/ecc-mod-test.c [NETTLE_USE_MINI_GMP]: Enable test. - (ref_mod): Use mpz_mod and mpz_limbs_copy, instead of mpn_tdiv_qr. + * testsuite/ecc-modinv-test.c [NETTLE_USE_MINI_GMP]: Enable test. + (ref_modinv): Use mpz_gcdext, instead of mpn_gcdext. (test_modulo): Replace gmp_fprintf calls by plain fprintf and mpn_out_str. + * testsuite/ecc-mod-test.c [NETTLE_USE_MINI_GMP]: Enable test. + (ref_mod): Use mpz_mod and mpz_limbs_copy, instead of mpn_tdiv_qr. + (test_modulo): Replace gmp_fprintf calls. + * testsuite/testutils.c (mpn_out_str): New function, needed to replace uses of gmp_fprintf. diff --git a/testsuite/ecc-modinv-test.c b/testsuite/ecc-modinv-test.c index a685f59c4a650f69399dbdb81a34031588963aca..c46c69f5060813ba0bc8f404715c98bf5c0b1cc7 100644 --- a/testsuite/ecc-modinv-test.c +++ b/testsuite/ecc-modinv-test.c @@ -1,37 +1,33 @@ #include "testutils.h" -#if NETTLE_USE_MINI_GMP -void -test_main (void) -{ - SKIP(); -} -#else /* ! NETTLE_USE_MINI_GMP */ - static int ref_modinv (mp_limb_t *rp, const mp_limb_t *ap, const mp_limb_t *mp, mp_size_t mn) { - mp_limb_t tp[4*(mn+1)]; - mp_limb_t *up = tp; - mp_limb_t *vp = tp + mn+1; - mp_limb_t *gp = tp + 2*(mn+1); - mp_limb_t *sp = tp + 3*(mn+1); - mp_size_t gn, sn; + mpz_t g, s, a, m; + int res; - mpn_copyi (up, ap, mn); - mpn_copyi (vp, mp, mn); - gn = mpn_gcdext (gp, sp, &sn, up, mn, vp, mn); - if (gn != 1 || gp[0] != 1) - return 0; + mpz_init (g); + mpz_init (s); + mpz_roinit_n (a, ap, mn); + mpz_roinit_n (m, mp, mn); - if (sn < 0) - mpn_sub (sp, mp, mn, sp, -sn); - else if (sn < mn) - /* Zero-pad. */ - mpn_zero (sp + sn, mn - sn); + mpz_gcdext (g, s, NULL, a, m); + if (mpz_cmp_ui (g, 1) == 0) + { + if (mpz_sgn (s) < 0) + { + mpz_add (s, s, m); + ASSERT (mpz_sgn (s) > 0); + } + mpz_limbs_copy (rp, s, mn); + res = 1; + } + else + res = 0; - mpn_copyi (rp, sp, mn); - return 1; + mpz_clear (g); + mpz_clear (s); + return res; } static int @@ -70,10 +66,11 @@ test_modulo (gmp_randstate_t rands, const char *name, { fprintf (stderr, "%s->invert failed for zero input (bit size %u):\n", name, m->bit_size); - gmp_fprintf (stderr, "p = %Nx\n" - "t = %Nx (bad)\n", - m->m, m->size, - ai, m->size); + fprintf (stderr, "p = "); + mpn_out_str (stderr, 16, m->m, m->size); + fprintf (stderr, "\nt = "); + mpn_out_str (stderr, 16, ai, m->size); + fprintf (stderr, " (bad)\n"); abort (); } @@ -84,10 +81,12 @@ test_modulo (gmp_randstate_t rands, const char *name, { fprintf (stderr, "%s->invert failed for a = p input (bit size %u):\n", name, m->bit_size); - gmp_fprintf (stderr, "p = %Nx\n" - "t = %Nx (bad)\n", - m->m, m->size, - ai, m->size); + + fprintf (stderr, "p = "); + mpn_out_str (stderr, 16, m->m, m->size); + fprintf (stderr, "\nt = "); + mpn_out_str (stderr, 16, ai, m->size); + fprintf (stderr, " (bad)\n"); abort (); } @@ -112,13 +111,15 @@ test_modulo (gmp_randstate_t rands, const char *name, { fprintf (stderr, "%s->invert failed (test %u, bit size %u):\n", name, j, m->bit_size); - gmp_fprintf (stderr, "a = %Zx\n" - "p = %Nx\n" - "t = %Nx (bad)\n" - "r = %Nx\n", - r, m->m, m->size, - ai, m->size, - ref, m->size); + fprintf (stderr, "a = "); + mpz_out_str (stderr, 16, r); + fprintf (stderr, "\np = "); + mpn_out_str (stderr, 16, m->m, m->size); + fprintf (stderr, "\nt = "); + mpn_out_str (stderr, 16, ai, m->size); + fprintf (stderr, " (bad)\nr = "); + mpn_out_str (stderr, 16, ref, m->size); + abort (); } @@ -145,4 +146,3 @@ test_main (void) } gmp_randclear (rands); } -#endif /* ! NETTLE_USE_MINI_GMP */