diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/ec/ec_lib.c | 66 | ||||
| -rw-r--r-- | src/lib/libcrypto/ec/ec_local.h | 15 | ||||
| -rw-r--r-- | src/lib/libcrypto/ec/ec_mult.c | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/ec/ecp_methods.c | 8 |
4 files changed, 16 insertions, 77 deletions
diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c index de6fe20083..f1ff11a087 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.107 2025/01/11 13:41:17 tb Exp $ */ | 1 | /* $OpenBSD: ec_lib.c,v 1.108 2025/01/11 13:58:31 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 | */ |
| @@ -1265,32 +1265,8 @@ int | |||
| 1265 | EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], | 1265 | EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], |
| 1266 | BN_CTX *ctx_in) | 1266 | BN_CTX *ctx_in) |
| 1267 | { | 1267 | { |
| 1268 | BN_CTX *ctx; | 1268 | ECerror(ERR_R_DISABLED); |
| 1269 | size_t i; | 1269 | return 0; |
| 1270 | int ret = 0; | ||
| 1271 | |||
| 1272 | if ((ctx = ctx_in) == NULL) | ||
| 1273 | ctx = BN_CTX_new(); | ||
| 1274 | if (ctx == NULL) | ||
| 1275 | goto err; | ||
| 1276 | |||
| 1277 | if (group->meth->points_make_affine == NULL) { | ||
| 1278 | ECerror(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 1279 | goto err; | ||
| 1280 | } | ||
| 1281 | for (i = 0; i < num; i++) { | ||
| 1282 | if (group->meth != points[i]->meth) { | ||
| 1283 | ECerror(EC_R_INCOMPATIBLE_OBJECTS); | ||
| 1284 | goto err; | ||
| 1285 | } | ||
| 1286 | } | ||
| 1287 | ret = group->meth->points_make_affine(group, num, points, ctx); | ||
| 1288 | |||
| 1289 | err: | ||
| 1290 | if (ctx != ctx_in) | ||
| 1291 | BN_CTX_free(ctx); | ||
| 1292 | |||
| 1293 | return ret; | ||
| 1294 | } | 1270 | } |
| 1295 | LCRYPTO_ALIAS(EC_POINTs_make_affine); | 1271 | LCRYPTO_ALIAS(EC_POINTs_make_affine); |
| 1296 | 1272 | ||
| @@ -1299,40 +1275,8 @@ EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar, | |||
| 1299 | size_t num, const EC_POINT *points[], const BIGNUM *scalars[], | 1275 | size_t num, const EC_POINT *points[], const BIGNUM *scalars[], |
| 1300 | BN_CTX *ctx_in) | 1276 | BN_CTX *ctx_in) |
| 1301 | { | 1277 | { |
| 1302 | BN_CTX *ctx; | 1278 | ECerror(ERR_R_DISABLED); |
| 1303 | int ret = 0; | 1279 | return 0; |
| 1304 | |||
| 1305 | if ((ctx = ctx_in) == NULL) | ||
| 1306 | ctx = BN_CTX_new(); | ||
| 1307 | if (ctx == NULL) | ||
| 1308 | goto err; | ||
| 1309 | |||
| 1310 | /* Only num == 0 and num == 1 is supported. */ | ||
| 1311 | if (group->meth->mul_generator_ct == NULL || | ||
| 1312 | group->meth->mul_single_ct == NULL || | ||
| 1313 | group->meth->mul_double_nonct == NULL || | ||
| 1314 | num > 1) { | ||
| 1315 | ECerror(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 1316 | goto err; | ||
| 1317 | } | ||
| 1318 | |||
| 1319 | if (num == 1 && points != NULL && scalars != NULL) { | ||
| 1320 | /* Either bP or aG + bP, this is sane. */ | ||
| 1321 | ret = EC_POINT_mul(group, r, scalar, points[0], scalars[0], ctx); | ||
| 1322 | } else if (scalar != NULL && points == NULL && scalars == NULL) { | ||
| 1323 | /* aG, this is sane */ | ||
| 1324 | ret = EC_POINT_mul(group, r, scalar, NULL, NULL, ctx); | ||
| 1325 | } else { | ||
| 1326 | /* anything else is an error */ | ||
| 1327 | ECerror(ERR_R_EC_LIB); | ||
| 1328 | goto err; | ||
| 1329 | } | ||
| 1330 | |||
| 1331 | err: | ||
| 1332 | if (ctx != ctx_in) | ||
| 1333 | BN_CTX_free(ctx); | ||
| 1334 | |||
| 1335 | return ret; | ||
| 1336 | } | 1280 | } |
| 1337 | LCRYPTO_ALIAS(EC_POINTs_mul); | 1281 | LCRYPTO_ALIAS(EC_POINTs_mul); |
| 1338 | 1282 | ||
diff --git a/src/lib/libcrypto/ec/ec_local.h b/src/lib/libcrypto/ec/ec_local.h index 7cb5c55f6d..0e81ab2b12 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.55 2025/01/11 13:38:42 tb Exp $ */ | 1 | /* $OpenBSD: ec_local.h,v 1.56 2025/01/11 13:58:31 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 | */ |
| @@ -79,12 +79,6 @@ | |||
| 79 | 79 | ||
| 80 | __BEGIN_HIDDEN_DECLS | 80 | __BEGIN_HIDDEN_DECLS |
| 81 | 81 | ||
| 82 | #if defined(__SUNPRO_C) | ||
| 83 | # if __SUNPRO_C >= 0x520 | ||
| 84 | # pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) | ||
| 85 | # endif | ||
| 86 | #endif | ||
| 87 | |||
| 88 | struct ec_method_st { | 82 | struct ec_method_st { |
| 89 | int field_type; | 83 | int field_type; |
| 90 | 84 | ||
| @@ -100,6 +94,10 @@ struct ec_method_st { | |||
| 100 | int (*point_set_compressed_coordinates)(const EC_GROUP *, EC_POINT *, | 94 | int (*point_set_compressed_coordinates)(const EC_GROUP *, EC_POINT *, |
| 101 | const BIGNUM *x, int y_bit, BN_CTX *); | 95 | const BIGNUM *x, int y_bit, BN_CTX *); |
| 102 | 96 | ||
| 97 | /* Only used by the wNAF code. */ | ||
| 98 | int (*points_make_affine)(const EC_GROUP *, size_t num, EC_POINT **, | ||
| 99 | BN_CTX *); | ||
| 100 | |||
| 103 | int (*add)(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, | 101 | int (*add)(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, |
| 104 | const EC_POINT *b, BN_CTX *); | 102 | const EC_POINT *b, BN_CTX *); |
| 105 | int (*dbl)(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, BN_CTX *); | 103 | int (*dbl)(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, BN_CTX *); |
| @@ -109,9 +107,6 @@ struct ec_method_st { | |||
| 109 | int (*point_cmp)(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, | 107 | int (*point_cmp)(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, |
| 110 | BN_CTX *); | 108 | BN_CTX *); |
| 111 | 109 | ||
| 112 | int (*points_make_affine)(const EC_GROUP *, size_t num, EC_POINT *[], | ||
| 113 | BN_CTX *); | ||
| 114 | |||
| 115 | int (*mul_generator_ct)(const EC_GROUP *, EC_POINT *r, | 110 | int (*mul_generator_ct)(const EC_GROUP *, EC_POINT *r, |
| 116 | const BIGNUM *scalar, BN_CTX *); | 111 | const BIGNUM *scalar, BN_CTX *); |
| 117 | int (*mul_single_ct)(const EC_GROUP *group, EC_POINT *r, | 112 | int (*mul_single_ct)(const EC_GROUP *group, EC_POINT *r, |
diff --git a/src/lib/libcrypto/ec/ec_mult.c b/src/lib/libcrypto/ec/ec_mult.c index d11086de64..68061ffd67 100644 --- a/src/lib/libcrypto/ec/ec_mult.c +++ b/src/lib/libcrypto/ec/ec_mult.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ec_mult.c,v 1.56 2024/12/19 21:05:46 tb Exp $ */ | 1 | /* $OpenBSD: ec_mult.c,v 1.57 2025/01/11 13:58:31 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. | 3 | * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. |
| 4 | */ | 4 | */ |
| @@ -219,7 +219,7 @@ ec_normalize_points(const EC_GROUP *group, struct ec_wnaf *wnaf0, | |||
| 219 | memcpy(&val[0], points0, sizeof(*val) * len0); | 219 | memcpy(&val[0], points0, sizeof(*val) * len0); |
| 220 | memcpy(&val[len0], points1, sizeof(*val) * len1); | 220 | memcpy(&val[len0], points1, sizeof(*val) * len1); |
| 221 | 221 | ||
| 222 | if (!EC_POINTs_make_affine(group, len, val, ctx)) | 222 | if (!group->meth->points_make_affine(group, len, val, ctx)) |
| 223 | goto err; | 223 | goto err; |
| 224 | 224 | ||
| 225 | ret = 1; | 225 | ret = 1; |
diff --git a/src/lib/libcrypto/ec/ecp_methods.c b/src/lib/libcrypto/ec/ecp_methods.c index a2a74334f4..d1895c959f 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.27 2025/01/11 13:38:42 tb Exp $ */ | 1 | /* $OpenBSD: ecp_methods.c,v 1.28 2025/01/11 13:58:31 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,7 +892,7 @@ 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_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, |
| 896 | BN_CTX *ctx) | 896 | BN_CTX *ctx) |
| 897 | { | 897 | { |
| 898 | BIGNUM **prod_Z = NULL; | 898 | BIGNUM **prod_Z = NULL; |
| @@ -1425,12 +1425,12 @@ static const EC_METHOD ec_GFp_simple_method = { | |||
| 1425 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, | 1425 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, |
| 1426 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, | 1426 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, |
| 1427 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, | 1427 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, |
| 1428 | .points_make_affine = ec_points_make_affine, | ||
| 1428 | .add = ec_add, | 1429 | .add = ec_add, |
| 1429 | .dbl = ec_dbl, | 1430 | .dbl = ec_dbl, |
| 1430 | .invert = ec_invert, | 1431 | .invert = ec_invert, |
| 1431 | .is_on_curve = ec_is_on_curve, | 1432 | .is_on_curve = ec_is_on_curve, |
| 1432 | .point_cmp = ec_cmp, | 1433 | .point_cmp = ec_cmp, |
| 1433 | .points_make_affine = ec_points_make_affine, | ||
| 1434 | .mul_generator_ct = ec_mul_generator_ct, | 1434 | .mul_generator_ct = ec_mul_generator_ct, |
| 1435 | .mul_single_ct = ec_mul_single_ct, | 1435 | .mul_single_ct = ec_mul_single_ct, |
| 1436 | .mul_double_nonct = ec_mul_double_nonct, | 1436 | .mul_double_nonct = ec_mul_double_nonct, |
| @@ -1452,12 +1452,12 @@ static const EC_METHOD ec_GFp_mont_method = { | |||
| 1452 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, | 1452 | .point_set_affine_coordinates = ec_point_set_affine_coordinates, |
| 1453 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, | 1453 | .point_get_affine_coordinates = ec_point_get_affine_coordinates, |
| 1454 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, | 1454 | .point_set_compressed_coordinates = ec_set_compressed_coordinates, |
| 1455 | .points_make_affine = ec_points_make_affine, | ||
| 1455 | .add = ec_add, | 1456 | .add = ec_add, |
| 1456 | .dbl = ec_dbl, | 1457 | .dbl = ec_dbl, |
| 1457 | .invert = ec_invert, | 1458 | .invert = ec_invert, |
| 1458 | .is_on_curve = ec_is_on_curve, | 1459 | .is_on_curve = ec_is_on_curve, |
| 1459 | .point_cmp = ec_cmp, | 1460 | .point_cmp = ec_cmp, |
| 1460 | .points_make_affine = ec_points_make_affine, | ||
| 1461 | .mul_generator_ct = ec_mul_generator_ct, | 1461 | .mul_generator_ct = ec_mul_generator_ct, |
| 1462 | .mul_single_ct = ec_mul_single_ct, | 1462 | .mul_single_ct = ec_mul_single_ct, |
| 1463 | .mul_double_nonct = ec_mul_double_nonct, | 1463 | .mul_double_nonct = ec_mul_double_nonct, |
