diff --git a/src/libsodium/crypto_core/curve25519/core_curve25519.c b/src/libsodium/crypto_core/curve25519/core_curve25519.c index 9e00ebb3..40a3cca4 100644 --- a/src/libsodium/crypto_core/curve25519/core_curve25519.c +++ b/src/libsodium/crypto_core/curve25519/core_curve25519.c @@ -66,6 +66,61 @@ has_small_order(const unsigned char s[32]) return (int) ((k >> 8) & 1); } +static void +fe25519_pow22523(fe25519 out, const fe25519 z) +{ + fe25519 t0; + fe25519 t1; + fe25519 t2; + int i; + + fe25519_sq(t0, z); + fe25519_sq(t1, t0); + fe25519_sq(t1, t1); + fe25519_mul(t1, z, t1); + fe25519_mul(t0, t0, t1); + fe25519_sq(t0, t0); + fe25519_mul(t0, t1, t0); + fe25519_sq(t1, t0); + for (i = 1; i < 5; ++i) { + fe25519_sq(t1, t1); + } + fe25519_mul(t0, t1, t0); + fe25519_sq(t1, t0); + for (i = 1; i < 10; ++i) { + fe25519_sq(t1, t1); + } + fe25519_mul(t1, t1, t0); + fe25519_sq(t2, t1); + for (i = 1; i < 20; ++i) { + fe25519_sq(t2, t2); + } + fe25519_mul(t1, t2, t1); + fe25519_sq(t1, t1); + for (i = 1; i < 10; ++i) { + fe25519_sq(t1, t1); + } + fe25519_mul(t0, t1, t0); + fe25519_sq(t1, t0); + for (i = 1; i < 50; ++i) { + fe25519_sq(t1, t1); + } + fe25519_mul(t1, t1, t0); + fe25519_sq(t2, t1); + for (i = 1; i < 100; ++i) { + fe25519_sq(t2, t2); + } + fe25519_mul(t1, t2, t1); + fe25519_sq(t1, t1); + for (i = 1; i < 50; ++i) { + fe25519_sq(t1, t1); + } + fe25519_mul(t0, t1, t0); + fe25519_sq(t0, t0); + fe25519_sq(t0, t0); + fe25519_mul(out, t0, z); +} + static int is_on_main_subgroup(const fe25519 x1) { diff --git a/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c b/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c index b745cec4..84eed89a 100644 --- a/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c +++ b/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c @@ -108,7 +108,7 @@ fe25519_invert(fe25519 out, const fe25519 z) fe25519_mul(out, t1, t0); } -void +static void fe25519_pow22523(fe25519 out, const fe25519 z) { fe25519 t0; diff --git a/src/libsodium/include/sodium/private/ed25519_ref10.h b/src/libsodium/include/sodium/private/ed25519_ref10.h index 713b6550..42fcd981 100644 --- a/src/libsodium/include/sodium/private/ed25519_ref10.h +++ b/src/libsodium/include/sodium/private/ed25519_ref10.h @@ -17,7 +17,6 @@ typedef int32_t fe25519[10]; void fe25519_invert(fe25519 out, const fe25519 z); void fe25519_frombytes(fe25519 h, const unsigned char *s); -void fe25519_pow22523(fe25519 out, const fe25519 z); void fe25519_tobytes(unsigned char *s, const fe25519 h); #ifdef HAVE_TI_MODE