diff --git a/ChangeLog b/ChangeLog index 95024c77ffae6ccb6599a6720fb9365affb37685..8a9a5073b138cf0c5d3c0ab5ab1f939fb3575fe9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-09-09 Niels Möller <nisse@lysator.liu.se> + + * gmp-glue.c (cnd_swap): Moved function here, made non-static. + Changed cnd type to mp_limb_t, for consistency with GMP + mpn_cnd_add_n. + * sec-modinv.c (cnd_swap): ... old location. + * gmp-glue.h (cnd_swap): Declare function. + 2014-09-06 Niels Möller <nisse@lysator.liu.se> * examples/hogweed-benchmark.c (bench_curve25519_mul_g) diff --git a/gmp-glue.c b/gmp-glue.c index 013c4cfa0dd60a8af3d12604538665749570fd4e..5de167eb87cca2920cb23b60301de2b998f294bd 100644 --- a/gmp-glue.c +++ b/gmp-glue.c @@ -142,6 +142,22 @@ mpn_zero (mp_ptr ptr, mp_size_t n) } #endif /* !GMP_HAVE_mpn_copyd */ +void +cnd_swap (mp_limb_t cnd, mp_limb_t *ap, mp_limb_t *bp, mp_size_t n) +{ + mp_limb_t mask = - (mp_limb_t) (cnd != 0); + mp_size_t i; + for (i = 0; i < n; i++) + { + mp_limb_t a, b, t; + a = ap[i]; + b = bp[i]; + t = (a ^ b) & mask; + ap[i] = a ^ t; + bp[i] = b ^ t; + } +} + /* Additional convenience functions. */ int diff --git a/gmp-glue.h b/gmp-glue.h index f9e149ada64b92b18ede13aeb81e39d332422aeb..7713757c4dbace397b9b9a33748227d3a647793f 100644 --- a/gmp-glue.h +++ b/gmp-glue.h @@ -66,6 +66,7 @@ #define mpn_sqr(rp, ap, n) mpn_mul_n((rp), (ap), (ap), (n)) #endif +#define cnd_swap _nettle_cnd_swap #define mpz_limbs_cmp _nettle_mpz_limbs_cmp #define mpz_limbs_read_n _nettle_mpz_limbs_read_n #define mpz_limbs_copy _nettle_mpz_limbs_copy @@ -143,6 +144,9 @@ void mpn_zero (mp_ptr ptr, mp_size_t n); #endif /* !GMP_HAVE_mpn_copyd */ +void +cnd_swap (mp_limb_t cnd, mp_limb_t *ap, mp_limb_t *bp, mp_size_t n); + /* Convenience functions */ int mpz_limbs_cmp (mpz_srcptr a, const mp_limb_t *bp, mp_size_t bn); diff --git a/sec-modinv.c b/sec-modinv.c index ea94abd3ac85810de14f264179221ecde99d5e30..7f80ba85815d7a84559b82bd70c9c77eae45f5b4 100644 --- a/sec-modinv.c +++ b/sec-modinv.c @@ -54,22 +54,6 @@ cnd_neg (int cnd, mp_limb_t *rp, const mp_limb_t *ap, mp_size_t n) } } -static void -cnd_swap (int cnd, mp_limb_t *ap, mp_limb_t *bp, mp_size_t n) -{ - mp_limb_t mask = - (mp_limb_t) (cnd != 0); - mp_size_t i; - for (i = 0; i < n; i++) - { - mp_limb_t a, b, t; - a = ap[i]; - b = bp[i]; - t = (a ^ b) & mask; - ap[i] = a ^ t; - bp[i] = b ^ t; - } -} - /* Compute a^{-1} mod m, with running time depending only on the size. Returns zero if a == 0 (mod m), to be consistent with a^{phi(m)-1}. Also needs (m+1)/2, and m must be odd. */