From c78d86b4991c260ff59fe06d54ae350f5f7720af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Mon, 4 Nov 2019 10:18:42 +0100 Subject: [PATCH] Remove some internal functions that aren't needed This saves 10 bytes of code size, and makes it a bit easier to remove unused parameters later (fewer prototypes to change). --- tinycrypt/ecc.c | 53 ++++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/tinycrypt/ecc.c b/tinycrypt/ecc.c index 8eaa1e749..f7a6f0665 100644 --- a/tinycrypt/ecc.c +++ b/tinycrypt/ecc.c @@ -285,7 +285,7 @@ static void muladd(uECC_word_t a, uECC_word_t b, uECC_word_t *r0, * (XYcZ_add_rnd() * and XYcZ_addC_rnd()) in scalar multiplication * (ECCPoint_mult()). Those go in pair, and each pair does 14 calls to * uECC_vli_mult_rnd() (6 in XYcZ_add_rnd() and 8 in XYcZ_addC_rnd(), - * indirectly through uECC_vli_modMult_rnd() or uECC_vli_modSquare_rnd()). + * indirectly through uECC_vli_modMult_rnd(). * * Considering this, in order to minimize the number of calls to the RNG * (which impact performance) while keeping the size of the structure low, @@ -424,14 +424,6 @@ static void uECC_vli_mult_rnd(uECC_word_t *result, const uECC_word_t *left, (void) r; } -/* Computes result = left * right. Result must be 2 * num_words long. */ -static void uECC_vli_mult(uECC_word_t *result, const uECC_word_t *left, - const uECC_word_t *right, wordcount_t num_words) -{ - (void) num_words; - uECC_vli_mult_rnd(result, left, right, NULL); -} - void uECC_vli_modAdd(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) @@ -507,7 +499,7 @@ void uECC_vli_modMult(uECC_word_t *result, const uECC_word_t *left, wordcount_t num_words) { uECC_word_t product[2 * NUM_ECC_WORDS]; - uECC_vli_mult(product, left, right, num_words); + uECC_vli_mult_rnd(product, left, right, NULL); uECC_vli_mmod(result, product, mod, num_words); } @@ -524,26 +516,11 @@ void uECC_vli_modMult_fast(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, uECC_Curve curve) { uECC_word_t product[2 * NUM_ECC_WORDS]; - uECC_vli_mult(product, left, right, curve->num_words); + uECC_vli_mult_rnd(product, left, right, NULL); curve->mmod_fast(result, product); } -static void uECC_vli_modSquare_rnd(uECC_word_t *result, - const uECC_word_t *left, - ecc_wait_state_t *s) -{ - uECC_vli_modMult_rnd(result, left, left, s); -} - -static void uECC_vli_modSquare_fast(uECC_word_t *result, - const uECC_word_t *left, - uECC_Curve curve) -{ - uECC_vli_modMult_fast(result, left, left, curve); -} - - #define EVEN(vli) (!(vli[0] & 1)) static void vli_modInv_update(uECC_word_t *uv, @@ -621,11 +598,11 @@ void double_jacobian_default(uECC_word_t * X1, uECC_word_t * Y1, return; } - uECC_vli_modSquare_fast(t4, Y1, curve); /* t4 = y1^2 */ + uECC_vli_modMult_fast(t4, Y1, Y1, curve); /* t4 = y1^2 */ uECC_vli_modMult_fast(t5, X1, t4, curve); /* t5 = x1*y1^2 = A */ - uECC_vli_modSquare_fast(t4, t4, curve); /* t4 = y1^4 */ + uECC_vli_modMult_fast(t4, t4, t4, curve); /* t4 = y1^4 */ uECC_vli_modMult_fast(Y1, Y1, Z1, curve); /* t2 = y1*z1 = z3 */ - uECC_vli_modSquare_fast(Z1, Z1, curve); /* t3 = z1^2 */ + uECC_vli_modMult_fast(Z1, Z1, Z1, curve); /* t3 = z1^2 */ uECC_vli_modAdd(X1, X1, Z1, curve->p, num_words); /* t1 = x1 + z1^2 */ uECC_vli_modAdd(Z1, Z1, Z1, curve->p, num_words); /* t3 = 2*z1^2 */ @@ -643,7 +620,7 @@ void double_jacobian_default(uECC_word_t * X1, uECC_word_t * Y1, } /* t1 = 3/2*(x1^2 - z1^4) = B */ - uECC_vli_modSquare_fast(Z1, X1, curve); /* t3 = B^2 */ + uECC_vli_modMult_fast(Z1, X1, X1, curve); /* t3 = B^2 */ uECC_vli_modSub(Z1, Z1, t5, curve->p, num_words); /* t3 = B^2 - A */ uECC_vli_modSub(Z1, Z1, t5, curve->p, num_words); /* t3 = B^2 - 2A = x3 */ uECC_vli_modSub(t5, t5, Z1, curve->p, num_words); /* t5 = A - x3 */ @@ -663,7 +640,7 @@ void x_side_default(uECC_word_t *result, uECC_word_t _3[NUM_ECC_WORDS] = {3}; /* -a = 3 */ wordcount_t num_words = curve->num_words; - uECC_vli_modSquare_fast(result, x, curve); /* r = x^2 */ + uECC_vli_modMult_fast(result, x, x, curve); /* r = x^2 */ uECC_vli_modSub(result, result, _3, curve->p, num_words); /* r = x^2 - 3 */ uECC_vli_modMult_fast(result, result, x, curve); /* r = x^3 - 3x */ /* r = x^3 - 3x + b: */ @@ -786,7 +763,7 @@ void apply_z(uECC_word_t * X1, uECC_word_t * Y1, const uECC_word_t * const Z, { uECC_word_t t1[NUM_ECC_WORDS]; - uECC_vli_modSquare_fast(t1, Z, curve); /* z^2 */ + uECC_vli_modMult_fast(t1, Z, Z, curve); /* z^2 */ uECC_vli_modMult_fast(X1, X1, t1, curve); /* x1 * z^2 */ uECC_vli_modMult_fast(t1, t1, Z, curve); /* z^3 */ uECC_vli_modMult_fast(Y1, Y1, t1, curve); /* y1 * z^3 */ @@ -825,11 +802,11 @@ static void XYcZ_add_rnd(uECC_word_t * X1, uECC_word_t * Y1, const wordcount_t num_words = 8; uECC_vli_modSub(t5, X2, X1, curve->p, num_words); /* t5 = x2 - x1 */ - uECC_vli_modSquare_rnd(t5, t5, s); /* t5 = (x2 - x1)^2 = A */ + uECC_vli_modMult_rnd(t5, t5, t5, s); /* t5 = (x2 - x1)^2 = A */ uECC_vli_modMult_rnd(X1, X1, t5, s); /* t1 = x1*A = B */ uECC_vli_modMult_rnd(X2, X2, t5, s); /* t3 = x2*A = C */ uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y2 - y1 */ - uECC_vli_modSquare_rnd(t5, Y2, s); /* t5 = (y2 - y1)^2 = D */ + uECC_vli_modMult_rnd(t5, Y2, Y2, s); /* t5 = (y2 - y1)^2 = D */ uECC_vli_modSub(t5, t5, X1, curve->p, num_words); /* t5 = D - B */ uECC_vli_modSub(t5, t5, X2, curve->p, num_words); /* t5 = D - B - C = x3 */ @@ -866,7 +843,7 @@ static void XYcZ_addC_rnd(uECC_word_t * X1, uECC_word_t * Y1, const wordcount_t num_words = 8; uECC_vli_modSub(t5, X2, X1, curve->p, num_words); /* t5 = x2 - x1 */ - uECC_vli_modSquare_rnd(t5, t5, s); /* t5 = (x2 - x1)^2 = A */ + uECC_vli_modMult_rnd(t5, t5, t5, s); /* t5 = (x2 - x1)^2 = A */ uECC_vli_modMult_rnd(X1, X1, t5, s); /* t1 = x1*A = B */ uECC_vli_modMult_rnd(X2, X2, t5, s); /* t3 = x2*A = C */ uECC_vli_modAdd(t5, Y2, Y1, curve->p, num_words); /* t5 = y2 + y1 */ @@ -875,7 +852,7 @@ static void XYcZ_addC_rnd(uECC_word_t * X1, uECC_word_t * Y1, uECC_vli_modSub(t6, X2, X1, curve->p, num_words); /* t6 = C - B */ uECC_vli_modMult_rnd(Y1, Y1, t6, s); /* t2 = y1 * (C - B) = E */ uECC_vli_modAdd(t6, X1, X2, curve->p, num_words); /* t6 = B + C */ - uECC_vli_modSquare_rnd(X2, Y2, s); /* t3 = (y2 - y1)^2 = D */ + uECC_vli_modMult_rnd(X2, Y2, Y2, s); /* t3 = (y2 - y1)^2 = D */ uECC_vli_modSub(X2, X2, t6, curve->p, num_words); /* t3 = D - (B + C) = x3 */ uECC_vli_modSub(t7, X1, X2, curve->p, num_words); /* t7 = B - x3 */ @@ -883,7 +860,7 @@ static void XYcZ_addC_rnd(uECC_word_t * X1, uECC_word_t * Y1, /* t4 = (y2 - y1)*(B - x3) - E = y3: */ uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); - uECC_vli_modSquare_rnd(t7, t5, s); /* t7 = (y2 + y1)^2 = F */ + uECC_vli_modMult_rnd(t7, t5, t5, s); /* t7 = (y2 + y1)^2 = F */ uECC_vli_modSub(t7, t7, t6, curve->p, num_words); /* t7 = F - (B + C) = x3' */ uECC_vli_modSub(t6, t7, X1, curve->p, num_words); /* t6 = x3' - B */ uECC_vli_modMult_rnd(t6, t6, t5, s); /* t6 = (y2+y1)*(x3' - B) */ @@ -1048,7 +1025,7 @@ int uECC_valid_point(const uECC_word_t *point, uECC_Curve curve) return -2; } - uECC_vli_modSquare_fast(tmp1, point + num_words, curve); + uECC_vli_modMult_fast(tmp1, point + num_words, point + num_words, curve); curve->x_side(tmp2, point, curve); /* tmp2 = x^3 + ax + b */ /* Make sure that y^2 == x^3 + ax + b */