diff --git a/include/tinycrypt/ecc.h b/include/tinycrypt/ecc.h index 50d93d240..ba5dffc58 100644 --- a/include/tinycrypt/ecc.h +++ b/include/tinycrypt/ecc.h @@ -453,8 +453,7 @@ void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input, * @param src IN -- origin buffer * @param num_words IN -- number of words */ -void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src, - wordcount_t num_words); +void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src); /* * @brief Computes (left + right) % mod. diff --git a/tinycrypt/ecc.c b/tinycrypt/ecc.c index cbc024acd..60b565e3c 100644 --- a/tinycrypt/ecc.c +++ b/tinycrypt/ecc.c @@ -152,12 +152,11 @@ bitcount_t uECC_vli_numBits(const uECC_word_t *vli) return (((bitcount_t)(num_digits - 1) << uECC_WORD_BITS_SHIFT) + i); } -void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src, - wordcount_t num_words) +void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src) { wordcount_t i; - for (i = 0; i < num_words; ++i) { + for (i = 0; i < NUM_ECC_WORDS; ++i) { dest[i] = src[i]; } } @@ -470,7 +469,7 @@ void uECC_vli_mmod(uECC_word_t *result, uECC_word_t *product, carry = mod[index] >> (uECC_WORD_BITS - bit_shift); } } else { - uECC_vli_set(mod_multiple + word_shift, mod, num_words); + uECC_vli_set(mod_multiple + word_shift, mod); } for (index = 1; shift >= 0; --shift) { @@ -490,7 +489,7 @@ void uECC_vli_mmod(uECC_word_t *result, uECC_word_t *product, (uECC_WORD_BITS - 1); uECC_vli_rshift1(mod_multiple + num_words, num_words); } - uECC_vli_set(result, v[index], num_words); + uECC_vli_set(result, v[index]); } void uECC_vli_modMult(uECC_word_t *result, const uECC_word_t *left, @@ -547,8 +546,8 @@ void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input, return; } - uECC_vli_set(a, input, num_words); - uECC_vli_set(b, mod, num_words); + uECC_vli_set(a, input); + uECC_vli_set(b, mod); uECC_vli_clear(u); u[0] = 1; uECC_vli_clear(v); @@ -577,7 +576,7 @@ void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input, vli_modInv_update(v, mod, num_words); } } - uECC_vli_set(result, u, num_words); + uECC_vli_set(result, u); } /* ------ Point operations ------ */ @@ -624,9 +623,9 @@ void double_jacobian_default(uECC_word_t * X1, uECC_word_t * Y1, /* t4 = B * (A - x3) - y1^4 = y3: */ uECC_vli_modSub(t4, X1, t4, curve->p, num_words); - uECC_vli_set(X1, Z1, num_words); - uECC_vli_set(Z1, Y1, num_words); - uECC_vli_set(Y1, t4, num_words); + uECC_vli_set(X1, Z1); + uECC_vli_set(Z1, Y1); + uECC_vli_set(Y1, t4); } void x_side_default(uECC_word_t *result, @@ -654,7 +653,7 @@ void vli_mmod_fast_secp256r1(unsigned int *result, unsigned int*product) int carry; /* t */ - uECC_vli_set(result, product, NUM_ECC_WORDS); + uECC_vli_set(result, product); /* s1 */ tmp[0] = tmp[1] = tmp[2] = 0; @@ -772,16 +771,15 @@ static void XYcZ_initial_double(uECC_word_t * X1, uECC_word_t * Y1, uECC_Curve curve) { uECC_word_t z[NUM_ECC_WORDS]; - wordcount_t num_words = curve->num_words; if (initial_Z) { - uECC_vli_set(z, initial_Z, num_words); + uECC_vli_set(z, initial_Z); } else { uECC_vli_clear(z); z[0] = 1; } - uECC_vli_set(X2, X1, num_words); - uECC_vli_set(Y2, Y1, num_words); + uECC_vli_set(X2, X1); + uECC_vli_set(Y2, Y1); apply_z(X1, Y1, z); curve->double_jacobian(X1, Y1, z, curve); @@ -812,7 +810,7 @@ static void XYcZ_add_rnd(uECC_word_t * X1, uECC_word_t * Y1, uECC_vli_modMult_rnd(Y2, Y2, X2, s); /* t4 = (y2 - y1)*(B - x3) */ uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y3 */ - uECC_vli_set(X2, t5, num_words); + uECC_vli_set(X2, t5); } void XYcZ_add(uECC_word_t * X1, uECC_word_t * Y1, @@ -863,7 +861,7 @@ static void XYcZ_addC_rnd(uECC_word_t * X1, uECC_word_t * Y1, /* t2 = (y2+y1)*(x3' - B) - E = y3': */ uECC_vli_modSub(Y1, t6, Y1, curve->p, num_words); - uECC_vli_set(X1, t7, num_words); + uECC_vli_set(X1, t7); } static void EccPoint_mult(uECC_word_t * result, const uECC_word_t * point, @@ -882,8 +880,8 @@ static void EccPoint_mult(uECC_word_t * result, const uECC_word_t * point, ecc_wait_state_t wait_state; ecc_wait_state_t * const ws = g_rng_function ? &wait_state : NULL; - uECC_vli_set(Rx[1], point, num_words); - uECC_vli_set(Ry[1], point + num_words, num_words); + uECC_vli_set(Rx[1], point); + uECC_vli_set(Ry[1], point + num_words); XYcZ_initial_double(Rx[1], Ry[1], Rx[0], Ry[0], initial_Z, curve); @@ -912,8 +910,8 @@ static void EccPoint_mult(uECC_word_t * result, const uECC_word_t * point, XYcZ_add_rnd(Rx[nb], Ry[nb], Rx[1 - nb], Ry[1 - nb], ws); apply_z(Rx[0], Ry[0], z); - uECC_vli_set(result, Rx[0], num_words); - uECC_vli_set(result + num_words, Ry[0], num_words); + uECC_vli_set(result, Rx[0]); + uECC_vli_set(result + num_words, Ry[0]); } static uECC_word_t regularize_k(const uECC_word_t * const k, uECC_word_t *k0, diff --git a/tinycrypt/ecc_dsa.c b/tinycrypt/ecc_dsa.c index 4fe4343be..e302e04ce 100644 --- a/tinycrypt/ecc_dsa.c +++ b/tinycrypt/ecc_dsa.c @@ -115,7 +115,6 @@ int uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash, uECC_word_t tmp[NUM_ECC_WORDS]; uECC_word_t s[NUM_ECC_WORDS]; uECC_word_t p[NUM_ECC_WORDS * 2]; - wordcount_t num_words = curve->num_words; wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits); int r; @@ -153,7 +152,7 @@ int uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash, uECC_vli_bytesToNative(tmp, private_key, BITS_TO_BYTES(curve->num_n_bits)); s[num_n_words - 1] = 0; - uECC_vli_set(s, p, num_words); + uECC_vli_set(s, p); uECC_vli_modMult(s, tmp, s, curve->n, num_n_words); /* s = r*d */ bits2int(tmp, message_hash, hash_size, curve); @@ -250,10 +249,10 @@ int uECC_verify(const uint8_t *public_key, const uint8_t *message_hash, uECC_vli_modMult(u2, r, z, curve->n, num_n_words); /* u2 = r/s */ /* Calculate sum = G + Q. */ - uECC_vli_set(sum, _public, num_words); - uECC_vli_set(sum + num_words, _public + num_words, num_words); - uECC_vli_set(tx, curve->G, num_words); - uECC_vli_set(ty, curve->G + num_words, num_words); + uECC_vli_set(sum, _public); + uECC_vli_set(sum + num_words, _public + num_words); + uECC_vli_set(tx, curve->G); + uECC_vli_set(ty, curve->G + num_words); uECC_vli_modSub(z, sum, tx, curve->p, num_words); /* z = x2 - x1 */ XYcZ_add(tx, ty, sum, sum + num_words, curve); uECC_vli_modInv(z, z, curve->p, num_words); /* z = 1/z */ @@ -269,8 +268,8 @@ int uECC_verify(const uint8_t *public_key, const uint8_t *message_hash, point = points[(!!uECC_vli_testBit(u1, num_bits - 1)) | ((!!uECC_vli_testBit(u2, num_bits - 1)) << 1)]; - uECC_vli_set(rx, point, num_words); - uECC_vli_set(ry, point + num_words, num_words); + uECC_vli_set(rx, point); + uECC_vli_set(ry, point + num_words); uECC_vli_clear(z); z[0] = 1; @@ -281,8 +280,8 @@ int uECC_verify(const uint8_t *public_key, const uint8_t *message_hash, index = (!!uECC_vli_testBit(u1, i)) | ((!!uECC_vli_testBit(u2, i)) << 1); point = points[index]; if (point) { - uECC_vli_set(tx, point, num_words); - uECC_vli_set(ty, point + num_words, num_words); + uECC_vli_set(tx, point); + uECC_vli_set(ty, point + num_words); apply_z(tx, ty, z); uECC_vli_modSub(tz, rx, tx, curve->p, num_words); /* Z = x2 - x1 */ XYcZ_add(tx, ty, rx, ry, curve);