feat(tc): get entropy with PSA Crypto API

The PSA Crypto API is available with sending messages to RSE.  Change
to invoke PSA Crypto API for getting entropy.

Change-Id: I4b2dc4eb99606c2425b64949d9c3f5c576883758
Signed-off-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Icen Zeyada <Icen.Zeyada2@arm.com>
This commit is contained in:
Leo Yan 2025-01-31 10:20:28 +00:00
parent 1147a470c2
commit 8f0235fb8f
2 changed files with 19 additions and 4 deletions

View file

@ -248,7 +248,8 @@ include drivers/arm/rse/rse_comms.mk
BL1_SOURCES += ${RSE_COMMS_SOURCES}
BL2_SOURCES += ${RSE_COMMS_SOURCES}
BL31_SOURCES += ${RSE_COMMS_SOURCES}
BL31_SOURCES += ${RSE_COMMS_SOURCES} \
lib/psa/rse_platform.c
# Include Measured Boot makefile before any Crypto library makefile.
# Crypto library makefile may need default definitions of Measured Boot build

View file

@ -11,6 +11,7 @@
#include <string.h>
#include <lib/mmio.h>
#include <lib/psa/rse_platform_api.h>
#include <lib/smccc.h>
#include <lib/utils_def.h>
#include <plat/common/platform.h>
@ -24,20 +25,33 @@ DEFINE_SVC_UUID2(_plat_trng_uuid,
);
uuid_t plat_trng_uuid;
/* Dummy implementation */
bool plat_get_entropy(uint64_t *out)
{
#if CRYPTO_SUPPORT
psa_status_t status;
status = rse_platform_get_entropy((uint8_t *)out, sizeof(*out));
if (status != PSA_SUCCESS) {
printf("Failed for entropy read, psa_status=%d\n", status);
return false;
}
#else
/* Dummy value */
*out = 0xABBAEDDAACDCDEAD;
#endif
return true;
}
void plat_entropy_setup(void)
{
uint64_t dummy;
uint64_t entropy;
plat_trng_uuid = _plat_trng_uuid;
/* Initialise the entropy source and trigger RNG generation */
plat_get_entropy(&dummy);
if (!plat_get_entropy(&entropy)) {
ERROR("Failed to setup entropy\n");
panic();
}
}