mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 16:27:39 +00:00
add a version of ge_double_scalarmult_precomp_vartime with A precomp
This commit is contained in:
parent
d43eef6def
commit
ada4291469
4 changed files with 19 additions and 3 deletions
|
@ -2000,17 +2000,15 @@ void ge_scalarmult(ge_p2 *r, const unsigned char *a, const ge_p3 *A) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ge_double_scalarmult_precomp_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b, const ge_dsmp Bi) {
|
void ge_double_scalarmult_precomp_vartime2(ge_p2 *r, const unsigned char *a, const ge_dsmp Ai, const unsigned char *b, const ge_dsmp Bi) {
|
||||||
signed char aslide[256];
|
signed char aslide[256];
|
||||||
signed char bslide[256];
|
signed char bslide[256];
|
||||||
ge_dsmp Ai; /* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */
|
|
||||||
ge_p1p1 t;
|
ge_p1p1 t;
|
||||||
ge_p3 u;
|
ge_p3 u;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
slide(aslide, a);
|
slide(aslide, a);
|
||||||
slide(bslide, b);
|
slide(bslide, b);
|
||||||
ge_dsm_precomp(Ai, A);
|
|
||||||
|
|
||||||
ge_p2_0(r);
|
ge_p2_0(r);
|
||||||
|
|
||||||
|
@ -2041,6 +2039,13 @@ void ge_double_scalarmult_precomp_vartime(ge_p2 *r, const unsigned char *a, cons
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ge_double_scalarmult_precomp_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b, const ge_dsmp Bi) {
|
||||||
|
ge_dsmp Ai; /* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */
|
||||||
|
|
||||||
|
ge_dsm_precomp(Ai, A);
|
||||||
|
ge_double_scalarmult_precomp_vartime2(r, a, Ai, b, Bi);
|
||||||
|
}
|
||||||
|
|
||||||
void ge_mul8(ge_p1p1 *r, const ge_p2 *t) {
|
void ge_mul8(ge_p1p1 *r, const ge_p2 *t) {
|
||||||
ge_p2 u;
|
ge_p2 u;
|
||||||
ge_p2_dbl(r, t);
|
ge_p2_dbl(r, t);
|
||||||
|
|
|
@ -128,6 +128,7 @@ void sc_reduce(unsigned char *);
|
||||||
|
|
||||||
void ge_scalarmult(ge_p2 *, const unsigned char *, const ge_p3 *);
|
void ge_scalarmult(ge_p2 *, const unsigned char *, const ge_p3 *);
|
||||||
void ge_double_scalarmult_precomp_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *, const ge_dsmp);
|
void ge_double_scalarmult_precomp_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *, const ge_dsmp);
|
||||||
|
void ge_double_scalarmult_precomp_vartime2(ge_p2 *, const unsigned char *, const ge_dsmp, const unsigned char *, const ge_dsmp);
|
||||||
void ge_mul8(ge_p1p1 *, const ge_p2 *);
|
void ge_mul8(ge_p1p1 *, const ge_p2 *);
|
||||||
extern const fe fe_ma2;
|
extern const fe fe_ma2;
|
||||||
extern const fe fe_ma;
|
extern const fe fe_ma;
|
||||||
|
|
|
@ -262,6 +262,15 @@ namespace rct {
|
||||||
ge_tobytes(aAbB.bytes, &rv);
|
ge_tobytes(aAbB.bytes, &rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//addKeys3
|
||||||
|
//aAbB = a*A + b*B where a, b are scalars, A, B are curve points
|
||||||
|
//A and B must be input after applying "precomp"
|
||||||
|
void addKeys3(key &aAbB, const key &a, const ge_dsmp A, const key &b, const ge_dsmp B) {
|
||||||
|
ge_p2 rv;
|
||||||
|
ge_double_scalarmult_precomp_vartime2(&rv, a.bytes, A, b.bytes, B);
|
||||||
|
ge_tobytes(aAbB.bytes, &rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//subtract Keys (subtracts curve points)
|
//subtract Keys (subtracts curve points)
|
||||||
//AB = A - B where A, B are curve points
|
//AB = A - B where A, B are curve points
|
||||||
|
|
|
@ -134,6 +134,7 @@ namespace rct {
|
||||||
//aAbB = a*A + b*B where a, b are scalars, A, B are curve points
|
//aAbB = a*A + b*B where a, b are scalars, A, B are curve points
|
||||||
//B must be input after applying "precomp"
|
//B must be input after applying "precomp"
|
||||||
void addKeys3(key &aAbB, const key &a, const key &A, const key &b, const ge_dsmp B);
|
void addKeys3(key &aAbB, const key &a, const key &A, const key &b, const ge_dsmp B);
|
||||||
|
void addKeys3(key &aAbB, const key &a, const ge_dsmp A, const key &b, const ge_dsmp B);
|
||||||
//AB = A - B where A, B are curve points
|
//AB = A - B where A, B are curve points
|
||||||
void subKeys(key &AB, const key &A, const key &B);
|
void subKeys(key &AB, const key &A, const key &B);
|
||||||
//checks if A, B are equal as curve points
|
//checks if A, B are equal as curve points
|
||||||
|
|
Loading…
Reference in a new issue