diff options
| author | Nils Maier <maierman@web.de> | 2014-12-30 18:17:44 +0100 |
|---|---|---|
| committer | Nils Maier <maierman@web.de> | 2015-01-20 22:37:24 +0100 |
| commit | 81bdd5f61a8f8da53e22d68190be700902b7dbae (patch) | |
| tree | f706934a5e5e208d8d09490d216fe03f10b38654 /src/util.cc | |
| parent | 747131a06c1f1d92a5312a103f4446fabedb6cf7 (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.cc | 39 |
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 |
