mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-19 01:40:23 +01:00
Add a test-rng program so we can pipe to dieharder.
This commit is contained in:
parent
490e187056
commit
acbde10fce
2
.gitignore
vendored
2
.gitignore
vendored
@ -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.
|
||||
|
59
src/test/test_rng.c
Normal file
59
src/test/test_rng.c
Normal file
@ -0,0 +1,59 @@
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user