summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorBilly Brumley <bbrumley@gmail.com>2020-05-13 07:33:59 +0300
committerMatt Caswell <matt@openssl.org>2020-05-16 17:20:37 +0100
commit4fcd15c18ad6b5523a389863d3e5628d44db6eb4 (patch)
tree5150a30cd2e34938b3a359b1bdfb13736634d262 /crypto
parent06a2027bd58bcd109cab88e3ce27726613eeab50 (diff)
deprecate EC_POINTs_mul function
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/11807)
Diffstat (limited to 'crypto')
-rw-r--r--crypto/ec/ec_lib.c42
-rw-r--r--crypto/err/openssl.txt1
2 files changed, 35 insertions, 8 deletions
diff --git a/crypto/ec/ec_lib.c b/crypto/ec/ec_lib.c
index 589380d466..cdeffb4207 100644
--- a/crypto/ec/ec_lib.c
+++ b/crypto/ec/ec_lib.c
@@ -1041,6 +1041,7 @@ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num,
* methods.
*/
+#ifndef OPENSSL_NO_DEPRECATED_3_0
int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
size_t num, const EC_POINT *points[],
const BIGNUM *scalars[], BN_CTX *ctx)
@@ -1086,21 +1087,46 @@ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
#endif
return ret;
}
+#endif
int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
const EC_POINT *point, const BIGNUM *p_scalar, BN_CTX *ctx)
{
- /* just a convenient interface to EC_POINTs_mul() */
+ int ret = 0;
+#ifndef FIPS_MODULE
+ BN_CTX *new_ctx = NULL;
+#endif
- const EC_POINT *points[1];
- const BIGNUM *scalars[1];
+ if (!ec_point_is_compat(r, group)
+ || (point != NULL && !ec_point_is_compat(point, group))) {
+ ECerr(EC_F_EC_POINT_MUL, EC_R_INCOMPATIBLE_OBJECTS);
+ return 0;
+ }
- points[0] = point;
- scalars[0] = p_scalar;
+ if (g_scalar == NULL && p_scalar == NULL)
+ return EC_POINT_set_to_infinity(group, r);
- return EC_POINTs_mul(group, r, g_scalar,
- (point != NULL
- && p_scalar != NULL), points, scalars, ctx);
+#ifndef FIPS_MODULE
+ if (ctx == NULL)
+ ctx = new_ctx = BN_CTX_secure_new();
+#endif
+ if (ctx == NULL) {
+ ECerr(EC_F_EC_POINT_MUL, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+
+ if (group->meth->mul != NULL)
+ ret = group->meth->mul(group, r, g_scalar, point != NULL
+ && p_scalar != NULL, &point, &p_scalar, ctx);
+ else
+ /* use default */
+ ret = ec_wNAF_mul(group, r, g_scalar, point != NULL
+ && p_scalar != NULL, &point, &p_scalar, ctx);
+
+#ifndef FIPS_MODULE
+ BN_CTX_free(new_ctx);
+#endif
+ return ret;
}
int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt
index 7bf0611ec4..9d5e960841 100644
--- a/crypto/err/openssl.txt
+++ b/crypto/err/openssl.txt
@@ -696,6 +696,7 @@ EC_F_EC_POINT_INVERT:210:EC_POINT_invert
EC_F_EC_POINT_IS_AT_INFINITY:118:EC_POINT_is_at_infinity
EC_F_EC_POINT_IS_ON_CURVE:119:EC_POINT_is_on_curve
EC_F_EC_POINT_MAKE_AFFINE:120:EC_POINT_make_affine
+EC_F_EC_POINT_MUL:309:
EC_F_EC_POINT_NEW:121:EC_POINT_new
EC_F_EC_POINT_OCT2POINT:122:EC_POINT_oct2point
EC_F_EC_POINT_POINT2BUF:281:EC_POINT_point2buf