diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 5fa02d2..23a12d2 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -7691,10 +7691,53 @@
 
     for( i = 0; received_sig_algs[i] != MBEDTLS_TLS_SIG_NONE; i++ )
     {
-        if( sig_alg == MBEDTLS_SSL_TLS12_SIG_ALG_FROM_SIG_AND_HASH_ALG(
-                            received_sig_algs[i] ) )
-            return( MBEDTLS_SSL_TLS12_HASH_ALG_FROM_SIG_AND_HASH_ALG(
-                        received_sig_algs[i] ) );
+        unsigned int hash_alg_received =
+                    MBEDTLS_SSL_TLS12_HASH_ALG_FROM_SIG_AND_HASH_ALG(
+                        received_sig_algs[i] );
+        unsigned int sig_alg_received =
+                    MBEDTLS_SSL_TLS12_SIG_ALG_FROM_SIG_AND_HASH_ALG(
+                        received_sig_algs[i] );
+
+        if( sig_alg == sig_alg_received )
+        {
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+            if( ssl->handshake->key_cert && ssl->handshake->key_cert->key )
+            {
+                psa_algorithm_t alg = PSA_ALG_NONE;
+                psa_algorithm_t alg2 = PSA_ALG_NONE;
+                psa_key_usage_t usage = 0;
+                psa_key_usage_t usage2 = 0;
+
+                if( sig_alg_received == MBEDTLS_SSL_SIG_ECDSA )
+                {
+
+                    alg = PSA_ALG_ECDSA(
+                                mbedtls_psa_translate_md( hash_alg_received ) );
+                    usage = PSA_KEY_USAGE_SIGN_HASH;
+                    alg2 = PSA_ALG_ECDH;
+                    usage2 = PSA_KEY_USAGE_DERIVE;
+                }
+                else if( sig_alg_received == MBEDTLS_SSL_SIG_RSA )
+                {
+                    alg = PSA_ALG_RSA_PKCS1V15_SIGN(
+                                mbedtls_psa_translate_md( hash_alg_received ) );
+                    usage = PSA_KEY_USAGE_SIGN_HASH;
+                    alg2 = PSA_ALG_RSA_PKCS1V15_CRYPT;
+                    usage2 = PSA_KEY_USAGE_DECRYPT;
+                }
+                else
+                    continue;
+
+                if( ! mbedtls_pk_can_do_ext( ssl->handshake->key_cert->key,
+                                             alg, usage ) &&
+                    ! mbedtls_pk_can_do_ext( ssl->handshake->key_cert->key,
+                                             alg2, usage2 ) )
+                    continue;
+            }
+
+#endif /* MBEDTLS_USE_PSA_CRYPTO */
+            return( hash_alg_received );
+        }
     }
 
     return( MBEDTLS_SSL_HASH_NONE );
