Message ID | 20231106190638.296812-1-marcel@holtmann.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ecc: Add helper for multiplying a scalar with a curve generator | expand |
Context | Check | Description |
---|---|---|
tedd_an/pre-ci_am | success | Success |
prestwoj/iwd-ci-makedistcheck | success | Make Distcheck |
prestwoj/iwd-ci-build | success | Build - Configure |
prestwoj/iwd-ci-makecheckvalgrind | success | Make Check w/Valgrind |
prestwoj/iwd-ci-makecheck | success | Make Check |
prestwoj/iwd-ci-clang | success | clang PASS |
prestwoj/iwd-ci-testrunner | success | test-runner PASS |
Hi Marcel, On 11/6/23 13:06, Marcel Holtmann wrote: > The SPAKE2+ key exchange protocol requires the ability to multiply a > random number with the curve generator. Instead of exposing the curve > generator expose a helper function that provides the multiplication. > --- > ell/ecc.c | 12 ++++++++++++ > ell/ecc.h | 2 ++ > ell/ell.sym | 1 + > 3 files changed, 15 insertions(+) > Applied, thanks. Regards, -Denis
diff --git a/ell/ecc.c b/ell/ecc.c index 59bff7bd5af1..ff147b84ed74 100644 --- a/ell/ecc.c +++ b/ell/ecc.c @@ -940,6 +940,18 @@ LIB_EXPORT bool l_ecc_point_multiply(struct l_ecc_point *ret, return true; } +LIB_EXPORT bool l_ecc_point_multiply_g(struct l_ecc_point *ret, + const struct l_ecc_scalar *scalar) +{ + if (unlikely(!ret || !scalar)) + return false; + + _ecc_point_mult(ret, &scalar->curve->g, scalar->c, NULL, + scalar->curve->p); + + return true; +} + LIB_EXPORT bool l_ecc_point_add(struct l_ecc_point *ret, const struct l_ecc_point *a, const struct l_ecc_point *b) diff --git a/ell/ecc.h b/ell/ecc.h index 2f6faa4e79cd..de116f018b44 100644 --- a/ell/ecc.h +++ b/ell/ecc.h @@ -83,6 +83,8 @@ bool l_ecc_scalar_add(struct l_ecc_scalar *ret, const struct l_ecc_scalar *a, bool l_ecc_point_multiply(struct l_ecc_point *ret, const struct l_ecc_scalar *scalar, const struct l_ecc_point *point); +bool l_ecc_point_multiply_g(struct l_ecc_point *ret, + const struct l_ecc_scalar *scalar); bool l_ecc_point_add(struct l_ecc_point *ret, const struct l_ecc_point *a, const struct l_ecc_point *b); bool l_ecc_point_inverse(struct l_ecc_point *p); diff --git a/ell/ell.sym b/ell/ell.sym index c457a7620376..0f593e1fc402 100644 --- a/ell/ell.sym +++ b/ell/ell.sym @@ -593,6 +593,7 @@ global: l_ecc_point_get_data; l_ecc_point_inverse; l_ecc_point_multiply; + l_ecc_point_multiply_g; l_ecc_point_new; l_ecc_point_from_sswu; l_ecc_point_clone;