7#ifndef SECP256K1_MODINV64_IMPL_H
8#define SECP256K1_MODINV64_IMPL_H
46 for (i = 0; i < 4; ++i) {
62 for (i = 0; i < 4; ++i) {
67 for (i = 4; i >= 0; --i) {
68 if (
am.v[i] <
bm.v[i])
return -1;
69 if (
am.v[i] >
bm.v[i])
return 1;
96 for (i = 0; i < 5; ++i) {
175 uint64_t u = 8, v = 0, q = 0, r = 8;
180 for (i = 3; i < 62; ++i) {
241 uint64_t u = 1, v = 0, q = 0, r = 1;
279 w = (
f *
g * (
f *
f - 2)) &
m;
289 w =
f + (((
f + 1) & 4) << 1);
327 uint64_t u = 1, v = 0, q = 0, r = 1;
360 jac ^= ((
f &
g) >> 1);
370 w = (
f *
g * (
f *
f - 2)) &
m;
380 w =
f + (((
f + 1) & 4) << 1);
415 const int64_t u =
t->u, v =
t->v, q =
t->q, r =
t->r;
429 me = (q &
sd) + (r &
se);
504 const int64_t u =
t->u, v =
t->v, q =
t->q, r =
t->r;
555 const int64_t u =
t->u, v =
t->v, q =
t->q, r =
t->r;
572 for (i = 1; i < len; ++i) {
598 for (i = 0; i < 10; ++i) {
668 for (
j = 1;
j < len; ++
j) {
672 if (cond == 0)
break;
678 cond = ((
int64_t)len - 2) >> 63;
679 cond |= fn ^ (fn >> 63);
680 cond |=
gn ^ (
gn >> 63);
715#define JACOBI64_ITERATIONS 12
717#define JACOBI64_ITERATIONS 25
732 VERIFY_CHECK(
g.v[0] >= 0 &&
g.v[1] >= 0 &&
g.v[2] >= 0 &&
g.v[3] >= 0 &&
g.v[4] >= 0);
754 for (
j = 1;
j < len; ++
j) {
758 if (cond == 0)
return 1 - 2*(
jac & 1);
764 cond = ((
int64_t)len - 2) >> 63;
768 if (cond == 0) --len;
int128_t secp256k1_int128
static SECP256K1_INLINE void secp256k1_i128_det(secp256k1_int128 *r, int64_t a, int64_t b, int64_t c, int64_t d)
static SECP256K1_INLINE void secp256k1_i128_rshift(secp256k1_int128 *r, unsigned int n)
static SECP256K1_INLINE uint64_t secp256k1_i128_to_u64(const secp256k1_int128 *a)
static SECP256K1_INLINE void secp256k1_i128_from_i64(secp256k1_int128 *r, int64_t a)
static SECP256K1_INLINE int secp256k1_i128_eq_var(const secp256k1_int128 *a, const secp256k1_int128 *b)
static SECP256K1_INLINE int64_t secp256k1_i128_to_i64(const secp256k1_int128 *a)
static SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b)
static SECP256K1_INLINE int secp256k1_i128_check_pow2(const secp256k1_int128 *r, unsigned int n, int sign)
static SECP256K1_INLINE void secp256k1_i128_accum_mul(secp256k1_int128 *r, int64_t a, int64_t b)
static int64_t secp256k1_modinv64_posdivsteps_62_var(int64_t eta, uint64_t f0, uint64_t g0, secp256k1_modinv64_trans2x2 *t, int *jacp)
static int64_t secp256k1_modinv64_divsteps_62_var(int64_t eta, uint64_t f0, uint64_t g0, secp256k1_modinv64_trans2x2 *t)
static void secp256k1_modinv64_normalize_62(secp256k1_modinv64_signed62 *r, int64_t sign, const secp256k1_modinv64_modinfo *modinfo)
#define JACOBI64_ITERATIONS
static void secp256k1_modinv64(secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo)
static void secp256k1_modinv64_var(secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo)
static void secp256k1_modinv64_update_fg_62_var(int len, secp256k1_modinv64_signed62 *f, secp256k1_modinv64_signed62 *g, const secp256k1_modinv64_trans2x2 *t)
static int secp256k1_jacobi64_maybe_var(const secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo)
static int64_t secp256k1_modinv64_divsteps_59(int64_t zeta, uint64_t f0, uint64_t g0, secp256k1_modinv64_trans2x2 *t)
static void secp256k1_modinv64_update_fg_62(secp256k1_modinv64_signed62 *f, secp256k1_modinv64_signed62 *g, const secp256k1_modinv64_trans2x2 *t)
static void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp256k1_modinv64_signed62 *e, const secp256k1_modinv64_trans2x2 *t, const secp256k1_modinv64_modinfo *modinfo)
static int sign(const secp256k1_context *ctx, struct signer_secrets *signer_secrets, struct signer *signer, const secp256k1_musig_keyagg_cache *cache, const unsigned char *msg32, unsigned char *sig64)
static SECP256K1_INLINE int secp256k1_ctz64_var(uint64_t x)
#define VERIFY_CHECK(cond)
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.