diff options
Diffstat (limited to 'tests/suite/testrng.sh')
-rwxr-xr-x | tests/suite/testrng.sh | 163 |
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 |