aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilly Brumley <bbrumley@gmail.com>2021-08-09 22:57:47 +0300
committerDmitry Belyavskiy <beldmit@users.noreply.github.com>2021-08-11 16:51:34 +0300
commitc5ec3860a0c95a74ee98210e0ac174924866dab1 (patch)
treeef3133f7c2ad1e29d1acd3d6c6b23a9c9ba59881
parent949e0de6bf5c9c75f18924f062cf505eea796361 (diff)
downloadgost-engine-c5ec3860a0c95a74ee98210e0ac174924866dab1.zip
gost-engine-c5ec3860a0c95a74ee98210e0ac174924866dab1.tar.gz
gost-engine-c5ec3860a0c95a74ee98210e0ac174924866dab1.tar.bz2
push VKO cofactor clearing into ECCKiila
-rw-r--r--ecp_id_tc26_gost_3410_2012_256_paramSetA.c6
-rw-r--r--ecp_id_tc26_gost_3410_2012_512_paramSetC.c6
-rw-r--r--gost_ec_keyx.c8
3 files changed, 19 insertions, 1 deletions
diff --git a/ecp_id_tc26_gost_3410_2012_256_paramSetA.c b/ecp_id_tc26_gost_3410_2012_256_paramSetA.c
index 9282fb7..f6bb491 100644
--- a/ecp_id_tc26_gost_3410_2012_256_paramSetA.c
+++ b/ecp_id_tc26_gost_3410_2012_256_paramSetA.c
@@ -3674,6 +3674,9 @@ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32],
fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, scalar[0] & 1,
lut.Z, Q.Z);
+ point_double(&Q, &Q);
+ point_double(&Q, &Q);
+
/* move from Edwards projective to legacy projective */
point_edwards2legacy(&Q, &Q);
/* convert to affine -- NB depends on coordinate system */
@@ -8881,6 +8884,9 @@ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32],
fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, scalar[0] & 1,
lut.Z, Q.Z);
+ point_double(&Q, &Q);
+ point_double(&Q, &Q);
+
/* move from Edwards projective to legacy projective */
point_edwards2legacy(&Q, &Q);
/* convert to affine -- NB depends on coordinate system */
diff --git a/ecp_id_tc26_gost_3410_2012_512_paramSetC.c b/ecp_id_tc26_gost_3410_2012_512_paramSetC.c
index c239f9f..602c619 100644
--- a/ecp_id_tc26_gost_3410_2012_512_paramSetC.c
+++ b/ecp_id_tc26_gost_3410_2012_512_paramSetC.c
@@ -4520,6 +4520,9 @@ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64],
fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, scalar[0] & 1,
lut.Z, Q.Z);
+ point_double(&Q, &Q);
+ point_double(&Q, &Q);
+
/* move from Edwards projective to legacy projective */
point_edwards2legacy(&Q, &Q);
/* convert to affine -- NB depends on coordinate system */
@@ -12447,6 +12450,9 @@ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64],
fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, scalar[0] & 1,
lut.Z, Q.Z);
+ point_double(&Q, &Q);
+ point_double(&Q, &Q);
+
/* move from Edwards projective to legacy projective */
point_edwards2legacy(&Q, &Q);
/* convert to affine -- NB depends on coordinate system */
diff --git a/gost_ec_keyx.c b/gost_ec_keyx.c
index 40cad2b..06835d3 100644
--- a/gost_ec_keyx.c
+++ b/gost_ec_keyx.c
@@ -62,7 +62,12 @@ int VKO_compute_key(unsigned char *shared_key,
EC_GROUP_get0_order(grp), ctx))
goto err;
- /* these two curves have cofactor 4; the rest have cofactor 1 */
+#if 0
+ /*-
+ * These two curves have cofactor 4; the rest have cofactor 1.
+ * But currently gost_ec_point_mul takes care of the cofactor clearing,
+ * hence this code is not needed.
+ */
switch (EC_GROUP_get_curve_name(grp)) {
case NID_id_tc26_gost_3410_2012_256_paramSetA:
case NID_id_tc26_gost_3410_2012_512_paramSetC:
@@ -70,6 +75,7 @@ int VKO_compute_key(unsigned char *shared_key,
goto err;
break;
}
+#endif
if (!gost_ec_point_mul(grp, pnt, NULL, pub_key, scalar, ctx)) {
GOSTerr(GOST_F_VKO_COMPUTE_KEY, GOST_R_ERROR_POINT_MUL);