bulletproofs: speed up a few multiplies using existing Hi cache

This commit is contained in:
moneromooo-monero 2018-06-20 16:54:13 +01:00
parent 0b05a0fa74
commit 1569717718
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3
1 changed files with 11 additions and 2 deletions

View File

@ -111,6 +111,15 @@ static void addKeys_acc_p3(ge_p3 *acc_p3, const rct::key &a, const rct::key &poi
ge_p1p1_to_p3(acc_p3, &p1); ge_p1p1_to_p3(acc_p3, &p1);
} }
static rct::key scalarmultKey(const ge_p3 &P, const rct::key &a)
{
ge_p2 R;
ge_scalarmult(&R, a.bytes, &P);
rct::key aP;
ge_tobytes(aP.bytes, &R);
return aP;
}
static rct::key get_exponent(const rct::key &base, size_t idx) static rct::key get_exponent(const rct::key &base, size_t idx)
{ {
static const std::string salt("bulletproof"); static const std::string salt("bulletproof");
@ -578,7 +587,7 @@ Bulletproof bulletproof_PROVE(const rct::key &sv, const rct::key &gamma)
for (size_t i = 0; i < N; ++i) for (size_t i = 0; i < N; ++i)
{ {
Gprime[i] = Gi[i]; Gprime[i] = Gi[i];
Hprime[i] = scalarmultKey(Hi[i], yinvpow); Hprime[i] = scalarmultKey(Hi_p3[i], yinvpow);
sc_mul(yinvpow.bytes, yinvpow.bytes, yinv.bytes); sc_mul(yinvpow.bytes, yinvpow.bytes, yinv.bytes);
aprime[i] = l[i]; aprime[i] = l[i];
bprime[i] = r[i]; bprime[i] = r[i];
@ -828,7 +837,7 @@ Bulletproof bulletproof_PROVE(const rct::keyV &sv, const rct::keyV &gamma)
for (size_t i = 0; i < MN; ++i) for (size_t i = 0; i < MN; ++i)
{ {
Gprime[i] = Gi[i]; Gprime[i] = Gi[i];
Hprime[i] = scalarmultKey(Hi[i], yinvpow); Hprime[i] = scalarmultKey(Hi_p3[i], yinvpow);
sc_mul(yinvpow.bytes, yinvpow.bytes, yinv.bytes); sc_mul(yinvpow.bytes, yinvpow.bytes, yinv.bytes);
aprime[i] = l[i]; aprime[i] = l[i];
bprime[i] = r[i]; bprime[i] = r[i];