summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortb <>2025-01-11 13:38:42 +0000
committertb <>2025-01-11 13:38:42 +0000
commit28b0d0a86ff16d35928ff812a03e9ae9abb97ac1 (patch)
tree7212ae9e38ac6f0ff09f3a7a9e0f3da09046e304 /src/lib
parent8b8ce4611c101986c51d6e37d3113e60d5e1dd58 (diff)
downloadopenbsd-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.c27
-rw-r--r--src/lib/libcrypto/ec/ec_local.h3
-rw-r--r--src/lib/libcrypto/ec/ecp_methods.c36
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
1229EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx_in) 1229EC_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
894static int 894static int
895ec_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
926static int
927ec_points_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], 895ec_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,