From fb1bb0b4450cb6459e1e0af6f3a18f4bde745893 Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Wed, 12 Nov 2014 11:56:13 +0700 Subject: [PATCH] Rearrange _gej_add_ge to save an _fe_negate --- src/group_impl.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/group_impl.h b/src/group_impl.h index e62bd9ad98f..25a37b8f9be 100644 --- a/src/group_impl.h +++ b/src/group_impl.h @@ -362,7 +362,6 @@ void static secp256k1_gej_add_ge(secp256k1_gej_t *r, const secp256k1_gej_t *a, c secp256k1_fe_t n; secp256k1_fe_sqr(&n, &m); // n = M^2 (1) secp256k1_fe_t q; secp256k1_fe_mul(&q, &n, &t); // q = Q = T*M^2 (1) secp256k1_fe_sqr(&n, &n); // n = M^4 (1) - secp256k1_fe_negate(&n, &n, 1); // n = -M^4 (2) secp256k1_fe_t rr; secp256k1_fe_sqr(&rr, &t); // rr = T^2 (1) secp256k1_fe_mul(&t, &u1, &u2); secp256k1_fe_negate(&t, &t, 1); // t = -U1*U2 (2) secp256k1_fe_add(&rr, &t); // rr = R = T^2-U1*U2 (3) @@ -372,15 +371,15 @@ void static secp256k1_gej_add_ge(secp256k1_gej_t *r, const secp256k1_gej_t *a, c int infinity = secp256k1_fe_is_zero(&r->z) * (1 - a->infinity); secp256k1_fe_mul_int(&r->z, 2 * (1 - a->infinity)); // r->z = Z3 = 2*M*Z (2) r->x = t; // r->x = R^2 (1) - r->y = q; secp256k1_fe_mul_int(&r->y, 3); // r->y = 3*Q (3) secp256k1_fe_negate(&q, &q, 1); // q = -Q (2) - secp256k1_fe_negate(&t, &t, 1); // t = -R^2 (2) - secp256k1_fe_mul_int(&t, 2); // t = -2*R^2 (4) secp256k1_fe_add(&r->x, &q); // r->x = R^2-Q (3) secp256k1_fe_normalize(&r->x); - secp256k1_fe_add(&r->y, &t); // r->y = 3*Q-2*R^2 - secp256k1_fe_mul(&r->y, &r->y, &rr); // r->y = R*(3*Q-2*R^2) (1) - secp256k1_fe_add(&r->y, &n); // r->y = R*(3*Q-2*R^2)-M^4 (3) + secp256k1_fe_mul_int(&q, 3); // q = -3*Q (6) + secp256k1_fe_mul_int(&t, 2); // t = 2*R^2 (2) + secp256k1_fe_add(&t, &q); // t = 2*R^2-3*Q (8) + secp256k1_fe_mul(&t, &t, &rr); // t = R*(2*R^2-3*Q) (1) + secp256k1_fe_add(&t, &n); // t = R*(2*R^2-3*Q)+M^4 (2) + secp256k1_fe_negate(&r->y, &t, 2); // r->y = R*(3*Q-2*R^2)-M^4 (3) secp256k1_fe_normalize(&r->y); secp256k1_fe_mul_int(&r->x, 4 * (1 - a->infinity)); // r->x = X3 = 4*(R^2-Q) secp256k1_fe_mul_int(&r->y, 4 * (1 - a->infinity)); // r->y = Y3 = 4*R*(3*Q-2*R^2)-4*M^4 (4)