Attest: Implement API to get attestation public key
Implement non-secure interface function for IPC and library models and
secure interface function to get the public part of the attestation
key pair.
Add public key getter secure function / service to Initial Attestation
partition manifest.
Change-Id: Idae5f5d5d645afa6d3c7e62e9169387e57932137
Signed-off-by: David Vincze <david.vincze@arm.com>
diff --git a/interface/src/tfm_initial_attestation_ipc_api.c b/interface/src/tfm_initial_attestation_ipc_api.c
index 10b3a59..ed9264f 100644
--- a/interface/src/tfm_initial_attestation_ipc_api.c
+++ b/interface/src/tfm_initial_attestation_ipc_api.c
@@ -9,6 +9,7 @@
#include "tfm_veneers.h"
#include "tfm_ns_interface.h"
#include "psa/client.h"
+#include "psa/crypto_types.h"
#include "psa_manifest/sid.h"
#define IOVEC_LEN(x) (sizeof(x)/sizeof(x[0]))
@@ -81,3 +82,32 @@
return (enum psa_attest_err_t)status;
}
+
+enum psa_attest_err_t
+tfm_initial_attest_get_public_key(uint8_t *public_key,
+ size_t public_key_buf_size,
+ size_t *public_key_len,
+ psa_ecc_curve_t *elliptic_curve_type)
+{
+ psa_handle_t handle = PSA_NULL_HANDLE;
+ psa_status_t status;
+
+ psa_outvec out_vec[] = {
+ {.base = public_key, .len = public_key_buf_size},
+ {.base = elliptic_curve_type, .len = sizeof(*elliptic_curve_type)},
+ {.base = public_key_len, .len = sizeof(*public_key_len)}
+ };
+
+ handle = psa_connect(TFM_ATTEST_GET_PUBLIC_KEY_SID,
+ TFM_ATTEST_GET_PUBLIC_KEY_VERSION);
+ if (!PSA_HANDLE_IS_VALID(handle)) {
+ return PSA_ATTEST_ERR_GENERAL;
+ }
+
+ status = psa_call(handle, PSA_IPC_CALL,
+ NULL, 0,
+ out_vec, IOVEC_LEN(out_vec));
+ psa_close(handle);
+
+ return (enum psa_attest_err_t)status;
+}