more fix on ecc

This commit is contained in:
NIIBE Yutaka
2014-01-22 10:02:08 +09:00
parent 8d05addc87
commit 486f20bfd4
3 changed files with 15 additions and 30 deletions

View File

@@ -1,3 +1,9 @@
2014-01-22 Niibe Yutaka <gniibe@fsij.org>
* src/ec_p256.c (compute_kG): Simplify.
* src/jpc.c (jpc_double): Support calling with A = infinity.
2014-01-21 Niibe Yutaka <gniibe@fsij.org>
* src/jpc.c (jpc_add_ac_signed): Bug fix for A check.

View File

@@ -249,15 +249,14 @@ int
compute_kG (ac *X, const bn256 *K)
{
int i;
int q_is_infinite = 1;
jpc Q[1];
memset (Q->z, 0, sizeof (bn256)); /* infinity */
for (i = 31; i >= 0; i--)
{
int k_i, k_i_e;
if (!q_is_infinite)
jpc_double (Q, Q);
jpc_double (Q, Q);
k_i = (((K->word[6] >> i) & 1) << 3)
| (((K->word[4] >> i) & 1) << 2)
@@ -269,33 +268,9 @@ compute_kG (ac *X, const bn256 *K)
| ((K->word[1] >> i) & 1);
if (k_i)
{
if (q_is_infinite)
{
memcpy (Q->x, (&precomputed_KG[k_i - 1])->x, sizeof (bn256));
memcpy (Q->y, (&precomputed_KG[k_i - 1])->y, sizeof (bn256));
Q->z->word[0] = 1;
Q->z->word[1] = Q->z->word[2] = Q->z->word[3]
= Q->z->word[4] = Q->z->word[5] = Q->z->word[6]
= Q->z->word[7] = 0;
q_is_infinite = 0;
}
else
jpc_add_ac (Q, Q, &precomputed_KG[k_i - 1]);
}
jpc_add_ac (Q, Q, &precomputed_KG[k_i - 1]);
if (k_i_e)
{
if (q_is_infinite)
{
memcpy (Q->x, (&precomputed_2E_KG[k_i_e - 1])->x, sizeof (bn256));
memcpy (Q->y, (&precomputed_2E_KG[k_i_e - 1])->y, sizeof (bn256));
memset (Q->z, 0, sizeof (bn256));
Q->z->word[0] = 1;
q_is_infinite = 0;
}
else
jpc_add_ac (Q, Q, &precomputed_2E_KG[k_i_e - 1]);
}
jpc_add_ac (Q, Q, &precomputed_2E_KG[k_i_e - 1]);
}
return jpc_to_ac (X, Q);

View File

@@ -37,8 +37,12 @@ void
jpc_double (jpc *X, const jpc *A)
{
bn256 a[1], b[1], c[1], tmp0[1];
bn256 *d = X->x;
bn256 *d;
if (bn256_is_zero (A->z)) /* A is infinite */
return;
d = X->x;
modp256_sqr (a, A->y);
memcpy (b, a, sizeof (bn256));
modp256_mul (a, a, A->x);