Merge pull request #6079 from str4d/fastrandom-backports
Use FastRandomContext for all tests
This commit is contained in:
commit
3213527141
|
@ -110,7 +110,6 @@ BITCOIN_TESTS =\
|
|||
test/skiplist_tests.cpp \
|
||||
test/streams_tests.cpp \
|
||||
test/sync_tests.cpp \
|
||||
test/test_random.h \
|
||||
test/test_util.cpp \
|
||||
test/test_util.h \
|
||||
test/torcontrol_tests.cpp \
|
||||
|
|
|
@ -146,7 +146,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
coins = it->second;
|
||||
if (coins.IsPruned() && insecure_rand() % 2 == 0) {
|
||||
if (coins.IsPruned() && InsecureRandBool() == 0) {
|
||||
// Randomly return false in case of an empty entry.
|
||||
return false;
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ public:
|
|||
if (it->second.flags & CCoinsCacheEntry::DIRTY) {
|
||||
// Same optimization used in CCoinsViewDB is to only write dirty entries.
|
||||
map_[it->first] = it->second.coins;
|
||||
if (it->second.coins.IsPruned() && insecure_rand() % 3 == 0) {
|
||||
if (it->second.coins.IsPruned() && InsecureRandRange(3) == 0) {
|
||||
// Randomly delete empty entries on write.
|
||||
map_.erase(it->first);
|
||||
}
|
||||
|
|
|
@ -11,22 +11,4 @@ void LoadProofParameters();
|
|||
void LoadGlobalWallet();
|
||||
void UnloadGlobalWallet();
|
||||
|
||||
extern uint256 insecure_rand_seed;
|
||||
extern FastRandomContext insecure_rand_ctx;
|
||||
|
||||
static inline void seed_insecure_rand(bool fDeterministic = false)
|
||||
{
|
||||
if (fDeterministic) {
|
||||
insecure_rand_seed = uint256();
|
||||
} else {
|
||||
insecure_rand_seed = GetRandHash();
|
||||
}
|
||||
insecure_rand_ctx = FastRandomContext(insecure_rand_seed);
|
||||
}
|
||||
|
||||
static inline uint32_t insecure_rand(void)
|
||||
{
|
||||
return insecure_rand_ctx.rand32();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -74,6 +74,26 @@ void FastRandomContext::RandomSeed()
|
|||
requires_seed = false;
|
||||
}
|
||||
|
||||
uint256 FastRandomContext::rand256()
|
||||
{
|
||||
if (bytebuf_size < 32) {
|
||||
FillByteBuffer();
|
||||
}
|
||||
uint256 ret;
|
||||
memcpy(ret.begin(), bytebuf + 64 - bytebuf_size, 32);
|
||||
bytebuf_size -= 32;
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::vector<unsigned char> FastRandomContext::randbytes(size_t len)
|
||||
{
|
||||
std::vector<unsigned char> ret(len);
|
||||
if (len > 0) {
|
||||
rng.Output(&ret[0], len);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
FastRandomContext::FastRandomContext(const uint256& seed) : requires_seed(false), bytebuf_size(0), bitbuf_size(0)
|
||||
{
|
||||
rng.SetKey(seed.begin(), 32);
|
||||
|
|
|
@ -155,9 +155,15 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
/** Generate random bytes. */
|
||||
std::vector<unsigned char> randbytes(size_t len);
|
||||
|
||||
/** Generate a random 32-bit integer. */
|
||||
uint32_t rand32() { return randbits(32); }
|
||||
|
||||
/** generate a random uint256. */
|
||||
uint256 rand256();
|
||||
|
||||
/** Generate a random boolean. */
|
||||
bool randbool() { return randbits(1); }
|
||||
};
|
||||
|
|
|
@ -120,7 +120,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
|
|||
CTransaction RandomOrphan()
|
||||
{
|
||||
std::map<uint256, COrphanTx>::iterator it;
|
||||
it = mapOrphanTransactions.lower_bound(GetRandHash());
|
||||
it = mapOrphanTransactions.lower_bound(InsecureRand256());
|
||||
if (it == mapOrphanTransactions.end())
|
||||
it = mapOrphanTransactions.begin();
|
||||
return it->second.tx;
|
||||
|
@ -141,7 +141,7 @@ BOOST_DATA_TEST_CASE(DoS_mapOrphans, boost::unit_test::data::xrange(static_cast<
|
|||
CMutableTransaction tx;
|
||||
tx.vin.resize(1);
|
||||
tx.vin[0].prevout.n = 0;
|
||||
tx.vin[0].prevout.hash = GetRandHash();
|
||||
tx.vin[0].prevout.hash = InsecureRand256();
|
||||
tx.vin[0].scriptSig << OP_1;
|
||||
tx.vout.resize(1);
|
||||
tx.vout[0].nValue = 1*CENT;
|
||||
|
|
|
@ -460,7 +460,7 @@ BOOST_AUTO_TEST_CASE(merkle_block_4_test_update_none)
|
|||
|
||||
static std::vector<unsigned char> RandomData()
|
||||
{
|
||||
uint256 r = GetRandHash();
|
||||
uint256 r = InsecureRand256();
|
||||
return std::vector<unsigned char>(r.begin(), r.end());
|
||||
}
|
||||
|
||||
|
|
|
@ -161,7 +161,7 @@ void Correct_Queue_range(std::vector<size_t> range)
|
|||
FakeCheckCheckCompletion::n_calls = 0;
|
||||
CCheckQueueControl<FakeCheckCheckCompletion> control(small_queue.get());
|
||||
while (total) {
|
||||
vChecks.resize(std::min(total, (size_t) GetRand(10)));
|
||||
vChecks.resize(std::min(total, (size_t) InsecureRandRange(10)));
|
||||
total -= vChecks.size();
|
||||
control.Add(vChecks);
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_Correct_Random)
|
|||
{
|
||||
std::vector<size_t> range;
|
||||
range.reserve(100000/1000);
|
||||
for (size_t i = 2; i < 100000; i += std::max((size_t)1, (size_t)GetRand(std::min((size_t)1000, ((size_t)100000) - i))))
|
||||
for (size_t i = 2; i < 100000; i += std::max((size_t)1, (size_t)InsecureRandRange(std::min((size_t)1000, ((size_t)100000) - i))))
|
||||
range.push_back(i);
|
||||
Correct_Queue_range(range);
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_Catches_Failure)
|
|||
CCheckQueueControl<FailingCheck> control(fail_queue.get());
|
||||
size_t remaining = i;
|
||||
while (remaining) {
|
||||
size_t r = GetRand(10);
|
||||
size_t r = InsecureRandRange(10);
|
||||
|
||||
std::vector<FailingCheck> vChecks;
|
||||
vChecks.reserve(r);
|
||||
|
@ -287,7 +287,7 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_UniqueCheck)
|
|||
{
|
||||
CCheckQueueControl<UniqueCheck> control(queue.get());
|
||||
while (total) {
|
||||
size_t r = GetRand(10);
|
||||
size_t r = InsecureRandRange(10);
|
||||
std::vector<UniqueCheck> vChecks;
|
||||
for (size_t k = 0; k < r && total; k++)
|
||||
vChecks.emplace_back(--total);
|
||||
|
@ -321,7 +321,7 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_Memory)
|
|||
{
|
||||
CCheckQueueControl<MemoryCheck> control(queue.get());
|
||||
while (total) {
|
||||
size_t r = GetRand(10);
|
||||
size_t r = InsecureRandRange(10);
|
||||
std::vector<MemoryCheck> vChecks;
|
||||
for (size_t k = 0; k < r && total; k++) {
|
||||
total--;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
// file COPYING or https://www.opensource.org/licenses/mit-license.php .
|
||||
|
||||
#include "coins.h"
|
||||
#include "test_random.h"
|
||||
#include "script/standard.h"
|
||||
#include "uint256.h"
|
||||
#include "util/strencodings.h"
|
||||
|
@ -144,7 +143,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
coins = it->second;
|
||||
if (coins.IsPruned() && insecure_rand() % 2 == 0) {
|
||||
if (coins.IsPruned() && InsecureRandBool() == 0) {
|
||||
// Randomly return false in case of an empty entry.
|
||||
return false;
|
||||
}
|
||||
|
@ -210,7 +209,7 @@ public:
|
|||
if (it->second.flags & CCoinsCacheEntry::DIRTY) {
|
||||
// Same optimization used in CCoinsViewDB is to only write dirty entries.
|
||||
map_[it->first] = it->second.coins;
|
||||
if (it->second.coins.IsPruned() && insecure_rand() % 3 == 0) {
|
||||
if (it->second.coins.IsPruned() && InsecureRandRange(3) == 0) {
|
||||
// Randomly delete empty entries on write.
|
||||
map_.erase(it->first);
|
||||
}
|
||||
|
@ -276,12 +275,12 @@ public:
|
|||
{
|
||||
CMutableTransaction mutableTx;
|
||||
|
||||
sproutNullifier = GetRandHash();
|
||||
sproutNullifier = InsecureRand256();
|
||||
JSDescription jsd;
|
||||
jsd.nullifiers[0] = sproutNullifier;
|
||||
mutableTx.vJoinSplit.emplace_back(jsd);
|
||||
|
||||
saplingNullifier = GetRandHash();
|
||||
saplingNullifier = InsecureRand256();
|
||||
SpendDescription sd;
|
||||
sd.nullifier = saplingNullifier;
|
||||
mutableTx.vShieldedSpend.push_back(sd);
|
||||
|
@ -313,8 +312,8 @@ uint256 appendRandomSproutCommitment(SproutMerkleTree &tree)
|
|||
}
|
||||
|
||||
template<typename Tree> void AppendRandomLeaf(Tree &tree);
|
||||
template<> void AppendRandomLeaf(SproutMerkleTree &tree) { tree.append(GetRandHash()); }
|
||||
template<> void AppendRandomLeaf(SaplingMerkleTree &tree) { tree.append(GetRandHash()); }
|
||||
template<> void AppendRandomLeaf(SproutMerkleTree &tree) { tree.append(InsecureRand256()); }
|
||||
template<> void AppendRandomLeaf(SaplingMerkleTree &tree) { tree.append(InsecureRand256()); }
|
||||
template<> void AppendRandomLeaf(OrchardMerkleFrontier &tree) {
|
||||
// OrchardMerkleFrontier only has APIs to append entire bundles, but
|
||||
// fortunately the tests only require that the tree root change.
|
||||
|
@ -463,25 +462,25 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test)
|
|||
std::vector<uint256> txids;
|
||||
txids.resize(NUM_SIMULATION_ITERATIONS / 8);
|
||||
for (unsigned int i = 0; i < txids.size(); i++) {
|
||||
txids[i] = GetRandHash();
|
||||
txids[i] = InsecureRand256();
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < NUM_SIMULATION_ITERATIONS; i++) {
|
||||
// Do a random modification.
|
||||
{
|
||||
uint256 txid = txids[insecure_rand() % txids.size()]; // txid we're going to modify in this iteration.
|
||||
uint256 txid = txids[InsecureRandRange(txids.size())]; // txid we're going to modify in this iteration.
|
||||
CCoins& coins = result[txid];
|
||||
CCoinsModifier entry = stack.back()->ModifyCoins(txid);
|
||||
BOOST_CHECK(coins == *entry);
|
||||
if (insecure_rand() % 5 == 0 || coins.IsPruned()) {
|
||||
if (InsecureRandRange(5) == 0 || coins.IsPruned()) {
|
||||
if (coins.IsPruned()) {
|
||||
added_an_entry = true;
|
||||
} else {
|
||||
updated_an_entry = true;
|
||||
}
|
||||
coins.nVersion = insecure_rand();
|
||||
coins.nVersion = InsecureRand32();
|
||||
coins.vout.resize(1);
|
||||
coins.vout[0].nValue = insecure_rand();
|
||||
coins.vout[0].nValue = InsecureRand32();
|
||||
*entry = coins;
|
||||
} else {
|
||||
coins.Clear();
|
||||
|
@ -491,7 +490,7 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test)
|
|||
}
|
||||
|
||||
// Once every 1000 iterations and at the end, verify the full cache.
|
||||
if (insecure_rand() % 1000 == 1 || i == NUM_SIMULATION_ITERATIONS - 1) {
|
||||
if (InsecureRandRange(1000) == 1 || i == NUM_SIMULATION_ITERATIONS - 1) {
|
||||
for (std::map<uint256, CCoins>::iterator it = result.begin(); it != result.end(); it++) {
|
||||
const CCoins* coins = stack.back()->AccessCoins(it->first);
|
||||
if (coins) {
|
||||
|
@ -507,14 +506,14 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test)
|
|||
}
|
||||
}
|
||||
|
||||
if (insecure_rand() % 100 == 0) {
|
||||
if (InsecureRandRange(100) == 0) {
|
||||
// Every 100 iterations, change the cache stack.
|
||||
if (stack.size() > 0 && insecure_rand() % 2 == 0) {
|
||||
if (stack.size() > 0 && InsecureRandBool() == 0) {
|
||||
stack.back()->Flush();
|
||||
delete stack.back();
|
||||
stack.pop_back();
|
||||
}
|
||||
if (stack.size() == 0 || (stack.size() < 4 && insecure_rand() % 2)) {
|
||||
if (stack.size() == 0 || (stack.size() < 4 && InsecureRandBool())) {
|
||||
CCoinsView* tip = &base;
|
||||
if (stack.size() > 0) {
|
||||
tip = stack.back();
|
||||
|
@ -612,10 +611,10 @@ BOOST_AUTO_TEST_CASE(updatecoins_simulation_test)
|
|||
tx.vin.resize(1);
|
||||
tx.vout.resize(1);
|
||||
tx.vout[0].nValue = i; //Keep txs unique
|
||||
unsigned int height = insecure_rand();
|
||||
unsigned int height = InsecureRand32();
|
||||
|
||||
// 1/10 times create a coinbase
|
||||
if (insecure_rand() % 10 == 0 || coinbaseids.size() < 10) {
|
||||
if (InsecureRandRange(10) == 0 || coinbaseids.size() < 10) {
|
||||
coinbaseids[tx.GetHash()] = tx.vout[0].nValue;
|
||||
assert(CTransaction(tx).IsCoinBase());
|
||||
}
|
||||
|
@ -623,7 +622,7 @@ BOOST_AUTO_TEST_CASE(updatecoins_simulation_test)
|
|||
else {
|
||||
uint256 prevouthash;
|
||||
// equally likely to spend coinbase or non coinbase
|
||||
std::set<uint256>::iterator txIt = alltxids.lower_bound(GetRandHash());
|
||||
std::set<uint256>::iterator txIt = alltxids.lower_bound(InsecureRand256());
|
||||
if (txIt == alltxids.end()) {
|
||||
txIt = alltxids.begin();
|
||||
}
|
||||
|
@ -653,7 +652,7 @@ BOOST_AUTO_TEST_CASE(updatecoins_simulation_test)
|
|||
}
|
||||
|
||||
// Once every 1000 iterations and at the end, verify the full cache.
|
||||
if (insecure_rand() % 1000 == 1 || i == NUM_SIMULATION_ITERATIONS - 1) {
|
||||
if (InsecureRandRange(1000) == 1 || i == NUM_SIMULATION_ITERATIONS - 1) {
|
||||
for (std::map<uint256, CCoins>::iterator it = result.begin(); it != result.end(); it++) {
|
||||
const CCoins* coins = stack.back()->AccessCoins(it->first);
|
||||
if (coins) {
|
||||
|
@ -664,14 +663,14 @@ BOOST_AUTO_TEST_CASE(updatecoins_simulation_test)
|
|||
}
|
||||
}
|
||||
|
||||
if (insecure_rand() % 100 == 0) {
|
||||
if (InsecureRandRange(100) == 0) {
|
||||
// Every 100 iterations, change the cache stack.
|
||||
if (stack.size() > 0 && insecure_rand() % 2 == 0) {
|
||||
if (stack.size() > 0 && InsecureRandBool() == 0) {
|
||||
stack.back()->Flush();
|
||||
delete stack.back();
|
||||
stack.pop_back();
|
||||
}
|
||||
if (stack.size() == 0 || (stack.size() < 4 && insecure_rand() % 2)) {
|
||||
if (stack.size() == 0 || (stack.size() < 4 && InsecureRandBool())) {
|
||||
CCoinsView* tip = &base;
|
||||
if (stack.size() > 0) {
|
||||
tip = stack.back();
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include "crypto/sha512.h"
|
||||
#include "crypto/hmac_sha256.h"
|
||||
#include "crypto/hmac_sha512.h"
|
||||
#include "test_random.h"
|
||||
#include "util/strencodings.h"
|
||||
#include "test/test_bitcoin.h"
|
||||
|
||||
|
@ -37,7 +36,7 @@ void TestVector(const Hasher &h, const In &in, const Out &out) {
|
|||
Hasher hasher(h);
|
||||
size_t pos = 0;
|
||||
while (pos < in.size()) {
|
||||
size_t len = insecure_rand() % ((in.size() - pos + 1) / 2 + 1);
|
||||
size_t len = InsecureRandRange((in.size() - pos + 1) / 2 + 1);
|
||||
hasher.Write((unsigned char*)&in[pos], len);
|
||||
pos += len;
|
||||
if (pos > 0 && pos + 2 * out.size() > in.size() && pos < in.size()) {
|
||||
|
|
|
@ -23,18 +23,18 @@
|
|||
* using BOOST_CHECK_CLOSE to fail.
|
||||
*
|
||||
*/
|
||||
FastRandomContext insecure_rand(true);
|
||||
FastRandomContext local_rand_ctx(true);
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(cuckoocache_tests);
|
||||
|
||||
|
||||
/** insecure_GetRandHash fills in a uint256 from insecure_rand
|
||||
/** insecure_GetRandHash fills in a uint256 from local_rand_ctx
|
||||
*/
|
||||
void insecure_GetRandHash(uint256& t)
|
||||
{
|
||||
uint32_t* ptr = (uint32_t*)t.begin();
|
||||
for (uint8_t j = 0; j < 8; ++j)
|
||||
*(ptr++) = insecure_rand.rand32();
|
||||
*(ptr++) = local_rand_ctx.rand32();
|
||||
}
|
||||
|
||||
|
||||
|
@ -45,7 +45,7 @@ void insecure_GetRandHash(uint256& t)
|
|||
*/
|
||||
BOOST_AUTO_TEST_CASE(test_cuckoocache_no_fakes)
|
||||
{
|
||||
insecure_rand = FastRandomContext(true);
|
||||
local_rand_ctx = FastRandomContext(true);
|
||||
CuckooCache::cache<uint256, SignatureCacheHasher> cc{};
|
||||
size_t megabytes = 4;
|
||||
cc.setup_bytes(megabytes << 20);
|
||||
|
@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(test_cuckoocache_no_fakes)
|
|||
template <typename Cache>
|
||||
double test_cache(size_t megabytes, double load)
|
||||
{
|
||||
insecure_rand = FastRandomContext(true);
|
||||
local_rand_ctx = FastRandomContext(true);
|
||||
std::vector<uint256> hashes;
|
||||
Cache set{};
|
||||
size_t bytes = megabytes * (1 << 20);
|
||||
|
@ -76,7 +76,7 @@ double test_cache(size_t megabytes, double load)
|
|||
for (uint32_t i = 0; i < n_insert; ++i) {
|
||||
uint32_t* ptr = (uint32_t*)hashes[i].begin();
|
||||
for (uint8_t j = 0; j < 8; ++j)
|
||||
*(ptr++) = insecure_rand.rand32();
|
||||
*(ptr++) = local_rand_ctx.rand32();
|
||||
}
|
||||
/** We make a copy of the hashes because future optimizations of the
|
||||
* cuckoocache may overwrite the inserted element, so the test is
|
||||
|
@ -137,7 +137,7 @@ template <typename Cache>
|
|||
void test_cache_erase(size_t megabytes)
|
||||
{
|
||||
double load = 1;
|
||||
insecure_rand = FastRandomContext(true);
|
||||
local_rand_ctx = FastRandomContext(true);
|
||||
std::vector<uint256> hashes;
|
||||
Cache set{};
|
||||
size_t bytes = megabytes * (1 << 20);
|
||||
|
@ -147,7 +147,7 @@ void test_cache_erase(size_t megabytes)
|
|||
for (uint32_t i = 0; i < n_insert; ++i) {
|
||||
uint32_t* ptr = (uint32_t*)hashes[i].begin();
|
||||
for (uint8_t j = 0; j < 8; ++j)
|
||||
*(ptr++) = insecure_rand.rand32();
|
||||
*(ptr++) = local_rand_ctx.rand32();
|
||||
}
|
||||
/** We make a copy of the hashes because future optimizations of the
|
||||
* cuckoocache may overwrite the inserted element, so the test is
|
||||
|
@ -200,7 +200,7 @@ template <typename Cache>
|
|||
void test_cache_erase_parallel(size_t megabytes)
|
||||
{
|
||||
double load = 1;
|
||||
insecure_rand = FastRandomContext(true);
|
||||
local_rand_ctx = FastRandomContext(true);
|
||||
std::vector<uint256> hashes;
|
||||
Cache set{};
|
||||
size_t bytes = megabytes * (1 << 20);
|
||||
|
@ -210,7 +210,7 @@ void test_cache_erase_parallel(size_t megabytes)
|
|||
for (uint32_t i = 0; i < n_insert; ++i) {
|
||||
uint32_t* ptr = (uint32_t*)hashes[i].begin();
|
||||
for (uint8_t j = 0; j < 8; ++j)
|
||||
*(ptr++) = insecure_rand.rand32();
|
||||
*(ptr++) = local_rand_ctx.rand32();
|
||||
}
|
||||
/** We make a copy of the hashes because future optimizations of the
|
||||
* cuckoocache may overwrite the inserted element, so the test is
|
||||
|
@ -302,7 +302,7 @@ void test_cache_generations()
|
|||
// iterations with non-deterministic values, so it isn't "overfit" to the
|
||||
// specific entropy in FastRandomContext(true) and implementation of the
|
||||
// cache.
|
||||
insecure_rand = FastRandomContext(true);
|
||||
local_rand_ctx = FastRandomContext(true);
|
||||
|
||||
// block_activity models a chunk of network activity. n_insert elements are
|
||||
// adde to the cache. The first and last n/4 are stored for removal later
|
||||
|
@ -319,7 +319,7 @@ void test_cache_generations()
|
|||
for (uint32_t i = 0; i < n_insert; ++i) {
|
||||
uint32_t* ptr = (uint32_t*)inserts[i].begin();
|
||||
for (uint8_t j = 0; j < 8; ++j)
|
||||
*(ptr++) = insecure_rand.rand32();
|
||||
*(ptr++) = local_rand_ctx.rand32();
|
||||
}
|
||||
for (uint32_t i = 0; i < n_insert / 4; ++i)
|
||||
reads.push_back(inserts[i]);
|
||||
|
|
|
@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper)
|
|||
path ph = temp_directory_path() / unique_path();
|
||||
CDBWrapper dbw(ph, (1 << 20), true, false);
|
||||
char key = 'k';
|
||||
uint256 in = GetRandHash();
|
||||
uint256 in = InsecureRand256();
|
||||
uint256 res;
|
||||
|
||||
BOOST_CHECK(dbw.Write(key, in));
|
||||
|
@ -51,11 +51,11 @@ BOOST_AUTO_TEST_CASE(dbwrapper_batch)
|
|||
CDBWrapper dbw(ph, (1 << 20), true, false);
|
||||
|
||||
char key = 'i';
|
||||
uint256 in = GetRandHash();
|
||||
uint256 in = InsecureRand256();
|
||||
char key2 = 'j';
|
||||
uint256 in2 = GetRandHash();
|
||||
uint256 in2 = InsecureRand256();
|
||||
char key3 = 'k';
|
||||
uint256 in3 = GetRandHash();
|
||||
uint256 in3 = InsecureRand256();
|
||||
|
||||
uint256 res;
|
||||
CDBBatch batch(dbw);
|
||||
|
@ -87,10 +87,10 @@ BOOST_AUTO_TEST_CASE(dbwrapper_iterator)
|
|||
|
||||
// The two keys are intentionally chosen for ordering
|
||||
char key = 'j';
|
||||
uint256 in = GetRandHash();
|
||||
uint256 in = InsecureRand256();
|
||||
BOOST_CHECK(dbw.Write(key, in));
|
||||
char key2 = 'k';
|
||||
uint256 in2 = GetRandHash();
|
||||
uint256 in2 = InsecureRand256();
|
||||
BOOST_CHECK(dbw.Write(key2, in2));
|
||||
|
||||
boost::scoped_ptr<CDBIterator> it(const_cast<CDBWrapper*>(&dbw)->NewIterator());
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
#include "consensus/merkle.h"
|
||||
#include "test/test_bitcoin.h"
|
||||
#include "test_random.h"
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
|
@ -68,7 +67,7 @@ BOOST_AUTO_TEST_CASE(merkle_test)
|
|||
{
|
||||
for (int i = 0; i < 32; i++) {
|
||||
// Try 32 block sizes: all sizes from 0 to 16 inclusive, and then 15 random sizes.
|
||||
int ntx = (i <= 16) ? i : 17 + (insecure_rand() % 4000);
|
||||
int ntx = (i <= 16) ? i : 17 + (InsecureRandRange(4000));
|
||||
// Try up to 3 mutations.
|
||||
for (int mutate = 0; mutate <= 3; mutate++) {
|
||||
int duplicate1 = mutate >= 1 ? 1 << ctz(ntx) : 0; // The last how many transactions to duplicate first.
|
||||
|
@ -121,7 +120,7 @@ BOOST_AUTO_TEST_CASE(merkle_test)
|
|||
// If ntx <= 16, try all branches. Otherise, try 16 random ones.
|
||||
int mtx = loop;
|
||||
if (ntx > 16) {
|
||||
mtx = insecure_rand() % ntx;
|
||||
mtx = InsecureRandRange(ntx);
|
||||
}
|
||||
std::vector<uint256> newBranch = BlockMerkleBranch(block, mtx);
|
||||
std::vector<uint256> oldBranch = BlockGetMerkleBranch(block, merkleTree, mtx);
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "uint256.h"
|
||||
#include "arith_uint256.h"
|
||||
#include "version.h"
|
||||
#include "test_random.h"
|
||||
#include "test/test_bitcoin.h"
|
||||
|
||||
#include <vector>
|
||||
|
@ -25,8 +24,8 @@ class CPartialMerkleTreeTester : public CPartialMerkleTree
|
|||
public:
|
||||
// flip one bit in one of the hashes - this should break the authentication
|
||||
void Damage() {
|
||||
unsigned int n = insecure_rand() % vHash.size();
|
||||
int bit = insecure_rand() % 256;
|
||||
unsigned int n = InsecureRandRange(vHash.size());
|
||||
int bit = InsecureRandBits(8);
|
||||
*(vHash[n].begin() + (bit>>3)) ^= 1<<(bit&7);
|
||||
}
|
||||
};
|
||||
|
@ -35,7 +34,7 @@ BOOST_FIXTURE_TEST_SUITE(pmt_tests, BasicTestingSetup)
|
|||
|
||||
BOOST_AUTO_TEST_CASE(pmt_test1)
|
||||
{
|
||||
seed_insecure_rand(false);
|
||||
SeedInsecureRand(false);
|
||||
static const unsigned int nTxCounts[] = {1, 4, 7, 17, 56, 100, 127, 256, 312, 513, 1000, 4095};
|
||||
|
||||
for (int n = 0; n < 12; n++) {
|
||||
|
@ -66,7 +65,7 @@ BOOST_AUTO_TEST_CASE(pmt_test1)
|
|||
std::vector<bool> vMatch(nTx, false);
|
||||
std::vector<uint256> vMatchTxid1;
|
||||
for (unsigned int j=0; j<nTx; j++) {
|
||||
bool fInclude = (insecure_rand() & ((1 << (att/2)) - 1)) == 0;
|
||||
bool fInclude = InsecureRandBits(att / 2) == 0;
|
||||
vMatch[j] = fInclude;
|
||||
if (fInclude)
|
||||
vMatchTxid1.push_back(vTxid[j]);
|
||||
|
|
|
@ -144,9 +144,9 @@ void GetBlockProofEquivalentTimeImpl(const Consensus::Params& params) {
|
|||
}
|
||||
|
||||
for (int j = 0; j < 1000; j++) {
|
||||
CBlockIndex *p1 = &blocks[GetRand(10000)];
|
||||
CBlockIndex *p2 = &blocks[GetRand(10000)];
|
||||
CBlockIndex *p3 = &blocks[GetRand(10000)];
|
||||
CBlockIndex *p1 = &blocks[InsecureRandRange(10000)];
|
||||
CBlockIndex *p2 = &blocks[InsecureRandRange(10000)];
|
||||
CBlockIndex *p3 = &blocks[InsecureRandRange(10000)];
|
||||
|
||||
int64_t tdiff = GetBlockProofEquivalentTime(*p1, *p2, *p3, params);
|
||||
BOOST_CHECK_EQUAL(tdiff, p1->GetBlockTime() - p2->GetBlockTime());
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#include <vector>
|
||||
#include "prevector.h"
|
||||
#include "test_random.h"
|
||||
|
||||
#include "reverse_iterator.h"
|
||||
#include "serialize.h"
|
||||
|
@ -177,7 +176,7 @@ public:
|
|||
}
|
||||
|
||||
prevector_tester() {
|
||||
seed_insecure_rand();
|
||||
SeedInsecureRand();
|
||||
rand_seed = insecure_rand_seed;
|
||||
rand_cache = insecure_rand_ctx;
|
||||
}
|
||||
|
@ -188,61 +187,59 @@ BOOST_AUTO_TEST_CASE(PrevectorTestInt)
|
|||
for (int j = 0; j < 64; j++) {
|
||||
prevector_tester<8, int> test;
|
||||
for (int i = 0; i < 2048; i++) {
|
||||
int r = insecure_rand();
|
||||
if ((r % 4) == 0) {
|
||||
test.insert(insecure_rand() % (test.size() + 1), insecure_rand());
|
||||
if (InsecureRandBits(2) == 0) {
|
||||
test.insert(InsecureRandRange(test.size() + 1), InsecureRand32());
|
||||
}
|
||||
if (test.size() > 0 && ((r >> 2) % 4) == 1) {
|
||||
test.erase(insecure_rand() % test.size());
|
||||
if (test.size() > 0 && InsecureRandBits(2) == 1) {
|
||||
test.erase(InsecureRandRange(test.size()));
|
||||
}
|
||||
if (((r >> 4) % 8) == 2) {
|
||||
int new_size = std::max<int>(0, std::min<int>(30, test.size() + (insecure_rand() % 5) - 2));
|
||||
if (InsecureRandBits(3) == 2) {
|
||||
int new_size = std::max<int>(0, std::min<int>(30, test.size() + (InsecureRandRange(5)) - 2));
|
||||
test.resize(new_size);
|
||||
}
|
||||
if (((r >> 7) % 8) == 3) {
|
||||
test.insert(insecure_rand() % (test.size() + 1), 1 + (insecure_rand() % 2), insecure_rand());
|
||||
if (InsecureRandBits(3) == 3) {
|
||||
test.insert(InsecureRandRange(test.size() + 1), 1 + InsecureRandBool(), InsecureRand32());
|
||||
}
|
||||
if (((r >> 10) % 8) == 4) {
|
||||
int del = std::min<int>(test.size(), 1 + (insecure_rand() % 2));
|
||||
int beg = insecure_rand() % (test.size() + 1 - del);
|
||||
if (InsecureRandBits(3) == 4) {
|
||||
int del = std::min<int>(test.size(), 1 + (InsecureRandBool()));
|
||||
int beg = InsecureRandRange(test.size() + 1 - del);
|
||||
test.erase(beg, beg + del);
|
||||
}
|
||||
if (((r >> 13) % 16) == 5) {
|
||||
test.push_back(insecure_rand());
|
||||
if (InsecureRandBits(4) == 5) {
|
||||
test.push_back(InsecureRand32());
|
||||
}
|
||||
if (test.size() > 0 && ((r >> 17) % 16) == 6) {
|
||||
if (test.size() > 0 && InsecureRandBits(4) == 6) {
|
||||
test.pop_back();
|
||||
}
|
||||
if (((r >> 21) % 32) == 7) {
|
||||
if (InsecureRandBits(5) == 7) {
|
||||
int values[4];
|
||||
int num = 1 + (insecure_rand() % 4);
|
||||
int num = 1 + (InsecureRandBits(2));
|
||||
for (int i = 0; i < num; i++) {
|
||||
values[i] = insecure_rand();
|
||||
values[i] = InsecureRand32();
|
||||
}
|
||||
test.insert_range(insecure_rand() % (test.size() + 1), values, values + num);
|
||||
test.insert_range(InsecureRandRange(test.size() + 1), values, values + num);
|
||||
}
|
||||
if (((r >> 26) % 32) == 8) {
|
||||
int del = std::min<int>(test.size(), 1 + (insecure_rand() % 4));
|
||||
int beg = insecure_rand() % (test.size() + 1 - del);
|
||||
if (InsecureRandBits(5) == 8) {
|
||||
int del = std::min<int>(test.size(), 1 + (InsecureRandBits(2)));
|
||||
int beg = InsecureRandRange(test.size() + 1 - del);
|
||||
test.erase(beg, beg + del);
|
||||
}
|
||||
r = insecure_rand();
|
||||
if (r % 32 == 9) {
|
||||
test.reserve(insecure_rand() % 32);
|
||||
if (InsecureRandBits(5) == 9) {
|
||||
test.reserve(InsecureRandBits(5));
|
||||
}
|
||||
if ((r >> 5) % 64 == 10) {
|
||||
if (InsecureRandBits(6) == 10) {
|
||||
test.shrink_to_fit();
|
||||
}
|
||||
if (test.size() > 0) {
|
||||
test.update(insecure_rand() % test.size(), insecure_rand());
|
||||
test.update(InsecureRandRange(test.size()), InsecureRand32());
|
||||
}
|
||||
if (((r >> 11) % 1024) == 11) {
|
||||
if (InsecureRandBits(10) == 11) {
|
||||
test.clear();
|
||||
}
|
||||
if (((r >> 21) % 512) == 12) {
|
||||
test.assign(insecure_rand() % 32, insecure_rand());
|
||||
if (InsecureRandBits(9) == 12) {
|
||||
test.assign(InsecureRandBits(5), InsecureRand32());
|
||||
}
|
||||
if (((r >> 15) % 64) == 3) {
|
||||
if (InsecureRandBits(3) == 3) {
|
||||
test.swap();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,14 +21,21 @@ BOOST_AUTO_TEST_CASE(fastrandom_tests)
|
|||
BOOST_CHECK_EQUAL(ctx1.rand32(), ctx2.rand32());
|
||||
BOOST_CHECK_EQUAL(ctx1.rand64(), ctx2.rand64());
|
||||
BOOST_CHECK_EQUAL(ctx1.randbits(3), ctx2.randbits(3));
|
||||
BOOST_CHECK(ctx1.randbytes(17) == ctx2.randbytes(17));
|
||||
BOOST_CHECK(ctx1.rand256() == ctx2.rand256());
|
||||
BOOST_CHECK_EQUAL(ctx1.randbits(7), ctx2.randbits(7));
|
||||
BOOST_CHECK(ctx1.randbytes(128) == ctx2.randbytes(128));
|
||||
BOOST_CHECK_EQUAL(ctx1.rand32(), ctx2.rand32());
|
||||
BOOST_CHECK_EQUAL(ctx1.randbits(3), ctx2.randbits(3));
|
||||
BOOST_CHECK(ctx1.rand256() == ctx2.rand256());
|
||||
BOOST_CHECK(ctx1.randbytes(50) == ctx2.randbytes(50));
|
||||
|
||||
// Check that a nondeterministic ones are not
|
||||
FastRandomContext ctx3;
|
||||
FastRandomContext ctx4;
|
||||
BOOST_CHECK(ctx3.rand64() != ctx4.rand64()); // extremely unlikely to be equal
|
||||
BOOST_CHECK(ctx3.rand256() != ctx4.rand256());
|
||||
BOOST_CHECK(ctx3.randbytes(7) != ctx4.randbytes(7));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(fastrandom_randbits)
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include "consensus/validation.h"
|
||||
#include "test/data/sighash.json.h"
|
||||
#include "main.h"
|
||||
#include "test_random.h"
|
||||
#include "script/interpreter.h"
|
||||
#include "script/script.h"
|
||||
#include "serialize.h"
|
||||
|
@ -91,9 +90,9 @@ uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, un
|
|||
void static RandomScript(CScript &script) {
|
||||
static const opcodetype oplist[] = {OP_FALSE, OP_1, OP_2, OP_3, OP_CHECKSIG, OP_IF, OP_VERIF, OP_RETURN};
|
||||
script = CScript();
|
||||
int ops = (insecure_rand() % 10);
|
||||
int ops = (InsecureRandRange(10));
|
||||
for (int i=0; i<ops; i++)
|
||||
script << oplist[insecure_rand() % (sizeof(oplist)/sizeof(oplist[0]))];
|
||||
script << oplist[InsecureRandRange(sizeof(oplist)/sizeof(oplist[0]))];
|
||||
}
|
||||
|
||||
// Overwinter tx version numbers are selected randomly from current version range.
|
||||
|
@ -109,51 +108,51 @@ std::uniform_int_distribution<int> sapling_version_dist(
|
|||
CTransaction::SAPLING_MAX_CURRENT_VERSION);
|
||||
|
||||
void static RandomTransaction(CMutableTransaction &tx, bool fSingle, uint32_t consensusBranchId) {
|
||||
tx.fOverwintered = insecure_rand() % 2;
|
||||
tx.fOverwintered = InsecureRandBool();
|
||||
if (tx.fOverwintered) {
|
||||
if (insecure_rand() % 2) {
|
||||
if (InsecureRandBool()) {
|
||||
tx.nVersionGroupId = SAPLING_VERSION_GROUP_ID;
|
||||
tx.nVersion = sapling_version_dist(rng);
|
||||
} else {
|
||||
tx.nVersionGroupId = OVERWINTER_VERSION_GROUP_ID;
|
||||
tx.nVersion = overwinter_version_dist(rng);
|
||||
}
|
||||
tx.nExpiryHeight = (insecure_rand() % 2) ? insecure_rand() % TX_EXPIRY_HEIGHT_THRESHOLD : 0;
|
||||
tx.nExpiryHeight = (InsecureRandBool()) ? InsecureRandRange(TX_EXPIRY_HEIGHT_THRESHOLD) : 0;
|
||||
} else {
|
||||
tx.nVersion = insecure_rand() & 0x7FFFFFFF;
|
||||
tx.nVersion = InsecureRandBits(31);
|
||||
}
|
||||
tx.vin.clear();
|
||||
tx.vout.clear();
|
||||
tx.vShieldedSpend.clear();
|
||||
tx.vShieldedOutput.clear();
|
||||
tx.vJoinSplit.clear();
|
||||
tx.nLockTime = (insecure_rand() % 2) ? insecure_rand() : 0;
|
||||
int ins = (insecure_rand() % 4) + 1;
|
||||
int outs = fSingle ? ins : (insecure_rand() % 4) + 1;
|
||||
int shielded_spends = (insecure_rand() % 4) + 1;
|
||||
int shielded_outs = (insecure_rand() % 4) + 1;
|
||||
int joinsplits = (insecure_rand() % 4);
|
||||
tx.nLockTime = (InsecureRandBool()) ? InsecureRand32() : 0;
|
||||
int ins = (InsecureRandBits(2)) + 1;
|
||||
int outs = fSingle ? ins : (InsecureRandBits(2)) + 1;
|
||||
int shielded_spends = (InsecureRandBits(2)) + 1;
|
||||
int shielded_outs = (InsecureRandBits(2)) + 1;
|
||||
int joinsplits = (InsecureRandBits(2));
|
||||
for (int in = 0; in < ins; in++) {
|
||||
tx.vin.push_back(CTxIn());
|
||||
CTxIn &txin = tx.vin.back();
|
||||
txin.prevout.hash = GetRandHash();
|
||||
txin.prevout.n = insecure_rand() % 4;
|
||||
txin.prevout.hash = InsecureRand256();
|
||||
txin.prevout.n = InsecureRandBits(2);
|
||||
RandomScript(txin.scriptSig);
|
||||
txin.nSequence = (insecure_rand() % 2) ? insecure_rand() : (unsigned int)-1;
|
||||
txin.nSequence = (InsecureRandBool()) ? InsecureRand32() : (unsigned int)-1;
|
||||
}
|
||||
for (int out = 0; out < outs; out++) {
|
||||
tx.vout.push_back(CTxOut());
|
||||
CTxOut &txout = tx.vout.back();
|
||||
txout.nValue = insecure_rand() % 100000000;
|
||||
txout.nValue = InsecureRandRange(100000000);
|
||||
RandomScript(txout.scriptPubKey);
|
||||
}
|
||||
if (tx.nVersionGroupId == SAPLING_VERSION_GROUP_ID) {
|
||||
tx.valueBalanceSapling = insecure_rand() % 100000000;
|
||||
tx.valueBalanceSapling = InsecureRandRange(100000000);
|
||||
for (int spend = 0; spend < shielded_spends; spend++) {
|
||||
SpendDescription sdesc;
|
||||
zcash_test_harness_random_jubjub_point(sdesc.cv.begin());
|
||||
zcash_test_harness_random_jubjub_base(sdesc.anchor.begin());
|
||||
sdesc.nullifier = GetRandHash();
|
||||
sdesc.nullifier = InsecureRand256();
|
||||
zcash_test_harness_random_jubjub_point(sdesc.rk.begin());
|
||||
GetRandBytes(sdesc.zkproof.begin(), sdesc.zkproof.size());
|
||||
tx.vShieldedSpend.push_back(sdesc);
|
||||
|
@ -173,17 +172,17 @@ void static RandomTransaction(CMutableTransaction &tx, bool fSingle, uint32_t co
|
|||
if (tx.fOverwintered && tx.nVersion >= SAPLING_TX_VERSION) {
|
||||
for (int js = 0; js < joinsplits; js++) {
|
||||
JSDescription jsdesc;
|
||||
if (insecure_rand() % 2 == 0) {
|
||||
jsdesc.vpub_old = insecure_rand() % 100000000;
|
||||
if (InsecureRandBool() == 0) {
|
||||
jsdesc.vpub_old = InsecureRandRange(100000000);
|
||||
} else {
|
||||
jsdesc.vpub_new = insecure_rand() % 100000000;
|
||||
jsdesc.vpub_new = InsecureRandRange(100000000);
|
||||
}
|
||||
|
||||
jsdesc.anchor = GetRandHash();
|
||||
jsdesc.nullifiers[0] = GetRandHash();
|
||||
jsdesc.nullifiers[1] = GetRandHash();
|
||||
jsdesc.ephemeralKey = GetRandHash();
|
||||
jsdesc.randomSeed = GetRandHash();
|
||||
jsdesc.anchor = InsecureRand256();
|
||||
jsdesc.nullifiers[0] = InsecureRand256();
|
||||
jsdesc.nullifiers[1] = InsecureRand256();
|
||||
jsdesc.ephemeralKey = InsecureRand256();
|
||||
jsdesc.randomSeed = InsecureRand256();
|
||||
GetRandBytes(jsdesc.ciphertexts[0].begin(), jsdesc.ciphertexts[0].size());
|
||||
GetRandBytes(jsdesc.ciphertexts[1].begin(), jsdesc.ciphertexts[1].size());
|
||||
{
|
||||
|
@ -191,8 +190,8 @@ void static RandomTransaction(CMutableTransaction &tx, bool fSingle, uint32_t co
|
|||
GetRandBytes(zkproof.begin(), zkproof.size());
|
||||
jsdesc.proof = zkproof;
|
||||
}
|
||||
jsdesc.macs[0] = GetRandHash();
|
||||
jsdesc.macs[1] = GetRandHash();
|
||||
jsdesc.macs[0] = InsecureRand256();
|
||||
jsdesc.macs[1] = InsecureRand256();
|
||||
|
||||
tx.vJoinSplit.push_back(jsdesc);
|
||||
}
|
||||
|
@ -218,7 +217,7 @@ BOOST_FIXTURE_TEST_SUITE(sighash_tests, BasicTestingSetup)
|
|||
BOOST_AUTO_TEST_CASE(sighash_test)
|
||||
{
|
||||
uint32_t overwinterBranchId = NetworkUpgradeInfo[Consensus::UPGRADE_OVERWINTER].nBranchId;
|
||||
seed_insecure_rand(false);
|
||||
SeedInsecureRand(false);
|
||||
|
||||
#if defined(PRINT_SIGHASH_JSON)
|
||||
std::cout << "[\n";
|
||||
|
@ -230,14 +229,14 @@ BOOST_AUTO_TEST_CASE(sighash_test)
|
|||
nRandomTests = 500;
|
||||
#endif
|
||||
for (int i=0; i<nRandomTests; i++) {
|
||||
int nHashType = insecure_rand();
|
||||
int nHashType = InsecureRand32();
|
||||
// Exclude ZFUTURE as its branch ID can't be represented as a JSON int32
|
||||
uint32_t consensusBranchId = NetworkUpgradeInfo[insecure_rand() % (Consensus::MAX_NETWORK_UPGRADES - 1)].nBranchId;
|
||||
uint32_t consensusBranchId = NetworkUpgradeInfo[InsecureRandRange(Consensus::MAX_NETWORK_UPGRADES - 1)].nBranchId;
|
||||
CMutableTransaction txTo;
|
||||
RandomTransaction(txTo, (nHashType & 0x1f) == SIGHASH_SINGLE, consensusBranchId);
|
||||
CScript scriptCode;
|
||||
RandomScript(scriptCode);
|
||||
int nIn = insecure_rand() % txTo.vin.size();
|
||||
int nIn = InsecureRandRange(txTo.vin.size());
|
||||
// We don't generate v5 transactions here; we have separate ZIP 244 test vectors.
|
||||
const PrecomputedTransactionData txdata(txTo, {});
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
// file COPYING or https://www.opensource.org/licenses/mit-license.php .
|
||||
|
||||
#include "main.h"
|
||||
#include "test_random.h"
|
||||
#include "util/system.h"
|
||||
#include "test/test_bitcoin.h"
|
||||
|
||||
|
@ -36,8 +35,8 @@ BOOST_AUTO_TEST_CASE(skiplist_test)
|
|||
}
|
||||
|
||||
for (int i=0; i < 1000; i++) {
|
||||
int from = insecure_rand() % (SKIPLIST_LENGTH - 1);
|
||||
int to = insecure_rand() % (from + 1);
|
||||
int from = InsecureRandRange(SKIPLIST_LENGTH - 1);
|
||||
int to = InsecureRandRange(from + 1);
|
||||
|
||||
BOOST_CHECK(vIndex[SKIPLIST_LENGTH - 1].GetAncestor(from) == &vIndex[from]);
|
||||
BOOST_CHECK(vIndex[from].GetAncestor(to) == &vIndex[to]);
|
||||
|
@ -79,7 +78,7 @@ BOOST_AUTO_TEST_CASE(getlocator_test)
|
|||
|
||||
// Test 100 random starting points for locators.
|
||||
for (int n=0; n<100; n++) {
|
||||
int r = insecure_rand() % 150000;
|
||||
int r = InsecureRandRange(150000);
|
||||
CBlockIndex* tip = (r < 100000) ? &vBlocksMain[r] : &vBlocksSide[r - 100000];
|
||||
CBlockLocator locator = chain.GetLocator(tip);
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include "fs.h"
|
||||
#include "main.h"
|
||||
#include "test/test_bitcoin.h"
|
||||
#include "test/test_random.h"
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
|
@ -147,7 +146,7 @@ BOOST_AUTO_TEST_CASE(streams_buffered_file)
|
|||
BOOST_AUTO_TEST_CASE(streams_buffered_file_rand)
|
||||
{
|
||||
// Make this test deterministic.
|
||||
seed_insecure_rand(true);
|
||||
SeedInsecureRand(true);
|
||||
|
||||
for (int rep = 0; rep < 500; ++rep) {
|
||||
FILE* file = fopen("streams_test_tmp", "w+b");
|
||||
|
|
|
@ -110,7 +110,7 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha
|
|||
orig_current_path = fs::current_path();
|
||||
|
||||
ClearDatadirCache();
|
||||
pathTemp = fs::temp_directory_path() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000)));
|
||||
pathTemp = fs::temp_directory_path() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(InsecureRandRange(100000)));
|
||||
fs::create_directories(pathTemp);
|
||||
mapArgs["-datadir"] = pathTemp.string();
|
||||
pblocktree = new CBlockTreeDB(1 << 20, true);
|
||||
|
|
|
@ -6,10 +6,31 @@
|
|||
#include "fs.h"
|
||||
#include "key.h"
|
||||
#include "pubkey.h"
|
||||
#include "random.h"
|
||||
#include "txdb.h"
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
extern uint256 insecure_rand_seed;
|
||||
extern FastRandomContext insecure_rand_ctx;
|
||||
|
||||
static inline void SeedInsecureRand(bool fDeterministic = false)
|
||||
{
|
||||
if (fDeterministic) {
|
||||
insecure_rand_seed = uint256();
|
||||
} else {
|
||||
insecure_rand_seed = GetRandHash();
|
||||
}
|
||||
insecure_rand_ctx = FastRandomContext(insecure_rand_seed);
|
||||
}
|
||||
|
||||
static inline uint32_t InsecureRand32() { return insecure_rand_ctx.rand32(); }
|
||||
static inline uint256 InsecureRand256() { return insecure_rand_ctx.rand256(); }
|
||||
static inline uint64_t InsecureRandBits(int bits) { return insecure_rand_ctx.randbits(bits); }
|
||||
static inline uint64_t InsecureRandRange(uint64_t range) { return insecure_rand_ctx.randrange(range); }
|
||||
static inline bool InsecureRandBool() { return insecure_rand_ctx.randbool(); }
|
||||
static inline std::vector<unsigned char> InsecureRandBytes(size_t len) { return insecure_rand_ctx.randbytes(len); }
|
||||
|
||||
/** Basic testing setup.
|
||||
* This just configures logging and chain parameters.
|
||||
*/
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||
// Copyright (c) 2020-2022 The Zcash developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or https://www.opensource.org/licenses/mit-license.php .
|
||||
|
||||
#ifndef BITCOIN_TEST_TEST_RANDOM_H
|
||||
#define BITCOIN_TEST_TEST_RANDOM_H
|
||||
|
||||
#include "random.h"
|
||||
|
||||
extern uint256 insecure_rand_seed;
|
||||
extern FastRandomContext insecure_rand_ctx;
|
||||
|
||||
static inline void seed_insecure_rand(bool fDeterministic = false)
|
||||
{
|
||||
if (fDeterministic) {
|
||||
insecure_rand_seed = uint256();
|
||||
} else {
|
||||
insecure_rand_seed = GetRandHash();
|
||||
}
|
||||
insecure_rand_ctx = FastRandomContext(insecure_rand_seed);
|
||||
}
|
||||
|
||||
static inline uint32_t insecure_rand(void)
|
||||
{
|
||||
return insecure_rand_ctx.rand32();
|
||||
}
|
||||
|
||||
#endif
|
|
@ -310,7 +310,7 @@ void test_simple_sapling_invalidity(uint32_t consensusBranchId, CMutableTransact
|
|||
CValidationState state;
|
||||
|
||||
newTx.vShieldedSpend.push_back(SpendDescription());
|
||||
newTx.vShieldedSpend[0].nullifier = GetRandHash();
|
||||
newTx.vShieldedSpend[0].nullifier = InsecureRand256();
|
||||
|
||||
BOOST_CHECK(!CheckTransactionWithoutProofVerification(newTx, state));
|
||||
BOOST_CHECK(state.GetRejectReason() == "bad-txns-no-sink-of-funds");
|
||||
|
@ -321,7 +321,7 @@ void test_simple_sapling_invalidity(uint32_t consensusBranchId, CMutableTransact
|
|||
CValidationState state;
|
||||
|
||||
newTx.vShieldedSpend.push_back(SpendDescription());
|
||||
newTx.vShieldedSpend[0].nullifier = GetRandHash();
|
||||
newTx.vShieldedSpend[0].nullifier = InsecureRand256();
|
||||
|
||||
newTx.vShieldedOutput.push_back(OutputDescription());
|
||||
|
||||
|
@ -331,7 +331,7 @@ void test_simple_sapling_invalidity(uint32_t consensusBranchId, CMutableTransact
|
|||
BOOST_CHECK(!CheckTransactionWithoutProofVerification(newTx, state));
|
||||
BOOST_CHECK(state.GetRejectReason() == "bad-spend-description-nullifiers-duplicate");
|
||||
|
||||
newTx.vShieldedSpend[1].nullifier = GetRandHash();
|
||||
newTx.vShieldedSpend[1].nullifier = InsecureRand256();
|
||||
|
||||
BOOST_CHECK(CheckTransactionWithoutProofVerification(newTx, state));
|
||||
}
|
||||
|
@ -382,8 +382,8 @@ void test_simple_joinsplit_invalidity(uint32_t consensusBranchId, CMutableTransa
|
|||
newTx.vJoinSplit.push_back(JSDescription());
|
||||
JSDescription *jsdesc = &newTx.vJoinSplit[0];
|
||||
|
||||
jsdesc->nullifiers[0] = GetRandHash();
|
||||
jsdesc->nullifiers[1] = GetRandHash();
|
||||
jsdesc->nullifiers[0] = InsecureRand256();
|
||||
jsdesc->nullifiers[1] = InsecureRand256();
|
||||
|
||||
// Fake coins being spent.
|
||||
std::vector<CTxOut> allPrevOutputs;
|
||||
|
@ -474,19 +474,19 @@ void test_simple_joinsplit_invalidity(uint32_t consensusBranchId, CMutableTransa
|
|||
newTx.vJoinSplit.push_back(JSDescription());
|
||||
JSDescription *jsdesc = &newTx.vJoinSplit[0];
|
||||
|
||||
jsdesc->nullifiers[0] = GetRandHash();
|
||||
jsdesc->nullifiers[0] = InsecureRand256();
|
||||
jsdesc->nullifiers[1] = jsdesc->nullifiers[0];
|
||||
|
||||
BOOST_CHECK(!CheckTransaction(newTx, state, verifier));
|
||||
BOOST_CHECK(state.GetRejectReason() == "bad-joinsplits-nullifiers-duplicate");
|
||||
|
||||
jsdesc->nullifiers[1] = GetRandHash();
|
||||
jsdesc->nullifiers[1] = InsecureRand256();
|
||||
|
||||
newTx.vJoinSplit.push_back(JSDescription());
|
||||
jsdesc = &newTx.vJoinSplit[0]; // Fixes #2026. Related PR #2078.
|
||||
JSDescription *jsdesc2 = &newTx.vJoinSplit[1];
|
||||
|
||||
jsdesc2->nullifiers[0] = GetRandHash();
|
||||
jsdesc2->nullifiers[0] = InsecureRand256();
|
||||
jsdesc2->nullifiers[1] = jsdesc->nullifiers[0];
|
||||
|
||||
BOOST_CHECK(!CheckTransaction(newTx, state, verifier));
|
||||
|
@ -499,8 +499,8 @@ void test_simple_joinsplit_invalidity(uint32_t consensusBranchId, CMutableTransa
|
|||
|
||||
newTx.vJoinSplit.push_back(JSDescription());
|
||||
JSDescription *jsdesc = &newTx.vJoinSplit[0];
|
||||
jsdesc->nullifiers[0] = GetRandHash();
|
||||
jsdesc->nullifiers[1] = GetRandHash();
|
||||
jsdesc->nullifiers[0] = InsecureRand256();
|
||||
jsdesc->nullifiers[1] = InsecureRand256();
|
||||
|
||||
newTx.vin.push_back(CTxIn(uint256(), -1));
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#include "clientversion.h"
|
||||
#include "primitives/transaction.h"
|
||||
#include "test_random.h"
|
||||
#include "sync.h"
|
||||
#include "util/strencodings.h"
|
||||
#include "util/moneystr.h"
|
||||
|
@ -235,7 +234,7 @@ BOOST_AUTO_TEST_CASE(util_IsHex)
|
|||
|
||||
BOOST_AUTO_TEST_CASE(util_seed_insecure_rand)
|
||||
{
|
||||
seed_insecure_rand(true);
|
||||
SeedInsecureRand(true);
|
||||
for (int mod=2;mod<11;mod++)
|
||||
{
|
||||
int mask = 1;
|
||||
|
@ -249,7 +248,7 @@ BOOST_AUTO_TEST_CASE(util_seed_insecure_rand)
|
|||
for (int i = 0; i < 10000; i++) {
|
||||
uint32_t rval;
|
||||
do{
|
||||
rval=insecure_rand()&mask;
|
||||
rval=InsecureRand32()&mask;
|
||||
}while(rval>=(uint32_t)mod);
|
||||
count += rval==0;
|
||||
}
|
||||
|
|
|
@ -3,9 +3,8 @@
|
|||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or https://www.opensource.org/licenses/mit-license.php .
|
||||
|
||||
#include "test/test_random.h"
|
||||
#include "util/strencodings.h"
|
||||
#include "test/test_bitcoin.h"
|
||||
#include "util/strencodings.h"
|
||||
#include "wallet/crypter.h"
|
||||
|
||||
#include <vector>
|
||||
|
@ -83,7 +82,7 @@ BOOST_AUTO_TEST_CASE(passphrase) {
|
|||
std::string hash(GetRandHash().ToString());
|
||||
std::vector<unsigned char> vchSalt(8);
|
||||
GetRandBytes(&vchSalt[0], vchSalt.size());
|
||||
uint32_t rounds = insecure_rand();
|
||||
uint32_t rounds = InsecureRand32();
|
||||
if (rounds > 30000)
|
||||
rounds = 30000;
|
||||
TestCrypter::TestPassphrase(vchSalt, SecureString(hash.begin(), hash.end()), rounds);
|
||||
|
|
Loading…
Reference in New Issue