diff --git a/library/ssl_misc.h b/library/ssl_misc.h index cb9b6aaa79..0caaa28e50 100644 --- a/library/ssl_misc.h +++ b/library/ssl_misc.h @@ -2055,20 +2055,58 @@ static inline int mbedtls_ssl_sig_alg_is_supported( MBEDTLS_ECDSA_C */ #if defined(MBEDTLS_SHA256_C) && \ - defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) + defined(MBEDTLS_PKCS1_V21) && \ + defined(MBEDTLS_RSA_C) case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256: break; +#endif /* MBEDTLS_SHA256_C && \ + MBEDTLS_PKCS1_V21 && \ + MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_SHA384_C) && \ + defined(MBEDTLS_PKCS1_V21) && \ + defined(MBEDTLS_RSA_C) case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384: break; +#endif /* MBEDTLS_SHA384_C && \ + MBEDTLS_PKCS1_V21 && \ + MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_SHA512_C) && \ + defined(MBEDTLS_PKCS1_V21) && \ + defined(MBEDTLS_RSA_C) case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512: break; -#endif /* MBEDTLS_SHA256_C && - MBEDTLS_X509_RSASSA_PSS_SUPPORT */ +#endif /* MBEDTLS_SHA512_C && \ + MBEDTLS_PKCS1_V21 && \ + MBEDTLS_RSA_C */ -#if defined(MBEDTLS_SHA256_C) && defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_SHA256_C) && \ + defined(MBEDTLS_PKCS1_V15) && \ + defined(MBEDTLS_RSA_C) case MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA256: break; -#endif /* MBEDTLS_SHA256_C && MBEDTLS_RSA_C*/ +#endif /* MBEDTLS_SHA256_C && \ + MBEDTLS_PKCS1_V15 && \ + MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_SHA384_C) && \ + defined(MBEDTLS_PKCS1_V15) && \ + defined(MBEDTLS_RSA_C) + case MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA384: + break; +#endif /* MBEDTLS_SHA384_C && \ + MBEDTLS_PKCS1_V15 && \ + MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_SHA512_C) && \ + defined(MBEDTLS_PKCS1_V15) && \ + defined(MBEDTLS_RSA_C) + case MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA512: + break; +#endif /* MBEDTLS_SHA384_C && \ + MBEDTLS_PKCS1_V15 && \ + MBEDTLS_RSA_C */ default: return( 0 ); diff --git a/library/ssl_tls13_generic.c b/library/ssl_tls13_generic.c index cc7a0ac01a..d1dcaed4dc 100644 --- a/library/ssl_tls13_generic.c +++ b/library/ssl_tls13_generic.c @@ -350,7 +350,7 @@ static int ssl_tls13_parse_certificate_verify( mbedtls_ssl_context *ssl, md_alg = MBEDTLS_MD_SHA512; sig_alg = MBEDTLS_PK_ECDSA; break; -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PKCS1_V21) #if defined(MBEDTLS_SHA256_C) case MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256: md_alg = MBEDTLS_MD_SHA256; @@ -371,7 +371,7 @@ static int ssl_tls13_parse_certificate_verify( mbedtls_ssl_context *ssl, sig_alg = MBEDTLS_PK_RSASSA_PSS; break; #endif /* MBEDTLS_SHA512_C */ -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ +#endif /* MBEDTLS_RSA_C && MBEDTLS_PKCS1_V21 */ default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "Certificate Verify: Unknown signature algorithm." ) ); goto error; @@ -1025,8 +1025,10 @@ static int ssl_tls13_get_sig_alg_from_pk( mbedtls_ssl_context *ssl, break; #endif /* MBEDTLS_ECDSA_C */ -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) +#if defined(MBEDTLS_RSA_C) case MBEDTLS_SSL_SIG_RSA: +#if defined(MBEDTLS_PKCS1_V21) +#if defined(MBEDTLS_SHA256_C) if( own_key_size <= 2048 && mbedtls_ssl_sig_alg_is_received( ssl, MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256 ) ) @@ -1036,8 +1038,11 @@ static int ssl_tls13_get_sig_alg_from_pk( mbedtls_ssl_context *ssl, *pk_type = MBEDTLS_PK_RSASSA_PSS; return( 0 ); } - else if( own_key_size <= 3072 && - mbedtls_ssl_sig_alg_is_received( ssl, + else +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA384_C) + if( own_key_size <= 3072 && + mbedtls_ssl_sig_alg_is_received( ssl, MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384 ) ) { *algorithm = MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384; @@ -1045,8 +1050,11 @@ static int ssl_tls13_get_sig_alg_from_pk( mbedtls_ssl_context *ssl, *pk_type = MBEDTLS_PK_RSASSA_PSS; return( 0 ); } - else if( own_key_size <= 4096 && - mbedtls_ssl_sig_alg_is_received( ssl, + else +#endif /* MBEDTLS_SHA384_C */ +#if defined(MBEDTLS_SHA512_C) + if( own_key_size <= 4096 && + mbedtls_ssl_sig_alg_is_received( ssl, MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512 ) ) { *algorithm = MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512; @@ -1054,8 +1062,55 @@ static int ssl_tls13_get_sig_alg_from_pk( mbedtls_ssl_context *ssl, *pk_type = MBEDTLS_PK_RSASSA_PSS; return( 0 ); } + else +#endif /* MBEDTLS_SHA512_C */ +#endif /* MBEDTLS_PKCS1_V21 */ +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SHA256_C) + if( own_key_size <= 2048 && + mbedtls_ssl_sig_alg_is_received( ssl, + MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA256 ) ) + { + *algorithm = MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA256; + *md_alg = MBEDTLS_MD_SHA256; + *pk_type = MBEDTLS_PK_RSA; + return( 0 ); + } + else +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA384_C) + if( own_key_size <= 3072 && + mbedtls_ssl_sig_alg_is_received( ssl, + MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA384 ) ) + { + *algorithm = MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA384; + *md_alg = MBEDTLS_MD_SHA384; + *pk_type = MBEDTLS_PK_RSA; + return( 0 ); + } + else +#endif /* MBEDTLS_SHA384_C */ +#if defined(MBEDTLS_SHA512_C) + if( own_key_size <= 4096 && + mbedtls_ssl_sig_alg_is_received( ssl, + MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA512 ) ) + { + *algorithm = MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA512; + *md_alg = MBEDTLS_MD_SHA512; + *pk_type = MBEDTLS_PK_RSA; + return( 0 ); + } + else +#endif /* MBEDTLS_SHA512_C */ +#endif /* MBEDTLS_PKCS1_V15 */ + { + MBEDTLS_SSL_DEBUG_MSG( 3, + ( "unknown key size: %" + MBEDTLS_PRINTF_SIZET " bits", + own_key_size ) ); + } break; -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ +#endif /* MBEDTLS_RSA_C */ default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "unkown signature type : %u", sig ) ); diff --git a/tests/suites/test_suite_pk.data b/tests/suites/test_suite_pk.data index a83c66f436..de0b01bf42 100644 --- a/tests/suites/test_suite_pk.data +++ b/tests/suites/test_suite_pk.data @@ -342,27 +342,27 @@ depends_on:MBEDTLS_ECP_DP_BP512R1_ENABLED pk_psa_sign:MBEDTLS_ECP_DP_BP512R1:PSA_ECC_FAMILY_BRAINPOOL_P_R1:512 PK Sign ext:RSA2048,PK_RSA,MD_SHA256 -depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_SHA256_C +depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_SHA256_C:MBEDTLS_RSA_C pk_psa_sign_ext:MBEDTLS_PK_RSA:2048:MBEDTLS_PK_RSA:MBEDTLS_MD_SHA256 PK Sign ext:RSA2048,PK_RSASSA_PSS,MD_SHA256 -depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_SHA256_C +depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_SHA256_C:MBEDTLS_RSA_C pk_psa_sign_ext:MBEDTLS_PK_RSA:2048:MBEDTLS_PK_RSASSA_PSS:MBEDTLS_MD_SHA256 PK Sign ext:RSA3072,PK_RSA,MD_SHA384 -depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_SHA384_C +depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_SHA384_C:MBEDTLS_RSA_C pk_psa_sign_ext:MBEDTLS_PK_RSA:3072:MBEDTLS_PK_RSA:MBEDTLS_MD_SHA384 PK Sign ext:RSA3072,PK_RSASSA_PSS,MD_SHA384 -depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_SHA384_C +depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_SHA384_C:MBEDTLS_RSA_C pk_psa_sign_ext:MBEDTLS_PK_RSA:3072:MBEDTLS_PK_RSASSA_PSS:MBEDTLS_MD_SHA384 PK Sign ext:RSA4096,PK_RSA,MD_SHA512 -depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_SHA512_C +depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_SHA512_C:MBEDTLS_RSA_C pk_psa_sign_ext:MBEDTLS_PK_RSA:4096:MBEDTLS_PK_RSA:MBEDTLS_MD_SHA512 PK Sign ext:RSA4096,PK_RSASSA_PSS,MD_SHA512 -depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_SHA512_C +depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_SHA512_C:MBEDTLS_RSA_C pk_psa_sign_ext:MBEDTLS_PK_RSA:4096:MBEDTLS_PK_RSASSA_PSS:MBEDTLS_MD_SHA512 PK Sign ext:SECP256R1,PK_ECDSA,MD_SHA256 diff --git a/tests/suites/test_suite_pk.function b/tests/suites/test_suite_pk.function index c0171b9b3e..e0877a2051 100644 --- a/tests/suites/test_suite_pk.function +++ b/tests/suites/test_suite_pk.function @@ -1098,9 +1098,7 @@ void pk_psa_sign_ext( int pk_type, int parameter, int key_pk_type, int md_alg ) const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); size_t hash_len = mbedtls_md_get_size( md_info ); void const *options = NULL; -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) mbedtls_pk_rsassa_pss_options rsassa_pss_options; -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ memset( hash, 0x2a, sizeof( hash ) ); memset( sig, 0, sizeof( sig ) ); @@ -1115,7 +1113,7 @@ void pk_psa_sign_ext( int pk_type, int parameter, int key_pk_type, int md_alg ) TEST_ASSERT( mbedtls_pk_sign_ext( key_pk_type, &pk, md_alg, hash, hash_len, sig, sizeof( sig ), &sig_len, mbedtls_test_rnd_std_rand, NULL ) == 0 ); -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) + if( key_pk_type == MBEDTLS_PK_RSASSA_PSS ) { rsassa_pss_options.mgf1_hash_id = md_alg; @@ -1123,7 +1121,6 @@ void pk_psa_sign_ext( int pk_type, int parameter, int key_pk_type, int md_alg ) rsassa_pss_options.expected_salt_len = mbedtls_md_get_size( md_info ); options = (const void*) &rsassa_pss_options; } -#endif TEST_ASSERT( mbedtls_pk_verify_ext( key_pk_type, options, &pk, md_alg, hash, hash_len, sig, sig_len ) == 0 ); exit: