#define UUID_CHARS (UUID_BYTES * 2)
#define UUID_LENGTH (UUID_CHARS + 4)
-char *getUUID(void)
+static unsigned int uuid_random_function(int max)
+{
+ return GetBetterRandom(max);
+}
+
+char *getUUIDExt(unsigned int (*random_function)(int max))
{
static char uuid[UUID_LENGTH + 1];
int data[UUID_BYTES];
int i;
for (i = 0; i < UUID_BYTES; i++)
- data[i] = GetSimpleRandom(256);
+ data[i] = random_function(256);
data[6] = 0x40 | (data[6] & 0x0f);
data[8] = 0x80 | (data[8] & 0x3f);
return uuid;
}
+char *getUUID(void)
+{
+ return getUUIDExt(uuid_random_function);
+}
+
// ----------------------------------------------------------------------------
// counter functions
// random generator functions
// ----------------------------------------------------------------------------
-unsigned int init_random_number(int nr, int seed)
+static unsigned int init_random_number_ext(int nr, int seed)
{
if (seed == NEW_RANDOMIZE)
{
return (unsigned int) seed;
}
+static unsigned int prng_seed_gettimeofday(void)
+{
+ struct timeval current_time;
+
+ gettimeofday(¤t_time, NULL);
+
+ prng_seed_bytes(¤t_time, sizeof(current_time));
+
+ return 0;
+}
+
+unsigned int init_random_number(int nr, int seed)
+{
+ return (nr == RANDOM_BETTER ? prng_seed_gettimeofday() :
+ init_random_number_ext(nr, seed));
+}
+
+static unsigned int get_random_number_ext(int nr)
+{
+ return (nr == RANDOM_BETTER ? prng_get_uint() :
+ random_linux_libc(nr));
+}
+
unsigned int get_random_number(int nr, int max)
{
- return (max > 0 ? random_linux_libc(nr) % max : 0);
+ return (max > 0 ? get_random_number_ext(nr) % max : 0);
}