diff options
| author | Vincent Richard <[email protected]> | 2013-05-12 13:13:18 +0000 |
|---|---|---|
| committer | Vincent Richard <[email protected]> | 2013-05-12 13:13:18 +0000 |
| commit | 845b9ebf81775a50edff2ea45d78caa98644ea9a (patch) | |
| tree | ae457fa8a6d388f548d322468c1f7ca4fc6201a9 /src/utility/random.cpp | |
| parent | Allow SPACEs at end of response line (Apple iCloud IMAP server). (diff) | |
| download | vmime-845b9ebf81775a50edff2ea45d78caa98644ea9a.tar.gz vmime-845b9ebf81775a50edff2ea45d78caa98644ea9a.zip | |
Better random seed.
Diffstat (limited to 'src/utility/random.cpp')
| -rw-r--r-- | src/utility/random.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/utility/random.cpp b/src/utility/random.cpp index 6e96ed4e..40b27b57 100644 --- a/src/utility/random.cpp +++ b/src/utility/random.cpp @@ -31,16 +31,26 @@ namespace vmime { namespace utility { -unsigned int random::m_next(static_cast<unsigned int>(::std::time(NULL))); +static unsigned int getRandomSeed() +{ + unsigned int seed; + + platform::getHandler()->generateRandomBytes + (reinterpret_cast <unsigned char*>(&seed), sizeof(seed)); + + return seed; +} unsigned int random::getNext() { + static unsigned int next = getRandomSeed(); + // Park and Miller's minimal standard generator: // xn+1 = (a * xn + b) mod c // xn+1 = (16807 * xn) mod (2^31 - 1) - m_next = static_cast<unsigned int>((16807 * m_next) % 2147483647ul); - return (m_next); + next = static_cast<unsigned int>((16807 * next) % 2147483647ul); + return next; } |
