diff --git a/include/ge.h b/include/ge.h index 17fde2d..88509d8 100644 --- a/include/ge.h +++ b/include/ge.h @@ -58,6 +58,7 @@ int ge_frombytes_negate_vartime(ge_p3 *h, const unsigned char *s); void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); void ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b); +void ge_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A); void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q); void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q); void ge_scalarmult_base(ge_p3 *h, const unsigned char *a); diff --git a/src/ge.c b/src/ge.c index c4a8d51..3bb0e14 100644 --- a/src/ge.c +++ b/src/ge.c @@ -1,3 +1,4 @@ +#include #include "../include/ge.h" #include "../include/precomp_data.h" @@ -57,6 +58,15 @@ static void slide(signed char *r, const unsigned char *a) { } } +/* + * Warps to ge_double_scalarmult_vartime() => r = a * A + zero * B + */ +void ge_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A) { + unsigned char zero[32]; + memset(zero, 0, sizeof(zero)); + ge_double_scalarmult_vartime(r, a, A, zero); +} + /* r = a * A + b * B where a = a[0]+256*a[1]+...+256^31 a[31].