Use only fixed-window implementation

This commit is contained in:
Olivier Chéron 2017-11-04 09:03:50 +01:00
parent d497040ddd
commit 6b3bf37eea
2 changed files with 2 additions and 46 deletions

View File

@ -26,7 +26,6 @@ module Crypto.ECC.Ed25519
, pointAdd
, pointDouble
, pointMul
, pointMulW
, pointsMulVarTime
) where
@ -198,7 +197,7 @@ pointDouble (Point a) =
withByteArray a $ \pa ->
ed25519_point_double out pa
-- | Scalar multiplication over Ed25519 (double-add always).
-- | Scalar multiplication over Ed25519.
pointMul :: Scalar -> Point -> Point
pointMul (Scalar scalar) (Point base) =
Point $ B.allocAndFreeze pointArraySize $ \out ->
@ -206,14 +205,6 @@ pointMul (Scalar scalar) (Point base) =
withByteArray base $ \pbase ->
ed25519_point_scalarmul out pbase pscalar
-- | Scalar multiplication over Ed25519 (4-bit fixed window).
pointMulW :: Scalar -> Point -> Point
pointMulW (Scalar scalar) (Point base) =
Point $ B.allocAndFreeze pointArraySize $ \out ->
withByteArray scalar $ \pscalar ->
withByteArray base $ \pbase ->
ed25519_point_scalarmul_w out pbase pscalar
-- | Multiply the point @p@ with @s2@ and add a lifted to curve value @s1@.
--
-- @
@ -299,12 +290,6 @@ foreign import ccall "cryptonite_ed25519_point_scalarmul"
-> Ptr Scalar -- scalar
-> IO ()
foreign import ccall "cryptonite_ed25519_point_scalarmul_w"
ed25519_point_scalarmul_w :: Ptr Point -- scaled
-> Ptr Point -- base
-> Ptr Scalar -- scalar
-> IO ()
foreign import ccall "cryptonite_ed25519_base_double_scalarmul_vartime"
ed25519_base_double_scalarmul_vartime :: Ptr Point -- combo
-> Ptr Scalar -- scalar1

View File

@ -110,35 +110,6 @@ ED25519_FN(ed25519_point_base_scalarmul) (ge25519 *r, const bignum256modm s) {
ge25519_scalarmult_base_niels(r, ge25519_niels_base_multiples, s);
}
void
ED25519_FN(ed25519_point_scalarmul) (ge25519 *r, const ge25519 *p, const bignum256modm s) {
ge25519 tmp;
uint32_t scalar_bit;
unsigned char ss[32];
// transform scalar as little-endian number
contract256_modm(ss, s);
// initialize r to identity
memset(r, 0, sizeof(ge25519));
r->y[0] = 1;
r->z[0] = 1;
// double-add-always
for (int i = 31; i >= 0; i--) {
for (int j = 7; j >= 0; j--) {
ge25519_double(r, r);
ge25519_add(&tmp, r, p);
scalar_bit = (ss[i] >> j) & 1;
curve25519_swap_conditional(r->x, tmp.x, scalar_bit);
curve25519_swap_conditional(r->y, tmp.y, scalar_bit);
curve25519_swap_conditional(r->z, tmp.z, scalar_bit);
curve25519_swap_conditional(r->t, tmp.t, scalar_bit);
}
}
}
#if defined(ED25519_64BIT)
typedef uint64_t ed25519_move_cond_word;
#else
@ -183,7 +154,7 @@ ed25519_point_scalarmul_w_choose_pniels(ge25519_pniels *t, const ge25519_pniels
}
void
ED25519_FN(ed25519_point_scalarmul_w) (ge25519 *r, const ge25519 *p, const bignum256modm s) {
ED25519_FN(ed25519_point_scalarmul) (ge25519 *r, const ge25519 *p, const bignum256modm s) {
ge25519_pniels mult[15];
ge25519_pniels pn;
ge25519_p1p1 t;