[PATCH] ecc: add l_ecc_point_is_infinity

James Prestwood <[email protected]> Thu, 12 Oct 2023 06:38:12 -0700
Newsgroups dev.linux.lists.ell
Message-ID <[email protected]>
When creating a point from raw data the validity and if
infinity is checked but there doesn't exist any way to check
a point for infinity after doing some arithmetic on it. Some
specs requires a resulting point be checked for infinity.
---
 ell/ecc.c   | 5 +++++
 ell/ecc.h   | 1 +
 ell/ell.sym | 1 +
 3 files changed, 7 insertions(+)

diff --git a/ell/ecc.c b/ell/ecc.c
index 73ddb96..518f405 100644
--- a/ell/ecc.c
+++ b/ell/ecc.c
@@ -1026,3 +1026,8 @@ LIB_EXPORT bool l_ecc_points_are_equal(const struct l_ecc_point *a,
 	return ((memcmp(a->x, b->x, a->curve->ndigits * 8) == 0) &&
 			(memcmp(a->y, b->y, a->curve->ndigits * 8) == 0));
 }
+
+LIB_EXPORT bool l_ecc_point_is_infinity(const struct l_ecc_point *p)
+{
+	return _ecc_point_is_zero(p);
+}
diff --git a/ell/ecc.h b/ell/ecc.h
index 981bf95..2c2c73a 100644
--- a/ell/ecc.h
+++ b/ell/ecc.h
@@ -114,6 +114,7 @@ bool l_ecc_scalars_are_equal(const struct l_ecc_scalar *a,
 
 bool l_ecc_points_are_equal(const struct l_ecc_point *a,
 				const struct l_ecc_point *b);
+bool l_ecc_point_is_infinity(const struct l_ecc_point *p);
 
 #ifdef __cplusplus
 }
diff --git a/ell/ell.sym b/ell/ell.sym
index 7b5caa1..84c45b1 100644
--- a/ell/ell.sym
+++ b/ell/ell.sym
@@ -594,6 +594,7 @@ global:
 	l_ecc_point_clone;
 	l_ecc_point_get_curve;
 	l_ecc_points_are_equal;
+	l_ecc_point_is_infinity;
 	l_ecc_scalar_add;
 	l_ecc_scalar_free;
 	l_ecc_scalar_get_data;
-- 
2.25.1