@@ -387,15 +387,22 @@ do_openssl_client() {
387387 openssl_caCert1=" -CAfile"
388388 openssl_caCert2=" $caCert "
389389 fi
390+ # Integrity-only cipher suites require SECLEVEL=0 to allow NULL encryption
391+ openssl_seclevel=" "
392+ if [ " $tls13_integrity_only " = " yes" ]
393+ then
394+ openssl_seclevel=" -cipher ALL:@SECLEVEL=0"
395+ fi
396+
390397 if [ " $tls13_cipher " = " " ]
391398 then
392399 echo " #"
393400 echo " # $OPENSSL s_client -connect localhost:$port -reconnect -legacy_renegotiation -cipher $cmpSuite $openssl_version $openssl_psk $openssl_cert1 \" $openssl_cert2 \" $openssl_key1 \" $openssl_key2 \" $openssl_caCert1 \" $openssl_caCert2 \" "
394401 echo " Hello" | eval " $OPENSSL s_client -connect localhost:$port -reconnect -legacy_renegotiation -cipher $cmpSuite $openssl_version $openssl_psk $openssl_cert1 \" $openssl_cert2 \" $openssl_key1 \" $openssl_key2 \" $openssl_caCert1 \" $openssl_caCert2 \" "
395402 else
396403 echo " #"
397- echo " # $OPENSSL s_client -connect localhost:$port -reconnect -legacy_renegotiation -ciphersuites=$cmpSuite $openssl_version $openssl_psk $openssl_cert1 \" $openssl_cert2 \" $openssl_key1 \" $openssl_key2 \" $openssl_caCert1 \" $openssl_caCert2 \" "
398- echo " Hello" | eval " $OPENSSL s_client -connect localhost:$port -reconnect -legacy_renegotiation -ciphersuites=$cmpSuite $openssl_version $openssl_psk $openssl_cert1 \" $openssl_cert2 \" $openssl_key1 \" $openssl_key2 \" $openssl_caCert1 \" $openssl_caCert2 \" "
404+ echo " # $OPENSSL s_client -connect localhost:$port -reconnect -legacy_renegotiation -ciphersuites=$cmpSuite $openssl_seclevel $ openssl_version $openssl_psk $openssl_cert1 \" $openssl_cert2 \" $openssl_key1 \" $openssl_key2 \" $openssl_caCert1 \" $openssl_caCert2 \" "
405+ echo " Hello" | eval " $OPENSSL s_client -connect localhost:$port -reconnect -legacy_renegotiation -ciphersuites=$cmpSuite $openssl_seclevel $ openssl_version $openssl_psk $openssl_cert1 \" $openssl_cert2 \" $openssl_key1 \" $openssl_key2 \" $openssl_caCert1 \" $openssl_caCert2 \" "
399406 fi
400407
401408 client_result=$?
941948 echo -e " trying wolfSSL cipher suite $wolfSuite "
942949 wolf_temp_cases_total=$(( wolf_temp_cases_total + 1 ))
943950 open_temp_cases_total=$(( open_temp_cases_total + 1 ))
944- matchSuite=0;
951+ matchSuite=0
945952 tls13_suite=
953+ tls13_integrity_only=
946954
947955 case $wolfSuite in
948956 " TLS13-AES128-GCM-SHA256" )
966974 tls13_suite=" yes"
967975 ;;
968976 " TLS13-SHA256-SHA256" )
969- continue
977+ cmpSuite=" TLS_SHA256_SHA256"
978+ tls13_suite=" yes"
979+ tls13_integrity_only=" yes"
980+ # OpenSSL does not enable TLS_SHA256_SHA256 in openssl ciphers
981+ # output by default, but it can be specified with -ciphersuite as
982+ # done in do_openssl_client()
983+ matchSuite=1
970984 ;;
971985 " TLS13-SHA384-SHA384" )
972- continue
986+ cmpSuite=" TLS_SHA384_SHA384"
987+ tls13_suite=" yes"
988+ tls13_integrity_only=" yes"
989+ # OpenSSL does not enable TLS_SHA256_SHA256 in openssl ciphers
990+ # output by default, but it can be specified with -ciphersuite as
991+ # done in do_openssl_client()
992+ matchSuite=1
973993 ;;
974994 " TLS13-" * )
975995 echo -e " Suite = $wolfSuite not recognized!"
@@ -982,35 +1002,38 @@ do
9821002 ;;
9831003 esac
9841004
985- case " :$openssl_ciphers :" in * " :$cmpSuite :" * ) # add extra : for edge cases
986- case " $cmpSuite " in
987- " TLS_" * )
988- if [ " $version " != " 4" -a " $version " != " d" ]
989- then
990- echo -e " TLS 1.3 cipher suite but not TLS 1.3 protocol"
991- matchSuite=0
992- else
993- echo -e " Matched to OpenSSL suite support"
994- matchSuite=1
995- fi
996- ;;
997- * )
998- if [ " $version " = " d" -a " $wolfdowngrade " = " 4" ]
999- then
1000- echo -e " Not TLS 1.3 cipher suite but TLS 1.3 downgrade"
1001- matchSuite=0
1002- elif [ " $version " != " 4" ]
1003- then
1004- echo -e " Matched to OpenSSL suite support"
1005- matchSuite=1
1006- else
1007- echo -e " Not TLS 1.3 cipher suite but TLS 1.3 protocol"
1008- matchSuite=0
1009- fi
1005+ if [ $matchSuite = 0 ]
1006+ then
1007+ case " :$openssl_ciphers :" in * " :$cmpSuite :" * ) # add extra : for edge cases
1008+ case " $cmpSuite " in
1009+ " TLS_" * )
1010+ if [ " $version " != " 4" -a " $version " != " d" ]
1011+ then
1012+ echo -e " TLS 1.3 cipher suite but not TLS 1.3 protocol"
1013+ matchSuite=0
1014+ else
1015+ echo -e " Matched to OpenSSL suite support"
1016+ matchSuite=1
1017+ fi
1018+ ;;
1019+ * )
1020+ if [ " $version " = " d" -a " $wolfdowngrade " = " 4" ]
1021+ then
1022+ echo -e " Not TLS 1.3 cipher suite but TLS 1.3 downgrade"
1023+ matchSuite=0
1024+ elif [ " $version " != " 4" ]
1025+ then
1026+ echo -e " Matched to OpenSSL suite support"
1027+ matchSuite=1
1028+ else
1029+ echo -e " Not TLS 1.3 cipher suite but TLS 1.3 protocol"
1030+ matchSuite=0
1031+ fi
1032+ ;;
1033+ esac
10101034 ;;
10111035 esac
1012- ;;
1013- esac
1036+ fi
10141037
10151038 if [ $matchSuite = 0 ]
10161039 then
@@ -1130,6 +1153,80 @@ do
11301153 continue
11311154 fi
11321155 tls13_cipher=yes
1156+ # Integrity-only cipher suites (NULL encryption)
1157+ if [ " $tls13_integrity_only " = " yes" ]
1158+ then
1159+ # Only run integrity-only tests with TLS 1.3 (version 4)
1160+ if [ " $version " != " 4" ]
1161+ then
1162+ tls13_cipher=
1163+ tls13_integrity_only=
1164+ continue
1165+ fi
1166+
1167+ # Integrity-only cipher suites require OpenSSL 3.4 or later
1168+ $OPENSSL version | grep -oE ' [0-9]+\.[0-9]+\.[0-9]+' | head -1 | \
1169+ awk -F. ' {if ($1 > 3 || ($1 == 3 && $2 >= 4)) exit 1; else exit 0;}'
1170+ if [ $? -eq 0 ]
1171+ then
1172+ echo -e " OpenSSL version too old for integrity-only ciphers, skipping"
1173+ tls13_cipher=
1174+ tls13_integrity_only=
1175+ continue
1176+ fi
1177+
1178+ # Test with RSA certs if available
1179+ if [ $openssl_pid != $no_pid -a " $wolf_rsa " != " " ]
1180+ then
1181+ cert=" ${CERT_DIR} /client-cert.pem"
1182+ key=" ${CERT_DIR} /client-key.pem"
1183+ caCert=" ${CERT_DIR} /ca-cert.pem"
1184+
1185+ # Start a dedicated OpenSSL server for integrity-only tests
1186+ generate_port
1187+ integrity_openssl_port=$port
1188+ $OPENSSL s_server -accept $integrity_openssl_port -cert " ${CERT_DIR} /server-cert.pem" -key " ${CERT_DIR} /server-key.pem" -quiet -CAfile " ${CERT_DIR} /client-cert.pem" -www -cipher " ALL:eNULL:@SECLEVEL=0" -ciphersuites " $cmpSuite " -verify 10 -verify_return_error &
1189+ integrity_openssl_pid=$!
1190+ sleep 0.1
1191+
1192+ port=$integrity_openssl_port
1193+ do_wolfssl_client
1194+
1195+ # Kill the dedicated server
1196+ kill $integrity_openssl_pid 2> /dev/null
1197+
1198+ port=$wolfssl_port
1199+ do_openssl_client
1200+ fi
1201+ # Test with ECC certs if available
1202+ if [ $ecdsa_openssl_pid != $no_pid -a " $wolf_ecc " != " " ]
1203+ then
1204+ cert=" ${CERT_DIR} /client-ecc-cert.pem"
1205+ key=" ${CERT_DIR} /ecc-client-key.pem"
1206+ caCert=" ${CERT_DIR} /ca-ecc-cert.pem"
1207+
1208+ # Start a dedicated OpenSSL server for integrity-only tests (ECC)
1209+ generate_port
1210+ integrity_openssl_port=$port
1211+ $OPENSSL s_server -accept $integrity_openssl_port -cert " ${CERT_DIR} /server-ecc.pem" -key " ${CERT_DIR} /ecc-key.pem" -quiet -CAfile " ${CERT_DIR} /client-ecc-cert.pem" -www -cipher " ALL:eNULL:@SECLEVEL=0" -ciphersuites " $cmpSuite " -verify 10 -verify_return_error &
1212+ integrity_openssl_pid=$!
1213+ sleep 0.1
1214+
1215+ wolf_temp_cases_total=$(( wolf_temp_cases_total + 1 ))
1216+ port=$integrity_openssl_port
1217+ do_wolfssl_client
1218+
1219+ # Kill the dedicated server
1220+ kill $integrity_openssl_pid 2> /dev/null
1221+
1222+ open_temp_cases_total=$(( open_temp_cases_total + 1 ))
1223+ port=$ecdsa_wolfssl_port
1224+ do_openssl_client
1225+ fi
1226+ tls13_cipher=
1227+ tls13_integrity_only=
1228+ continue
1229+ fi
11331230 # RSA
11341231 if [ $openssl_pid != $no_pid -a " $ecdhe_avail " = " yes" ]
11351232 then
0 commit comments