diff options
| author | Riccardo Spagni <ric@spagni.net> | 2018-09-21 20:42:41 +0200 |
|---|---|---|
| committer | Riccardo Spagni <ric@spagni.net> | 2018-09-21 20:42:41 +0200 |
| commit | 4a652d6b52c60d169a0ccdc537afa5353c206b7c (patch) | |
| tree | ecbf9038109f3f8d852078deff572d25936dffc8 /src/ringct/rctOps.cpp | |
| parent | 0645dcdbdbdb7497445cae5e4772e5210fe5a1f4 (diff) | |
| parent | 607301bf6dd4531c43d8e2f15c7cd94a92693918 (diff) | |
| download | monzero-core-4a652d6b52c60d169a0ccdc537afa5353c206b7c.tar.gz monzero-core-4a652d6b52c60d169a0ccdc537afa5353c206b7c.tar.xz monzero-core-4a652d6b52c60d169a0ccdc537afa5353c206b7c.zip | |
Merge pull request #4379
607301bf rct: avoid repeated unnecessary conversions when accummulating (moneromooo-monero)
Diffstat (limited to 'src/ringct/rctOps.cpp')
| -rw-r--r-- | src/ringct/rctOps.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/ringct/rctOps.cpp b/src/ringct/rctOps.cpp index 6c3c4500e..41bbf6ca3 100644 --- a/src/ringct/rctOps.cpp +++ b/src/ringct/rctOps.cpp @@ -252,6 +252,25 @@ namespace rct { return k; } + rct::key addKeys(const keyV &A) { + if (A.empty()) + return rct::identity(); + ge_p3 p3, tmp; + CHECK_AND_ASSERT_THROW_MES_L1(ge_frombytes_vartime(&p3, A[0].bytes) == 0, "ge_frombytes_vartime failed at "+boost::lexical_cast<std::string>(__LINE__)); + for (size_t i = 1; i < A.size(); ++i) + { + CHECK_AND_ASSERT_THROW_MES_L1(ge_frombytes_vartime(&tmp, A[i].bytes) == 0, "ge_frombytes_vartime failed at "+boost::lexical_cast<std::string>(__LINE__)); + ge_cached p2; + ge_p3_to_cached(&p2, &tmp); + ge_p1p1 p1; + ge_add(&p1, &p3, &p2); + ge_p1p1_to_p3(&p3, &p1); + } + rct::key res; + ge_p3_tobytes(res.bytes, &p3); + return res; + } + //addKeys1 //aGB = aG + B where a is a scalar, G is the basepoint, and B is a point void addKeys1(key &aGB, const key &a, const key & B) { |
