diff options
Diffstat (limited to 'src')
| -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; |
