|
|
|
@ -63,24 +63,24 @@ void point_add(const curve_point *cp1, curve_point *cp2)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bn_subtractmod(&(cp2->x), &(cp1->x), &inv);
|
|
|
|
|
bn_subtractmod(&(cp2->x), &(cp1->x), &inv, &prime256k1);
|
|
|
|
|
bn_inverse(&inv, &prime256k1);
|
|
|
|
|
bn_subtractmod(&(cp2->y), &(cp1->y), &lambda);
|
|
|
|
|
bn_subtractmod(&(cp2->y), &(cp1->y), &lambda, &prime256k1);
|
|
|
|
|
bn_multiply(&inv, &lambda, &prime256k1);
|
|
|
|
|
memcpy(&xr, &lambda, sizeof(bignum256));
|
|
|
|
|
bn_multiply(&xr, &xr, &prime256k1);
|
|
|
|
|
temp = 0;
|
|
|
|
|
temp = 1;
|
|
|
|
|
for (i = 0; i < 9; i++) {
|
|
|
|
|
temp += xr.val[i] + 3u * prime256k1.val[i] - cp1->x.val[i] - cp2->x.val[i];
|
|
|
|
|
temp += 0x3FFFFFFF + xr.val[i] + 2u * prime256k1.val[i] - cp1->x.val[i] - cp2->x.val[i];
|
|
|
|
|
xr.val[i] = temp & 0x3FFFFFFF;
|
|
|
|
|
temp >>= 30;
|
|
|
|
|
}
|
|
|
|
|
bn_fast_mod(&xr, &prime256k1);
|
|
|
|
|
bn_subtractmod(&(cp1->x), &xr, &yr);
|
|
|
|
|
bn_subtractmod(&(cp1->x), &xr, &yr, &prime256k1);
|
|
|
|
|
// no need to fast_mod here
|
|
|
|
|
// bn_fast_mod(&yr);
|
|
|
|
|
bn_multiply(&lambda, &yr, &prime256k1);
|
|
|
|
|
bn_subtractmod(&yr, &(cp1->y), &yr);
|
|
|
|
|
bn_subtractmod(&yr, &(cp1->y), &yr, &prime256k1);
|
|
|
|
|
bn_fast_mod(&yr, &prime256k1);
|
|
|
|
|
memcpy(&(cp2->x), &xr, sizeof(bignum256));
|
|
|
|
|
memcpy(&(cp2->y), &yr, sizeof(bignum256));
|
|
|
|
@ -111,18 +111,18 @@ void point_double(curve_point *cp)
|
|
|
|
|
bn_multiply(&(cp->x), &lambda, &prime256k1);
|
|
|
|
|
memcpy(&xr, &lambda, sizeof(bignum256));
|
|
|
|
|
bn_multiply(&xr, &xr, &prime256k1);
|
|
|
|
|
temp = 0;
|
|
|
|
|
temp = 1;
|
|
|
|
|
for (i = 0; i < 9; i++) {
|
|
|
|
|
temp += xr.val[i] + 3u * prime256k1.val[i] - 2u * cp->x.val[i];
|
|
|
|
|
temp += 0x3FFFFFFF + xr.val[i] + 2u * (prime256k1.val[i] - cp->x.val[i]);
|
|
|
|
|
xr.val[i] = temp & 0x3FFFFFFF;
|
|
|
|
|
temp >>= 30;
|
|
|
|
|
}
|
|
|
|
|
bn_fast_mod(&xr, &prime256k1);
|
|
|
|
|
bn_subtractmod(&(cp->x), &xr, &yr);
|
|
|
|
|
bn_subtractmod(&(cp->x), &xr, &yr, &prime256k1);
|
|
|
|
|
// no need to fast_mod here
|
|
|
|
|
// bn_fast_mod(&yr);
|
|
|
|
|
bn_multiply(&lambda, &yr, &prime256k1);
|
|
|
|
|
bn_subtractmod(&yr, &(cp->y), &yr);
|
|
|
|
|
bn_subtractmod(&yr, &(cp->y), &yr, &prime256k1);
|
|
|
|
|
bn_fast_mod(&yr, &prime256k1);
|
|
|
|
|
memcpy(&(cp->x), &xr, sizeof(bignum256));
|
|
|
|
|
memcpy(&(cp->y), &yr, sizeof(bignum256));
|
|
|
|
|