From 9445abf16c03ae376be1ec4bd25f4b65629b1f1e Mon Sep 17 00:00:00 2001 From: wangkun Date: Mon, 26 Jun 2023 20:42:08 +0800 Subject: [PATCH] Adapt libqca for container scenario --- test/CA/libqca/Makefile | 6 ++++ test/CA/libqca/include/ra_client_api.h | 5 +++ test/CA/libqca/src/ra_operate_api.c | 46 ++++++++++++++++++++++++++ test/CA/libqca/src/ra_operate_api.h | 3 ++ 4 files changed, 60 insertions(+) diff --git a/test/CA/libqca/Makefile b/test/CA/libqca/Makefile index 51d5112..bf50e82 100644 --- a/test/CA/libqca/Makefile +++ b/test/CA/libqca/Makefile @@ -11,6 +11,12 @@ LIB_SOURCES := src/ra_operate_api.c LIB_SOURCES += $(ITRUSTEE_BUILD_PATH)/src/CA/libteec_adaptor.c LIB_CFLAGS += -Werror -Wall -Wextra -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIC -D_FORTIFY_SOURCE=2 -O2 +ifeq ($(TARGET_HOST_QCA), y) +LIB_CFLAGS += -DHOST_QCA +endif +ifeq ($(TARGET_CONTAINER_QCA), y) +LIB_CFLAGS += -DCONTAINER_QCA +endif LIB_CFLAGS += -I$(ITRUSTEE_BUILD_PATH)/thirdparty/open_source/libboundscheck/include LIB_CFLAGS += -I$(ITRUSTEE_BUILD_PATH)/include/CA diff --git a/test/CA/libqca/include/ra_client_api.h b/test/CA/libqca/include/ra_client_api.h index dd793a3..afa9e07 100644 --- a/test/CA/libqca/include/ra_client_api.h +++ b/test/CA/libqca/include/ra_client_api.h @@ -19,4 +19,9 @@ struct ra_buffer_data { }; TEEC_Result RemoteAttest(struct ra_buffer_data *in, struct ra_buffer_data *out); +#ifdef HOST_QCA +TEEC_Result RegisterContainer(struct ra_buffer_data *container_info, TEEC_Context *context, + TEEC_Session *session, uint32_t *origin); +#endif + #endif diff --git a/test/CA/libqca/src/ra_operate_api.c b/test/CA/libqca/src/ra_operate_api.c index 810f11f..0c4d4bc 100644 --- a/test/CA/libqca/src/ra_operate_api.c +++ b/test/CA/libqca/src/ra_operate_api.c @@ -17,11 +17,19 @@ #include "ra_log.h" #include "ra_client_api.h" +#ifdef CONTAINER_QCA +static const TEEC_UUID g_tee_qta_report_uuid = { + 0x4f84c0e0, 0x4c3f, 0x422f, { + 0x97, 0xdc, 0x14, 0xbf, 0xa2, 0x31, 0x4a, 0xd1 + } +}; +#else static const TEEC_UUID g_tee_qta_uuid = { 0xe08f7eca, 0xe875, 0x440e, { 0x9a, 0xb0, 0x5f, 0x38, 0x11, 0x36, 0xc6, 0x00 } }; +#endif static TEEC_Result set_remote_attest_out_data(TEEC_SharedMemory *shared_out, uint32_t out_size, struct ra_buffer_data *out) @@ -117,7 +125,11 @@ TEEC_Result RemoteAttest(struct ra_buffer_data *in, struct ra_buffer_data *out) TEEC_Context context = {0}; TEEC_Session session = {0}; TEEC_Operation operation = {0}; +#ifdef CONTAINER_QCA + TEEC_UUID uuid = g_tee_qta_report_uuid; +#else TEEC_UUID uuid = g_tee_qta_uuid; +#endif TEEC_Result result = TEEC_InitializeContext(NULL, &context); if (result != TEEC_SUCCESS) { @@ -145,3 +157,37 @@ cleanup_1: TEEC_FinalizeContext(&context); return result; } + +#ifdef HOST_QCA +static TEEC_Result container_info_ops(struct ra_buffer_data *info, uint32_t cmd, + TEEC_Context *context, TEEC_Session *session, uint32_t *origin) +{ + /* invoke command */ + TEEC_Operation operation = {0}; + operation.started = 1; + operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, + TEEC_NONE, TEEC_NONE); + + TEEC_SharedMemory shared_info; + (void)memset_s(&shared_info, sizeof(shared_info), 0 ,sizeof(shared_info)); + shared_info.size = info->size; + shared_info.flags = TEEC_MEM_INPUT; + TEEC_Result result = TEEC_AllocateSharedMemory(context, &shared_info); + if (result != TEEC_SUCCESS) + tloge("allocate shared container info failed, result = 0x%x\n", result); + TEEC_ReleaseSharedMemory(&shared_info); + return result; +} + +TEEC_Result RegisterContainer(struct ra_buffer_date *container_info, TEEC_Context *context, + TEEC_Session *session, uint32_t *origin) +{ + if (container_info == NULL || container_info->buf == NULL || + container_info->size == 0 || container_info->size > PARAMS_RESERVED_SIZE || + context == NULL || session == NULL || origin == NULL) { + tloge("invalid input\n"); + return TEEC_ERROR_BAD_PARAMETERS; + } + return container_info_ops(container_info, REGISTER_CONTAINER_CMD, context, session, origin); +} +#endif diff --git a/test/CA/libqca/src/ra_operate_api.h b/test/CA/libqca/src/ra_operate_api.h index 0269712..a53dd47 100644 --- a/test/CA/libqca/src/ra_operate_api.h +++ b/test/CA/libqca/src/ra_operate_api.h @@ -20,5 +20,8 @@ #define PARAMS_RESERVED_SIZE (0x2000) #define OUT_DATA_RESERVED_SIZE (0x3000) #define REMOTE_ATTEST_CMD (0x1001) +#ifdef HOST_QCA +#define REGISTER_CONTAINER_CMD (0x1002) +#endif #endif -- Gitee