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 */