summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/ec/ecp_methods.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/lib/libcrypto/ec/ecp_methods.c b/src/lib/libcrypto/ec/ecp_methods.c
index 1b763cf219..65dfd5ef00 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.8 2024/11/16 15:32:08 tb Exp $ */ 1/* $OpenBSD: ecp_methods.c,v 1.9 2024/11/17 08:19:08 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.
@@ -993,28 +993,26 @@ ec_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx)
993 return ret; 993 return ret;
994} 994}
995 995
996/*
997 * Returns -1 on error, 0 if the points are equal, 1 if the points are distinct.
998 */
999
996static int 1000static int
997ec_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx) 1001ec_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx)
998{ 1002{
999 /*
1000 * return values: -1 error 0 equal (in affine coordinates) 1
1001 * not equal
1002 */
1003
1004 int (*field_mul) (const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *); 1003 int (*field_mul) (const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *);
1005 int (*field_sqr) (const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *); 1004 int (*field_sqr) (const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *);
1006 BIGNUM *tmp1, *tmp2, *Za23, *Zb23; 1005 BIGNUM *tmp1, *tmp2, *Za23, *Zb23;
1007 const BIGNUM *tmp1_, *tmp2_; 1006 const BIGNUM *tmp1_, *tmp2_;
1008 int ret = -1; 1007 int ret = -1;
1009 1008
1010 if (EC_POINT_is_at_infinity(group, a)) 1009 if (EC_POINT_is_at_infinity(group, a) && EC_POINT_is_at_infinity(group, b))
1011 return !EC_POINT_is_at_infinity(group, b); 1010 return 0;
1012 1011 if (EC_POINT_is_at_infinity(group, a) || EC_POINT_is_at_infinity(group, b))
1013 if (EC_POINT_is_at_infinity(group, b))
1014 return 1; 1012 return 1;
1015 1013
1016 if (a->Z_is_one && b->Z_is_one) 1014 if (a->Z_is_one && b->Z_is_one)
1017 return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1; 1015 return BN_cmp(&a->X, &b->X) != 0 || BN_cmp(&a->Y, &b->Y) != 0;
1018 1016
1019 field_mul = group->meth->field_mul; 1017 field_mul = group->meth->field_mul;
1020 field_sqr = group->meth->field_sqr; 1018 field_sqr = group->meth->field_sqr;