Updated email mdc's email address
[gpxe.git] / src / core / random.c
blobc15bb6de31e99f7378db252863dd010844596ca5
1 /** @file
3 * Random number generation
5 */
7 #include <stdlib.h>
9 static int32_t rnd_seed = 0;
11 /**
12 * Seed the pseudo-random number generator
14 * @v seed Seed value
16 void srandom ( unsigned int seed ) {
17 rnd_seed = seed;
20 /**
21 * Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
23 * @ret rand Pseudo-random number
25 long int random ( void ) {
26 int32_t q;
28 if ( ! rnd_seed ) /* Initialize linear congruential generator */
29 srandom ( currticks() );
31 /* simplified version of the LCG given in Bruce Schneier's
32 "Applied Cryptography" */
33 q = ( rnd_seed / 53668 );
34 rnd_seed = ( 40014 * ( rnd_seed - 53668 * q ) - 12211 * q );
35 if ( rnd_seed < 0 )
36 rnd_seed += 2147483563L;
37 return rnd_seed;