Hardcode numwords in internal vli_add
Saves 40 bytes
diff --git a/tinycrypt/ecc.c b/tinycrypt/ecc.c
index a5145bc..b9b55bc 100644
--- a/tinycrypt/ecc.c
+++ b/tinycrypt/ecc.c
@@ -218,11 +218,11 @@
/* Computes result = left + right, returning carry, in constant time.
* Can modify in place. */
static uECC_word_t uECC_vli_add(uECC_word_t *result, const uECC_word_t *left,
- const uECC_word_t *right, wordcount_t num_words)
+ const uECC_word_t *right)
{
uECC_word_t carry = 0;
wordcount_t i;
- for (i = 0; i < num_words; ++i) {
+ for (i = 0; i < NUM_ECC_WORDS; ++i) {
uECC_word_t sum = left[i] + right[i] + carry;
uECC_word_t val = (sum < left[i]);
carry = cond_set(val, carry, (sum != left[i]));
@@ -429,7 +429,7 @@
const uECC_word_t *right, const uECC_word_t *mod,
wordcount_t num_words)
{
- uECC_word_t carry = uECC_vli_add(result, left, right, num_words);
+ uECC_word_t carry = uECC_vli_add(result, left, right);
if (carry || uECC_vli_cmp_unsafe(mod, result, num_words) != 1) {
/* result > mod (result = mod + remainder), so subtract mod to get
* remainder. */
@@ -445,7 +445,7 @@
if (l_borrow) {
/* In this case, result == -diff == (max int) - diff. Since -x % d == d - x,
* we can get the correct result from result + mod (with overflow). */
- uECC_vli_add(result, result, mod, num_words);
+ uECC_vli_add(result, result, mod);
}
}
@@ -529,7 +529,7 @@
uECC_word_t carry = 0;
if (!EVEN(uv)) {
- carry = uECC_vli_add(uv, uv, mod, num_words);
+ carry = uECC_vli_add(uv, uv, mod);
}
uECC_vli_rshift1(uv, num_words);
if (carry) {
@@ -565,7 +565,7 @@
uECC_vli_sub(a, a, b, num_words);
uECC_vli_rshift1(a, num_words);
if (uECC_vli_cmp_unsafe(u, v, num_words) < 0) {
- uECC_vli_add(u, u, mod, num_words);
+ uECC_vli_add(u, u, mod);
}
uECC_vli_sub(u, u, v, num_words);
vli_modInv_update(u, mod, num_words);
@@ -573,7 +573,7 @@
uECC_vli_sub(b, b, a, num_words);
uECC_vli_rshift1(b, num_words);
if (uECC_vli_cmp_unsafe(v, u, num_words) < 0) {
- uECC_vli_add(v, v, mod, num_words);
+ uECC_vli_add(v, v, mod);
}
uECC_vli_sub(v, v, u, num_words);
vli_modInv_update(v, mod, num_words);
@@ -610,7 +610,7 @@
uECC_vli_modAdd(Z1, X1, X1, curve->p, num_words); /* t3 = 2*(x1^2 - z1^4) */
uECC_vli_modAdd(X1, X1, Z1, curve->p, num_words); /* t1 = 3*(x1^2 - z1^4) */
if (uECC_vli_testBit(X1, 0)) {
- uECC_word_t l_carry = uECC_vli_add(X1, X1, curve->p, num_words);
+ uECC_word_t l_carry = uECC_vli_add(X1, X1, curve->p);
uECC_vli_rshift1(X1, num_words);
X1[num_words - 1] |= l_carry << (uECC_WORD_BITS - 1);
} else {
@@ -665,8 +665,8 @@
tmp[5] = product[13];
tmp[6] = product[14];
tmp[7] = product[15];
- carry = uECC_vli_add(tmp, tmp, tmp, NUM_ECC_WORDS);
- carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);
+ carry = uECC_vli_add(tmp, tmp, tmp);
+ carry += uECC_vli_add(result, result, tmp);
/* s2 */
tmp[3] = product[12];
@@ -674,8 +674,8 @@
tmp[5] = product[14];
tmp[6] = product[15];
tmp[7] = 0;
- carry += uECC_vli_add(tmp, tmp, tmp, NUM_ECC_WORDS);
- carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);
+ carry += uECC_vli_add(tmp, tmp, tmp);
+ carry += uECC_vli_add(result, result, tmp);
/* s3 */
tmp[0] = product[8];
@@ -684,7 +684,7 @@
tmp[3] = tmp[4] = tmp[5] = 0;
tmp[6] = product[14];
tmp[7] = product[15];
- carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);
+ carry += uECC_vli_add(result, result, tmp);
/* s4 */
tmp[0] = product[9];
@@ -695,7 +695,7 @@
tmp[5] = product[15];
tmp[6] = product[13];
tmp[7] = product[8];
- carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);
+ carry += uECC_vli_add(result, result, tmp);
/* d1 */
tmp[0] = product[11];
@@ -740,7 +740,7 @@
if (carry < 0) {
do {
- carry += uECC_vli_add(result, result, curve_secp256r1.p, NUM_ECC_WORDS);
+ carry += uECC_vli_add(result, result, curve_secp256r1.p);
}
while (carry < 0);
} else {
@@ -925,11 +925,11 @@
bitcount_t num_n_bits = NUM_ECC_BITS;
const uECC_Curve curve = uECC_secp256r1();
- uECC_word_t carry = uECC_vli_add(k0, k, curve->n, num_n_words) ||
+ uECC_word_t carry = uECC_vli_add(k0, k, curve->n) ||
(num_n_bits < ((bitcount_t)num_n_words * uECC_WORD_SIZE * 8) &&
uECC_vli_testBit(k0, num_n_bits));
- uECC_vli_add(k1, k0, curve->n, num_n_words);
+ uECC_vli_add(k1, k0, curve->n);
return carry;
}