From 98bd4f3ec60ab1bb09b6becd7a5e1d91d35c81cd Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Wed, 25 Apr 2018 19:08:05 +0200 Subject: [PATCH] Added some nice helper methods --- CMakeLists.txt | 3 +++ include/ge.h | 11 +++++++++-- include/sc.h | 8 ++++++++ src/ge.c | 7 ++++++- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca51d0f..413f62e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,9 @@ project(ed25519) cmake_minimum_required(VERSION 3.9) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + option(USE_OPENSSL "Use openssl for sha 512 (Faster than the default installation" ON) set(SOURCE diff --git a/include/ge.h b/include/ge.h index 88509d8..0875f87 100644 --- a/include/ge.h +++ b/include/ge.h @@ -51,10 +51,13 @@ typedef struct { fe T2d; } ge_cached; +#ifdef __cplusplus +extern "C" { +#endif + void ge_p3_tobytes(unsigned char *s, const ge_p3 *h); void ge_tobytes(unsigned char *s, const ge_p2 *h); 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); @@ -62,7 +65,6 @@ 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); - void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p); void ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p); void ge_p2_0(ge_p2 *h); @@ -71,5 +73,10 @@ void ge_p3_0(ge_p3 *h); void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p); void ge_p3_to_cached(ge_cached *r, const ge_p3 *p); void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p); +void ge_p2_to_p3(ge_p3 *r, const ge_p2 *p); + +#ifdef __cplusplus +} +#endif #endif diff --git a/include/sc.h b/include/sc.h index e29e7fa..18b1d73 100644 --- a/include/sc.h +++ b/include/sc.h @@ -6,7 +6,15 @@ The set of scalars is \Z/l where l = 2^252 + 27742317777372353535851937790883648493. */ +#ifdef __cplusplus +extern "C" { +#endif + void sc_reduce(unsigned char *s); void sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/ge.c b/src/ge.c index 3bb0e14..be6c27a 100644 --- a/src/ge.c +++ b/src/ge.c @@ -63,7 +63,7 @@ static void slide(signed char *r, const unsigned char *a) { */ void ge_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A) { unsigned char zero[32]; - memset(zero, 0, sizeof(zero)); + memset(zero, 0, 32); ge_double_scalarmult_vartime(r, a, A, zero); } @@ -327,6 +327,11 @@ void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) { fe_copy(r->Z, p->Z); } +void ge_p2_to_p3(ge_p3 *r, const ge_p2 *p) { + uint8_t buffer[32]; + ge_tobytes(buffer, p); + ge_frombytes_negate_vartime(r, buffer); +} void ge_p3_tobytes(unsigned char *s, const ge_p3 *h) { fe recip;