summaryrefslogtreecommitdiff
path: root/src/util.cc
diff options
context:
space:
mode:
authorNils Maier <maierman@web.de>2014-12-30 18:17:44 +0100
committerNils Maier <maierman@web.de>2015-01-20 22:37:24 +0100
commit81bdd5f61a8f8da53e22d68190be700902b7dbae (patch)
treef706934a5e5e208d8d09490d216fe03f10b38654 /src/util.cc
parent747131a06c1f1d92a5312a103f4446fabedb6cf7 (diff)
Revise getRandom facilities
Use one of the following to provide random bytes: - Windows CryptGenRandom - Linux getrandom (syscall interface to urandom, without nasty corner cases such as file descriptor exhaustion or re-linked /dev/urandom) - std::device_random (C++ random device, which usually will be urandom) This also equalizes util::getRandom and SimpleRandomizer (the former will now use the latter) instead of having essentially two different PRNG interfaces with potentially different quality. Closes GH-320
Diffstat (limited to 'src/util.cc')
-rw-r--r--src/util.cc39
1 files changed, 2 insertions, 37 deletions
diff --git a/src/util.cc b/src/util.cc
index 9332ae47..ea2767f7 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -1545,45 +1545,10 @@ std::vector<std::pair<size_t, std::string> > createIndexPaths(std::istream& i)
return indexPaths;
}
-namespace {
-void generateRandomDataRandom(unsigned char* data, size_t length)
-{
- const auto& rd = SimpleRandomizer::getInstance();
- rd->getRandomBytes(data, length);
-}
-} // namespace
-
-#ifndef __MINGW32__
-namespace {
-void generateRandomDataUrandom
-(unsigned char* data, size_t length, std::ifstream& devUrand)
-{
- devUrand.read(reinterpret_cast<char*>(data), length);
-}
-} // namespace
-#endif
-
void generateRandomData(unsigned char* data, size_t length)
{
-#ifdef __MINGW32__
- generateRandomDataRandom(data, length);
-#else // !__MINGW32__
- static int method = -1;
- static std::ifstream devUrand;
- if(method == 0) {
- generateRandomDataUrandom(data, length, devUrand);
- } else if(method == 1) {
- generateRandomDataRandom(data, length);
- } else {
- devUrand.open("/dev/urandom");
- if(devUrand) {
- method = 0;
- } else {
- method = 1;
- }
- generateRandomData(data, length);
- }
-#endif // !__MINGW32__
+ const auto& rd = SimpleRandomizer::getInstance();
+ return rd->getRandomBytes(data, length);
}
bool saveAs