diff options
-rw-r--r-- | src/lib/libcrypto/ec/ec2_smpl.c | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ec_lcl.h | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ec_lib.c | 19 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_mont.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nist.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistp224.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistp256.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistp521.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistz256.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_smpl.c | 71 |
10 files changed, 110 insertions, 18 deletions
diff --git a/src/lib/libcrypto/ec/ec2_smpl.c b/src/lib/libcrypto/ec/ec2_smpl.c index 1ca04194b3..936cee4898 100644 --- a/src/lib/libcrypto/ec/ec2_smpl.c +++ b/src/lib/libcrypto/ec/ec2_smpl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec2_smpl.c,v 1.20 2018/07/16 17:32:39 tb Exp $ */ | 1 | /* $OpenBSD: ec2_smpl.c,v 1.21 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. | 3 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. |
4 | * | 4 | * |
@@ -115,6 +115,7 @@ EC_GF2m_simple_method(void) | |||
115 | .field_mul = ec_GF2m_simple_field_mul, | 115 | .field_mul = ec_GF2m_simple_field_mul, |
116 | .field_sqr = ec_GF2m_simple_field_sqr, | 116 | .field_sqr = ec_GF2m_simple_field_sqr, |
117 | .field_div = ec_GF2m_simple_field_div, | 117 | .field_div = ec_GF2m_simple_field_div, |
118 | .blind_coordinates = NULL, | ||
118 | }; | 119 | }; |
119 | 120 | ||
120 | return &ret; | 121 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ec_lcl.h b/src/lib/libcrypto/ec/ec_lcl.h index e430b3f64d..c177246f36 100644 --- a/src/lib/libcrypto/ec/ec_lcl.h +++ b/src/lib/libcrypto/ec/ec_lcl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_lcl.h,v 1.10 2018/07/16 17:32:39 tb Exp $ */ | 1 | /* $OpenBSD: ec_lcl.h,v 1.11 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Originally written by Bodo Moeller for the OpenSSL project. | 3 | * Originally written by Bodo Moeller for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -182,6 +182,7 @@ struct ec_method_st { | |||
182 | int (*field_encode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); /* e.g. to Montgomery */ | 182 | int (*field_encode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); /* e.g. to Montgomery */ |
183 | int (*field_decode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); /* e.g. from Montgomery */ | 183 | int (*field_decode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); /* e.g. from Montgomery */ |
184 | int (*field_set_to_one)(const EC_GROUP *, BIGNUM *r, BN_CTX *); | 184 | int (*field_set_to_one)(const EC_GROUP *, BIGNUM *r, BN_CTX *); |
185 | int (*blind_coordinates)(const EC_GROUP *group, EC_POINT *p, BN_CTX *ctx); | ||
185 | } /* EC_METHOD */; | 186 | } /* EC_METHOD */; |
186 | 187 | ||
187 | typedef struct ec_extra_data_st { | 188 | typedef struct ec_extra_data_st { |
@@ -339,6 +340,7 @@ int ec_GFp_simple_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); | |||
339 | int ec_GFp_simple_points_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); | 340 | int ec_GFp_simple_points_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); |
340 | int ec_GFp_simple_field_mul(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *); | 341 | int ec_GFp_simple_field_mul(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *); |
341 | int ec_GFp_simple_field_sqr(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); | 342 | int ec_GFp_simple_field_sqr(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); |
343 | int ec_GFp_simple_blind_coordinates(const EC_GROUP *group, EC_POINT *p, BN_CTX *ctx); | ||
342 | int ec_GFp_simple_mul_generator_ct(const EC_GROUP *, EC_POINT *r, const BIGNUM *scalar, BN_CTX *); | 344 | int ec_GFp_simple_mul_generator_ct(const EC_GROUP *, EC_POINT *r, const BIGNUM *scalar, BN_CTX *); |
343 | int ec_GFp_simple_mul_single_ct(const EC_GROUP *, EC_POINT *r, const BIGNUM *scalar, | 345 | int ec_GFp_simple_mul_single_ct(const EC_GROUP *, EC_POINT *r, const BIGNUM *scalar, |
344 | const EC_POINT *point, BN_CTX *); | 346 | const EC_POINT *point, BN_CTX *); |
@@ -358,6 +360,7 @@ int ec_GFp_mont_field_encode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CT | |||
358 | int ec_GFp_mont_field_decode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); | 360 | int ec_GFp_mont_field_decode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a, BN_CTX *); |
359 | int ec_GFp_mont_field_set_to_one(const EC_GROUP *, BIGNUM *r, BN_CTX *); | 361 | int ec_GFp_mont_field_set_to_one(const EC_GROUP *, BIGNUM *r, BN_CTX *); |
360 | 362 | ||
363 | int ec_point_blind_coordinates(const EC_GROUP *group, EC_POINT *p, BN_CTX *ctx); | ||
361 | 364 | ||
362 | /* method functions in ecp_nist.c */ | 365 | /* method functions in ecp_nist.c */ |
363 | int ec_GFp_nist_group_copy(EC_GROUP *dest, const EC_GROUP *src); | 366 | int ec_GFp_nist_group_copy(EC_GROUP *dest, const EC_GROUP *src); |
diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c index 7e0ea017f9..bf2f652fc7 100644 --- a/src/lib/libcrypto/ec/ec_lib.c +++ b/src/lib/libcrypto/ec/ec_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_lib.c,v 1.29 2018/07/16 17:32:39 tb Exp $ */ | 1 | /* $OpenBSD: ec_lib.c,v 1.30 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Originally written by Bodo Moeller for the OpenSSL project. | 3 | * Originally written by Bodo Moeller for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -533,6 +533,23 @@ EC_GROUP_cmp(const EC_GROUP * a, const EC_GROUP * b, BN_CTX * ctx) | |||
533 | return -1; | 533 | return -1; |
534 | } | 534 | } |
535 | 535 | ||
536 | /* | ||
537 | * Coordinate blinding for EC_POINT. | ||
538 | * | ||
539 | * The underlying EC_METHOD can optionally implement this function: | ||
540 | * underlying implementations should return 0 on errors, or 1 on success. | ||
541 | * | ||
542 | * This wrapper returns 1 in case the underlying EC_METHOD does not support | ||
543 | * coordinate blinding. | ||
544 | */ | ||
545 | int | ||
546 | ec_point_blind_coordinates(const EC_GROUP *group, EC_POINT *p, BN_CTX *ctx) | ||
547 | { | ||
548 | if (group->meth->blind_coordinates == NULL) | ||
549 | return 1; | ||
550 | |||
551 | return group->meth->blind_coordinates(group, p, ctx); | ||
552 | } | ||
536 | 553 | ||
537 | /* this has 'package' visibility */ | 554 | /* this has 'package' visibility */ |
538 | int | 555 | int |
diff --git a/src/lib/libcrypto/ec/ecp_mont.c b/src/lib/libcrypto/ec/ecp_mont.c index ba4b9cad97..f4dff9aa46 100644 --- a/src/lib/libcrypto/ec/ecp_mont.c +++ b/src/lib/libcrypto/ec/ecp_mont.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_mont.c,v 1.16 2018/07/16 17:32:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_mont.c,v 1.17 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Originally written by Bodo Moeller for the OpenSSL project. | 3 | * Originally written by Bodo Moeller for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -109,7 +109,8 @@ EC_GFp_mont_method(void) | |||
109 | .field_sqr = ec_GFp_mont_field_sqr, | 109 | .field_sqr = ec_GFp_mont_field_sqr, |
110 | .field_encode = ec_GFp_mont_field_encode, | 110 | .field_encode = ec_GFp_mont_field_encode, |
111 | .field_decode = ec_GFp_mont_field_decode, | 111 | .field_decode = ec_GFp_mont_field_decode, |
112 | .field_set_to_one = ec_GFp_mont_field_set_to_one | 112 | .field_set_to_one = ec_GFp_mont_field_set_to_one, |
113 | .blind_coordinates = ec_GFp_simple_blind_coordinates, | ||
113 | }; | 114 | }; |
114 | 115 | ||
115 | return &ret; | 116 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ecp_nist.c b/src/lib/libcrypto/ec/ecp_nist.c index 6ae1170808..073c0419cf 100644 --- a/src/lib/libcrypto/ec/ecp_nist.c +++ b/src/lib/libcrypto/ec/ecp_nist.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nist.c,v 1.14 2018/07/16 17:32:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_nist.c,v 1.15 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Nils Larsch for the OpenSSL project. | 3 | * Written by Nils Larsch for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -107,7 +107,8 @@ EC_GFp_nist_method(void) | |||
107 | .mul_single_ct = ec_GFp_simple_mul_single_ct, | 107 | .mul_single_ct = ec_GFp_simple_mul_single_ct, |
108 | .mul_double_nonct = ec_GFp_simple_mul_double_nonct, | 108 | .mul_double_nonct = ec_GFp_simple_mul_double_nonct, |
109 | .field_mul = ec_GFp_nist_field_mul, | 109 | .field_mul = ec_GFp_nist_field_mul, |
110 | .field_sqr = ec_GFp_nist_field_sqr | 110 | .field_sqr = ec_GFp_nist_field_sqr, |
111 | .blind_coordinates = ec_GFp_simple_blind_coordinates, | ||
111 | }; | 112 | }; |
112 | 113 | ||
113 | return &ret; | 114 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ecp_nistp224.c b/src/lib/libcrypto/ec/ecp_nistp224.c index 643e9a69a6..21b431a097 100644 --- a/src/lib/libcrypto/ec/ecp_nistp224.c +++ b/src/lib/libcrypto/ec/ecp_nistp224.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistp224.c,v 1.22 2018/07/15 16:27:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_nistp224.c,v 1.23 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Emilia Kasper (Google) for the OpenSSL project. | 3 | * Written by Emilia Kasper (Google) for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -270,7 +270,8 @@ EC_GFp_nistp224_method(void) | |||
270 | .precompute_mult = ec_GFp_nistp224_precompute_mult, | 270 | .precompute_mult = ec_GFp_nistp224_precompute_mult, |
271 | .have_precompute_mult = ec_GFp_nistp224_have_precompute_mult, | 271 | .have_precompute_mult = ec_GFp_nistp224_have_precompute_mult, |
272 | .field_mul = ec_GFp_nist_field_mul, | 272 | .field_mul = ec_GFp_nist_field_mul, |
273 | .field_sqr = ec_GFp_nist_field_sqr | 273 | .field_sqr = ec_GFp_nist_field_sqr, |
274 | .blind_coordinates = NULL, | ||
274 | }; | 275 | }; |
275 | 276 | ||
276 | return &ret; | 277 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ecp_nistp256.c b/src/lib/libcrypto/ec/ecp_nistp256.c index 5c5fcde694..fc68b6cd8d 100644 --- a/src/lib/libcrypto/ec/ecp_nistp256.c +++ b/src/lib/libcrypto/ec/ecp_nistp256.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistp256.c,v 1.21 2018/07/15 16:27:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_nistp256.c,v 1.22 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Adam Langley (Google) for the OpenSSL project | 3 | * Written by Adam Langley (Google) for the OpenSSL project |
4 | */ | 4 | */ |
@@ -1724,7 +1724,8 @@ EC_GFp_nistp256_method(void) | |||
1724 | .precompute_mult = ec_GFp_nistp256_precompute_mult, | 1724 | .precompute_mult = ec_GFp_nistp256_precompute_mult, |
1725 | .have_precompute_mult = ec_GFp_nistp256_have_precompute_mult, | 1725 | .have_precompute_mult = ec_GFp_nistp256_have_precompute_mult, |
1726 | .field_mul = ec_GFp_nist_field_mul, | 1726 | .field_mul = ec_GFp_nist_field_mul, |
1727 | .field_sqr = ec_GFp_nist_field_sqr | 1727 | .field_sqr = ec_GFp_nist_field_sqr, |
1728 | .blind_coordinates = NULL, | ||
1728 | }; | 1729 | }; |
1729 | 1730 | ||
1730 | return &ret; | 1731 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ecp_nistp521.c b/src/lib/libcrypto/ec/ecp_nistp521.c index b3525bfdad..e085610cbc 100644 --- a/src/lib/libcrypto/ec/ecp_nistp521.c +++ b/src/lib/libcrypto/ec/ecp_nistp521.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistp521.c,v 1.22 2018/07/15 16:27:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_nistp521.c,v 1.23 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Adam Langley (Google) for the OpenSSL project | 3 | * Written by Adam Langley (Google) for the OpenSSL project |
4 | */ | 4 | */ |
@@ -1614,7 +1614,8 @@ EC_GFp_nistp521_method(void) | |||
1614 | .precompute_mult = ec_GFp_nistp521_precompute_mult, | 1614 | .precompute_mult = ec_GFp_nistp521_precompute_mult, |
1615 | .have_precompute_mult = ec_GFp_nistp521_have_precompute_mult, | 1615 | .have_precompute_mult = ec_GFp_nistp521_have_precompute_mult, |
1616 | .field_mul = ec_GFp_nist_field_mul, | 1616 | .field_mul = ec_GFp_nist_field_mul, |
1617 | .field_sqr = ec_GFp_nist_field_sqr | 1617 | .field_sqr = ec_GFp_nist_field_sqr, |
1618 | .blind_coordinates = NULL, | ||
1618 | }; | 1619 | }; |
1619 | 1620 | ||
1620 | return &ret; | 1621 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ecp_nistz256.c b/src/lib/libcrypto/ec/ecp_nistz256.c index 43010db7d0..71e0835e70 100644 --- a/src/lib/libcrypto/ec/ecp_nistz256.c +++ b/src/lib/libcrypto/ec/ecp_nistz256.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_nistz256.c,v 1.6 2018/07/15 16:27:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_nistz256.c,v 1.7 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* Copyright (c) 2014, Intel Corporation. | 2 | /* Copyright (c) 2014, Intel Corporation. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
@@ -1182,7 +1182,8 @@ EC_GFp_nistz256_method(void) | |||
1182 | .field_sqr = ec_GFp_mont_field_sqr, | 1182 | .field_sqr = ec_GFp_mont_field_sqr, |
1183 | .field_encode = ec_GFp_mont_field_encode, | 1183 | .field_encode = ec_GFp_mont_field_encode, |
1184 | .field_decode = ec_GFp_mont_field_decode, | 1184 | .field_decode = ec_GFp_mont_field_decode, |
1185 | .field_set_to_one = ec_GFp_mont_field_set_to_one | 1185 | .field_set_to_one = ec_GFp_mont_field_set_to_one, |
1186 | .blind_coordinates = NULL, | ||
1186 | }; | 1187 | }; |
1187 | 1188 | ||
1188 | return &ret; | 1189 | return &ret; |
diff --git a/src/lib/libcrypto/ec/ecp_smpl.c b/src/lib/libcrypto/ec/ecp_smpl.c index a25fd1df84..fe935251d9 100644 --- a/src/lib/libcrypto/ec/ecp_smpl.c +++ b/src/lib/libcrypto/ec/ecp_smpl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_smpl.c,v 1.22 2018/07/16 17:32:39 tb Exp $ */ | 1 | /* $OpenBSD: ecp_smpl.c,v 1.23 2018/11/05 20:18:21 tb Exp $ */ |
2 | /* Includes code written by Lenka Fibikova <fibikova@exp-math.uni-essen.de> | 2 | /* Includes code written by Lenka Fibikova <fibikova@exp-math.uni-essen.de> |
3 | * for the OpenSSL project. | 3 | * for the OpenSSL project. |
4 | * Includes code written by Bodo Moeller for the OpenSSL project. | 4 | * Includes code written by Bodo Moeller for the OpenSSL project. |
@@ -107,7 +107,8 @@ EC_GFp_simple_method(void) | |||
107 | .mul_single_ct = ec_GFp_simple_mul_single_ct, | 107 | .mul_single_ct = ec_GFp_simple_mul_single_ct, |
108 | .mul_double_nonct = ec_GFp_simple_mul_double_nonct, | 108 | .mul_double_nonct = ec_GFp_simple_mul_double_nonct, |
109 | .field_mul = ec_GFp_simple_field_mul, | 109 | .field_mul = ec_GFp_simple_field_mul, |
110 | .field_sqr = ec_GFp_simple_field_sqr | 110 | .field_sqr = ec_GFp_simple_field_sqr, |
111 | .blind_coordinates = ec_GFp_simple_blind_coordinates, | ||
111 | }; | 112 | }; |
112 | 113 | ||
113 | return &ret; | 114 | return &ret; |
@@ -1406,13 +1407,70 @@ ec_GFp_simple_field_mul(const EC_GROUP * group, BIGNUM * r, const BIGNUM * a, co | |||
1406 | return BN_mod_mul(r, a, b, &group->field, ctx); | 1407 | return BN_mod_mul(r, a, b, &group->field, ctx); |
1407 | } | 1408 | } |
1408 | 1409 | ||
1409 | |||
1410 | int | 1410 | int |
1411 | ec_GFp_simple_field_sqr(const EC_GROUP * group, BIGNUM * r, const BIGNUM * a, BN_CTX * ctx) | 1411 | ec_GFp_simple_field_sqr(const EC_GROUP * group, BIGNUM * r, const BIGNUM * a, BN_CTX * ctx) |
1412 | { | 1412 | { |
1413 | return BN_mod_sqr(r, a, &group->field, ctx); | 1413 | return BN_mod_sqr(r, a, &group->field, ctx); |
1414 | } | 1414 | } |
1415 | 1415 | ||
1416 | /* | ||
1417 | * Apply randomization of EC point projective coordinates: | ||
1418 | * | ||
1419 | * (X, Y, Z) = (lambda^2 * X, lambda^3 * Y, lambda * Z) | ||
1420 | * | ||
1421 | * where lambda is in the interval [1, group->field). | ||
1422 | */ | ||
1423 | int | ||
1424 | ec_GFp_simple_blind_coordinates(const EC_GROUP *group, EC_POINT *p, BN_CTX *ctx) | ||
1425 | { | ||
1426 | BIGNUM *lambda = NULL; | ||
1427 | BIGNUM *tmp = NULL; | ||
1428 | int ret = 0; | ||
1429 | |||
1430 | BN_CTX_start(ctx); | ||
1431 | if ((lambda = BN_CTX_get(ctx)) == NULL) | ||
1432 | goto err; | ||
1433 | if ((tmp = BN_CTX_get(ctx)) == NULL) | ||
1434 | goto err; | ||
1435 | |||
1436 | /* Generate lambda in [1, group->field - 1] */ | ||
1437 | do { | ||
1438 | if (!BN_rand_range(lambda, &group->field)) | ||
1439 | goto err; | ||
1440 | } while (BN_is_zero(lambda)); | ||
1441 | |||
1442 | if (group->meth->field_encode != NULL && | ||
1443 | !group->meth->field_encode(group, lambda, lambda, ctx)) | ||
1444 | goto err; | ||
1445 | |||
1446 | /* Z = lambda * Z */ | ||
1447 | if (!group->meth->field_mul(group, &p->Z, lambda, &p->Z, ctx)) | ||
1448 | goto err; | ||
1449 | |||
1450 | /* tmp = lambda^2 */ | ||
1451 | if (!group->meth->field_sqr(group, tmp, lambda, ctx)) | ||
1452 | goto err; | ||
1453 | |||
1454 | /* X = lambda^2 * X */ | ||
1455 | if (!group->meth->field_mul(group, &p->X, tmp, &p->X, ctx)) | ||
1456 | goto err; | ||
1457 | |||
1458 | /* tmp = lambda^3 */ | ||
1459 | if (!group->meth->field_mul(group, tmp, tmp, lambda, ctx)) | ||
1460 | goto err; | ||
1461 | |||
1462 | /* Y = lambda^3 * Y */ | ||
1463 | if (!group->meth->field_mul(group, &p->Y, tmp, &p->Y, ctx)) | ||
1464 | goto err; | ||
1465 | |||
1466 | ret = 1; | ||
1467 | |||
1468 | err: | ||
1469 | BN_CTX_end(ctx); | ||
1470 | return ret; | ||
1471 | } | ||
1472 | |||
1473 | |||
1416 | #define EC_POINT_BN_set_flags(P, flags) do { \ | 1474 | #define EC_POINT_BN_set_flags(P, flags) do { \ |
1417 | BN_set_flags(&(P)->X, (flags)); \ | 1475 | BN_set_flags(&(P)->X, (flags)); \ |
1418 | BN_set_flags(&(P)->Y, (flags)); \ | 1476 | BN_set_flags(&(P)->Y, (flags)); \ |
@@ -1537,6 +1595,13 @@ ec_GFp_simple_mul_ct(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, | |||
1537 | (bn_wexpand(&r->Z, group_top) == NULL)) | 1595 | (bn_wexpand(&r->Z, group_top) == NULL)) |
1538 | goto err; | 1596 | goto err; |
1539 | 1597 | ||
1598 | /* | ||
1599 | * Apply coordinate blinding for EC_POINT if the underlying EC_METHOD | ||
1600 | * implements it. | ||
1601 | */ | ||
1602 | if (!ec_point_blind_coordinates(group, s, ctx)) | ||
1603 | goto err; | ||
1604 | |||
1540 | /* top bit is a 1, in a fixed pos */ | 1605 | /* top bit is a 1, in a fixed pos */ |
1541 | if (!EC_POINT_copy(r, s)) | 1606 | if (!EC_POINT_copy(r, s)) |
1542 | goto err; | 1607 | goto err; |