mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-26 09:15:43 +01:00
Hardcode numwords in vli_modInv
This commit is contained in:
parent
3e20adf533
commit
913534837a
@ -440,7 +440,7 @@ void uECC_vli_modMult(uECC_word_t *result, const uECC_word_t *left,
|
||||
* @param num_words -- number of words
|
||||
*/
|
||||
void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input,
|
||||
const uECC_word_t *mod, wordcount_t num_words);
|
||||
const uECC_word_t *mod);
|
||||
|
||||
/*
|
||||
* @brief Sets dest = src.
|
||||
|
@ -514,8 +514,7 @@ void uECC_vli_modMult_fast(uECC_word_t *result, const uECC_word_t *left,
|
||||
#define EVEN(vli) (!(vli[0] & 1))
|
||||
|
||||
static void vli_modInv_update(uECC_word_t *uv,
|
||||
const uECC_word_t *mod,
|
||||
wordcount_t num_words)
|
||||
const uECC_word_t *mod)
|
||||
{
|
||||
|
||||
uECC_word_t carry = 0;
|
||||
@ -525,12 +524,12 @@ static void vli_modInv_update(uECC_word_t *uv,
|
||||
}
|
||||
uECC_vli_rshift1(uv);
|
||||
if (carry) {
|
||||
uv[num_words - 1] |= HIGH_BIT_SET;
|
||||
uv[NUM_ECC_WORDS - 1] |= HIGH_BIT_SET;
|
||||
}
|
||||
}
|
||||
|
||||
void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input,
|
||||
const uECC_word_t *mod, wordcount_t num_words)
|
||||
const uECC_word_t *mod)
|
||||
{
|
||||
uECC_word_t a[NUM_ECC_WORDS], b[NUM_ECC_WORDS];
|
||||
uECC_word_t u[NUM_ECC_WORDS], v[NUM_ECC_WORDS];
|
||||
@ -549,10 +548,10 @@ void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input,
|
||||
while ((cmpResult = uECC_vli_cmp_unsafe(a, b)) != 0) {
|
||||
if (EVEN(a)) {
|
||||
uECC_vli_rshift1(a);
|
||||
vli_modInv_update(u, mod, num_words);
|
||||
vli_modInv_update(u, mod);
|
||||
} else if (EVEN(b)) {
|
||||
uECC_vli_rshift1(b);
|
||||
vli_modInv_update(v, mod, num_words);
|
||||
vli_modInv_update(v, mod);
|
||||
} else if (cmpResult > 0) {
|
||||
uECC_vli_sub(a, a, b);
|
||||
uECC_vli_rshift1(a);
|
||||
@ -560,7 +559,7 @@ void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input,
|
||||
uECC_vli_add(u, u, mod);
|
||||
}
|
||||
uECC_vli_sub(u, u, v);
|
||||
vli_modInv_update(u, mod, num_words);
|
||||
vli_modInv_update(u, mod);
|
||||
} else {
|
||||
uECC_vli_sub(b, b, a);
|
||||
uECC_vli_rshift1(b);
|
||||
@ -568,7 +567,7 @@ void uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input,
|
||||
uECC_vli_add(v, v, mod);
|
||||
}
|
||||
uECC_vli_sub(v, v, u);
|
||||
vli_modInv_update(v, mod, num_words);
|
||||
vli_modInv_update(v, mod);
|
||||
}
|
||||
}
|
||||
uECC_vli_set(result, u);
|
||||
@ -892,7 +891,7 @@ static void EccPoint_mult(uECC_word_t * result, const uECC_word_t * point,
|
||||
uECC_vli_modSub(z, Rx[1], Rx[0], curve->p); /* X1 - X0 */
|
||||
uECC_vli_modMult_fast(z, z, Ry[1 - nb]); /* Yb * (X1 - X0) */
|
||||
uECC_vli_modMult_fast(z, z, point); /* xP * Yb * (X1 - X0) */
|
||||
uECC_vli_modInv(z, z, curve->p, num_words); /* 1 / (xP * Yb * (X1 - X0))*/
|
||||
uECC_vli_modInv(z, z, curve->p); /* 1 / (xP * Yb * (X1 - X0))*/
|
||||
/* yP / (xP * Yb * (X1 - X0)) */
|
||||
uECC_vli_modMult_fast(z, z, point + num_words);
|
||||
/* Xb * yP / (xP * Yb * (X1 - X0)) */
|
||||
|
@ -143,7 +143,7 @@ int uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash,
|
||||
/* Prevent side channel analysis of uECC_vli_modInv() to determine
|
||||
bits of k / the private key by premultiplying by a random number */
|
||||
uECC_vli_modMult(k, k, tmp, curve->n); /* k' = rand * k */
|
||||
uECC_vli_modInv(k, k, curve->n, num_n_words); /* k = 1 / k' */
|
||||
uECC_vli_modInv(k, k, curve->n); /* k = 1 / k' */
|
||||
uECC_vli_modMult(k, k, tmp, curve->n); /* k = 1 / k */
|
||||
|
||||
uECC_vli_nativeToBytes(signature, curve->num_bytes, p); /* store r */
|
||||
@ -242,7 +242,7 @@ int uECC_verify(const uint8_t *public_key, const uint8_t *message_hash,
|
||||
}
|
||||
|
||||
/* Calculate u1 and u2. */
|
||||
uECC_vli_modInv(z, s, curve->n, num_n_words); /* z = 1/s */
|
||||
uECC_vli_modInv(z, s, curve->n); /* z = 1/s */
|
||||
u1[num_n_words - 1] = 0;
|
||||
bits2int(u1, message_hash, hash_size, curve);
|
||||
uECC_vli_modMult(u1, u1, z, curve->n); /* u1 = e/s */
|
||||
@ -255,7 +255,7 @@ int uECC_verify(const uint8_t *public_key, const uint8_t *message_hash,
|
||||
uECC_vli_set(ty, curve->G + num_words);
|
||||
uECC_vli_modSub(z, sum, tx, curve->p); /* z = x2 - x1 */
|
||||
XYcZ_add(tx, ty, sum, sum + num_words, curve);
|
||||
uECC_vli_modInv(z, z, curve->p, num_words); /* z = 1/z */
|
||||
uECC_vli_modInv(z, z, curve->p); /* z = 1/z */
|
||||
apply_z(sum, sum + num_words, z);
|
||||
|
||||
/* Use Shamir's trick to calculate u1*G + u2*Q */
|
||||
@ -289,7 +289,7 @@ int uECC_verify(const uint8_t *public_key, const uint8_t *message_hash,
|
||||
}
|
||||
}
|
||||
|
||||
uECC_vli_modInv(z, z, curve->p, num_words); /* Z = 1/Z */
|
||||
uECC_vli_modInv(z, z, curve->p); /* Z = 1/Z */
|
||||
apply_z(rx, ry, z);
|
||||
|
||||
/* v = x1 (mod n) */
|
||||
|
Loading…
Reference in New Issue
Block a user