diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libcrypto/ec/ecp_methods.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/lib/libcrypto/ec/ecp_methods.c b/src/lib/libcrypto/ec/ecp_methods.c index 544c2be4d4..fcb48d9e33 100644 --- a/src/lib/libcrypto/ec/ecp_methods.c +++ b/src/lib/libcrypto/ec/ecp_methods.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ecp_methods.c,v 1.44 2025/03/09 15:33:35 tb Exp $ */ | 1 | /* $OpenBSD: ecp_methods.c,v 1.47 2025/05/24 08:25:58 jsing 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. |
@@ -66,11 +66,11 @@ | |||
66 | 66 | ||
67 | #include <openssl/bn.h> | 67 | #include <openssl/bn.h> |
68 | #include <openssl/ec.h> | 68 | #include <openssl/ec.h> |
69 | #include <openssl/err.h> | ||
70 | #include <openssl/objects.h> | 69 | #include <openssl/objects.h> |
71 | 70 | ||
72 | #include "bn_local.h" | 71 | #include "bn_local.h" |
73 | #include "ec_local.h" | 72 | #include "ec_local.h" |
73 | #include "err_local.h" | ||
74 | 74 | ||
75 | /* | 75 | /* |
76 | * Most method functions in this file are designed to work with non-trivial | 76 | * Most method functions in this file are designed to work with non-trivial |
@@ -180,6 +180,21 @@ ec_group_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, | |||
180 | } | 180 | } |
181 | 181 | ||
182 | static int | 182 | static int |
183 | ec_point_set_to_infinity(const EC_GROUP *group, EC_POINT *point) | ||
184 | { | ||
185 | BN_zero(point->Z); | ||
186 | point->Z_is_one = 0; | ||
187 | |||
188 | return 1; | ||
189 | } | ||
190 | |||
191 | static int | ||
192 | ec_point_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) | ||
193 | { | ||
194 | return BN_is_zero(point->Z); | ||
195 | } | ||
196 | |||
197 | static int | ||
183 | ec_point_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx) | 198 | ec_point_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx) |
184 | { | 199 | { |
185 | BIGNUM *rh, *tmp, *Z4, *Z6; | 200 | BIGNUM *rh, *tmp, *Z4, *Z6; |
@@ -1194,10 +1209,11 @@ ec_mul_single_ct(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, | |||
1194 | } | 1209 | } |
1195 | 1210 | ||
1196 | static int | 1211 | static int |
1197 | ec_mul_double_nonct(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar, | 1212 | ec_mul_double_nonct(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar1, |
1198 | const BIGNUM *p_scalar, const EC_POINT *point, BN_CTX *ctx) | 1213 | const EC_POINT *point1, const BIGNUM *scalar2, const EC_POINT *point2, |
1214 | BN_CTX *ctx) | ||
1199 | { | 1215 | { |
1200 | return ec_wnaf_mul(group, r, g_scalar, point, p_scalar, ctx); | 1216 | return ec_wnaf_mul(group, r, scalar1, point1, scalar2, point2, ctx); |
1201 | } | 1217 | } |
1202 | 1218 | ||
1203 | static int | 1219 | static int |
@@ -1280,6 +1296,8 @@ ec_mont_field_decode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, | |||
1280 | static const EC_METHOD ec_GFp_simple_method = { | 1296 | static const EC_METHOD ec_GFp_simple_method = { |
1281 | .group_set_curve = ec_group_set_curve, | 1297 | .group_set_curve = ec_group_set_curve, |
1282 | .group_get_curve = ec_group_get_curve, | 1298 | .group_get_curve = ec_group_get_curve, |
1299 | .point_set_to_infinity = ec_point_set_to_infinity, | ||
1300 | .point_is_at_infinity = ec_point_is_at_infinity, | ||
1283 | .point_is_on_curve = ec_point_is_on_curve, | 1301 | .point_is_on_curve = ec_point_is_on_curve, |
1284 | .point_cmp = ec_point_cmp, | 1302 | .point_cmp = ec_point_cmp, |
1285 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, | 1303 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, |
@@ -1303,6 +1321,8 @@ EC_GFp_simple_method(void) | |||
1303 | static const EC_METHOD ec_GFp_mont_method = { | 1321 | static const EC_METHOD ec_GFp_mont_method = { |
1304 | .group_set_curve = ec_mont_group_set_curve, | 1322 | .group_set_curve = ec_mont_group_set_curve, |
1305 | .group_get_curve = ec_group_get_curve, | 1323 | .group_get_curve = ec_group_get_curve, |
1324 | .point_set_to_infinity = ec_point_set_to_infinity, | ||
1325 | .point_is_at_infinity = ec_point_is_at_infinity, | ||
1306 | .point_is_on_curve = ec_point_is_on_curve, | 1326 | .point_is_on_curve = ec_point_is_on_curve, |
1307 | .point_cmp = ec_point_cmp, | 1327 | .point_cmp = ec_point_cmp, |
1308 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, | 1328 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, |