X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/bf5d7992ce29e9fb006a5b6770bd3457b9b0f18b..905c55de2bbe642412b47ed4e92344096c817fac:/common/random.c diff --git a/common/random.c b/common/random.c index 62d0cbeb..5658683d 100644 --- a/common/random.c +++ b/common/random.c @@ -1,6 +1,6 @@ #include "random.h" -static uint64_t next_random = 1; +static uint32_t g_nextrandom; /* Generates a (non-cryptographically secure) 32-bit random number. * @@ -8,12 +8,23 @@ static uint64_t next_random = 1; * method of seeding with the time it took to call "autoseed" from first run. * * https://github.com/Proxmark/proxmark3/pull/209/commits/f9c1dcd9f6e68a8c07cffed697a9c4c8caed6015 + * + * Iceman, rand needs to be fast. + * https://software.intel.com/en-us/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor/ */ + +inline void fast_prand(){ + fast_prandEx(GetTickCount()); +} +inline void fast_prandEx(uint32_t seed) { + g_nextrandom = seed; +} + uint32_t prand() { - if (next_random == 1) - next_random = GetTickCount(); - - next_random = next_random * 6364136223846793005 + 1; - return (uint32_t)(next_random >> 32) % 0xffffffff; +// g_nextrandom *= 6364136223846793005; +// g_nextrandom += 1; +//return (uint32_t)(g_nextrandom >> 32) % 0xffffffff; + g_nextrandom = (214013 * g_nextrandom + 2531011); + return (g_nextrandom>>16) & 0xFFFF; }