more fix on ecc
This commit is contained in:
@@ -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>
|
2014-01-21 Niibe Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* src/jpc.c (jpc_add_ac_signed): Bug fix for A check.
|
* src/jpc.c (jpc_add_ac_signed): Bug fix for A check.
|
||||||
|
|||||||
@@ -249,14 +249,13 @@ int
|
|||||||
compute_kG (ac *X, const bn256 *K)
|
compute_kG (ac *X, const bn256 *K)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int q_is_infinite = 1;
|
|
||||||
jpc Q[1];
|
jpc Q[1];
|
||||||
|
|
||||||
|
memset (Q->z, 0, sizeof (bn256)); /* infinity */
|
||||||
for (i = 31; i >= 0; i--)
|
for (i = 31; i >= 0; i--)
|
||||||
{
|
{
|
||||||
int k_i, k_i_e;
|
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_i = (((K->word[6] >> i) & 1) << 3)
|
||||||
@@ -269,34 +268,10 @@ compute_kG (ac *X, const bn256 *K)
|
|||||||
| ((K->word[1] >> i) & 1);
|
| ((K->word[1] >> i) & 1);
|
||||||
|
|
||||||
if (k_i)
|
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 (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);
|
return jpc_to_ac (X, Q);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,8 +37,12 @@ void
|
|||||||
jpc_double (jpc *X, const jpc *A)
|
jpc_double (jpc *X, const jpc *A)
|
||||||
{
|
{
|
||||||
bn256 a[1], b[1], c[1], tmp0[1];
|
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);
|
modp256_sqr (a, A->y);
|
||||||
memcpy (b, a, sizeof (bn256));
|
memcpy (b, a, sizeof (bn256));
|
||||||
modp256_mul (a, a, A->x);
|
modp256_mul (a, a, A->x);
|
||||||
|
|||||||
Reference in New Issue
Block a user