]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - common/random.c
Merge pull request #81 from mdp/fixguard
[proxmark3-svn] / common / random.c
index df5499689be315a85dc0fc33f1dc84e0f01b8778..5658683deb00f27023ec26fdc7b65ec52de77e8c 100644 (file)
@@ -1,6 +1,6 @@
 #include "random.h"
 
- uint64_t next_random = 1;
+static uint32_t g_nextrandom;
 
 /* Generates a (non-cryptographically secure) 32-bit random number.
  *
@@ -8,14 +8,23 @@
  * 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 *= 6364136223846793005;
-       next_random += 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;
 }
 
Impressum, Datenschutz