Commit 5b677535 authored by Niels Möller's avatar Niels Möller
Browse files

Make ecc-sqrt-test work with mini-gmp.

parent a3fb911e
2014-10-03 Niels Möller <nisse@lysator.liu.se>
* testsuite/ecc-sqrt-test.c (mpz_ui_kronecker)
[NETTLE_USE_MINI_GMP]: New fallback definition when building with
mini-gmp.
* testsuite/testutils.c (gmp_randinit_default)
[NETTLE_USE_MINI_GMP]: Likewise.
(mpz_urandomb): Likewise.
* testsuite/testutils.h (gmp_randstate_t) [NETTLE_USE_MINI_GMP]:
Fallback typedef, using knuth_lfib_ctx.
2014-10-02 Niels Möller <nisse@lysator.liu.se> 2014-10-02 Niels Möller <nisse@lysator.liu.se>
* testsuite/eddsa-compress-test.c: New testcase. * testsuite/eddsa-compress-test.c: New testcase.
......
...@@ -33,6 +33,38 @@ ...@@ -33,6 +33,38 @@
#define COUNT 5000 #define COUNT 5000
#if NETTLE_USE_MINI_GMP
/* Implements Legendre symbol only, requiring that p is an odd prime */
static int
mpz_ui_kronecker (mp_limb_t ul, const mpz_t p)
{
mpz_t t, u;
int r;
mpz_init_set_ui (u, ul);
mpz_init_set (t, p);
mpz_sub_ui (t, t, 1);
mpz_tdiv_q_2exp (t, t, 1);
mpz_powm (t, u, t, p);
r = mpz_cmp_ui (t, 1);
if (r < 0)
r = 0;
else if (r == 0)
r = 1;
else
{
mpz_sub (t, p, t);
ASSERT (mpz_cmp_ui (t, 1) == 0);
r = -1;
}
mpz_clear (t);
mpz_clear (u);
return r;
}
#endif /* NETTLE_USE_MINI_GMP */
static void static void
test_modulo (gmp_randstate_t rands, const struct ecc_modulo *m) test_modulo (gmp_randstate_t rands, const struct ecc_modulo *m)
{ {
......
...@@ -699,6 +699,25 @@ mpn_zero_p (mp_srcptr ap, mp_size_t n) ...@@ -699,6 +699,25 @@ mpn_zero_p (mp_srcptr ap, mp_size_t n)
} }
#endif #endif
#if NETTLE_USE_MINI_GMP
void
gmp_randinit_default (struct knuth_lfib_ctx *ctx)
{
knuth_lfib_init (ctx, 17);
}
void
mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits)
{
size_t bytes = (bits+7)/8;
uint8_t *buf = xalloc (bytes);
knuth_lfib_random (ctx, bytes, buf);
buf[bytes-1] &= 0xff >> (8*bytes - bits);
nettle_mpz_set_str_256_u (r, bytes, buf);
free (buf);
}
#endif /* NETTLE_USE_MINI_GMP */
mp_limb_t * mp_limb_t *
xalloc_limbs (mp_size_t n) xalloc_limbs (mp_size_t n)
{ {
......
...@@ -20,11 +20,14 @@ ...@@ -20,11 +20,14 @@
# include "ecc-internal.h" # include "ecc-internal.h"
# include "ecdsa.h" # include "ecdsa.h"
# include "gmp-glue.h" # include "gmp-glue.h"
# if NETTLE_USE_MINI_GMP
# include "knuth-lfib.h"
# endif
/* Undo dsa-compat name mangling */ /* Undo dsa-compat name mangling */
#undef dsa_generate_keypair #undef dsa_generate_keypair
#define dsa_generate_keypair nettle_dsa_generate_keypair #define dsa_generate_keypair nettle_dsa_generate_keypair
#endif #endif /* WITH_HOGWEED */
#include "nettle-meta.h" #include "nettle-meta.h"
...@@ -162,6 +165,17 @@ int ...@@ -162,6 +165,17 @@ int
mpn_zero_p (mp_srcptr ap, mp_size_t n); mpn_zero_p (mp_srcptr ap, mp_size_t n);
#endif #endif
#if NETTLE_USE_MINI_GMP
typedef struct knuth_lfib_ctx gmp_randstate_t[1];
void gmp_randinit_default (struct knuth_lfib_ctx *ctx);
#define gmp_randclear(state)
void mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits);
/* This is cheating */
#define mpz_rrandomb mpz_urandomb
#endif /* NETTLE_USE_MINI_GMP */
mp_limb_t * mp_limb_t *
xalloc_limbs (mp_size_t n); xalloc_limbs (mp_size_t n);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment