aboutsummaryrefslogtreecommitdiff
path: root/fpga_curve.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpga_curve.cpp')
-rw-r--r--fpga_curve.cpp20
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);