Add specialized PSA to mbedtls PK/ECDSA error mapping function

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
diff --git a/include/mbedtls/pk.h b/include/mbedtls/pk.h
index b496cb7..ad7af98 100644
--- a/include/mbedtls/pk.h
+++ b/include/mbedtls/pk.h
@@ -86,6 +86,10 @@
 
 #if defined(MBEDTLS_USE_PSA_CRYPTO)
 int mbedtls_pk_psa_err_translate( psa_status_t status );
+
+#if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY)
+int mbedtls_pk_ecp_psa_err_translate( psa_status_t status );
+#endif
 #endif
 
 /**
diff --git a/library/ecdsa.c b/library/ecdsa.c
index 0b612ce..a112ada 100644
--- a/library/ecdsa.c
+++ b/library/ecdsa.c
@@ -47,12 +47,38 @@
 #include "mbedtls/platform_util.h"
 #include "mbedtls/error.h"
 
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+#include "mbedtls/pk.h"
+#endif
+
 /* Parameter validation macros based on platform_util.h */
 #define ECDSA_VALIDATE_RET( cond )    \
     MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ECP_BAD_INPUT_DATA )
 #define ECDSA_VALIDATE( cond )        \
     MBEDTLS_INTERNAL_VALIDATE( cond )
 
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+int mbedtls_pk_ecp_psa_err_translate( psa_status_t status )
+{
+    switch( status )
+    {
+        case PSA_ERROR_NOT_PERMITTED:
+        case PSA_ERROR_INVALID_ARGUMENT:
+            return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+        case PSA_ERROR_INVALID_HANDLE:
+            return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE );
+        case PSA_ERROR_BUFFER_TOO_SMALL:
+            return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
+        case PSA_ERROR_INSUFFICIENT_ENTROPY:
+            return( MBEDTLS_ERR_ECP_RANDOM_FAILED );
+        case PSA_ERROR_INVALID_SIGNATURE:
+            return( MBEDTLS_ERR_ECP_VERIFY_FAILED );
+        default:
+            return( mbedtls_pk_psa_err_translate( status ) );
+    }
+}
+#endif
+
 #if defined(MBEDTLS_ECP_RESTARTABLE)
 
 /*