commit c5f0bedd07467c089b0eca567828508abfcc9b6d
parent 8dc182ff87cafe3337490bc8db90a67449b9c837
Author: Mattias Andrée <maandree@kth.se>
Date: Fri, 25 Mar 2016 13:33:41 +0100
zrand: add DEFAULT_RANDOM and FASTEST_RANDOM
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat:
4 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/man/zrand.3 b/man/zrand.3
@@ -18,6 +18,29 @@ selects the device
uses to generate random bits.
This value may be either of:
.TP
+.B DEFAULT_RANDOM
+This is a version-dependent alias for the
+default random number generator. That is,
+using this option will cause
+.B zrand
+to select the default random number generator.
+Which random number generator is actually
+selected may change between versions of
+.B zrand.
+
+The selection will be a balance between randomness
+and performance.
+.TP
+.B FASTEST_RANDOM
+This is a version-dependent alias for the
+fastest random number generator. That is,
+using this option will cause
+.B zrand
+to select the fastest random number generator.
+Which random number generator is actually
+selected may change between versions of
+.B zrand.
+.TP
.B FAST_RANDOM
The fast, non-blocking random number generator.
This is /dev/urandom on Linux.
diff --git a/src/zrand.c b/src/zrand.c
@@ -55,6 +55,8 @@ zrand(z_t r, enum zranddev dev, enum zranddist dist, z_t n)
int fd;
switch (dev) {
+ case DEFAULT_RANDOM:
+ case FASTEST_RANDOM:
case FAST_RANDOM:
pathname = FAST_RANDOM_PATHNAME;
break;
diff --git a/test.c b/test.c
@@ -731,7 +731,7 @@ main(void)
zrand(b, SECURE_RANDOM, UNIFORM, d);
assert(zcmp(b, _0), >= 0);
assert(zcmp(b, d), <= 0);
- zrand(c, FAST_RANDOM, UNIFORM, d);
+ zrand(c, FASTEST_RANDOM, UNIFORM, d);
assert(zcmp(c, _0), >= 0);
assert(zcmp(c, d), <= 0);
assert(zcmp(a, b), != 0);
@@ -739,13 +739,13 @@ main(void)
assert(zcmp(b, c), != 0);
zsetu(d, 100000UL);
- zrand(a, FAST_RANDOM, QUASIUNIFORM, d);
+ zrand(a, DEFAULT_RANDOM, QUASIUNIFORM, d);
assert(zcmp(a, _0), >= 0);
assert(zcmp(a, d), <= 0);
- zrand(b, FAST_RANDOM, QUASIUNIFORM, d);
+ zrand(b, DEFAULT_RANDOM, QUASIUNIFORM, d);
assert(zcmp(b, _0), >= 0);
assert(zcmp(b, d), <= 0);
- zrand(c, FAST_RANDOM, QUASIUNIFORM, d);
+ zrand(c, DEFAULT_RANDOM, QUASIUNIFORM, d);
assert(zcmp(c, _0), >= 0);
assert(zcmp(c, d), <= 0);
assert(zcmp(a, b), != 0);
@@ -753,13 +753,13 @@ main(void)
assert(zcmp(b, c), != 0);
zsetu(d, 100000UL);
- zrand(a, FAST_RANDOM, MODUNIFORM, d);
+ zrand(a, DEFAULT_RANDOM, MODUNIFORM, d);
assert(zcmp(a, _0), >= 0);
assert(zcmp(a, d), <= 0);
- zrand(b, FAST_RANDOM, MODUNIFORM, d);
+ zrand(b, DEFAULT_RANDOM, MODUNIFORM, d);
assert(zcmp(b, _0), >= 0);
assert(zcmp(b, d), <= 0);
- zrand(c, FAST_RANDOM, MODUNIFORM, d);
+ zrand(c, DEFAULT_RANDOM, MODUNIFORM, d);
assert(zcmp(c, _0), >= 0);
assert(zcmp(c, d), <= 0);
assert(zcmp(a, b), != 0);
diff --git a/zahl.h b/zahl.h
@@ -48,7 +48,9 @@ enum zprimality {
enum zranddev {
FAST_RANDOM = 0, /* Random numbers are generated directly from /dev/urandom. */
- SECURE_RANDOM /* Random numbers are generated directly from /dev/random. */
+ SECURE_RANDOM, /* Random numbers are generated directly from /dev/random. */
+ DEFAULT_RANDOM, /* Select the default random number generator. */
+ FASTEST_RANDOM /* Select the fastest random number generator. */
};
enum zranddist {