What is new in HAVEGE2.0 ?

1. A throughput oriented random number generator function int ndrand():
On Unix machines, the throughput of the HAVEGE generator is generally higher than the typical throughput of standard random generators rand() or random(). For application domains requiring huge volume of high quality random numbers, we provide the ndrand() function.

CAUTION: ndrand() passes all statistical tests for uniform distribution and is irreproducible.
 However ndrand() has been designed for providing both high throughput and high quality, but not for unpredictability.

2. A cryptography oriented random number generator function int cryptondrand(): high performance high quality random numbers for cryptography.
3. The structure of the source code has been improved and made more readable.
A single procedure, HAVEGE_COLLECTRAND(), is used both to initialize the predictor and to generate unpredictable random numbers.

The main loop in HAVEGE_COLLECTRAND()  is embedded in file LoopBody.h. The iterations are unrolled in order to fully  gather and expand entropy  from the instruction cache and branch predictor. Precise number of iterations depend on the compiler, the processor and the operating system. An iteration is coded in file OneIteration.h.

Two parallel self-modifying walks in a table  called Walk twice as large as the data cache are performed (gather and expand entropy from the L1 data cache).
16 results data (from the RESULT array)  are updated  per iteration.
21 conditonal tests on random data are per iteration and the hardware clock counter is read two times to collect the entropy.

The initialisation phase runs HAVEGE_COLLECTRAND()  a sufficient number of times to guarantee that all internal variables (i.e the RESULT, Walk arrays and PT and PT2 pointers)  are unpredictable.

Back to HAVEGE main page