1
mirror of https://github.com/jedisct1/libsodium.git synced 2024-12-19 18:15:18 -07:00

Avoid useless pack/unpack operation

This commit is contained in:
Frank Denis 2019-05-02 15:04:31 +02:00
parent 4b7e497a92
commit f1309fd752

View File

@ -2526,20 +2526,18 @@ chi25519(fe25519 out, const fe25519 z)
} }
static void static void
ge25519_elligator2(unsigned char s[32], const unsigned char x_sign) ge25519_elligator2(unsigned char s[32], const fe25519 r, const unsigned char x_sign)
{ {
fe25519 e; fe25519 e;
fe25519 negx; fe25519 negx;
fe25519 rr2; fe25519 rr2;
fe25519 x, x2, x3; fe25519 x, x2, x3;
ge25519_p3 p3; ge25519_p3 p3;
ge25519_p1p1 p1; ge25519_p1p1 p1;
ge25519_p2 p2; ge25519_p2 p2;
unsigned int e_is_minus_1; unsigned int e_is_minus_1;
fe25519_frombytes(rr2, s); fe25519_sq2(rr2, r);
fe25519_sq2(rr2, rr2);
rr2[0]++; rr2[0]++;
fe25519_invert(rr2, rr2); fe25519_invert(rr2, rr2);
fe25519_mul(x, curve25519_A, rr2); fe25519_mul(x, curve25519_A, rr2);
@ -2597,12 +2595,14 @@ ge25519_elligator2(unsigned char s[32], const unsigned char x_sign)
void void
ge25519_from_uniform(unsigned char s[32], const unsigned char r[32]) ge25519_from_uniform(unsigned char s[32], const unsigned char r[32])
{ {
fe25519 r_fe;
unsigned char x_sign; unsigned char x_sign;
memcpy(s, r, 32); memcpy(s, r, 32);
x_sign = s[31] & 0x80; x_sign = s[31] & 0x80;
s[31] &= 0x7f; s[31] &= 0x7f;
ge25519_elligator2(s, x_sign); fe25519_frombytes(r_fe, s);
ge25519_elligator2(s, r_fe, x_sign);
} }
void void
@ -2627,8 +2627,8 @@ ge25519_from_hash(unsigned char s[32], const unsigned char h[64])
for (i = 0; i < sizeof (fe25519) / sizeof fe_f[0]; i++) { for (i = 0; i < sizeof (fe25519) / sizeof fe_f[0]; i++) {
fe_f[i] += 38 * fe_g[i]; fe_f[i] += 38 * fe_g[i];
} }
fe25519_tobytes(s, fe_f); fe25519_reduce(fe_f, fe_f);
ge25519_elligator2(s, x_sign); ge25519_elligator2(s, fe_f, x_sign);
} }
/* Ristretto group */ /* Ristretto group */