@@ -44,21 +44,34 @@ TMP_OUT="/tmp/rngtest_output.txt"
4444ENTROPY_MB=10
4545COUNT=1000
4646PASS_THRESHOLD=997
47- RNG_SOURCE=" /dev/urandom "
48- [ -e /dev/hwrng ] && RNG_SOURCE= " /dev/hwrng "
47+ RNG_SOURCE=" "
48+ RNG_TIMEOUT=10
4949
50- log_info " Generating ${ENTROPY_MB} MB entropy input from $RNG_SOURCE "
51- if ! dd if=" $RNG_SOURCE " of=" $TMP_BIN " bs=1M count=" $ENTROPY_MB " status=none 2> /dev/null; then
52- log_fail " $TESTNAME : Failed to read random data from $RNG_SOURCE "
53- echo " $TESTNAME FAIL" > " $res_file "
54- rm -f " $TMP_BIN "
55- exit 1
50+ # Preferred order: hwrng -> urandom
51+ if [ -e /dev/hwrng ]; then
52+ log_info " Attempting to read $ENTROPY_MB MB entropy from /dev/hwrng with timeout $RNG_TIMEOUT sec"
53+ if timeout " $RNG_TIMEOUT " dd if=/dev/hwrng of=" $TMP_BIN " bs=1M count=" $ENTROPY_MB " status=none 2> /dev/null; then
54+ RNG_SOURCE=" /dev/hwrng"
55+ log_info " Successfully read entropy from /dev/hwrng"
56+ else
57+ log_warn " /dev/hwrng read failed or timed out, falling back to /dev/urandom"
58+ fi
59+ fi
60+
61+ if [ -z " $RNG_SOURCE " ]; then
62+ log_info " Using fallback source: /dev/urandom"
63+ if ! dd if=/dev/urandom of=" $TMP_BIN " bs=1M count=" $ENTROPY_MB " status=none 2> /dev/null; then
64+ RNG_SOURCE=" /dev/urandom"
65+ log_fail " $TESTNAME : Failed to read from /dev/urandom as fallback"
66+ echo " $TESTNAME FAIL" > " $res_file "
67+ rm -f " $TMP_BIN "
68+ exit 1
69+ fi
5670fi
5771
5872log_info " Running rngtest -c $COUNT < $TMP_BIN "
5973rngtest -c " $COUNT " < " $TMP_BIN " > " $TMP_OUT " 2>&1
6074
61- # Try to extract success count regardless of return code
6275successes=$( awk ' /FIPS 140-2 successes:/ {print $NF}' " $TMP_OUT " | head -n1)
6376
6477if [ -z " $successes " ] || ! echo " $successes " | grep -Eq ' ^[0-9]+$' ; then
0 commit comments