diff options
Diffstat (limited to 'openaes/src/isaac/rand.h')
-rw-r--r-- | openaes/src/isaac/rand.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/openaes/src/isaac/rand.h b/openaes/src/isaac/rand.h new file mode 100644 index 000000000..73f6e3e44 --- /dev/null +++ b/openaes/src/isaac/rand.h @@ -0,0 +1,56 @@ +/* +------------------------------------------------------------------------------ +rand.h: definitions for a random number generator +By Bob Jenkins, 1996, Public Domain +MODIFIED: + 960327: Creation (addition of randinit, really) + 970719: use context, not global variables, for internal state + 980324: renamed seed to flag + 980605: recommend RANDSIZL=4 for noncryptography. + 010626: note this is public domain +------------------------------------------------------------------------------ +*/ +#ifndef STANDARD +#include "standard.h" +#endif + +#ifndef RAND +#define RAND +#define RANDSIZL (8) +#define RANDSIZ (1<<RANDSIZL) + +/* context of random number generator */ +struct randctx +{ + ub4 randcnt; + ub4 randrsl[RANDSIZ]; + ub4 randmem[RANDSIZ]; + ub4 randa; + ub4 randb; + ub4 randc; +}; +typedef struct randctx randctx; + +/* +------------------------------------------------------------------------------ + If (flag==TRUE), then use the contents of randrsl[0..RANDSIZ-1] as the seed. +------------------------------------------------------------------------------ +*/ +void randinit(/*_ randctx *r, word flag _*/); + +void isaac(/*_ randctx *r _*/); + + +/* +------------------------------------------------------------------------------ + Call rand(/o_ randctx *r _o/) to retrieve a single 32-bit random value +------------------------------------------------------------------------------ +*/ +#define rand(r) \ + (!(r)->randcnt-- ? \ + (isaac(r), (r)->randcnt=RANDSIZ-1, (r)->randrsl[(r)->randcnt]) : \ + (r)->randrsl[(r)->randcnt]) + +#endif /* RAND */ + + |