diff --git a/library/pk.c b/library/pk.c
index 5f8cbc2..bba2ef7 100644
--- a/library/pk.c
+++ b/library/pk.c
@@ -545,42 +545,28 @@
     if( ! mbedtls_pk_can_do( ctx, pk_type ) )
         return( MBEDTLS_ERR_PK_TYPE_MISMATCH );
 
-    if( pk_type == MBEDTLS_PK_RSASSA_PSS &&
-        mbedtls_pk_get_type( ctx ) == MBEDTLS_PK_OPAQUE )
-    {
-#if defined(MBEDTLS_RSA_C)
-        const mbedtls_svc_key_id_t *key = (const mbedtls_svc_key_id_t *) ctx->pk_ctx;
-        psa_status_t status;
-
-        /* PSA has its own RNG */
-        (void) f_rng;
-        (void) p_rng;
-
-        psa_md_alg = mbedtls_psa_translate_md( md_alg );
-        if( psa_md_alg == 0 )
-            return( MBEDTLS_ERR_PK_BAD_INPUT_DATA );
-
-        status = psa_sign_hash( *key, PSA_ALG_RSA_PSS( psa_md_alg ),
-                                hash, hash_len,
-                                sig, sig_size, sig_len );
-        if( status != PSA_SUCCESS )
-            return( mbedtls_pk_error_from_psa_rsa( status ) );
-
-        return 0;
-#else
-        return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE );
-#endif /* MBEDTLS_RSA_C */
-    }
-
     if( pk_type != MBEDTLS_PK_RSASSA_PSS )
     {
         return( mbedtls_pk_sign( ctx, md_alg, hash, hash_len,
                                  sig, sig_size, sig_len, f_rng, p_rng ) );
     }
+
 #if defined(MBEDTLS_RSA_C)
     psa_md_alg = mbedtls_psa_translate_md( md_alg );
     if( psa_md_alg == 0 )
         return( MBEDTLS_ERR_PK_BAD_INPUT_DATA );
+
+    if( mbedtls_pk_get_type( ctx ) == MBEDTLS_PK_OPAQUE )
+    {
+        const mbedtls_svc_key_id_t *key = (const mbedtls_svc_key_id_t *) ctx->pk_ctx;
+        psa_status_t status;
+
+        status = psa_sign_hash( *key, PSA_ALG_RSA_PSS( psa_md_alg ),
+                                hash, hash_len,
+                                sig, sig_size, sig_len );
+        return( mbedtls_pk_error_from_psa_rsa( status ) );
+    }
+
     return( mbedtls_pk_psa_rsa_sign_ext( PSA_ALG_RSA_PSS( psa_md_alg ),
                                          ctx->pk_ctx, hash, hash_len,
                                          sig, sig_size, sig_len ) );
