ssl: accept TLS 1.2 rsa_pss_rsae signature schemes

Signed-off-by: Viktor Sokolovskiy <maokaman@gmail.com>
(cherry picked from commit c064ba0edb)
This commit is contained in:
Viktor Sokolovskiy
2026-04-04 03:57:04 +03:00
parent 4eb967981f
commit c4738fab06
4 changed files with 42 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
Bugfix
* Fix a TLS 1.2 regression that caused clients to reject valid
ServerKeyExchange signatures using RSA-PSS signature scheme values.

View File

@@ -2591,6 +2591,25 @@ static inline int mbedtls_ssl_get_pk_type_and_md_alg_from_sig_alg(
static inline int mbedtls_ssl_tls12_sig_alg_is_supported(
const uint16_t sig_alg)
{
#if defined(PSA_WANT_ALG_RSA_PSS)
switch (sig_alg) {
#if defined(PSA_WANT_ALG_SHA_256)
case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256:
return 1;
#endif
#if defined(PSA_WANT_ALG_SHA_384)
case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384:
return 1;
#endif
#if defined(PSA_WANT_ALG_SHA_512)
case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512:
return 1;
#endif
default:
break;
}
#endif /* PSA_WANT_ALG_RSA_PSS */
/* High byte is hash */
unsigned char hash = MBEDTLS_BYTE_1(sig_alg);
unsigned char sig = MBEDTLS_BYTE_0(sig_alg);

View File

@@ -3546,3 +3546,15 @@ send_invalid_sig_alg:MBEDTLS_SSL_SIG_ECDSA:MBEDTLS_SSL_HASH_SHA512:MBEDTLS_ERR_S
Default verify_result before doing a handshake
verify_result_without_handshake
TLS 1.2 accepts rsa_pss_rsae_sha256 in signature_algorithm
depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_256
ssl_tls12_sig_alg_supported:MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256:1
TLS 1.2 accepts rsa_pss_rsae_sha384 in signature_algorithm
depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_384
ssl_tls12_sig_alg_supported:MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384:1
TLS 1.2 accepts rsa_pss_rsae_sha512 in signature_algorithm
depends_on:PSA_WANT_ALG_RSA_PSS:PSA_WANT_ALG_SHA_512
ssl_tls12_sig_alg_supported:MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512:1

View File

@@ -5861,6 +5861,14 @@ exit:
}
/* END_CASE */
/* BEGIN_CASE depends_on:MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED */
void ssl_tls12_sig_alg_supported(int sig_alg, int expected)
{
TEST_EQUAL(mbedtls_ssl_tls12_sig_alg_is_supported((uint16_t) sig_alg),
expected);
}
/* END_CASE */
/* BEGIN_CASE depends_on:MBEDTLS_SSL_KEYING_MATERIAL_EXPORT:MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED:PSA_WANT_ECC_SECP_R1_384:PSA_WANT_ALG_SHA_256 */
void ssl_tls_exporter_consistent_result(int proto, int exported_key_length, int use_context)
{