From d6937e373b32628fff414c7d8a07e4323593c6a0 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Fri, 19 Oct 2018 11:15:31 +0000 Subject: [PATCH] ringct: use dummy bulletproofs when in fake mode, for speed --- src/device/device.hpp | 8 ++++-- src/device/device_default.cpp | 2 +- src/device/device_ledger.cpp | 2 +- src/ringct/rctSigs.cpp | 49 +++++++++++++++++++++++++++++------ 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/device/device.hpp b/src/device/device.hpp index cb9117650..815a0ab93 100644 --- a/src/device/device.hpp +++ b/src/device/device.hpp @@ -85,7 +85,7 @@ namespace hw { public: - device() {} + device(): mode(NONE) {} device(const device &hwdev) {} virtual ~device() {} @@ -115,7 +115,8 @@ namespace hw { virtual bool connect(void) = 0; virtual bool disconnect(void) = 0; - virtual bool set_mode(device_mode mode) = 0; + virtual bool set_mode(device_mode mode) { this->mode = mode; return true; } + virtual device_mode get_mode() const { return mode; } virtual device_type get_type() const = 0; @@ -202,6 +203,9 @@ namespace hw { virtual bool mlsag_sign(const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss) = 0; virtual bool close_tx(void) = 0; + + protected: + device_mode mode; } ; struct reset_mode { diff --git a/src/device/device_default.cpp b/src/device/device_default.cpp index a4f40e041..68f40d91e 100644 --- a/src/device/device_default.cpp +++ b/src/device/device_default.cpp @@ -83,7 +83,7 @@ namespace hw { } bool device_default::set_mode(device_mode mode) { - return true; + return device::set_mode(mode); } /* ======================================================================= */ diff --git a/src/device/device_ledger.cpp b/src/device/device_ledger.cpp index d879ee95a..0a86e6987 100644 --- a/src/device/device_ledger.cpp +++ b/src/device/device_ledger.cpp @@ -396,7 +396,7 @@ namespace hw { CHECK_AND_ASSERT_THROW_MES(false, " device_ledger::set_mode(unsigned int mode): invalid mode: "< batch_amounts(batch_size); for (i = 0; i < batch_size; ++i) batch_amounts[i] = outamounts[i + amounts_proved]; - rv.p.bulletproofs.push_back(proveRangeBulletproof(C, masks, batch_amounts)); - #ifdef DBG - CHECK_AND_ASSERT_THROW_MES(verBulletproof(rv.p.bulletproofs.back()), "verBulletproof failed on newly created proof"); - #endif + if (hwdev.get_mode() == hw::device::TRANSACTION_CREATE_FAKE) + { + // use a fake bulletproof for speed + rv.p.bulletproofs.push_back(make_dummy_bulletproof(batch_amounts.size())); + C = rct::keyV(batch_amounts.size(), I); + masks = rct::keyV(batch_amounts.size(), I); + } + else + { + rv.p.bulletproofs.push_back(proveRangeBulletproof(C, masks, batch_amounts)); + #ifdef DBG + CHECK_AND_ASSERT_THROW_MES(verBulletproof(rv.p.bulletproofs.back()), "verBulletproof failed on newly created proof"); + #endif + } for (i = 0; i < batch_size; ++i) { rv.outPk[i + amounts_proved].mask = rct::scalarmult8(C[i]);