#!/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