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