diff options
Diffstat (limited to 'fpga_curve.cpp')
-rw-r--r-- | fpga_curve.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/fpga_curve.cpp b/fpga_curve.cpp index 46f6f73..1efb8b6 100644 --- a/fpga_curve.cpp +++ b/fpga_curve.cpp @@ -305,9 +305,25 @@ void fpga_curve_scalar_multiply(FPGA_BUFFER *px, FPGA_BUFFER *py, FPGA_BUFFER *k FPGA_BUFFER rx, ry, rz; // intermediate result FPGA_BUFFER tx, ty, tz; // temporary variable + /* prepare for computation */ + fpga_buffer_copy(px, &rx); + fpga_buffer_copy(py, &ry); + fpga_buffer_copy(&ecdsa_one, &rz); + /* obtain quantity 2 * P */ - fpga_curve_double_jacobian(px, py, &ecdsa_one, &tx, &ty, &tz); - fpga_curve_point_to_affine(&tx, &ty, &tz, &ecdh_d_x, &ecdh_d_y); + fpga_curve_double_jacobian(&rx, &ry, &rz, &tx, &ty, &tz); + + /* copy again */ + fpga_buffer_copy(&tx, &rx); + fpga_buffer_copy(&ty, &ry); + fpga_buffer_copy(&tz, &rz); + + /* convert to affine coordinates */ + fpga_curve_point_to_affine(&rx, &ry, &rz, qx, qy); + + /* store for later reuse */ + fpga_buffer_copy(qx, &ecdh_d_x); + fpga_buffer_copy(qy, &ecdh_d_y); /* set initial value of R to point at infinity */ fpga_buffer_copy(&ecdsa_one, &rx); |