summaryrefslogtreecommitdiff
path: root/tests/suite/testrng.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/suite/testrng.sh')
-rwxr-xr-xtests/suite/testrng.sh163
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/suite/testrng.sh b/tests/suite/testrng.sh
new file mode 100755
index 0000000000..c45c9300eb
--- /dev/null
+++ b/tests/suite/testrng.sh
@@ -0,0 +1,163 @@
+#!/bin/sh
+
+# Copyright (C) 2014 Nikos Mavrogiannopoulos
+#
+# This file is part of GnuTLS.
+#
+# GnuTLS is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GnuTLS is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GnuTLS; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+srcdir="${srcdir:-.}"
+
+if ! test -x "/usr/bin/dieharder"; then
+ exit 77
+fi
+
+VERSION=`dieharder -l|grep version|cut -d ' ' -f 6`
+
+if test "$1" = "full"; then
+ OPTIONS="-a"
+else
+ if test "${VERSION}" = "2.28.1"; then
+ OPTIONS="-d 5"
+ OPTIONS2="-d 10"
+ else
+ OPTIONS="-d 202"
+ OPTIONS2="-d 10"
+ fi
+fi
+
+OUTFILE=rng.log
+RNGFILE=rng.out
+RNGFILE2=rng2.out
+
+rm -f "${OUTFILE}"
+rm -f "${RNGFILE}"
+rm -f "${RNGFILE2}"
+
+. "${srcdir}/../scripts/common.sh"
+
+
+RINPUTNO=`dieharder -g -1|grep file_input_raw|cut -d '|' -f 2|cut -d ' ' -f 1`
+
+if test -z "${RINPUTNO}"; then
+ echo "Cannot determine dieharder option for raw file input, assuming 201"
+ RINPUTNO=201
+fi
+
+echo ""
+echo "Testing nonce PRNG"
+
+./rng nonce 64 "${RNGFILE}"
+./rng nonce 64 "${RNGFILE2}"
+cmp "${RNGFILE}" "${RNGFILE2}" >/dev/null 2>&1
+ret=$?
+
+if test ${ret} = 0; then
+ echo "numbers are repeated in nonce!"
+ exit 1
+fi
+
+./rng nonce 100000000 "${RNGFILE}"
+
+dieharder -f "${RNGFILE}" -g ${RINPUTNO} ${OPTIONS} >"${OUTFILE}" 2>&1
+if ! test -z "${OPTIONS2}"; then
+ dieharder -f "${RNGFILE}" -g ${RINPUTNO} ${OPTIONS2} >>"${OUTFILE}" 2>&1
+fi
+grep FAILED "${OUTFILE}" >/dev/null 2>&1
+ret=$?
+
+if test "${ret}" = "0"; then
+ echo "test failed for nonce"
+ exit 1
+fi
+
+grep PASSED "${OUTFILE}" >/dev/null 2>&1
+ret=$?
+
+if test "${ret}" != "0"; then
+ echo "could not run dieharder test?"
+ exit 1
+fi
+
+cat "${OUTFILE}"
+rm -f "${OUTFILE}"
+echo ""
+echo "Testing key PRNG"
+
+./rng key 64 "${RNGFILE}"
+./rng key 64 "${RNGFILE2}"
+cmp "${RNGFILE}" "${RNGFILE2}" >/dev/null 2>&1
+ret=$?
+
+if test ${ret} = 0; then
+ echo "numbers are repeated in nonce!"
+ exit 1
+fi
+
+./rng key 100000000 "${RNGFILE}"
+
+dieharder -f "${RNGFILE}" -g ${RINPUTNO} ${OPTIONS} >"${OUTFILE}" 2>&1
+if ! test -z "${OPTIONS2}"; then
+ dieharder -f "${RNGFILE}" -g ${RINPUTNO} ${OPTIONS2} >>"${OUTFILE}" 2>&1
+fi
+grep FAILED "${OUTFILE}" >/dev/null 2>&1
+ret=$?
+
+
+if test "${ret}" = "0"; then
+ echo "test failed for key"
+ exit 1
+fi
+
+grep PASSED "${OUTFILE}" >/dev/null 2>&1
+ret=$?
+
+if test "${ret}" != "0"; then
+ echo "could not run dieharder test?"
+ exit 1
+fi
+
+cat "${OUTFILE}"
+rm -f "${OUTFILE}"
+echo ""
+echo "Testing /dev/zero PRNG"
+dd if=/dev/zero of="${RNGFILE}" bs=4 count=10000000 >/dev/null 2>&1
+
+dieharder -f "${RNGFILE}" -g ${RINPUTNO} ${OPTIONS} >"${OUTFILE}" 2>&1
+if ! test -z "${OPTIONS2}"; then
+ dieharder -f "${RNGFILE}" -g ${RINPUTNO} ${OPTIONS2} >>"${OUTFILE}" 2>&1
+fi
+grep PASSED "${OUTFILE}" >/dev/null 2>&1
+ret=$?
+
+if test "${ret}" = "0"; then
+ echo "test succeeded for /dev/zero!!!"
+ exit 1
+fi
+
+grep FAILED "${OUTFILE}" >/dev/null 2>&1
+ret=$?
+
+if test "${ret}" != "0"; then
+ echo "could not run dieharder test?"
+ exit 1
+fi
+
+cat "${OUTFILE}"
+rm -f "${OUTFILE}"
+rm -f "${RNGFILE}"
+rm -f "${RNGFILE2}"
+
+exit 0