aboutsummaryrefslogtreecommitdiff
path: root/src/ringct/rctOps.cpp
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2018-06-24 21:59:49 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2018-09-14 10:18:01 +0000
commit607301bf6dd4531c43d8e2f15c7cd94a92693918 (patch)
tree1c8798824aad22b82b1ab0f37bbdfc108ef1449e /src/ringct/rctOps.cpp
parentMerge pull request #4342 (diff)
downloadmonero-607301bf6dd4531c43d8e2f15c7cd94a92693918.tar.xz
rct: avoid repeated unnecessary conversions when accummulating
Diffstat (limited to 'src/ringct/rctOps.cpp')
-rw-r--r--src/ringct/rctOps.cpp19
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) {