Add specialized PSA to mbedtls PK/RSA error mapping function

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
diff --git a/include/mbedtls/pk.h b/include/mbedtls/pk.h
index ad7af98..189df85 100644
--- a/include/mbedtls/pk.h
+++ b/include/mbedtls/pk.h
@@ -90,6 +90,10 @@
 #if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY)
 int mbedtls_pk_ecp_psa_err_translate( psa_status_t status );
 #endif
+
+#if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY)
+int mbedtls_pk_rsa_psa_err_translate( psa_status_t status );
+#endif
 #endif
 
 /**
diff --git a/library/rsa.c b/library/rsa.c
index 36f487f..ef262d9 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -66,6 +66,33 @@
 #define mbedtls_free   free
 #endif
 
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+#include "mbedtls/pk.h"
+#endif
+
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+int mbedtls_pk_rsa_psa_err_translate( psa_status_t status )
+{
+    switch( status )
+    {
+        case PSA_ERROR_NOT_PERMITTED:
+        case PSA_ERROR_INVALID_ARGUMENT:
+        case PSA_ERROR_INVALID_HANDLE:
+            return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA );
+        case PSA_ERROR_BUFFER_TOO_SMALL:
+            return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE );
+        case PSA_ERROR_INSUFFICIENT_ENTROPY:
+            return( MBEDTLS_ERR_RSA_RNG_FAILED );
+        case PSA_ERROR_INVALID_SIGNATURE:
+            return( MBEDTLS_ERR_RSA_VERIFY_FAILED );
+        case PSA_ERROR_INVALID_PADDING:
+            return( MBEDTLS_ERR_RSA_INVALID_PADDING );
+        default:
+            return( mbedtls_pk_psa_err_translate( status ) );
+    }
+}
+#endif
+
 #if !defined(MBEDTLS_RSA_ALT)
 
 /* Parameter validation macros */