diff options
Diffstat (limited to 'src/lib/libcrypto/ec/ecp_methods.c')
-rw-r--r-- | src/lib/libcrypto/ec/ecp_methods.c | 61 |
1 files changed, 1 insertions, 60 deletions
diff --git a/src/lib/libcrypto/ec/ecp_methods.c b/src/lib/libcrypto/ec/ecp_methods.c index 8623131ffa..9593428870 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.25 2025/01/06 18:43:27 tb Exp $ */ | 1 | /* $OpenBSD: ecp_methods.c,v 1.26 2025/01/07 08:30:52 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. |
@@ -167,63 +167,6 @@ ec_group_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, | |||
167 | } | 167 | } |
168 | 168 | ||
169 | static int | 169 | static int |
170 | ec_group_check_discriminant(const EC_GROUP *group, BN_CTX *ctx) | ||
171 | { | ||
172 | BIGNUM *p, *a, *b, *discriminant; | ||
173 | int ret = 0; | ||
174 | |||
175 | BN_CTX_start(ctx); | ||
176 | |||
177 | if ((p = BN_CTX_get(ctx)) == NULL) | ||
178 | goto err; | ||
179 | if ((a = BN_CTX_get(ctx)) == NULL) | ||
180 | goto err; | ||
181 | if ((b = BN_CTX_get(ctx)) == NULL) | ||
182 | goto err; | ||
183 | if ((discriminant = BN_CTX_get(ctx)) == NULL) | ||
184 | goto err; | ||
185 | |||
186 | if (!EC_GROUP_get_curve(group, p, a, b, ctx)) | ||
187 | goto err; | ||
188 | |||
189 | /* | ||
190 | * Check that the discriminant 4a^3 + 27b^2 is non-zero modulo p. | ||
191 | */ | ||
192 | |||
193 | if (BN_is_zero(a) && BN_is_zero(b)) | ||
194 | goto err; | ||
195 | if (BN_is_zero(a) || BN_is_zero(b)) | ||
196 | goto done; | ||
197 | |||
198 | /* Compute the discriminant: first 4a^3, then 27b^2, then their sum. */ | ||
199 | if (!BN_mod_sqr(discriminant, a, p, ctx)) | ||
200 | goto err; | ||
201 | if (!BN_mod_mul(discriminant, discriminant, a, p, ctx)) | ||
202 | goto err; | ||
203 | if (!BN_lshift(discriminant, discriminant, 2)) | ||
204 | goto err; | ||
205 | |||
206 | if (!BN_mod_sqr(b, b, p, ctx)) | ||
207 | goto err; | ||
208 | if (!BN_mul_word(b, 27)) | ||
209 | goto err; | ||
210 | |||
211 | if (!BN_mod_add(discriminant, discriminant, b, p, ctx)) | ||
212 | goto err; | ||
213 | |||
214 | if (BN_is_zero(discriminant)) | ||
215 | goto err; | ||
216 | |||
217 | done: | ||
218 | ret = 1; | ||
219 | |||
220 | err: | ||
221 | BN_CTX_end(ctx); | ||
222 | |||
223 | return ret; | ||
224 | } | ||
225 | |||
226 | static int | ||
227 | ec_point_set_affine_coordinates(const EC_GROUP *group, EC_POINT *point, | 170 | ec_point_set_affine_coordinates(const EC_GROUP *group, EC_POINT *point, |
228 | const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx) | 171 | const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx) |
229 | { | 172 | { |
@@ -1511,7 +1454,6 @@ static const EC_METHOD ec_GFp_simple_method = { | |||
1511 | .field_type = NID_X9_62_prime_field, | 1454 | .field_type = NID_X9_62_prime_field, |
1512 | .group_set_curve = ec_group_set_curve, | 1455 | .group_set_curve = ec_group_set_curve, |
1513 | .group_get_curve = ec_group_get_curve, | 1456 | .group_get_curve = ec_group_get_curve, |
1514 | .group_check_discriminant = ec_group_check_discriminant, | ||
1515 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, | 1457 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, |
1516 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, | 1458 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, |
1517 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, | 1459 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, |
@@ -1540,7 +1482,6 @@ static const EC_METHOD ec_GFp_mont_method = { | |||
1540 | .field_type = NID_X9_62_prime_field, | 1482 | .field_type = NID_X9_62_prime_field, |
1541 | .group_set_curve = ec_mont_group_set_curve, | 1483 | .group_set_curve = ec_mont_group_set_curve, |
1542 | .group_get_curve = ec_group_get_curve, | 1484 | .group_get_curve = ec_group_get_curve, |
1543 | .group_check_discriminant = ec_group_check_discriminant, | ||
1544 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, | 1485 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, |
1545 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, | 1486 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, |
1546 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, | 1487 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, |