Changeset View
Changeset View
Standalone View
Standalone View
src/random.cpp
Show First 20 Lines • Show All 659 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
void FastRandomContext::RandomSeed() { | void FastRandomContext::RandomSeed() { | ||||
uint256 seed = GetRandHash(); | uint256 seed = GetRandHash(); | ||||
rng.SetKey(seed.begin(), 32); | rng.SetKey(seed.begin(), 32); | ||||
requires_seed = false; | requires_seed = false; | ||||
} | } | ||||
uint160 FastRandomContext::rand160() noexcept { | |||||
if (bytebuf_size < 20) { | |||||
FillByteBuffer(); | |||||
} | |||||
uint160 ret; | |||||
memcpy(ret.begin(), bytebuf + 64 - bytebuf_size, 20); | |||||
bytebuf_size -= 20; | |||||
return ret; | |||||
} | |||||
uint256 FastRandomContext::rand256() noexcept { | uint256 FastRandomContext::rand256() noexcept { | ||||
if (bytebuf_size < 32) { | if (bytebuf_size < 32) { | ||||
FillByteBuffer(); | FillByteBuffer(); | ||||
} | } | ||||
uint256 ret; | uint256 ret; | ||||
memcpy(ret.begin(), bytebuf + 64 - bytebuf_size, 32); | memcpy(ret.begin(), bytebuf + 64 - bytebuf_size, 32); | ||||
bytebuf_size -= 32; | bytebuf_size -= 32; | ||||
return ret; | return ret; | ||||
} | } | ||||
std::vector<uint8_t> FastRandomContext::randbytes(size_t len) { | std::vector<uint8_t> FastRandomContext::randbytes(size_t len) { | ||||
if (requires_seed) { | if (requires_seed) { | ||||
RandomSeed(); | RandomSeed(); | ||||
} | } | ||||
std::vector<uint8_t> ret(len); | std::vector<uint8_t> ret(len); | ||||
if (len > 0) { | if (len > 0) { | ||||
rng.Keystream(&ret[0], len); | rng.Keystream(&ret[0], len); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines |