Added some nice helper methods

This commit is contained in:
WolverinDEV 2018-04-25 19:08:05 +02:00
parent b761bf653a
commit 98bd4f3ec6
4 changed files with 26 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;