|
|
|
@ -161,9 +161,9 @@ static int secp256k1_gej_eq_x_var(const secp256k1_fe_t *x, const secp256k1_gej_t
|
|
|
|
|
VERIFY_CHECK(!a->infinity);
|
|
|
|
|
secp256k1_fe_t r; secp256k1_fe_sqr(&r, &a->z); secp256k1_fe_mul(&r, &r, x);
|
|
|
|
|
secp256k1_fe_t r2 = a->x;
|
|
|
|
|
secp256k1_fe_normalize_var(&r);
|
|
|
|
|
secp256k1_fe_normalize_var(&r2);
|
|
|
|
|
return secp256k1_fe_equal(&r, &r2);
|
|
|
|
|
secp256k1_fe_normalize_weak(&r);
|
|
|
|
|
secp256k1_fe_normalize_weak(&r2);
|
|
|
|
|
return secp256k1_fe_equal_var(&r, &r2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void secp256k1_gej_neg(secp256k1_gej_t *r, const secp256k1_gej_t *a) {
|
|
|
|
@ -193,9 +193,8 @@ static int secp256k1_gej_is_valid_var(const secp256k1_gej_t *a) {
|
|
|
|
|
secp256k1_fe_t z6; secp256k1_fe_sqr(&z6, &z2); secp256k1_fe_mul(&z6, &z6, &z2);
|
|
|
|
|
secp256k1_fe_mul_int(&z6, 7);
|
|
|
|
|
secp256k1_fe_add(&x3, &z6);
|
|
|
|
|
secp256k1_fe_normalize_var(&y2);
|
|
|
|
|
secp256k1_fe_normalize_var(&x3);
|
|
|
|
|
return secp256k1_fe_equal(&y2, &x3);
|
|
|
|
|
secp256k1_fe_normalize_weak(&x3);
|
|
|
|
|
return secp256k1_fe_equal_var(&y2, &x3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int secp256k1_ge_is_valid_var(const secp256k1_ge_t *a) {
|
|
|
|
@ -206,9 +205,8 @@ static int secp256k1_ge_is_valid_var(const secp256k1_ge_t *a) {
|
|
|
|
|
secp256k1_fe_t x3; secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);
|
|
|
|
|
secp256k1_fe_t c; secp256k1_fe_set_int(&c, 7);
|
|
|
|
|
secp256k1_fe_add(&x3, &c);
|
|
|
|
|
secp256k1_fe_normalize_var(&y2);
|
|
|
|
|
secp256k1_fe_normalize_var(&x3);
|
|
|
|
|
return secp256k1_fe_equal(&y2, &x3);
|
|
|
|
|
secp256k1_fe_normalize_weak(&x3);
|
|
|
|
|
return secp256k1_fe_equal_var(&y2, &x3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void secp256k1_gej_double_var(secp256k1_gej_t *r, const secp256k1_gej_t *a) {
|
|
|
|
@ -259,12 +257,8 @@ static void secp256k1_gej_add_var(secp256k1_gej_t *r, const secp256k1_gej_t *a,
|
|
|
|
|
secp256k1_fe_t u2; secp256k1_fe_mul(&u2, &b->x, &z12);
|
|
|
|
|
secp256k1_fe_t s1; secp256k1_fe_mul(&s1, &a->y, &z22); secp256k1_fe_mul(&s1, &s1, &b->z);
|
|
|
|
|
secp256k1_fe_t s2; secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);
|
|
|
|
|
secp256k1_fe_normalize_var(&u1);
|
|
|
|
|
secp256k1_fe_normalize_var(&u2);
|
|
|
|
|
if (secp256k1_fe_equal(&u1, &u2)) {
|
|
|
|
|
secp256k1_fe_normalize_var(&s1);
|
|
|
|
|
secp256k1_fe_normalize_var(&s2);
|
|
|
|
|
if (secp256k1_fe_equal(&s1, &s2)) {
|
|
|
|
|
if (secp256k1_fe_equal_var(&u1, &u2)) {
|
|
|
|
|
if (secp256k1_fe_equal_var(&s1, &s2)) {
|
|
|
|
|
secp256k1_gej_double_var(r, a);
|
|
|
|
|
} else {
|
|
|
|
|
r->infinity = 1;
|
|
|
|
@ -298,15 +292,12 @@ static void secp256k1_gej_add_ge_var(secp256k1_gej_t *r, const secp256k1_gej_t *
|
|
|
|
|
}
|
|
|
|
|
r->infinity = 0;
|
|
|
|
|
secp256k1_fe_t z12; secp256k1_fe_sqr(&z12, &a->z);
|
|
|
|
|
secp256k1_fe_t u1 = a->x;
|
|
|
|
|
secp256k1_fe_t u1 = a->x; secp256k1_fe_normalize_weak(&u1);
|
|
|
|
|
secp256k1_fe_t u2; secp256k1_fe_mul(&u2, &b->x, &z12);
|
|
|
|
|
secp256k1_fe_t s1 = a->y; secp256k1_fe_normalize_var(&s1);
|
|
|
|
|
secp256k1_fe_t s1 = a->y; secp256k1_fe_normalize_weak(&s1);
|
|
|
|
|
secp256k1_fe_t s2; secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);
|
|
|
|
|
secp256k1_fe_normalize_var(&u1);
|
|
|
|
|
secp256k1_fe_normalize_var(&u2);
|
|
|
|
|
if (secp256k1_fe_equal(&u1, &u2)) {
|
|
|
|
|
secp256k1_fe_normalize_var(&s2);
|
|
|
|
|
if (secp256k1_fe_equal(&s1, &s2)) {
|
|
|
|
|
if (secp256k1_fe_equal_var(&u1, &u2)) {
|
|
|
|
|
if (secp256k1_fe_equal_var(&s1, &s2)) {
|
|
|
|
|
secp256k1_gej_double_var(r, a);
|
|
|
|
|
} else {
|
|
|
|
|
r->infinity = 1;
|
|
|
|
|