diff options
author | tb <> | 2025-01-11 13:38:42 +0000 |
---|---|---|
committer | tb <> | 2025-01-11 13:38:42 +0000 |
commit | 28b0d0a86ff16d35928ff812a03e9ae9abb97ac1 (patch) | |
tree | 7212ae9e38ac6f0ff09f3a7a9e0f3da09046e304 /src/lib | |
parent | 8b8ce4611c101986c51d6e37d3113e60d5e1dd58 (diff) | |
download | openbsd-28b0d0a86ff16d35928ff812a03e9ae9abb97ac1.tar.gz openbsd-28b0d0a86ff16d35928ff812a03e9ae9abb97ac1.tar.bz2 openbsd-28b0d0a86ff16d35928ff812a03e9ae9abb97ac1.zip |
Inline ec_point_make_affine() in the public API
Whatever the EC_METHOD, this will always be equivalent to getting and
setting the affine coordinates, so this needs no dedicated method.
Also, this is a function that makes no real sense since a caller should
never need to care about this... As always, our favorite language bindings
thought they might have users who care. This time it's Ruby and Perl.
ok jsing
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/ec/ec_lib.c | 27 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ec_local.h | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_methods.c | 36 |
3 files changed, 22 insertions, 44 deletions
diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c index d7f0bc6358..c2a5545c30 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.105 2025/01/09 11:35:46 tb Exp $ */ | 1 | /* $OpenBSD: ec_lib.c,v 1.106 2025/01/11 13:38:42 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 | */ |
@@ -1229,6 +1229,7 @@ int | |||
1229 | EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx_in) | 1229 | EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx_in) |
1230 | { | 1230 | { |
1231 | BN_CTX *ctx; | 1231 | BN_CTX *ctx; |
1232 | BIGNUM *x, *y; | ||
1232 | int ret = 0; | 1233 | int ret = 0; |
1233 | 1234 | ||
1234 | if ((ctx = ctx_in) == NULL) | 1235 | if ((ctx = ctx_in) == NULL) |
@@ -1236,17 +1237,29 @@ EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx_in) | |||
1236 | if (ctx == NULL) | 1237 | if (ctx == NULL) |
1237 | goto err; | 1238 | goto err; |
1238 | 1239 | ||
1239 | if (group->meth->make_affine == NULL) { | 1240 | BN_CTX_start(ctx); |
1240 | ECerror(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 1241 | |
1242 | if ((x = BN_CTX_get(ctx)) == NULL) | ||
1241 | goto err; | 1243 | goto err; |
1242 | } | 1244 | if ((y = BN_CTX_get(ctx)) == NULL) |
1243 | if (group->meth != point->meth) { | 1245 | goto err; |
1244 | ECerror(EC_R_INCOMPATIBLE_OBJECTS); | 1246 | |
1247 | if (!EC_POINT_get_affine_coordinates(group, point, x, y, ctx)) | ||
1248 | goto err; | ||
1249 | if (!EC_POINT_set_affine_coordinates(group, point, x, y, ctx)) | ||
1250 | goto err; | ||
1251 | |||
1252 | /* XXX - is this the right spot for this check? */ | ||
1253 | if (!point->Z_is_one) { | ||
1254 | ECerror(ERR_R_INTERNAL_ERROR); | ||
1245 | goto err; | 1255 | goto err; |
1246 | } | 1256 | } |
1247 | ret = group->meth->make_affine(group, point, ctx); | 1257 | |
1258 | ret = 1; | ||
1248 | 1259 | ||
1249 | err: | 1260 | err: |
1261 | BN_CTX_end(ctx); | ||
1262 | |||
1250 | if (ctx != ctx_in) | 1263 | if (ctx != ctx_in) |
1251 | BN_CTX_free(ctx); | 1264 | BN_CTX_free(ctx); |
1252 | 1265 | ||
diff --git a/src/lib/libcrypto/ec/ec_local.h b/src/lib/libcrypto/ec/ec_local.h index 5949908991..7cb5c55f6d 100644 --- a/src/lib/libcrypto/ec/ec_local.h +++ b/src/lib/libcrypto/ec/ec_local.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_local.h,v 1.54 2025/01/07 08:52:17 tb Exp $ */ | 1 | /* $OpenBSD: ec_local.h,v 1.55 2025/01/11 13:38:42 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,6 @@ struct ec_method_st { | |||
109 | int (*point_cmp)(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, | 109 | int (*point_cmp)(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, |
110 | BN_CTX *); | 110 | BN_CTX *); |
111 | 111 | ||
112 | int (*make_affine)(const EC_GROUP *, EC_POINT *, BN_CTX *); | ||
113 | int (*points_make_affine)(const EC_GROUP *, size_t num, EC_POINT *[], | 112 | int (*points_make_affine)(const EC_GROUP *, size_t num, EC_POINT *[], |
114 | BN_CTX *); | 113 | BN_CTX *); |
115 | 114 | ||
diff --git a/src/lib/libcrypto/ec/ecp_methods.c b/src/lib/libcrypto/ec/ecp_methods.c index 9593428870..a2a74334f4 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.26 2025/01/07 08:30:52 tb Exp $ */ | 1 | /* $OpenBSD: ecp_methods.c,v 1.27 2025/01/11 13:38:42 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. |
@@ -892,38 +892,6 @@ ec_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx) | |||
892 | } | 892 | } |
893 | 893 | ||
894 | static int | 894 | static int |
895 | ec_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) | ||
896 | { | ||
897 | BIGNUM *x, *y; | ||
898 | int ret = 0; | ||
899 | |||
900 | if (point->Z_is_one || EC_POINT_is_at_infinity(group, point)) | ||
901 | return 1; | ||
902 | |||
903 | BN_CTX_start(ctx); | ||
904 | |||
905 | if ((x = BN_CTX_get(ctx)) == NULL) | ||
906 | goto err; | ||
907 | if ((y = BN_CTX_get(ctx)) == NULL) | ||
908 | goto err; | ||
909 | |||
910 | if (!EC_POINT_get_affine_coordinates(group, point, x, y, ctx)) | ||
911 | goto err; | ||
912 | if (!EC_POINT_set_affine_coordinates(group, point, x, y, ctx)) | ||
913 | goto err; | ||
914 | if (!point->Z_is_one) { | ||
915 | ECerror(ERR_R_INTERNAL_ERROR); | ||
916 | goto err; | ||
917 | } | ||
918 | ret = 1; | ||
919 | |||
920 | err: | ||
921 | BN_CTX_end(ctx); | ||
922 | |||
923 | return ret; | ||
924 | } | ||
925 | |||
926 | static int | ||
927 | ec_points_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], | 895 | ec_points_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], |
928 | BN_CTX *ctx) | 896 | BN_CTX *ctx) |
929 | { | 897 | { |
@@ -1462,7 +1430,6 @@ static const EC_METHOD ec_GFp_simple_method = { | |||
1462 | .invert = ec_invert, | 1430 | .invert = ec_invert, |
1463 | .is_on_curve = ec_is_on_curve, | 1431 | .is_on_curve = ec_is_on_curve, |
1464 | .point_cmp = ec_cmp, | 1432 | .point_cmp = ec_cmp, |
1465 | .make_affine = ec_make_affine, | ||
1466 | .points_make_affine = ec_points_make_affine, | 1433 | .points_make_affine = ec_points_make_affine, |
1467 | .mul_generator_ct = ec_mul_generator_ct, | 1434 | .mul_generator_ct = ec_mul_generator_ct, |
1468 | .mul_single_ct = ec_mul_single_ct, | 1435 | .mul_single_ct = ec_mul_single_ct, |
@@ -1490,7 +1457,6 @@ static const EC_METHOD ec_GFp_mont_method = { | |||
1490 | .invert = ec_invert, | 1457 | .invert = ec_invert, |
1491 | .is_on_curve = ec_is_on_curve, | 1458 | .is_on_curve = ec_is_on_curve, |
1492 | .point_cmp = ec_cmp, | 1459 | .point_cmp = ec_cmp, |
1493 | .make_affine = ec_make_affine, | ||
1494 | .points_make_affine = ec_points_make_affine, | 1460 | .points_make_affine = ec_points_make_affine, |
1495 | .mul_generator_ct = ec_mul_generator_ct, | 1461 | .mul_generator_ct = ec_mul_generator_ct, |
1496 | .mul_single_ct = ec_mul_single_ct, | 1462 | .mul_single_ct = ec_mul_single_ct, |