diff options
author | Denys Vlasenko | 2014-03-13 12:52:43 +0100 |
---|---|---|
committer | Denys Vlasenko | 2014-03-13 12:52:43 +0100 |
commit | fb183076a3a6580a4aba435c53ce033ef89e7fe6 (patch) | |
tree | 72e36e623d7b8841825a8d82aabe5ac7b7654cab /shell/random.h | |
parent | 69f9567de28976cfbc7b216c46aa391ce82bd3b7 (diff) | |
download | busybox-fb183076a3a6580a4aba435c53ce033ef89e7fe6.zip busybox-fb183076a3a6580a4aba435c53ce033ef89e7fe6.tar.gz |
ash,hush: improve randomness of $RANDOM, add easy-ish way to test it
function old new delta
next_random 68 113 +45
change_random 103 121 +18
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/random.h')
-rw-r--r-- | shell/random.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/shell/random.h b/shell/random.h index 180c48a..c4eb44c 100644 --- a/shell/random.h +++ b/shell/random.h @@ -12,16 +12,24 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN typedef struct random_t { - /* Random number generators */ - int32_t galois_LFSR; /* Galois LFSR (fast but weak). signed! */ - uint32_t LCG; /* LCG (fast but weak) */ + /* State of random number generators: */ + + /* Galois LFSR (fast but weak) */ + int32_t galois_LFSR; /* must be signed! */ + + /* LCG (fast but weak) */ + uint32_t LCG; + + /* 64-bit xorshift (fast, moderate strength) */ + uint32_t xs64_x; + uint32_t xs64_y; } random_t; #define UNINITED_RANDOM_T(rnd) \ ((rnd)->galois_LFSR == 0) #define INIT_RANDOM_T(rnd, nonzero, v) \ - ((rnd)->galois_LFSR = (nonzero), (rnd)->LCG = (v)) + ((rnd)->galois_LFSR = (rnd)->xs64_x = (nonzero), (rnd)->LCG = (rnd)->xs64_y = (v)) #define CLEAR_RANDOM_T(rnd) \ ((rnd)->galois_LFSR = 0) |