@@ -20,42 +20,74 @@ if [ -z "$INIT_ENV" ]; then
2020 exit 1
2121fi
2222
23- # Only source if not already loaded (idempotent)
2423if [ -z " $__INIT_ENV_LOADED " ]; then
2524 # shellcheck disable=SC1090
2625 . " $INIT_ENV "
2726fi
28- # Always source functestlib.sh, using $TOOLS exported by init_env
2927# shellcheck disable=SC1090,SC1091
3028. " $TOOLS /functestlib.sh"
3129
3230TESTNAME=" rngtest"
3331test_path=$( find_test_case_by_name " $TESTNAME " )
3432cd " $test_path " || exit 1
35- # shellcheck disable=SC2034
3633res_file=" ./$TESTNAME .res"
3734
3835log_info " -----------------------------------------------------------------------------------------"
3936log_info " -------------------Starting $TESTNAME Testcase----------------------------"
4037log_info " === Test Initialization ==="
4138
4239log_info " Checking if dependency binary is available"
43- check_dependencies rngtest
40+ check_dependencies rngtest dd
4441
45- cat /dev/random | rngtest -c 1000 > /tmp/rngtest_output.txt
42+ TMP_BIN=" /tmp/rngtest_input.bin"
43+ TMP_OUT=" /tmp/rngtest_output.txt"
44+ ENTROPY_MB=10
45+ RNG_SOURCE=" /dev/urandom" # Use /dev/random if you want slow but highest entropy
4646
47- grep ' count of bits' /tmp/rngtest_output.txt | awk ' {print $NF}' > /tmp/rngtest_value.txt
47+ log_info " Generating ${ENTROPY_MB} MB entropy input from $RNG_SOURCE using dd..."
48+ if ! dd if=" $RNG_SOURCE " of=" $TMP_BIN " bs=1M count=" $ENTROPY_MB " status=none 2> /dev/null; then
49+ log_fail " $TESTNAME : Failed to read random data from $RNG_SOURCE "
50+ echo " $TESTNAME FAIL" > " $res_file "
51+ rm -f " $TMP_BIN "
52+ exit 1
53+ fi
4854
49- value=$( cat /tmp/rngtest_value.txt)
55+ log_info " Running rngtest -c 1000 < $TMP_BIN "
56+ if ! rngtest -c 1000 < " $TMP_BIN " > " $TMP_OUT " 2>&1 ; then
57+ log_fail " $TESTNAME : rngtest execution failed"
58+ echo " $TESTNAME FAIL" > " $res_file "
59+ rm -f " $TMP_BIN " " $TMP_OUT "
60+ exit 1
61+ fi
5062
63+ # Check for entropy errors or source drained
64+ if grep -q " entropy source drained" " $TMP_OUT " ; then
65+ log_fail " rngtest: entropy source drained, input too small"
66+ echo " $TESTNAME FAIL" > " $res_file "
67+ rm -f " $TMP_BIN " " $TMP_OUT "
68+ exit 1
69+ fi
5170
52- if [ " $value " -lt 10 ]; then
53- log_pass " $TESTNAME : Test Passed"
71+ # Parse FIPS 140-2 successes (robust to output variations)
72+ successes=$( awk ' /FIPS 140-2 successes:/ {print $NF}' " $TMP_OUT " | head -n1)
73+
74+ if [ -z " $successes " ] || ! echo " $successes " | grep -Eq ' ^[0-9]+$' ; then
75+ log_fail " rngtest did not return a valid integer for successes; got: '$successes '"
76+ echo " $TESTNAME FAIL" > " $res_file "
77+ rm -f " $TMP_BIN " " $TMP_OUT "
78+ exit 1
79+ fi
80+
81+ log_info " rngtest: FIPS 140-2 successes = $successes "
82+ # You can tune this threshold as needed (10 means <1% fail allowed)
83+ if [ " $successes " -ge 10 ]; then
84+ log_pass " $TESTNAME : Test Passed ($successes FIPS 140-2 successes)"
5485 echo " $TESTNAME PASS" > " $res_file "
55- exit 0
5686else
57- log_fail " $TESTNAME : Test Failed"
87+ log_fail " $TESTNAME : Test Failed ( $successes FIPS 140-2 successes) "
5888 echo " $TESTNAME FAIL" > " $res_file "
59- exit 1
6089fi
90+
91+ rm -f " $TMP_BIN " " $TMP_OUT "
92+
6193log_info " -------------------Completed $TESTNAME Testcase----------------------------"
0 commit comments