cryptonote_tx_util: make destinations properly shuffled

This commit is contained in:
stoffu 2018-03-31 16:19:14 +09:00
parent bb07d8d7f7
commit eb59f7c563
No known key found for this signature in database
GPG Key ID: 41DAB8343A9EC012

View File

@ -29,6 +29,7 @@
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
#include <unordered_set> #include <unordered_set>
#include <random>
#include "include_base_utils.h" #include "include_base_utils.h"
#include "string_tools.h" #include "string_tools.h"
using namespace epee; using namespace epee;
@ -316,7 +317,7 @@ namespace cryptonote
// "Shuffle" outs // "Shuffle" outs
std::vector<tx_destination_entry> shuffled_dsts(destinations); std::vector<tx_destination_entry> shuffled_dsts(destinations);
std::random_shuffle(shuffled_dsts.begin(), shuffled_dsts.end(), [](unsigned int i) { return crypto::rand<unsigned int>() % i; }); std::shuffle(shuffled_dsts.begin(), shuffled_dsts.end(), std::default_random_engine(crypto::rand<unsigned int>()));
// sort ins by their key image // sort ins by their key image
std::vector<size_t> ins_order(sources.size()); std::vector<size_t> ins_order(sources.size());
@ -363,7 +364,7 @@ namespace cryptonote
uint64_t summary_outs_money = 0; uint64_t summary_outs_money = 0;
//fill outputs //fill outputs
size_t output_index = 0; size_t output_index = 0;
for(const tx_destination_entry& dst_entr: destinations) for(const tx_destination_entry& dst_entr: shuffled_dsts)
{ {
CHECK_AND_ASSERT_MES(dst_entr.amount > 0 || tx.version > 1, false, "Destination with wrong amount: " << dst_entr.amount); CHECK_AND_ASSERT_MES(dst_entr.amount > 0 || tx.version > 1, false, "Destination with wrong amount: " << dst_entr.amount);
crypto::key_derivation derivation; crypto::key_derivation derivation;