Skip to content
Snippets Groups Projects
Commit acbde10f authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

Add a test-rng program so we can pipe to dieharder.

parent 490e1870
No related branches found
No related tags found
No related merge requests found
......@@ -248,6 +248,7 @@ uptime-*.json
/src/test/test-memwipe
/src/test/test-ntor-cl
/src/test/test-hs-ntor-cl
/src/test/test-rng
/src/test/test-switch-id
/src/test/test-timers
/src/test/test_workqueue
......@@ -258,6 +259,7 @@ uptime-*.json
/src/test/test-ntor-cl.exe
/src/test/test-hs-ntor-cl.exe
/src/test/test-memwipe.exe
/src/test/test-rng.exe
/src/test/test-switch-id.exe
/src/test/test-timers.exe
/src/test/test_workqueue.exe
......
......@@ -68,7 +68,8 @@ noinst_PROGRAMS+= \
src/test/test-process \
src/test/test_workqueue \
src/test/test-switch-id \
src/test/test-timers
src/test/test-timers \
src/test/test-rng
endif
src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
......@@ -258,7 +259,13 @@ src_test_test_LDADD = \
src_test_test_slow_CPPFLAGS = $(src_test_test_CPPFLAGS)
src_test_test_slow_CFLAGS = $(src_test_test_CFLAGS)
src_test_test_slow_LDADD = $(src_test_test_LDADD)
src_test_test_slow_LDFLAGS = $(src_test_test_LDFLAGS)
src_test_test_slow_LDFLAGS =@TOR_LDFLAGS_openssl@
src_test_test_rng_CPPFLAGS = $(src_test_test_CPPFLAGS)
src_test_test_rng_CFLAGS = $(src_test_test_CFLAGS)
src_test_test_rng_SOURCES = src/test/test_rng.c
src_test_test_rng_LDFLAGS = $(src_test_test_LDFLAGS)
src_test_test_rng_LDADD = $(src_test_test_LDADD)
src_test_test_memwipe_CPPFLAGS = $(src_test_test_CPPFLAGS)
# Don't use bugtrap cflags here: memwipe tests require memory violations.
......
/* Copyright (c) 2016-2019, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/*
* Example usage:
*
* ./src/test/test-rng --emit | dieharder -g 200 -a
*
* Remember, dieharder can tell you that your RNG is completely broken, but if
* your RNG is not _completely_ broken, dieharder cannot tell you whether your
* RNG is actually secure.
*/
#include "orconfig.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "lib/crypt_ops/crypto_rand.h"
int
main(int argc, char **argv)
{
uint8_t buf[0x123];
if (argc != 2 || strcmp(argv[1], "--emit")) {
fprintf(stderr, "If you want me to fill stdout with a bunch of random "
"bytes, you need to say --emit.\n");
return 1;
}
if (crypto_seed_rng() < 0) {
fprintf(stderr, "Can't seed RNG.\n");
return 1;
}
#if 0
while (1) {
crypto_rand(buf, sizeof(buf));
if (write(1 /*stdout*/, buf, sizeof(buf)) != sizeof(buf)) {
fprintf(stderr, "write() failed: %s\n", strerror(errno));
return 1;
}
}
#endif
crypto_fast_rng_t *rng = crypto_fast_rng_new();
while (1) {
crypto_fast_rng_getbytes(rng, buf, sizeof(buf));
if (write(1 /*stdout*/, buf, sizeof(buf)) != sizeof(buf)) {
fprintf(stderr, "write() failed: %s\n", strerror(errno));
return 1;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment