diff --git a/src/se050_x25519_sw.c b/src/se050_x25519_sw.c index c3dfa2b..fbc1813 100644 --- a/src/se050_x25519_sw.c +++ b/src/se050_x25519_sw.c @@ -371,22 +371,36 @@ static void x25519_sw(uint8_t *out, const uint8_t *scalar, const uint8_t *point) for (int i = 254; i >= 0; i--) { int bit = (e[i/8] >> (i&7)) & 1; fe_cswap(x2, x3, swap); swap = bit; - fe_add(sum, x3, z3); fe_sub(diff, x3, z3); - fe_add(x1, x2, z2); fe_sub(x2, x2, z2); - fe_sq(z3, sum); fe_sq(z2, x2); - fe_sq(x3, diff); fe_sq(x2, x1); - fe_add(sum, z3, z2); fe_sub(z2, z3, z2); - fe_mul(x3, x3, x2); fe_mul(x2, sum, z2); - fe_add(z2, x2, z2); fe_sub(z2, x2, z2); - fe_sq(x2, x2); fe_sq(z3, z3); - fe_mul(x1, x1, x2); fe_mul(z2, point, z2); - fe_add(x2, x1, z3); fe_sub(x1, x1, z3); - fe_sq(z3, x2); fe_sq(x2, x1); - fe_mul(x1, z3, x2); fe_sub(z3, z3, x2); - fe_sq(z3, z3); fe_mul(z3, z3, z2); + fe_add(sum, x3, z3); + fe_sub(diff, x3, z3); + fe_add(x1, x2, z2); + fe_sub(x2, x2, z2); + fe_sq(z3, sum); + fe_sq(z2, x2); + fe_sq(x3, diff); + fe_sq(x2, x1); + fe_add(sum, z3, z2); + fe_sub(z2, z3, z2); + fe_mul(x3, x3, x2); + fe_mul(x2, sum, z2); + fe_add(x1, x2, z2); + fe_sub(z2, x2, z2); + fe_sq(x2, x2); + fe_sq(z3, z3); + fe_mul(x1, x1, x2); + fe_mul(z2, z2, x1); + fe_add(x2, x1, z3); + fe_sub(x1, x1, z3); + fe_sq(z3, x2); + fe_sq(x2, x1); + fe_mul(x1, z3, x2); + fe_sub(z3, z3, x2); + fe_sq(z3, z3); + fe_mul(z3, z3, z2); } fe_cswap(x2, x3, swap); - fe_inv(z2, z2); fe_mul(x2, x2, z2); + fe_inv(z2, z2); + fe_mul(x2, x2, z2); fe_tobytes(out, x2); }