Add negative tests for opaque mixed-PSK (server)
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
diff --git a/library/ssl_srv.c b/library/ssl_srv.c
index 705a632..64e78a9 100644
--- a/library/ssl_srv.c
+++ b/library/ssl_srv.c
@@ -4270,7 +4270,10 @@
#if defined(MBEDTLS_USE_PSA_CRYPTO)
/* Opaque PSKs are currently only supported for PSK-only. */
if( ssl_use_opaque_psk( ssl ) == 1 )
+ {
+ MBEDTLS_SSL_DEBUG_MSG( 1, ( "opaque PSK not supported with RSA-PSK" ) );
return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
+ }
#endif
if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 )
@@ -4305,7 +4308,10 @@
#if defined(MBEDTLS_USE_PSA_CRYPTO)
/* Opaque PSKs are currently only supported for PSK-only. */
if( ssl_use_opaque_psk( ssl ) == 1 )
+ {
+ MBEDTLS_SSL_DEBUG_MSG( 1, ( "opaque PSK not supported with DHE-PSK" ) );
return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
+ }
#endif
if( p != end )
@@ -4342,7 +4348,10 @@
#if defined(MBEDTLS_USE_PSA_CRYPTO)
/* Opaque PSKs are currently only supported for PSK-only. */
if( ssl_use_opaque_psk( ssl ) == 1 )
+ {
+ MBEDTLS_SSL_DEBUG_MSG( 1, ( "opaque PSK not supported with ECDHE-PSK" ) );
return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
+ }
#endif
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index d45c0ed..6169a37 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -2162,17 +2162,6 @@
#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED)
if( opt.psk_opaque != 0 || opt.psk_list_opaque != 0 )
{
- /* Ensure that the chosen ciphersuite is PSK-only; we must know
- * the ciphersuite in advance to set the correct policy for the
- * PSK key slot. This limitation might go away in the future. */
- if( ciphersuite_info->key_exchange != MBEDTLS_KEY_EXCHANGE_PSK ||
- opt.min_version != MBEDTLS_SSL_MINOR_VERSION_3 )
- {
- mbedtls_printf( "opaque PSKs are only supported in conjunction with forcing TLS 1.2 and a PSK-only ciphersuite through the 'force_ciphersuite' option.\n" );
- ret = 2;
- goto usage;
- }
-
/* Determine KDF algorithm the opaque PSK will be used in. */
#if defined(MBEDTLS_SHA512_C)
if( ciphersuite_info->mac == MBEDTLS_MD_SHA384 )
diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh
index 545da09..b1a3288 100755
--- a/tests/ssl-opt.sh
+++ b/tests/ssl-opt.sh
@@ -1734,6 +1734,39 @@
-s "error" \
-c "error"
+requires_config_enabled MBEDTLS_USE_PSA_CRYPTO
+run_test "Opaque psk: server: ECDHE-PSK not supported" \
+ "$P_SRV debug_level=1 psk=abc123 psk_identity=foo psk_opaque=1 \
+ force_version=tls12 \
+ force_ciphersuite=TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA" \
+ "$P_CLI debug_level=1 psk=abc123 psk_identity=foo" \
+ 1 \
+ -s "opaque PSK not supported with ECDHE-PSK" \
+ -s "error" \
+ -c "error"
+
+requires_config_enabled MBEDTLS_USE_PSA_CRYPTO
+run_test "Opaque psk: server: DHE-PSK not supported" \
+ "$P_SRV debug_level=1 psk=abc123 psk_identity=foo psk_opaque=1 \
+ force_version=tls12 \
+ force_ciphersuite=TLS-DHE-PSK-WITH-AES-128-CBC-SHA" \
+ "$P_CLI debug_level=1 psk=abc123 psk_identity=foo" \
+ 1 \
+ -s "opaque PSK not supported with DHE-PSK" \
+ -s "error" \
+ -c "error"
+
+requires_config_enabled MBEDTLS_USE_PSA_CRYPTO
+run_test "Opaque psk: server: RSA-PSK not supported" \
+ "$P_SRV debug_level=1 psk=abc123 psk_identity=foo psk_opaque=1 \
+ force_version=tls12 \
+ force_ciphersuite=TLS-RSA-PSK-WITH-AES-128-CBC-SHA" \
+ "$P_CLI debug_level=1 psk=abc123 psk_identity=foo" \
+ 1 \
+ -s "opaque PSK not supported with RSA-PSK" \
+ -s "error" \
+ -c "error"
+
# Test ciphersuites which we expect to be fully supported by PSA Crypto
# and check that we don't fall back to Mbed TLS' internal crypto primitives.
run_test_psa TLS-ECDHE-ECDSA-WITH-AES-128-CCM