aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2012-05-17 12:13:14 -0400
committerGavin Andresen <gavinandresen@gmail.com>2012-05-17 16:33:27 -0400
commitf718aedd9f244ee77a40f182bf6c6737730d975c (patch)
tree087a1464b04bb598e1bda62224495b90e821d3af
parent096e06dbb5241737e2f0f1ba1c4f969d68e6e7c5 (diff)
Refactor: GetRandHash() method for util
-rw-r--r--src/main.cpp8
-rw-r--r--src/test/DoS_tests.cpp12
-rw-r--r--src/util.cpp6
-rw-r--r--src/util.h1
4 files changed, 12 insertions, 15 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 427e435a90..d006510d1a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -201,9 +201,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans)
while (mapOrphanTransactions.size() > nMaxOrphans)
{
// Evict a random orphan:
- std::vector<unsigned char> randbytes(32);
- RAND_bytes(&randbytes[0], 32);
- uint256 randomhash(randbytes);
+ uint256 randomhash = GetRandHash();
map<uint256, CDataStream*>::iterator it = mapOrphanTransactions.lower_bound(randomhash);
if (it == mapOrphanTransactions.end())
it = mapOrphanTransactions.begin();
@@ -2354,7 +2352,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
// at a time so the setAddrKnowns of the chosen nodes prevent repeats
static uint256 hashSalt;
if (hashSalt == 0)
- RAND_bytes((unsigned char*)&hashSalt, sizeof(hashSalt));
+ hashSalt = GetRandHash();
int64 hashAddr = addr.GetHash();
uint256 hashRand = hashSalt ^ (hashAddr<<32) ^ ((GetTime()+hashAddr)/(24*60*60));
hashRand = Hash(BEGIN(hashRand), END(hashRand));
@@ -2945,7 +2943,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
// 1/4 of tx invs blast to all immediately
static uint256 hashSalt;
if (hashSalt == 0)
- RAND_bytes((unsigned char*)&hashSalt, sizeof(hashSalt));
+ hashSalt = GetRandHash();
uint256 hashRand = inv.hash ^ hashSalt;
hashRand = Hash(BEGIN(hashRand), END(hashRand));
bool fTrickleWait = ((hashRand & 3) != 0);
diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp
index e5a8b4f68b..3a2b1d9d54 100644
--- a/src/test/DoS_tests.cpp
+++ b/src/test/DoS_tests.cpp
@@ -129,18 +129,10 @@ BOOST_AUTO_TEST_CASE(DoS_checknbits)
}
-static uint256 RandomHash()
-{
- std::vector<unsigned char> randbytes(32);
- RAND_bytes(&randbytes[0], 32);
- uint256 randomhash(randbytes);
- return randomhash;
-}
-
CTransaction RandomOrphan()
{
std::map<uint256, CDataStream*>::iterator it;
- it = mapOrphanTransactions.lower_bound(RandomHash());
+ it = mapOrphanTransactions.lower_bound(GetRandHash());
if (it == mapOrphanTransactions.end())
it = mapOrphanTransactions.begin();
const CDataStream* pvMsg = it->second;
@@ -162,7 +154,7 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans)
CTransaction tx;
tx.vin.resize(1);
tx.vin[0].prevout.n = 0;
- tx.vin[0].prevout.hash = RandomHash();
+ tx.vin[0].prevout.hash = GetRandHash();
tx.vin[0].scriptSig << OP_1;
tx.vout.resize(1);
tx.vout[0].nValue = 1*CENT;
diff --git a/src/util.cpp b/src/util.cpp
index 3569f22ecd..d8804c7291 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -174,6 +174,12 @@ int GetRandInt(int nMax)
return GetRand(nMax);
}
+uint256 GetRandHash()
+{
+ uint256 hash;
+ RAND_bytes((unsigned char*)&hash, sizeof(hash));
+ return hash;
+}
diff --git a/src/util.h b/src/util.h
index 5f8d0375da..01f09747c4 100644
--- a/src/util.h
+++ b/src/util.h
@@ -168,6 +168,7 @@ bool SetStartOnSystemStartup(bool fAutoStart);
void ShrinkDebugFile();
int GetRandInt(int nMax);
uint64 GetRand(uint64 nMax);
+uint256 GetRandHash();
int64 GetTime();
void SetMockTime(int64 nMockTimeIn);
int64 GetAdjustedTime();