no message

Match-id-7fde6ec40f9b90dbeb3c9ace912f951bf5331b21
This commit is contained in:
xxx
2022-03-31 09:57:36 +08:00
committed by xxx
354 changed files with 0 additions and 43090 deletions
-2
View File
@@ -1,2 +0,0 @@
add_subdirectory(libvendor_shared)
add_subdirectory(libvendor_static)
@@ -1,104 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
${CMAKE_CURRENT_SOURCE_DIR}/src/efuse/efuse_lib.c
${CMAKE_CURRENT_SOURCE_DIR}/src/hsm_upgrade/hsm_update_lib.c
${CMAKE_CURRENT_SOURCE_DIR}/src/scmi/scmi_lib.c
${CMAKE_CURRENT_SOURCE_DIR}/src/sec/sec_lib.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_counter_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_crypto_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_efuse_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_kms_internal.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_rpmb_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_counter_internal.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_crypto_internal.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_kms_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_verify_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/src/hsm_fuzz_api.c
${CMAKE_CURRENT_SOURCE_DIR}/src/hsm_pg_info_get/hsm_pg_info_lib.c
${CMAKE_CURRENT_SOURCE_DIR}/src/sfc/sfc_lib.c
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/efuse
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/include
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/sec/include
${CMAKE_CURRENT_SOURCE_DIR}/src/include
${CMAKE_CURRENT_SOURCE_DIR}/src/libhsm_client/include
${CMAKE_CURRENT_SOURCE_DIR}/src/hsm_upgrade
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/src
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/efuse
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/sfc
${CMAKE_CURRENT_SOURCE_DIR}/src/efuse
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_DEFINITIONS
DEF_BUILDUSERMODE
)
endif()
list(APPEND VENDOR_SHARED_LINKER_FLAGS
-Wl,-shared
-Wl,-X
-Wl,-EL
-Wl,-z,text
-Wl,-z,now
-Wl,-z,relro
-Wl,-z,noexecstack
-Wl,--gc-sections
-L${PREBUILD_LIBS}/${ARCH}
-nostdlib
-Wl,-z,max-page-size=4096
)
list(FIND PRODUCT_APPS "vendor_shared" index)
if (${index} GREATER -1)
set(IF_INSTALL DO_INSTALL)
endif()
list(REMOVE_ITEM TEE_C_FLAGS "-Werror")
tee_add_library(vendor_shared SHARED
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
LINKER_FLAGS
${CHOOSE_LLD}
${VENDOR_SHARED_LINKER_FLAGS}
${COMMON_LDFLAGS}
LINKGROUP
${VENDOR_SHARED_LIBRARIES}
${COMMON_LIBGCC_COMPS}
LIBS_INSTALL_PATH
${BOOTFS_STAGE_DIR}
${IF_INSTALL}
)
if ("${ARCH}" STREQUAL "arm")
set_target_properties(vendor_shared PROPERTIES OUTPUT_NAME "vendor_shared_a32")
endif()
-62
View File
@@ -1,62 +0,0 @@
SONAME := libvendor_shared$(TARG).so
libvendor_shared_c_files := $(wildcard src/*.c)
libvendor_shared_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
libvendor_shared_c_files += $(wildcard src/efuse/*.c)
libvendor_shared_c_files += $(wildcard src/hsm_upgrade/*.c)
libvendor_shared_c_files += $(wildcard src/scmi/*.c)
libvendor_shared_c_files += $(wildcard src/sec/*.c)
libvendor_shared_c_files += $(wildcard $(TOPDIR)/vendor/ascend/libvendor_shared/src/libhsm_client/src/*.c)
libvendor_shared_c_files += $(wildcard src/hsm_pg_info_get/*.c)
libvendor_shared_c_files += $(wildcard src/sfc/*.c)
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/efuse
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/include
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/sec/include/
inc-flags += -I$(TOPDIR)/vendor/ascend/libvendor_shared/src/include
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/sfc
# for hsm_client
inc-flags += -I$(TOPDIR)/vendor/ascend/libvendor_shared/src/libhsm_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/src
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/efuse
inc-flags += -I$(TOPDIR)/vendor/ascend/libvendor_shared/src/efuse
inc-flags += -I$(TOPDIR)/vendor/ascend/libvendor_shared/src/hsm_upgrade
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
MODULE_FILE = $(BUILD_DIR)/$(SONAME)
INSTALL_FILE = $(LIB_DIR)/$(SONAME)
target: $(MODULE_FILE)
$(INSTALL_FILE): $(MODULE_FILE)
@test -d $(LIB_DIR) || mkdir -p $(LIB_DIR)
@echo "[ INSTALL ] $(MODULE_FILE)"
$(VER)cp -rafp $(MODULE_FILE) $(LIB_DIR)
ifeq (${TARG},)
$(MODULE_FILE): $(libvendor_shared_objs)
@echo "[ LD ] $@ LIB_DIR=$(LIB_DIR)"
$(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections -o $@ \
$^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group $(LIB_VENDOR_FLAGS) \
$(LIBCOMPILER_RT_BUILTINS) --end-group -nostdlib -z max-page-size=4096
endif
ifeq (${TARG}, _a32)
$(MODULE_FILE): $(libvendor_shared_objs)
@echo "[ LD ] $@ LIB_DIR=$(LIB_DIR)"
$(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections -o $@ \
$^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group \
$(LIBCOMPILER_RT_BUILTINS) --end-group -nostdlib
endif
@@ -1,85 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description: efuse libs source file
* Author: chenyao
* Create: 2020/4/27
*/
#include "tee_bit_ops.h"
#include "sre_syscall.h"
#include "sre_syscalls_id_ext.h"
#include "hmdrv.h"
#include "syscall_api_common.h"
#include "efuse_lib_api.h"
uint32_t lib_efuse_write(uint32_t efuse_block_num, uint32_t start_bit, uint32_t dest_size,
uint8_t *efuse_ctx, uint32_t efuse_len, uint32_t dev_id)
{
uint64_t input_addr = (uint64_t)(uintptr_t)efuse_ctx;
uint64_t args[] = {
efuse_block_num,
start_bit,
dest_size,
(uint64_t)HIGH_32BIT(input_addr), (uint64_t)LOW_32BIT(input_addr),
efuse_len,
dev_id,
};
return hm_drv_call(SYSCALL_HSM_EFUSE_WRITE, args, ARRAY_SIZE(args));
}
uint32_t lib_efuse_burn(uint32_t efuse_block_num, uint32_t dev_id)
{
uint64_t args[] = {
efuse_block_num,
dev_id,
};
return hm_drv_call(SYSCALL_HSM_EFUSE_BURN, args, ARRAY_SIZE(args));
}
uint32_t lib_efuse_check(uint32_t efuse_block_num, uint32_t start_bit, uint32_t dest_size,
uint8_t *efuse_ctx, uint32_t efuse_len, uint32_t dev_id)
{
uint64_t input_addr = (uint64_t)(uintptr_t)efuse_ctx;
uint64_t args[] = {
efuse_block_num,
start_bit,
dest_size,
(uint64_t)HIGH_32BIT(input_addr), (uint64_t)LOW_32BIT(input_addr),
efuse_len,
dev_id,
};
return hm_drv_call(SYSCALL_HSM_EFUSE_CHECK, args, ARRAY_SIZE(args));
}
uint32_t lib_efuse_nv_cnt_burn(uint32_t nv_cnt, uint32_t dev_id)
{
uint64_t args[] = {
nv_cnt,
dev_id,
};
return hm_drv_call(SYSCALL_HSM_EFUSE_NV_CNT_BURN, args, ARRAY_SIZE(args));
}
uint32_t lib_efuse_nv_cnt_check(uint32_t nv_cnt, uint32_t dev_id)
{
uint64_t args[] = {
nv_cnt,
dev_id,
};
return hm_drv_call(SYSCALL_HSM_EFUSE_NV_CNT_CHECK, args, ARRAY_SIZE(args));
}
uint32_t lib_efuse_boot_check(uint32_t dev_id)
{
uint64_t args[] = {
dev_id,
};
return hm_drv_call(SYSCALL_HSM_EFUSE_NS_FORIBID_CHECK, args, ARRAY_SIZE(args));
}
@@ -1,27 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description: efuse libs api file
* Author: huawei
* Create: 2020/4/27
*/
#ifndef EFUSE_LIB_API_H
#define EFUSE_LIB_API_H
#include <stdint.h>
uint32_t lib_efuse_write(uint32_t efuse_block_num, uint32_t start_bit, uint32_t dest_size,
uint8_t *efuse_ctx, uint32_t efuse_len, uint32_t dev_id);
uint32_t lib_efuse_burn(uint32_t efuse_block_num, uint32_t dev_id);
uint32_t lib_efuse_check(uint32_t efuse_block_num, uint32_t start_bit, uint32_t dest_size,
uint8_t *efuse_ctx, uint32_t efuse_len, uint32_t dev_id);
uint32_t lib_efuse_nv_cnt_burn(uint32_t nv_cnt, uint32_t dev_id);
uint32_t lib_efuse_nv_cnt_check(uint32_t nv_cnt, uint32_t dev_id);
uint32_t lib_efuse_boot_check(uint32_t dev_id);
#endif
@@ -1,23 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: hsm pg info get lib
* Author: chenyao
* Create: 2020/9/3
*/
#include "sre_syscalls_id_ext.h"
#include "hmdrv.h"
#include "syscall_api_common.h"
#include "hsm_pg_info_lib_api.h"
uint32_t lib_pg_info_read(uint32_t dev_id, uint32_t module, uint32_t data, uint64_t *out_data)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = dev_id;
args[ARRAY_INDEX1] = module;
args[ARRAY_INDEX2] = data;
args[ARRAY_INDEX3] = (uint64_t)(uintptr_t)out_data;
return hm_drv_call(SYSCALL_HSM_PG_GET, args, ARRAY_SIZE(args));
}
@@ -1,15 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description: hsm pg info get lib head file
* Author: chenyao
* Create: 2020/9/3
*/
#ifndef HSM_PG_INFO_LIB_API
#define HSM_PG_INFO_LIB_API
#include <stdint.h>
uint32_t lib_pg_info_read(uint32_t dev_id, uint32_t module, uint32_t data, uint64_t *out_data);
#endif
@@ -1,365 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
* Description: firmware update libs source file
* Author: huawei
* Create: 2019/4/6
*/
#include "sre_syscalls_id_ext.h"
#include "hmdrv.h"
#include "syscall_api_common.h"
#include "hsm_update_lib_api.h"
uint32_t lib_secure_flash_read(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = (uint64_t)(uintptr_t)buffer;
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_FLASH_READ, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_flash_write(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = (uint64_t)(uintptr_t)buffer;
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_FLASH_WRITE, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_flash_erase(uint32_t offset, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_FLASH_ERASE, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_img_verify(uint64_t nsecure_addr, uint32_t length,
uint32_t chip_id, uint32_t img_id, uint64_t *img_addr, uint32_t pss_cfg)
{
uint64_t args[ARRAY_INDEX8] = {0};
args[ARRAY_INDEX0] = img_id;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)nsecure_addr);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)nsecure_addr);
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
args[ARRAY_INDEX5] = upper_32_bits((uintptr_t)img_addr);
args[ARRAY_INDEX6] = lower_32_bits((uintptr_t)img_addr);
args[ARRAY_INDEX7] = pss_cfg;
return hm_drv_call(SYSCALL_SECURE_IMG_VERIFY, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_verify_status_update(uint32_t chip_id, uint32_t img_id)
{
uint64_t args[ARRAY_INDEX8] = {0};
args[ARRAY_INDEX0] = img_id;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_VERIFY_STATUS_UPDATE, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_img_update(uint32_t img_index, uint32_t chip_id, uint32_t *slice)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = img_index;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)slice);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)slice);
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_IMG_UPDATE, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_update_finish(uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_UPDATE_FINISH, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_version_get(uint32_t img_id, uint8_t *buffer, uint32_t buffer_size,
uint32_t chip_id, uint32_t area_check)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = img_id;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX3] = buffer_size;
args[ARRAY_INDEX4] = chip_id;
args[ARRAY_INDEX5] = area_check;
return hm_drv_call(SYSCALL_SECURE_VERSION_GET, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_count_get(uint32_t *count, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)count);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)count);
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_COUNT_GET, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_info_get(uint32_t flash_index, uint8_t *buffer, uint32_t *buffer_size, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = flash_index;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX3] = upper_32_bits((uintptr_t)buffer_size);
args[ARRAY_INDEX4] = chip_id;
args[ARRAY_INDEX5] = lower_32_bits((uintptr_t)buffer_size);
return hm_drv_call(SYSCALL_SECURE_INFO_GET, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_ufs_cnt_read(uint32_t *out_value, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)out_value);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)out_value);
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_UFS_CNT_READ, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_ufs_cnt_write(uint32_t in_value, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = in_value;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_UFS_CNT_WRITE, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_recovery_cnt_write(uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_RECOVERY_CNT_WRITE, args, ARRAY_SIZE(args));
}
/* sram read */
uint32_t lib_secure_sram_read(uint32_t offset, uint8_t *buf, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buf);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buf);
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_UPGRADE_SRAM_READ, args, ARRAY_SIZE(args));
}
/* read flash api for imgs upgrade */
uint32_t lib_upgrade_flash_read(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_UPGRADE_FLASH_READ, args, ARRAY_SIZE(args));
}
/* write flash api for imgs upgrade */
uint32_t lib_upgrade_flash_write(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX3] = length;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_UPGRADE_FLASH_WRITE, args, ARRAY_SIZE(args));
}
/* sysctrl read api */
uint32_t lib_secure_sysctrl_read(uint32_t offset, uint32_t *val, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)val);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)val);
args[ARRAY_INDEX3] = 0x0;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_UPGRADE_RESET_CNT_READ, args, ARRAY_SIZE(args));
}
/* sysctrl write api */
uint32_t lib_secure_sysctrl_write(uint32_t offset, uint32_t *val, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)val);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)val);
args[ARRAY_INDEX3] = 0x0;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_UPGRADE_RESET_CNT_WRITE, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_img_sync(uint32_t chip_id, uint32_t img_id, uint32_t base_part,
uint32_t baseline_flag)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = img_id;
args[ARRAY_INDEX1] = base_part;
args[ARRAY_INDEX2] = baseline_flag;
args[ARRAY_INDEX3] = 0x0;
args[ARRAY_INDEX4] = chip_id;
args[ARRAY_INDEX5] = 0x0;
return hm_drv_call(SYSCALL_SECURE_IMG_SYNC, args, ARRAY_SIZE(args));
}
uint32_t lib_root_key_get(uint8_t *buffer, uint32_t buffer_size)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX3] = buffer_size;
return hm_drv_call(SYSCALL_SECURE_ROOTKEY_GET, args, ARRAY_SIZE(args));
}
uint32_t lib_get_cmdline_info(uint32_t dev_id, uint32_t *buffer, uint32_t buffer_size)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = dev_id;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)buffer);
args[ARRAY_INDEX3] = buffer_size;
return hm_drv_call(SYSCALL_SECURE_CMDLINE_GET, args, ARRAY_SIZE(args));
}
uint32_t lib_reflash_hilink_ram(uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_REFLASH_HILINK, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_part_read(uint32_t chip_id, uint32_t img_id, uint64_t *img_addr,
uint32_t *length, uint32_t base_part)
{
uint64_t args[ARRAY_INDEX8] = { 0 };
args[ARRAY_INDEX0] = img_id;
args[ARRAY_INDEX1] = upper_32_bits((uintptr_t)length);
args[ARRAY_INDEX2] = lower_32_bits((uintptr_t)length);
args[ARRAY_INDEX3] = base_part;
args[ARRAY_INDEX4] = chip_id;
args[ARRAY_INDEX5] = upper_32_bits((uintptr_t)img_addr);
args[ARRAY_INDEX6] = lower_32_bits((uintptr_t)img_addr);
return hm_drv_call(SYSCALL_SECURE_PART_READ, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_get_baseline_flag(uint32_t chip_id, uint32_t *flag)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX4] = chip_id;
args[ARRAY_INDEX1] = (uint64_t)(uintptr_t)flag;
return hm_drv_call(SYSCALL_SECURE_GET_BLFLAG, args, ARRAY_SIZE(args));
}
uint32_t lib_secure_set_baseline_flag(uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_SET_BLFLAG, args, ARRAY_SIZE(args));
}
uint32_t lib_hboot1a_addr_get(uint32_t chip_id, uint32_t *image_addr, uint32_t *img_len)
{
uint64_t args[ARRAY_INDEX8] = { 0 };
args[ARRAY_INDEX1] = (uint64_t)(uintptr_t)(image_addr);
args[ARRAY_INDEX2] = (uint64_t)(uintptr_t)(img_len);
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_HBOOT_TRANS, args, ARRAY_SIZE(args));
}
uint32_t lib_is_update_finished(uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX8] = { 0 };
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_SECURE_UPDATE_STATUS, args, ARRAY_SIZE(args));
}
uint32_t lib_get_efuse_nvcnt(uint32_t *addr, uint32_t len, uint32_t dev_id)
{
uint64_t args[ARRAY_INDEX8] = { 0 };
args[ARRAY_INDEX0] = (uint64_t)dev_id;
args[ARRAY_INDEX1] = (uint64_t)(uintptr_t)addr;
args[ARRAY_INDEX2] = (uint64_t)len;
return hm_drv_call(SYSCALL_GET_EFUSE_NVCNT, args, ARRAY_SIZE(args));
}
uint32_t lib_sync_flag_get(uint32_t chip_id, uint32_t *sync_flag)
{
uint64_t args[ARRAY_INDEX6] = {0};
args[ARRAY_INDEX0] = (uint64_t)(uintptr_t)sync_flag;
args[ARRAY_INDEX4] = chip_id;
return hm_drv_call(SYSCALL_GET_SYNC_FLAG, args, ARRAY_SIZE(args));
}
uint32_t lib_get_device_num(uint32_t *dev_num)
{
uint64_t args[ARRAY_INDEX8] = { 0 };
args[ARRAY_INDEX0] = (uint64_t)(uintptr_t)(dev_num);
return hm_drv_call(SYSCALL_GET_DEV_NUM, args, ARRAY_SIZE(args));
}
@@ -1,47 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description: update firmware libs api file
* Author: chenyao
* Create: 2020/4/6
*/
#ifndef HSM_UPDATE_LIB_API
#define HSM_UPDATE_LIB_API
#include <stdint.h>
uint32_t lib_secure_flash_read(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id);
uint32_t lib_secure_flash_write(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id);
uint32_t lib_secure_flash_erase(uint32_t offset, uint32_t length, uint32_t chip_id);
uint32_t lib_secure_img_verify(uint64_t nsecure_addr, uint32_t length,
uint32_t chip_id, uint32_t img_id, uint64_t *img_addr, uint32_t pss_cfg);
uint32_t lib_secure_img_update(uint32_t img_index, uint32_t chip_id, uint32_t *slice);
uint32_t lib_secure_update_finish(uint32_t chip_id);
uint32_t lib_secure_version_get(uint32_t img_id, uint8_t *buffer, uint32_t buffer_size,
uint32_t chip_id, uint32_t area_check);
uint32_t lib_secure_count_get(uint32_t *count, uint32_t chip_id);
uint32_t lib_secure_info_get(uint32_t flash_index, uint8_t *buffer, uint32_t *buffer_size, uint32_t chip_id);
uint32_t lib_secure_ufs_cnt_read(uint32_t *out_value, uint32_t chip_id);
uint32_t lib_secure_ufs_cnt_write(uint32_t in_value, uint32_t chip_id);
uint32_t lib_secure_verify_status_update(uint32_t chip_id, uint32_t img_id);
uint32_t lib_secure_sram_read(uint32_t offset, uint8_t *buf, uint32_t length, uint32_t chip_id);
uint32_t lib_upgrade_flash_read(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id);
uint32_t lib_upgrade_flash_write(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id);
uint32_t lib_secure_sysctrl_read(uint32_t offset, uint32_t *val, uint32_t chip_id);
uint32_t lib_secure_sysctrl_write(uint32_t offset, uint32_t *val, uint32_t chip_id);
uint32_t lib_secure_img_sync(uint32_t chip_id, uint32_t img_id, uint32_t base_part, uint32_t baseline_flag);
uint32_t lib_root_key_get(uint8_t *buffer, uint32_t buffer_size);
uint32_t lib_get_cmdline_info(uint32_t dev_id, uint32_t *buffer, uint32_t buffer_size);
uint32_t lib_reflash_hilink_ram(uint32_t chip_id);
uint32_t lib_secure_part_read(uint32_t chip_id, uint32_t img_id, uint64_t *img_addr, uint32_t *length,
uint32_t base_part);
uint32_t lib_secure_get_baseline_flag(uint32_t chip_id, uint32_t *flag);
uint32_t lib_secure_set_baseline_flag(uint32_t chip_id);
uint32_t lib_hboot1a_addr_get(uint32_t chip_id, uint32_t *image_addr, uint32_t *img_len);
uint32_t lib_get_efuse_nvcnt(uint32_t *addr, uint32_t len, uint32_t dev_id);
uint32_t lib_get_device_num(uint32_t *dev_num);
uint32_t lib_is_update_finished(uint32_t chip_id);
uint32_t lib_sync_flag_get(uint32_t chip_id, uint32_t *sync_flag);
uint32_t lib_secure_recovery_cnt_write(uint32_t chip_id);
#endif
@@ -1,28 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description: efuse libs header file
* Author: huawei
* Create: 2021/09/17
*/
#ifndef SYSCALL_API_COMMON_H
#define SYSCALL_API_COMMON_H
#define upper_32_bits(data) (uint32_t)(((data) >> 16) >> 16)
#define lower_32_bits(data) (uint32_t)(data)
/* array index */
#define ARRAY_INDEX0 0
#define ARRAY_INDEX1 1
#define ARRAY_INDEX2 2
#define ARRAY_INDEX3 3
#define ARRAY_INDEX4 4
#define ARRAY_INDEX5 5
#define ARRAY_INDEX6 6
#define ARRAY_INDEX7 7
#define ARRAY_INDEX8 8
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
#endif
#endif
@@ -1,50 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM counter api function and algorithm check head
* Author: chenyao
* Create: 2020-01-08
*/
#ifndef _HSM_COUNT_API_H_
#define _HSM_COUNT_API_H_
#include "hsm_public.h"
#define HSM_AC_STATUS_CHECK_LEN 0x4
typedef struct {
uint8_t *counter_info;
uint8_t *counter_auth;
uint32_t counter_auth_len;
uint32_t *counter_id;
} HSM_COUNT_CREATE_INFO;
typedef struct {
uint8_t *counter_info;
uint32_t counter_id;
uint64_t *count_value;
} HSM_COUNT_READ_INFO;
typedef struct {
uint8_t *counter_info;
uint32_t counter_id;
uint8_t *counter_auth;
uint32_t counter_auth_len;
} HSM_COUNT_DELETE_INFO;
typedef struct {
uint8_t *counter_info;
uint32_t counter_id;
uint8_t *counter_auth;
uint32_t counter_auth_len;
uint64_t counter_value_add;
uint64_t *counter_value;
} HSM_COUNT_INC_INFO;
TEE_Result TEE_HSM_CounterInit(uint32_t dev_id, uint8_t *counter_info);
TEE_Result TEE_HSM_CounterCreate(uint32_t dev_id, HSM_COUNT_CREATE_INFO *hsm_count_create_info);
TEE_Result TEE_HSM_CounterRead(uint32_t dev_id, HSM_COUNT_READ_INFO *hsm_count_read_info);
TEE_Result TEE_HSM_CounterDelete(uint32_t dev_id, HSM_COUNT_DELETE_INFO *hsm_count_delete_info);
TEE_Result TEE_HSM_CounterInc(uint32_t dev_id, HSM_COUNT_INC_INFO *hsm_count_inc_info);
TEE_Result TEE_HSM_AlgCheck(uint32_t dev_id, uint32_t *hsm_accelerator_status, uint32_t hsm_status_len);
#endif
@@ -1,26 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
* Description: HSM kms internal function head
* Author: chenyao
* Create: 2019-01-08
*/
#ifndef _HSM_COUNT_INTERNAL_H_
#define _HSM_COUNT_INTERNAL_H_
#include "hsm_public.h"
#include "hsm_counter_api.h"
TEE_Result counter_create_para_check(HSM_COUNT_CREATE_INFO *hsm_count_create_info);
TEE_Result counter_create_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_CREATE_INFO *hsm_count_create_info);
TEE_Result counter_read_para_check(HSM_COUNT_READ_INFO *hsm_count_read_info);
TEE_Result counter_read_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_READ_INFO *hsm_count_read_info);
TEE_Result counter_delete_para_check(HSM_COUNT_DELETE_INFO *hsm_count_delete_info);
TEE_Result counter_delete_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_DELETE_INFO *hsm_count_delete_info);
TEE_Result counter_inc_para_check(HSM_COUNT_INC_INFO *hsm_count_inc_info);
TEE_Result counter_inc_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_INC_INFO *hsm_count_inc_info);
#endif
@@ -1,155 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
* Description: hsm_api function
* Author: chenyao
* Create: 2020-02-09
*/
#ifndef _HSM_CRYPTO_API_H_
#define _HSM_CRYPTO_API_H_
#include "hsm_public.h"
typedef struct {
uint32_t alg_id;
uint32_t crypto_service;
CRYPTO_KEY_ELEMENT cipher_key;
uint8_t *iv_ptr;
uint32_t iv_size;
uint8_t *cipherkey_auth;
uint32_t cipherkey_authsize;
uint8_t *cipherkey_protectmsg;
uint32_t *session_handle;
uint32_t *max_chunk_size;
uint32_t *chunk_block_size;
} HSM_CIPHER_START_INFO;
typedef struct {
uint32_t session_handle;
uint32_t input_data_size;
uint8_t *input_data;
uint32_t *output_data_size;
uint8_t *output_data;
} HSM_CIPHER_PROCESS_INFO;
typedef struct {
uint32_t session_handle;
uint32_t *output_data_size;
uint8_t *output_data;
} HSM_CIPHER_FINISH_INFO;
typedef struct {
uint32_t alg_id;
uint32_t crypto_service;
uint32_t *session_handle;
uint32_t *max_chunk_size;
uint32_t *chunk_block_size;
} HSM_HASH_START_INFO;
typedef struct {
uint32_t session_handle;
uint32_t input_data_size;
uint8_t *input_data;
} HSM_HASH_PROCESS_INFO;
typedef struct {
uint32_t session_handle;
uint32_t *output_data_size;
uint8_t *output_data;
} HSM_HASH_FINISH_INFO;
typedef struct {
uint32_t alg_id;
uint32_t crypto_service;
CRYPTO_KEY_ELEMENT cipher_key;
uint8_t *cipherkey_auth;
uint32_t cipherkey_authsize;
uint8_t *cipherkey_protectmsg;
uint32_t *session_handle;
uint32_t *max_chunk_size;
uint32_t *chunk_block_size;
} HSM_MAC_START_INFO;
typedef struct {
uint32_t session_handle;
uint32_t input_data_size;
uint8_t *input_data;
} HSM_MAC_PROCESS_INFO;
typedef struct {
uint32_t session_handle;
uint32_t *output_data_size;
uint8_t *output_data;
} HSM_MAC_FINISH_INFO;
typedef struct {
uint32_t alg_id;
uint32_t crypto_service;
CRYPTO_KEY_ELEMENT cipher_key;
uint8_t *cipherkey_auth;
uint32_t cipherkey_authsize;
uint8_t *cipherkey_protectmsg;
uint32_t *session_handle;
uint32_t *max_chunk_size;
uint32_t *chunk_block_size;
} HSM_SIGN_START_INFO;
typedef struct {
uint32_t session_handle;
uint32_t input_data_size;
uint8_t *input_data;
} HSM_SIGN_PROCESS_INFO;
typedef struct {
uint32_t session_handle;
uint32_t *sign_size;
uint8_t *sign;
} HSM_SIGN_FINISH_INFO;
typedef struct {
uint32_t alg_id;
uint32_t crypto_service;
CRYPTO_KEY_ELEMENT cipher_key;
uint8_t *sign;
uint32_t sign_size;
uint8_t *cipherkey_auth;
uint32_t cipherkey_authsize;
uint8_t *cipherkey_protectmsg;
uint32_t *session_handle;
uint32_t *max_chunk_size;
uint32_t *chunk_block_size;
} HSM_VERIFY_START_INFO;
typedef struct {
uint32_t session_handle;
uint32_t input_data_size;
uint8_t *input_data;
} HSM_VERIFY_PROCESS_INFO;
typedef struct {
uint32_t session_handle;
uint32_t *verify_result;
} HSM_VERIFY_FINISH_INFO;
typedef struct {
uint8_t *random;
uint32_t random_size;
} HSM_GET_RANDOM_INFO;
TEE_Result TEE_HSM_CipherStart(uint32_t dev_id, HSM_CIPHER_START_INFO *cipher_start_info);
TEE_Result TEE_HSM_CipherProcess(uint32_t dev_id, HSM_CIPHER_PROCESS_INFO *cipher_process_info);
TEE_Result TEE_HSM_CipherFinish(uint32_t dev_id, HSM_CIPHER_FINISH_INFO *cipher_finish_info);
TEE_Result TEE_HSM_HashStart(uint32_t dev_id, HSM_HASH_START_INFO *hash_start_info);
TEE_Result TEE_HSM_HashProcess(uint32_t dev_id, HSM_HASH_PROCESS_INFO *hash_process_info);
TEE_Result TEE_HSM_HashFinish(uint32_t dev_id, HSM_HASH_FINISH_INFO *hash_finish_info);
TEE_Result TEE_HSM_MacStart(uint32_t dev_id, HSM_MAC_START_INFO *mac_start_info);
TEE_Result TEE_HSM_MacProcess(uint32_t dev_id, HSM_MAC_PROCESS_INFO *mac_process_info);
TEE_Result TEE_HSM_MacFinish(uint32_t dev_id, HSM_MAC_FINISH_INFO *mac_finish_info);
TEE_Result TEE_HSM_SignStart(uint32_t dev_id, HSM_SIGN_START_INFO *sign_start_info);
TEE_Result TEE_HSM_SignProcess(uint32_t dev_id, HSM_SIGN_PROCESS_INFO *sign_process_info);
TEE_Result TEE_HSM_SignFinish(uint32_t dev_id, HSM_SIGN_FINISH_INFO *sign_finish_info);
TEE_Result TEE_HSM_VerifyStart(uint32_t dev_id, HSM_VERIFY_START_INFO *verify_start_info);
TEE_Result TEE_HSM_VerifyProcess(uint32_t dev_id, HSM_VERIFY_PROCESS_INFO *verify_process_info);
TEE_Result TEE_HSM_VerifyFinish(uint32_t dev_id, HSM_VERIFY_FINISH_INFO *verify_finish_info);
TEE_Result TEE_HSM_GetRandom(uint32_t dev_id, HSM_GET_RANDOM_INFO *random_info);
#endif
@@ -1,29 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
* Description: HSM crypto api function head
* Author: chenyao
* Create: 2020-01-08
*/
#ifndef _HSM_CRYPTO_INTERNAL_H_
#define _HSM_CRYPTO_INTERNAL_H_
#include "hsm_public.h"
#include "hsm_crypto_api.h"
TEE_Result cipher_init_para_check(HSM_CIPHER_START_INFO *cipher_start_info);
TEE_Result cipher_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_CIPHER_START_INFO *cipher_start_info);
TEE_Result mac_init_para_check(HSM_MAC_START_INFO *mac_start_info);
TEE_Result mac_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_MAC_START_INFO *mac_start_info);
TEE_Result hash_init_para_check(HSM_HASH_START_INFO *hash_start_info);
TEE_Result hash_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_HASH_START_INFO *hash_start_info);
TEE_Result sign_init_para_check(HSM_SIGN_START_INFO *sign_start_info);
TEE_Result sign_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_SIGN_START_INFO *sign_start_info);
TEE_Result verify_init_para_check(HSM_VERIFY_START_INFO *verify_start_info);
TEE_Result verify_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_VERIFY_START_INFO *verify_start_info);
#endif
@@ -1,14 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: HSM efuse api function
* Author: chenyao
* Create: 2020-04-26
*/
#ifndef _HSM_EFUSE_API_H_
#define _HSM_EFUSE_API_H_
TEE_Result TEE_HSM_RIM_UpDate(uint32_t dev_id, uint8_t *rim_info, uint32_t rim_size);
TEE_Result TEE_HSM_Power_On(uint32_t dev_id);
TEE_Result TEE_HSM_Power_Off(uint32_t dev_id);
#endif
@@ -1,32 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description: HSM fuzz service test client api
* Author: chenyao
* Create: 2021-06-17
*/
#ifndef _HSM_FUZZ_API_H_
#define _HSM_FUZZ_API_H_
#define IMG_ADDR_SIZE 8
#define IMG_LEN_SIZE 4
#define IMG_ID_SIZE 4
TEE_Result TEE_HSM_SERVICE_FUZZ(uint8_t *service_msg, uint32_t msg_size, uint8_t *service_data, uint32_t data_size);
typedef struct {
uint32_t cmd;
uint32_t ddr_para_num;
uint32_t param_len_0;
uint32_t param_len_1;
uint32_t param_len_2;
uint32_t param_len_3;
uint32_t param_len_4;
uint32_t param_len_5;
uint32_t param_len_6;
uint32_t param_len_7;
uint8_t *buffer;
uint32_t buffer_len;
} FUZZ_SERVICE_S;
#endif
@@ -1,148 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM kms api function head
* Author: chenyao
* Create: 2020-01-08
*/
#ifndef _HSM_KMS_API_H_
#define _HSM_KMS_API_H_
#include "hsm_public.h"
typedef struct {
uint32_t alg_id;
CRYPTO_KEY_ELEMENT symkey;
uint8_t *symkey_auth;
uint32_t symkey_authsize;
uint8_t *symkey_protectmsg;
} HSM_GENERATE_SYMKEY_INFO;
typedef struct {
uint32_t alg_id;
CRYPTO_KEY_ELEMENT prikey;
CRYPTO_KEY_ELEMENT pubkey;
uint8_t *key_auth;
uint32_t key_authsize;
uint8_t *prikey_protectmsg;
uint8_t *pubkey_protectmsg;
} HSM_GENERATE_ASYMKEY_INFO;
typedef struct {
uint32_t alg_id;
uint32_t salt_size;
uint32_t irt_num;
uint8_t *salt;
CRYPTO_KEY_ELEMENT c_key;
uint8_t *key_auth;
uint32_t key_authsize;
uint8_t *key_protectmsg;
} HSM_DERIVE_HUK_INFO;
typedef struct {
uint32_t alg_id;
uint32_t salt_size;
uint32_t irt_num;
uint8_t *salt;
CRYPTO_KEY_ELEMENT source_key;
uint8_t *source_key_auth;
uint32_t source_key_authsize;
uint8_t *source_key_protectmsg;
CRYPTO_KEY_ELEMENT target_key;
uint8_t *target_key_auth;
uint32_t target_key_authsize;
uint8_t *target_key_protectmsg;
} HSM_DERIVE_KEY_INFO;
typedef struct {
uint32_t alg_id;
uint32_t salt_size;
uint32_t irt_num;
uint8_t *salt;
CRYPTO_KEY_ELEMENT import_key;
uint8_t *import_key_auth;
uint32_t import_key_authsize;
uint8_t *import_key_info;
uint8_t *import_key_protectmsg;
} HSM_IMPORT_KEY_INFO;
typedef struct {
uint32_t alg_id;
CRYPTO_KEY_ELEMENT exchange_pubkey;
uint8_t *exchange_pubkey_auth;
uint32_t exchange_pubkey_authsize;
uint8_t *exchange_pubkey_protectmsg;
uint8_t *generate_pubkey;
uint32_t generate_pubkey_len;
uint8_t *generate_key_domain;
} HSM_EXCHANGE_PUBKEY_INFO;
typedef struct {
uint32_t alg_id;
CRYPTO_KEY_ELEMENT exchange_prikey;
uint8_t *exchange_prikey_auth;
uint32_t exchange_prikey_authsize;
uint8_t *exchange_prikey_protectmsg;
uint8_t *exchange_pubkey;
uint32_t exchange_pubkey_len;
CRYPTO_KEY_ELEMENT exchange_key;
uint8_t *exchange_key_auth;
uint32_t exchange_key_authsize;
uint8_t *exchange_key_protectmsg;
uint8_t *agree_key_domain;
uint32_t domain_size;
} HSM_EXCHANGE_KEY_INFO;
typedef struct {
uint32_t alg_id;
CRYPTO_KEY_ELEMENT prokey;
uint8_t *prokey_auth;
uint32_t prokey_authsize;
uint8_t *prokey_protectmsg;
} HSM_UPDATE_PROKEY_INFO;
typedef struct {
uint8_t *past_key_auth;
uint32_t past_key_authsize;
uint8_t *key_protectmsg;
uint8_t *new_key_auth;
uint32_t new_key_authsize;
} HSM_UPDATE_KEYAUTH_INFO;
typedef struct {
uint8_t *delete_key_auth;
uint32_t delete_key_authsize;
uint8_t *delete_key_protectmsg;
} HSM_DELETE_KEY_INFO;
typedef struct {
uint32_t alg_id;
uint32_t salt_size;
uint32_t irt_num;
uint8_t *salt;
CRYPTO_KEY_ELEMENT export_key;
uint8_t *export_key_auth;
uint32_t export_key_authsize;
uint8_t *export_key_protectmsg;
uint8_t *export_key_info;
} HSM_EXPORT_KEY_INFO;
typedef struct {
uint32_t *state;
uint8_t *append_data;
} HSM_BBOX_INFO;
TEE_Result TEE_HSM_GenSymeticKey(uint32_t dev_id, HSM_GENERATE_SYMKEY_INFO *generate_symkey_info);
TEE_Result TEE_HSM_GenAsymeticKey(uint32_t dev_id, HSM_GENERATE_ASYMKEY_INFO *generate_asymkey_info);
TEE_Result TEE_HSM_DeriveHuk(uint32_t dev_id, HSM_DERIVE_HUK_INFO *derive_huk_info);
TEE_Result TEE_HSM_DeriveKey(uint32_t dev_id, HSM_DERIVE_KEY_INFO *derive_key_info);
TEE_Result TEE_HSM_ImportKey(uint32_t dev_id, HSM_IMPORT_KEY_INFO *import_key_info);
TEE_Result TEE_HSM_ExchangePubKey(uint32_t dev_id, HSM_EXCHANGE_PUBKEY_INFO *exchange_pubkey);
TEE_Result TEE_HSM_ExchangeAgreeKey(uint32_t dev_id, HSM_EXCHANGE_KEY_INFO *exchange_agree_key);
TEE_Result TEE_HSM_UpdateProtectMsg(uint32_t dev_id, HSM_UPDATE_PROKEY_INFO *update_prokey_info);
TEE_Result TEE_HSM_UpdateAuth(uint32_t dev_id, HSM_UPDATE_KEYAUTH_INFO *update_keyauth_info);
TEE_Result TEE_HSM_DeleteKey(uint32_t dev_id, HSM_DELETE_KEY_INFO *delete_key_info);
TEE_Result TEE_HSM_ExportKey(uint32_t dev_id, HSM_EXPORT_KEY_INFO *export_key_info);
TEE_Result TEE_HSM_Bbox(uint32_t dev_id, HSM_BBOX_INFO *hsm_bbox_info, uint64_t tv_sec, uint64_t tv_usec);
TEE_Result TEE_HSM_notify_prereset(uint32_t dev_id);
#endif
@@ -1,50 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
* Description: HSM kms internal function head
* Author: chenyao
* Create: 2019-01-08
*/
#ifndef _HSM_KMS_INTERNAL_H_
#define _HSM_KMS_INTERNAL_H_
#include "hsm_public.h"
#include "hsm_kms_api.h"
#include "tee_service_public.h"
TEE_Result generate_symkey_para_check(HSM_GENERATE_SYMKEY_INFO *generate_symkey_info);
TEE_Result generate_symkey_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_GENERATE_SYMKEY_INFO *generate_symkey_info);
TEE_Result hsm_asymetickey_rsp(tee_service_ipc_msg_rsp *rsp, HSM_GENERATE_ASYMKEY_INFO *generate_asymkey_info,
uint8_t *buffer_local);
TEE_Result generate_asymkey_para_check(HSM_GENERATE_ASYMKEY_INFO *generate_asymkey_info);
TEE_Result generate_asymkey_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_GENERATE_ASYMKEY_INFO *generate_asymkey_info);
TEE_Result derive_huk_para_check(HSM_DERIVE_HUK_INFO *derive_huk_info);
TEE_Result derive_huk_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_DERIVE_HUK_INFO *derive_huk_info);
TEE_Result derive_key_para_check(HSM_DERIVE_KEY_INFO *derive_key_info);
TEE_Result derive_key_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_DERIVE_KEY_INFO *derive_key_info);
TEE_Result import_key_para_check(HSM_IMPORT_KEY_INFO *import_key_info);
TEE_Result import_key_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_IMPORT_KEY_INFO *import_key_info);
TEE_Result exchange_pubkey_para_check(HSM_EXCHANGE_PUBKEY_INFO *exchange_pubkey);
TEE_Result exchange_pubkey_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_EXCHANGE_PUBKEY_INFO *exchange_pubkey);
TEE_Result exchange_agree_key_para_check(HSM_EXCHANGE_KEY_INFO *exchange_agree_key);
TEE_Result exchange_agree_key_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_EXCHANGE_KEY_INFO *exchange_agree_key);
TEE_Result update_prokey_para_check(HSM_UPDATE_PROKEY_INFO *update_prokey_info);
TEE_Result update_prokey_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_UPDATE_PROKEY_INFO *update_prokey_info);
TEE_Result update_keyauth_para_check(HSM_UPDATE_KEYAUTH_INFO *update_keyauth_info);
TEE_Result update_keyauth_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_UPDATE_KEYAUTH_INFO *update_keyauth_info);
TEE_Result delete_key_para_check(HSM_DELETE_KEY_INFO *delete_key_info);
TEE_Result delete_key_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_DELETE_KEY_INFO *delete_key_info);
TEE_Result export_key_para_check(HSM_EXPORT_KEY_INFO *export_key_info);
TEE_Result export_key_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_EXPORT_KEY_INFO *export_key_info);
#endif
@@ -1,134 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2012-2020. All rights reserved.
* Description: hsm_public function head
* Author: chenyao
* Create: 2020-01-08
*/
#ifndef _HSM_PUBLIC_H_
#define _HSM_PUBLIC_H_
#include "tee_defines.h"
#include "tee_inner_uuid.h"
/* MODE */
#define HSM_DERIVE_KEY_HEAD 12
#define HSM_KEY_HEAD_SIZE 12
#define HSM_KEY_INFO_SIZE 44
#define HSM_MSG_RESUME 0
#define HSM_CLIENT_DDR_LEN 3072
#define HSM_CONST_SHIFT_32 32
#define HSM_IV_SIZE 16
#define HSM_ALG_SIZE 4
#define HSM_SALT_SIZE 4
#define HSM_IRT_NUM_SIZE 4
#define HSM_SESSION_HANDLE_SIZE 4
#define HSM_RANDOM_SIZE 4
#define HSM_SIGN_VER_SALT_LEN 32
#define HSM_KEY_ELEMENT_SIZE 32
#define HSM_DOMAIN_SIZE 512
#define HSM_KEY_PROTECT_SIZE 152
#define HSM_CHUNK_SIZE 512
#define HSM_BLOCK_SIZE 1
#define HSM_IV_TWICE_SIZE 32
#define HSM_COUNTER_ID_SIZE 4
#define HSM_COUNTER_VALUE_SIZE 8
#define HSM_UNIT_COUNTER_SIZE 44
#define HSM_COUNTER_SIZE (44 + 16 * HSM_UNIT_COUNTER_SIZE)
#define HSM_RIM_INFO_SIZE 544
#define HSM_ROOT_KEY_SIZE 1024
/* MAX SIZE OF ALL LEN IN CPY */
#define HSM_SYMKEY_MAX_SIZE 64
#define HSM_ASYMKEY_MAX_SIZE 1280
#define HSM_IV_MAX_SIZE 16
#define HSM_AUTH_MAX_SIZE 32
#define HSM_PROTECTMSG_MAX_SIZE 184
#define HSM_SIGN_MAX_SIZE 512
#define HSM_SALT_MAX_SIZE 64
#define HSM_KEY_APPEND_SIZE 44
#define HSM_RIM_MAX_SIZE 1568
#define HSM_BBOX_TIMEOUT 0x5A5A5A5A
/* HSM ALG CHOOSE */
#define HSM_VER_SUCCESS 0x5A5A5A5A
#define HSM_VER_FAIL 0xA5A5A5A5
typedef struct {
uint32_t cryptokeyelementid;
uint8_t cryptokeyelementtype;
uint8_t cryptokeyelementreadaccess;
uint8_t cryptokeyelementwriteaccess;
uint8_t cryptokeyelementallowpartialaccess;
uint32_t cryptokeyelementalgid0;
uint32_t cryptokeyelementalgid1;
uint32_t cryptokeyelementallowusage;
uint32_t cryptokeyelementvaliduntil;
uint8_t cryptokeyelementallowprovider;
uint8_t cryptokeyelementallowpersist;
uint16_t cryptokeyelementformat;
uint32_t cryptokeyelementsize;
uint8_t *cryptokeyelementvalueref;
} CRYPTO_KEY_ELEMENT;
/* the num hsm service ipc cmd should begin 0x3300 */
enum HSM_IPC_MSG_CMD {
/* crypto cmd */
HSM_CIPHER_START_CMD = 0x3300,
HSM_CIPHER_PROCESS_CMD = 0x3301,
HSM_CIPHER_FINISH_CMD = 0x3302,
HSM_MAC_START_CMD = 0x3303,
HSM_MAC_PROCESS_CMD = 0x3304,
HSM_MAC_FINISH_CMD = 0x3305,
HSM_HASH_START_CMD = 0x3306,
HSM_HASH_PROCESS_CMD = 0x3307,
HSM_HASH_FINISH_CMD = 0x3308,
HSM_SIGN_START_CMD = 0x3309,
HSM_SIGN_PROCESS_CMD = 0x330a,
HSM_SIGN_FINISH_CMD = 0x330b,
HSM_VERIFY_START_CMD = 0x330c,
HSM_VERIFY_PROCESS_CMD = 0x330d,
HSM_VERIFY_FINISH_CMD = 0x330e,
HSM_GET_RANDOM_CMD = 0x330f,
/* key management cmd */
HSM_GENERATE_SYMKEY_CMD = 0x3310,
HSM_GENERATE_ASYMKEY_CMD = 0x3311,
HSM_DERIVE_HUK_CMD = 0x3312,
HSM_DERIVE_KEY_CMD = 0x3313,
HSM_EXCHANGE_CAL_PUB_CMD = 0x3314,
HSM_EXCHANGE_AGREE_KEY_CMD = 0x3315,
HSM_IMPORT_KEY_CMD = 0x3316,
HSM_EXPORT_KEY_CMD = 0x3317,
HSM_UPDATE_PROTECT_KEY_CMD = 0x3318,
HSM_UPDATE_KEY_AUTH_CMD = 0x3319,
HSM_DELETE_KEY_CMD = 0x331a,
HSM_UNWRAP_KEY_CMD = 0x331b,
HSM_BBOX_CMD = 0x331c,
HSM_COUNTER_INIT_CMD = 0x331d,
HSM_COUNTER_CREATE_CMD = 0x331e,
HSM_COUNTER_READ_CMD = 0x331f,
HSM_COUNTER_DELETE_CMD = 0x3320,
HSM_COUNTER_INC_CMD = 0x3321,
HSM_ALG_CHECK_CMD = 0x3322,
HSM_SOC_VERIFY_CMD = 0x3323,
HSM_RIM_VALUE_UPDATE_CMD = 0x3324,
HSM_EFUSE_POWER_ON_CMD = 0x3325,
HSM_EFUSE_POWER_OFF_CMD = 0x3326,
HSM_HBOOT1A_TRANS_CMD = 0x3327,
/* notify prereset cmd */
HSM_NOTIFY_PRERESET_CMD = 0x5000,
/* notify prereset cmd */
HSM_SERVICE_FUZZ_CMD = 0x6000,
/* rpmb ak key */
HSM_GEN_RPMBKEY_CMD = 0x9000,
HSM_GEN_RPMB_WARPPINGKEY_CMD = 0x9001,
};
static const TEE_UUID g_hsm_uuid = TEE_SERVICE_HSM;
#endif
@@ -1,18 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM rpmb ak key provide api head
* Author: chenyao
* Create: 2020-05-06
*/
#ifndef _HSM_RPMB_API_H_
#define _HSM_RPMB_API_H_
#define HSM_RPMB_KEY_LEN 32
#define HSM_RPMB_WRAPPING_KEY_LEN 80
#define HSM_RPMB_FILE_LEN 9
#define HSM_RPMB_BUFFER_LEN 128
TEE_Result TEE_HSM_GenRpmbKey(uint32_t dev_id, uint8_t *rpmb_key);
TEE_Result TEE_HSM_GenRpmbWrappingKey(uint32_t dev_id, uint8_t *rpmb_wrapping_key);
#endif
@@ -1,17 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: HSM verify api function
* Author: chenyao
* Create: 2020-05-21
*/
#ifndef _HSM_VERIFY_API_H_
#define _HSM_VERIFY_API_H_
#define IMG_ADDR_SIZE 8
#define IMG_LEN_SIZE 4
#define IMG_ID_SIZE 4
TEE_Result TEE_HSM_SOC_VERIFY(uint32_t dev_id, uint64_t image_addr, uint32_t image_len, uint32_t img_id);
TEE_Result TEE_HSM_Hboot1a_Trans(uint32_t dev_id);
#endif
@@ -1,366 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM counter api function and algorithm check
* Author: chenyao
* Create: 2020-01-08
* Notes:
* History: 2020-01-08 chenyao create hsm_kms api functions.
*/
#include <stdarg.h>
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "tee_service_public.h"
#include "hsm_counter_api.h"
#include "hsm_public.h"
#include "hsm_counter_internal.h"
/*
* @brief : Hsm Counter init.
* @param[in] : counter function.
* @return : Operation status: success(0) or other failure status.
*/
TEE_Result TEE_HSM_CounterInit(uint32_t dev_id, uint8_t *counter_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t count_size;
uint32_t state;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_READ_DATA;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_COUNTER_INIT_CMD, &msg, HSM_COUNTER_INIT_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
count_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (count_size > HSM_CLIENT_DDR_LEN) {
goto HSM_COUNTER_INIT_Ex_Handle;
}
state = memcpy_s((void *)counter_info, HSM_CLIENT_DDR_LEN, buffer_local, count_size);
if (state != EOK) {
goto HSM_COUNTER_INIT_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_COUNTER_INIT_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
/*
* @brief : Hsm Counter create.
* @param[in] : counter create function.
* @return : Operation status: success(0) or other failure status.
*/
TEE_Result TEE_HSM_CounterCreate(uint32_t dev_id, HSM_COUNT_CREATE_INFO *count_create_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t size0;
uint32_t size1;
uint32_t state;
ret = counter_create_para_check(count_create_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = counter_create_request_sharemem(&buffer_local, &buffer_size, count_create_info);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_IV_SIZE +
count_create_info->counter_auth_len) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_COUNTER_SIZE);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_COUNTER_CREATE_CMD, &msg, HSM_COUNTER_CREATE_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if ((size0 > HSM_COUNTER_ID_SIZE) || (size1 > HSM_COUNTER_SIZE)) {
goto HSM_COUNTER_CREATE_Ex_Handle;
}
state = memmove_s(count_create_info->counter_id, size0, buffer_local, size0);
if (state != EOK) {
goto HSM_COUNTER_CREATE_Ex_Handle;
}
state = memmove_s(count_create_info->counter_info, size1, buffer_local + size0, size1);
if (state != EOK) {
goto HSM_COUNTER_CREATE_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_COUNTER_CREATE_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
/*
* @brief : Hsm Counter read.
* @param[in] : counter read function.
* @return : Operation status: success(0) or other failure status.
*/
TEE_Result TEE_HSM_CounterRead(uint32_t dev_id, HSM_COUNT_READ_INFO *count_read_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t size0;
uint32_t state;
ret = counter_read_para_check(count_read_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = counter_read_request_sharemem(&buffer_local, &buffer_size, count_read_info);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_COUNTER_ID_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_COUNTER_SIZE);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_COUNTER_READ_CMD, &msg, HSM_COUNTER_READ_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (size0 > HSM_COUNTER_VALUE_SIZE) {
goto HSM_COUNTER_READ_Ex_Handle;
}
state = memmove_s(count_read_info->count_value, size0, buffer_local, size0);
if (state != EOK) {
goto HSM_COUNTER_READ_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_COUNTER_READ_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
/*
* @brief : Hsm Counter delete.
* @param[in] : counter deete function.
* @return : Operation status: success(0) or other failure status.
*/
TEE_Result TEE_HSM_CounterDelete(uint32_t dev_id, HSM_COUNT_DELETE_INFO *count_delete_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t size0;
uint32_t state;
ret = counter_delete_para_check(count_delete_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = counter_delete_request_sharemem(&buffer_local, &buffer_size, count_delete_info);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_COUNTER_ID_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_IV_SIZE + count_delete_info->counter_auth_len);
msg.args_data.arg3 = ((uint64_t)(HSM_COUNTER_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_COUNTER_DELETE_CMD, &msg, HSM_COUNTER_DELETE_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (size0 > HSM_COUNTER_SIZE) {
goto HSM_COUNTER_DELETE_Ex_Handle;
}
state = memmove_s(count_delete_info->counter_info, size0, buffer_local, size0);
if (state != EOK) {
goto HSM_COUNTER_DELETE_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_COUNTER_DELETE_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
/*
* @brief : Hsm Counter inc.
* @param[in] : counter inc function.
* @return : Operation status: success(0) or other failure status.
*/
TEE_Result TEE_HSM_CounterInc(uint32_t dev_id, HSM_COUNT_INC_INFO *count_inc_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t size0;
uint32_t size1;
uint32_t state;
ret = counter_inc_para_check(count_inc_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = counter_inc_request_sharemem(&buffer_local, &buffer_size, count_inc_info);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_COUNTER_ID_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_IV_SIZE + count_inc_info->counter_auth_len);
msg.args_data.arg3 = ((uint64_t)(HSM_COUNTER_VALUE_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_COUNTER_SIZE);
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_COUNTER_INC_CMD, &msg, HSM_COUNTER_INC_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if ((size0 > HSM_COUNTER_VALUE_SIZE) || (size1 > HSM_COUNTER_SIZE)) {
goto HSM_COUNTER_INC_Ex_Handle;
}
state = memmove_s(count_inc_info->counter_value, size0, buffer_local, size0);
if (state != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
state = memmove_s(count_inc_info->counter_info, size1, buffer_local + size0, size1);
if (state != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_COUNTER_INC_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
/*
* @brief : Hsm Algorithm inspection.
* @param[in] : counter function.
* @return : Operation status: success(0) or other failure status.
*/
TEE_Result TEE_HSM_AlgCheck(uint32_t dev_id, uint32_t *hsm_accelerator_status, uint32_t hsm_status_len)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t ac_status_len;
uint32_t state;
if ((hsm_accelerator_status == NULL) || (hsm_status_len > HSM_AC_STATUS_CHECK_LEN)) {
tloge("wrong parameter in algcheck\n");
return TEE_ERROR_READ_DATA;
}
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_READ_DATA;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_ALG_CHECK_CMD, &msg, HSM_ALG_CHECK_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
ac_status_len = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
state = memmove_s(hsm_accelerator_status, hsm_status_len, buffer_local, ac_status_len);
if (state != EOK) {
goto HSM_ALG_CHECK_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_ALG_CHECK_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
@@ -1,219 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM kms internal function.
* Author: chenyao
* Create: 2020-01-08
* Notes:
* History: 2020-01-08 chenyao create hsm_kms functions.
*/
#include <stdarg.h>
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "tee_service_public.h"
#include "hsm_counter_api.h"
#include "hsm_public.h"
TEE_Result counter_create_para_check(HSM_COUNT_CREATE_INFO *count_create_info)
{
if ((count_create_info == NULL) || (count_create_info->counter_auth == NULL) ||
(count_create_info->counter_info == NULL) || (count_create_info->counter_id == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((count_create_info->counter_auth_len > HSM_AUTH_MAX_SIZE) || (count_create_info->counter_auth_len == 0)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result counter_create_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_CREATE_INFO *count_create_info)
{
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint32_t auth_size = count_create_info->counter_auth_len;
uint8_t tmp[HSM_IV_SIZE] = {0};
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memcpy_s(*buffer_local, HSM_IV_SIZE, tmp, HSM_IV_SIZE) != EOK) {
goto HSM_COUNTER_CREATE_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_IV_SIZE, count_create_info->counter_auth_len,
count_create_info->counter_auth, auth_size) != EOK) {
goto HSM_COUNTER_CREATE_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_IV_SIZE + auth_size, HSM_COUNTER_SIZE,
count_create_info->counter_info, HSM_COUNTER_SIZE) != EOK) {
goto HSM_COUNTER_CREATE_Ex_Handle;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
HSM_COUNTER_CREATE_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result counter_read_para_check(HSM_COUNT_READ_INFO *count_read_info)
{
if ((count_read_info == NULL) || (count_read_info->count_value == NULL) ||
(count_read_info->counter_info == NULL)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result counter_read_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_READ_INFO *count_read_info)
{
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_COUNTER_ID_SIZE, &count_read_info->counter_id, HSM_COUNTER_ID_SIZE) != EOK) {
goto HSM_COUNTER_READ_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE, HSM_COUNTER_SIZE,
count_read_info->counter_info, HSM_COUNTER_SIZE) != EOK) {
goto HSM_COUNTER_READ_Ex_Handle;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
HSM_COUNTER_READ_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result counter_delete_para_check(HSM_COUNT_DELETE_INFO *count_delete_info)
{
if ((count_delete_info == NULL) || (count_delete_info->counter_auth == NULL) ||
(count_delete_info->counter_info == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((count_delete_info->counter_auth_len > HSM_AUTH_MAX_SIZE) || (count_delete_info->counter_auth_len == 0)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result counter_delete_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_DELETE_INFO *count_delete_info)
{
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint32_t auth_size = count_delete_info->counter_auth_len;
uint8_t tmp[HSM_IV_SIZE] = {0};
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_COUNTER_ID_SIZE, &count_delete_info->counter_id, HSM_COUNTER_ID_SIZE) != EOK) {
goto HSM_COUNTER_DELETE_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE, HSM_IV_SIZE, tmp, HSM_IV_SIZE) != EOK) {
goto HSM_COUNTER_DELETE_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE + HSM_IV_SIZE, auth_size,
count_delete_info->counter_auth, auth_size) != EOK) {
goto HSM_COUNTER_DELETE_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE + HSM_IV_SIZE + auth_size, HSM_COUNTER_SIZE,
count_delete_info->counter_info, HSM_COUNTER_SIZE) != EOK) {
goto HSM_COUNTER_DELETE_Ex_Handle;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
HSM_COUNTER_DELETE_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result counter_inc_para_check(HSM_COUNT_INC_INFO *count_inc_info)
{
if ((count_inc_info == NULL) || (count_inc_info->counter_auth == NULL) ||
(count_inc_info->counter_info == NULL) || (count_inc_info->counter_value == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((count_inc_info->counter_auth_len > HSM_AUTH_MAX_SIZE) || (count_inc_info->counter_auth_len == 0)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result counter_inc_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_COUNT_INC_INFO *count_inc_info)
{
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint32_t auth_size = count_inc_info->counter_auth_len;
uint8_t tmp[HSM_IV_SIZE] = {0};
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_COUNTER_ID_SIZE, &count_inc_info->counter_id, HSM_COUNTER_ID_SIZE) != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE, HSM_IV_SIZE, tmp, HSM_IV_SIZE) != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE + HSM_IV_SIZE, auth_size,
count_inc_info->counter_auth, auth_size) != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE + HSM_IV_SIZE + auth_size, HSM_COUNTER_VALUE_SIZE,
&count_inc_info->counter_value_add, HSM_COUNTER_VALUE_SIZE) != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_COUNTER_ID_SIZE + HSM_IV_SIZE + auth_size + HSM_COUNTER_VALUE_SIZE,
HSM_COUNTER_SIZE, count_inc_info->counter_info, HSM_COUNTER_SIZE) != EOK) {
goto HSM_COUNTER_INC_Ex_Handle;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
HSM_COUNTER_INC_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
@@ -1,806 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Description: HSM server client msg communication management.
* Author: chenyao
* Create: 2020-01-08
* Notes:
* History: 2020-01-08 chenyao create hsm_crypto api functions.
*/
#include <stdarg.h>
#include "ta_framework.h"
#include "tee_mem_mgmt_api.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "tee_service_public.h"
#include "hsm_crypto_api.h"
#include "hsm_public.h"
#include "hsm_crypto_internal.h"
TEE_Result TEE_HSM_CipherStart(uint32_t dev_id, HSM_CIPHER_START_INFO *cipher_start_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = 0;
ret = cipher_init_para_check(cipher_start_info);
if (ret != TEE_SUCCESS) {
return TEE_ERROR_OUT_OF_MEMORY;
}
ret = cipher_init_request_sharemem(&buffer_local, &buffer_size, cipher_start_info);
if (ret != TEE_SUCCESS) {
return ret;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(cipher_start_info->cipher_key.cryptokeyelementsize + HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)(cipher_start_info->cipherkey_authsize + HSM_IV_SIZE)) << HSM_CONST_SHIFT_32) |
(uint64_t)(cipher_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE);
msg.args_data.arg4 = (((uint64_t)(cipher_start_info->iv_size)) << HSM_CONST_SHIFT_32) |
(uint64_t)(cipher_start_info->crypto_service);
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_CIPHER_START_CMD, &msg, HSM_CIPHER_START_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*cipher_start_info->session_handle = *(uint32_t *)(buffer_local);
*cipher_start_info->max_chunk_size = HSM_CHUNK_SIZE;
*cipher_start_info->chunk_block_size = HSM_BLOCK_SIZE;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_CipherProcess(uint32_t dev_id, HSM_CIPHER_PROCESS_INFO *cipher_process_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((cipher_process_info == NULL) || (cipher_process_info->input_data == NULL) ||
(cipher_process_info->input_data_size > HSM_CHUNK_SIZE)) {
goto HSM_CIPHER_PROCESS_Ex_Handle;
}
if ((cipher_process_info->output_data == NULL) || (cipher_process_info->output_data_size == NULL)) {
goto HSM_CIPHER_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE,
&(cipher_process_info->session_handle), HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_CIPHER_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local + HSM_SESSION_HANDLE_SIZE, cipher_process_info->input_data_size,
cipher_process_info->input_data, cipher_process_info->input_data_size) != EOK) {
goto HSM_CIPHER_PROCESS_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(cipher_process_info->input_data_size);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_CIPHER_PROCESS_CMD, &msg, HSM_CIPHER_PROCESS_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*cipher_process_info->output_data_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if ((*cipher_process_info->output_data_size != 0) &&
(memmove_s(cipher_process_info->output_data, *cipher_process_info->output_data_size, buffer_local,
*cipher_process_info->output_data_size) != EOK)) {
goto HSM_CIPHER_PROCESS_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_CIPHER_PROCESS_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_CipherFinish(uint32_t dev_id, HSM_CIPHER_FINISH_INFO *cipher_finish_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((cipher_finish_info == NULL) || (cipher_finish_info->output_data == NULL) ||
(cipher_finish_info->output_data_size == NULL)) {
goto HSM_CIPHER_FINISH_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE,
&(cipher_finish_info->session_handle), HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_CIPHER_FINISH_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_CIPHER_FINISH_CMD, &msg, HSM_CIPHER_FINISH_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*cipher_finish_info->output_data_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (memmove_s(cipher_finish_info->output_data, *cipher_finish_info->output_data_size, buffer_local,
*cipher_finish_info->output_data_size) != EOK) {
goto HSM_CIPHER_FINISH_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_CIPHER_FINISH_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_HashStart(uint32_t dev_id, HSM_HASH_START_INFO *hash_start_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = 0;
ret = hash_init_para_check(hash_start_info);
if (ret != TEE_SUCCESS) {
return TEE_ERROR_OUT_OF_MEMORY;
}
ret = hash_init_request_sharemem(&buffer_local, &buffer_size, hash_start_info);
if (ret != TEE_SUCCESS) {
return ret;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_HASH_START_CMD, &msg, HSM_HASH_START_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*hash_start_info->session_handle = *(uint32_t *)(buffer_local);
*hash_start_info->max_chunk_size = HSM_CHUNK_SIZE;
*hash_start_info->chunk_block_size = HSM_BLOCK_SIZE;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_HashProcess(uint32_t dev_id, HSM_HASH_PROCESS_INFO *hash_process_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((hash_process_info == NULL) || (hash_process_info->input_data == NULL) ||
(hash_process_info->input_data_size > HSM_CHUNK_SIZE)) {
goto HSM_HASH_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE, &(hash_process_info->session_handle),
HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_HASH_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local + HSM_SESSION_HANDLE_SIZE, hash_process_info->input_data_size,
hash_process_info->input_data, hash_process_info->input_data_size) != EOK) {
goto HSM_HASH_PROCESS_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(hash_process_info->input_data_size);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_HASH_PROCESS_CMD, &msg, HSM_HASH_PROCESS_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_HASH_PROCESS_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_HashFinish(uint32_t dev_id, HSM_HASH_FINISH_INFO *hash_finish_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((hash_finish_info == NULL) || (hash_finish_info->output_data == NULL) ||
(hash_finish_info->output_data_size == NULL)) {
goto HSM_HASH_FINISH_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE, &(hash_finish_info->session_handle),
HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_HASH_FINISH_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_HASH_FINISH_CMD, &msg, HSM_HASH_FINISH_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*hash_finish_info->output_data_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (memmove_s(hash_finish_info->output_data, *hash_finish_info->output_data_size, buffer_local,
*hash_finish_info->output_data_size) != EOK) {
goto HSM_HASH_FINISH_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_HASH_FINISH_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_MacStart(uint32_t dev_id, HSM_MAC_START_INFO *mac_start_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
ret = mac_init_para_check(mac_start_info);
if (ret != TEE_SUCCESS) {
return TEE_ERROR_OUT_OF_MEMORY;
}
ret = mac_init_request_sharemem(&buffer_local, &buffer_size, mac_start_info);
if (ret != TEE_SUCCESS) {
return ret;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(mac_start_info->cipher_key.cryptokeyelementsize + HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)(mac_start_info->cipherkey_authsize + HSM_IV_SIZE)) << HSM_CONST_SHIFT_32) |
(uint64_t)(mac_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE);
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_MAC_START_CMD, &msg, HSM_MAC_START_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*mac_start_info->session_handle = *(uint32_t *)(buffer_local);
*mac_start_info->max_chunk_size = HSM_CHUNK_SIZE;
*mac_start_info->chunk_block_size = HSM_BLOCK_SIZE;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_MacProcess(uint32_t dev_id, HSM_MAC_PROCESS_INFO *mac_process_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((mac_process_info == NULL) || (mac_process_info->input_data == NULL) ||
(mac_process_info->input_data_size > HSM_CHUNK_SIZE)) {
goto HSM_MAC_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE, &(mac_process_info->session_handle),
HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_MAC_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local + HSM_SESSION_HANDLE_SIZE, mac_process_info->input_data_size,
mac_process_info->input_data, mac_process_info->input_data_size) != EOK) {
goto HSM_MAC_PROCESS_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(mac_process_info->input_data_size);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_MAC_PROCESS_CMD, &msg, HSM_MAC_PROCESS_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_MAC_PROCESS_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_MacFinish(uint32_t dev_id, HSM_MAC_FINISH_INFO *mac_finish_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((mac_finish_info == NULL) || (mac_finish_info->output_data == NULL) ||
(mac_finish_info->output_data_size == NULL)) {
goto HSM_MAC_FINISH_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE, &(mac_finish_info->session_handle),
HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_MAC_FINISH_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_MAC_FINISH_CMD, &msg, HSM_MAC_FINISH_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*mac_finish_info->output_data_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (memmove_s(mac_finish_info->output_data, *mac_finish_info->output_data_size, buffer_local,
*mac_finish_info->output_data_size) != EOK) {
goto HSM_MAC_FINISH_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_MAC_FINISH_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_SignStart(uint32_t dev_id, HSM_SIGN_START_INFO *sign_start_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
ret = sign_init_para_check(sign_start_info);
if (ret != TEE_SUCCESS) {
return TEE_ERROR_OUT_OF_MEMORY;
}
ret = sign_init_request_sharemem(&buffer_local, &buffer_size, sign_start_info);
if (ret != TEE_SUCCESS) {
return ret;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(sign_start_info->cipher_key.cryptokeyelementsize + HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)(sign_start_info->cipherkey_authsize + HSM_IV_SIZE)) << HSM_CONST_SHIFT_32) |
(uint64_t)(sign_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE);
msg.args_data.arg4 = (((uint64_t)HSM_SALT_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_SIGN_START_CMD, &msg, HSM_SIGN_START_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*sign_start_info->session_handle = *(uint32_t *)(buffer_local);
*sign_start_info->max_chunk_size = HSM_CHUNK_SIZE;
*sign_start_info->chunk_block_size = HSM_BLOCK_SIZE;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_SignProcess(uint32_t dev_id, HSM_SIGN_PROCESS_INFO *sign_process_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((sign_process_info == NULL) || (sign_process_info->input_data == NULL) ||
(sign_process_info->input_data_size > HSM_CHUNK_SIZE)) {
goto HSM_SIGN_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE,
&(sign_process_info->session_handle), HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_SIGN_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local + HSM_SESSION_HANDLE_SIZE, sign_process_info->input_data_size,
sign_process_info->input_data, sign_process_info->input_data_size) != EOK) {
goto HSM_SIGN_PROCESS_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(sign_process_info->input_data_size);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_SIGN_PROCESS_CMD, &msg, HSM_SIGN_PROCESS_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_SIGN_PROCESS_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_SignFinish(uint32_t dev_id, HSM_SIGN_FINISH_INFO *sign_finish_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((sign_finish_info == NULL) || (sign_finish_info->sign == NULL) ||
(sign_finish_info->sign_size == NULL)) {
goto HSM_SIGN_FINISH_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE,
&(sign_finish_info->session_handle), HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_SIGN_FINISH_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_SIGN_FINISH_CMD, &msg, HSM_SIGN_FINISH_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*sign_finish_info->sign_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (memmove_s(sign_finish_info->sign, *sign_finish_info->sign_size, buffer_local,
*sign_finish_info->sign_size) != EOK) {
goto HSM_SIGN_FINISH_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_SIGN_FINISH_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_VerifyStart(uint32_t dev_id, HSM_VERIFY_START_INFO *verify_start_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = 0;
ret = verify_init_para_check(verify_start_info);
if (ret != TEE_SUCCESS) {
return TEE_ERROR_OUT_OF_MEMORY;
}
ret = verify_init_request_sharemem(&buffer_local, &buffer_size, verify_start_info);
if (ret != TEE_SUCCESS) {
return ret;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(verify_start_info->cipher_key.cryptokeyelementsize + HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)(verify_start_info->cipherkey_authsize + HSM_IV_SIZE)) << HSM_CONST_SHIFT_32) |
(uint64_t)(verify_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE);
msg.args_data.arg4 = (((uint64_t)(HSM_SALT_SIZE)) << HSM_CONST_SHIFT_32) |
((uint64_t)(verify_start_info->sign_size));
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_VERIFY_START_CMD, &msg, HSM_VERIFY_START_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*verify_start_info->session_handle = *(uint32_t *)(buffer_local);
*verify_start_info->max_chunk_size = HSM_CHUNK_SIZE;
*verify_start_info->chunk_block_size = HSM_BLOCK_SIZE;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_VerifyProcess(uint32_t dev_id, HSM_VERIFY_PROCESS_INFO *verify_process_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((verify_process_info == NULL) || (verify_process_info->input_data == NULL) ||
(verify_process_info->input_data_size > HSM_CHUNK_SIZE)) {
goto HSM_VERIFY_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE,
&(verify_process_info->session_handle), HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_VERIFY_PROCESS_Ex_Handle;
}
if (memmove_s(buffer_local + HSM_SESSION_HANDLE_SIZE, verify_process_info->input_data_size,
verify_process_info->input_data, verify_process_info->input_data_size) != EOK) {
goto HSM_VERIFY_PROCESS_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(verify_process_info->input_data_size);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_VERIFY_PROCESS_CMD, &msg, HSM_VERIFY_PROCESS_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_VERIFY_PROCESS_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_VerifyFinish(uint32_t dev_id, HSM_VERIFY_FINISH_INFO *verify_finish_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (verify_finish_info == NULL || verify_finish_info->verify_result == NULL) {
goto HSM_VERIFY_FINISH_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_SESSION_HANDLE_SIZE,
&(verify_finish_info->session_handle), HSM_SESSION_HANDLE_SIZE) != EOK) {
goto HSM_VERIFY_FINISH_Ex_Handle;
}
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_SESSION_HANDLE_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_VERIFY_FINISH_CMD, &msg, HSM_VERIFY_FINISH_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*verify_finish_info->verify_result = HSM_VER_SUCCESS;
} else {
*verify_finish_info->verify_result = HSM_VER_FAIL;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_VERIFY_FINISH_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_GetRandom(uint32_t dev_id, HSM_GET_RANDOM_INFO *random_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t size0;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if ((random_info == NULL) || (random_info->random == NULL)) {
goto HSM_GET_RANDOM_Ex_Handle;
}
if (memmove_s(buffer_local, HSM_RANDOM_SIZE, &(random_info->random_size), HSM_RANDOM_SIZE) != EOK)
goto HSM_GET_RANDOM_Ex_Handle;
rsp.ret = TEE_FAIL;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_RANDOM_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_GET_RANDOM_CMD, &msg, HSM_GET_RANDOM_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (memmove_s(random_info->random, size0, buffer_local, size0) != EOK) {
goto HSM_GET_RANDOM_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_GET_RANDOM_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
@@ -1,451 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM crypto api function
* Author: chenyao
* Create: 2020-01-08
* Notes:
* History: 2020-01-08 chenyao create hsm_crypto functions.
*/
#include <stdarg.h>
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "tee_service_public.h"
#include "hsm_crypto_api.h"
#include "hsm_public.h"
#include "hsm_crypto_internal.h"
TEE_Result cipher_init_para_check(HSM_CIPHER_START_INFO *cipher_start_info)
{
uint32_t key_size;
uint32_t auth_size;
if (cipher_start_info == NULL || cipher_start_info->cipherkey_auth == NULL) {
return TEE_ERROR_NO_DATA;
}
key_size = cipher_start_info->cipher_key.cryptokeyelementsize;
auth_size = cipher_start_info->cipherkey_authsize;
if ((cipher_start_info->cipherkey_protectmsg == NULL) ||
(cipher_start_info->cipher_key.cryptokeyelementvalueref == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((cipher_start_info->session_handle == NULL) || (cipher_start_info->max_chunk_size == NULL) ||
(cipher_start_info->chunk_block_size == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((key_size > HSM_SYMKEY_MAX_SIZE) || (auth_size > HSM_AUTH_MAX_SIZE)) {
return TEE_ERROR_NO_DATA;
}
if ((cipher_start_info->iv_size != 0) && (cipher_start_info->iv_ptr != NULL)) {
if (cipher_start_info->iv_size != HSM_IV_MAX_SIZE) {
return TEE_ERROR_NO_DATA;
}
}
return TEE_SUCCESS;
}
TEE_Result cipher_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_CIPHER_START_INFO *cipher_start_info)
{
uint32_t key_size = cipher_start_info->cipher_key.cryptokeyelementsize;
uint32_t auth_size = cipher_start_info->cipherkey_authsize;
uint32_t cipher_head_size = HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE + HSM_IV_SIZE;
uint32_t promsg_size = cipher_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE;
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint8_t tmp[HSM_IV_SIZE] = {0};
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_ALG_SIZE, &cipher_start_info->alg_id, HSM_ALG_SIZE) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
/* key_size + 32 */
if (memmove_s(*buffer_local + HSM_ALG_SIZE, HSM_KEY_ELEMENT_SIZE,
&cipher_start_info->cipher_key, HSM_KEY_ELEMENT_SIZE) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE, key_size,
cipher_start_info->cipher_key.cryptokeyelementvalueref, key_size) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
/* auth_size + 16 */
if (memmove_s(*buffer_local + HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE + key_size, HSM_IV_SIZE, tmp,
HSM_IV_SIZE) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
/* auth_size */
if (memmove_s(*buffer_local + cipher_head_size + key_size, auth_size,
cipher_start_info->cipherkey_auth, auth_size) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
/* promsg_size */
if (memmove_s(*buffer_local + cipher_head_size + key_size + auth_size, promsg_size,
cipher_start_info->cipherkey_protectmsg, promsg_size) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
/* iv_size */
if ((cipher_start_info->iv_size != 0) && (cipher_start_info->iv_ptr != NULL)) {
if (memmove_s(*buffer_local + cipher_head_size + key_size + auth_size + promsg_size, cipher_start_info->iv_size,
cipher_start_info->iv_ptr, cipher_start_info->iv_size) != EOK) {
goto CIPHER_INIT_Ex_Handle;
}
}
*buffer_size = dst_size;
return TEE_SUCCESS;
CIPHER_INIT_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result hash_init_para_check(HSM_HASH_START_INFO *hash_start_info)
{
if (hash_start_info == NULL) {
return TEE_ERROR_NO_DATA;
}
if ((hash_start_info->session_handle == NULL) || (hash_start_info->max_chunk_size == NULL) ||
(hash_start_info->chunk_block_size == NULL)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result hash_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_HASH_START_INFO *hash_start_info)
{
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_ALG_SIZE, &hash_start_info->alg_id, HSM_ALG_SIZE) != EOK) {
goto HASH_INIT_Ex_Handle2;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
HASH_INIT_Ex_Handle2:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result mac_init_para_check(HSM_MAC_START_INFO *mac_start_info)
{
uint32_t key_size;
uint32_t auth_size;
if (mac_start_info == NULL) {
return TEE_ERROR_NO_DATA;
}
key_size = mac_start_info->cipher_key.cryptokeyelementsize;
auth_size = mac_start_info->cipherkey_authsize;
if ((mac_start_info->session_handle == NULL) || (mac_start_info->max_chunk_size == NULL) ||
(mac_start_info->chunk_block_size == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((key_size > HSM_SYMKEY_MAX_SIZE) || (auth_size > HSM_AUTH_MAX_SIZE)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result mac_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_MAC_START_INFO *mac_start_info)
{
uint32_t key_size = mac_start_info->cipher_key.cryptokeyelementsize;
uint32_t auth_size = mac_start_info->cipherkey_authsize;
uint32_t hsm_hash_head_size = HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE + HSM_IV_SIZE;
uint32_t promsg_size = auth_size + HSM_KEY_PROTECT_SIZE;
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint8_t tmp[HSM_IV_SIZE] = {0};
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_ALG_SIZE, &mac_start_info->alg_id, HSM_ALG_SIZE) != EOK) {
goto MAC_INIT_Ex_Handle2;
}
if (memmove_s(*buffer_local + HSM_ALG_SIZE, HSM_KEY_ELEMENT_SIZE,
&mac_start_info->cipher_key, HSM_KEY_ELEMENT_SIZE) != EOK) {
goto MAC_INIT_Ex_Handle2;
}
if (memmove_s(*buffer_local + HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE, key_size,
mac_start_info->cipher_key.cryptokeyelementvalueref, key_size) != EOK) {
goto MAC_INIT_Ex_Handle2;
}
/* auth_size + 16 */
if (memmove_s(*buffer_local + HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE + key_size, HSM_IV_SIZE,
tmp, HSM_IV_SIZE) != EOK) {
goto MAC_INIT_Ex_Handle2;
}
/* auth_size */
if (memmove_s(*buffer_local + hsm_hash_head_size + key_size, auth_size,
mac_start_info->cipherkey_auth, auth_size) != EOK) {
goto MAC_INIT_Ex_Handle2;
}
/* promsg_size */
if (memmove_s(*buffer_local + hsm_hash_head_size + key_size + auth_size, promsg_size,
mac_start_info->cipherkey_protectmsg, promsg_size) != EOK) {
goto MAC_INIT_Ex_Handle2;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
MAC_INIT_Ex_Handle2:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result sign_init_para_check(HSM_SIGN_START_INFO *sign_start_info)
{
uint32_t key_size;
uint32_t auth_size;
if ((sign_start_info == NULL) || (sign_start_info->cipherkey_auth == NULL)) {
return TEE_ERROR_NO_DATA;
}
key_size = sign_start_info->cipher_key.cryptokeyelementsize;
auth_size = sign_start_info->cipherkey_authsize;
if ((sign_start_info->cipherkey_protectmsg == NULL) ||
(sign_start_info->cipher_key.cryptokeyelementvalueref == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((sign_start_info->session_handle == NULL) || (sign_start_info->max_chunk_size == NULL) ||
(sign_start_info->chunk_block_size == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((key_size > HSM_ASYMKEY_MAX_SIZE) || (auth_size > HSM_AUTH_MAX_SIZE)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result sign_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_SIGN_START_INFO *sign_start_info)
{
uint32_t key_size = sign_start_info->cipher_key.cryptokeyelementsize;
uint32_t auth_size = sign_start_info->cipherkey_authsize;
uint32_t hsm_sign_head_size = HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE + HSM_IV_SIZE;
uint32_t promsg_size = auth_size + HSM_KEY_PROTECT_SIZE;
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint8_t tmp[HSM_IV_SIZE] = {0};
uint32_t salt_size = HSM_SIGN_VER_SALT_LEN;
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(*buffer_local, HSM_ALG_SIZE, &sign_start_info->alg_id, HSM_ALG_SIZE) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
/* key_size + 32 */
if (memmove_s(*buffer_local + HSM_ALG_SIZE, HSM_KEY_ELEMENT_SIZE,
&sign_start_info->cipher_key, HSM_KEY_ELEMENT_SIZE) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
if (memmove_s(*buffer_local + HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE, key_size,
sign_start_info->cipher_key.cryptokeyelementvalueref, key_size) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
/* auth_size + 16 */
if (memmove_s(*buffer_local + HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE + key_size, HSM_IV_SIZE,
tmp, HSM_IV_SIZE) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
/* auth_size */
if (memmove_s(*buffer_local + hsm_sign_head_size + key_size, auth_size,
sign_start_info->cipherkey_auth, auth_size) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
/* promsg_size */
if (memmove_s(*buffer_local + hsm_sign_head_size + key_size + auth_size, promsg_size,
sign_start_info->cipherkey_protectmsg, promsg_size) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
/* salt_size */
if (memmove_s(*buffer_local + hsm_sign_head_size + key_size + auth_size + promsg_size, HSM_SALT_SIZE,
&salt_size, HSM_SALT_SIZE) != EOK) {
goto SIGN_INIT_Ex_Handle;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
SIGN_INIT_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
TEE_Result verify_init_para_check(HSM_VERIFY_START_INFO *verify_start_info)
{
uint32_t key_size;
uint32_t auth_size;
uint32_t sign_size;
if ((verify_start_info == NULL) || (verify_start_info->cipherkey_auth == NULL) ||
(verify_start_info->sign == NULL)) {
return TEE_ERROR_NO_DATA;
}
key_size = verify_start_info->cipher_key.cryptokeyelementsize;
auth_size = verify_start_info->cipherkey_authsize;
sign_size = verify_start_info->sign_size;
if ((verify_start_info->cipherkey_protectmsg == NULL) ||
(verify_start_info->cipher_key.cryptokeyelementvalueref == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((verify_start_info->session_handle == NULL) || (verify_start_info->max_chunk_size == NULL) ||
(verify_start_info->chunk_block_size == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((key_size > HSM_ASYMKEY_MAX_SIZE) || (auth_size > HSM_AUTH_MAX_SIZE) || (sign_size > HSM_SIGN_MAX_SIZE)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
static TEE_Result verify_init_data_move(uint8_t *buffer_local, HSM_VERIFY_START_INFO *verify_start_info)
{
uint32_t buffer_offset;
uint32_t salt_size = HSM_SIGN_VER_SALT_LEN;
uint8_t tmp[HSM_IV_SIZE] = {0};
if (memmove_s(buffer_local, HSM_ALG_SIZE, &verify_start_info->alg_id, HSM_ALG_SIZE) != EOK) {
return TEE_FAIL;
}
/* key_size + 32 */
if (memmove_s(buffer_local + HSM_ALG_SIZE, HSM_KEY_ELEMENT_SIZE,
&verify_start_info->cipher_key, HSM_KEY_ELEMENT_SIZE) != EOK) {
return TEE_FAIL;
}
buffer_offset = HSM_ALG_SIZE + HSM_KEY_ELEMENT_SIZE;
if (memmove_s(buffer_local + buffer_offset, verify_start_info->cipher_key.cryptokeyelementsize,
verify_start_info->cipher_key.cryptokeyelementvalueref,
verify_start_info->cipher_key.cryptokeyelementsize) != EOK) {
return TEE_FAIL;
}
buffer_offset += verify_start_info->cipher_key.cryptokeyelementsize;
/* auth_size + 16 */
if (memmove_s(buffer_local + buffer_offset, HSM_IV_SIZE, tmp, HSM_IV_SIZE) != EOK) {
return TEE_FAIL;
}
buffer_offset += HSM_IV_SIZE;
/* auth_size */
if (memmove_s(buffer_local + buffer_offset, verify_start_info->cipherkey_authsize,
verify_start_info->cipherkey_auth, verify_start_info->cipherkey_authsize) != EOK) {
return TEE_FAIL;
}
buffer_offset += verify_start_info->cipherkey_authsize;
/* promsg_size */
if (memmove_s(buffer_local + buffer_offset, verify_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE,
verify_start_info->cipherkey_protectmsg, verify_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE) != EOK) {
return TEE_FAIL;
}
buffer_offset += (verify_start_info->cipherkey_authsize + HSM_KEY_PROTECT_SIZE);
/* salt_size */
if (memmove_s(buffer_local + buffer_offset, HSM_SALT_SIZE, &salt_size, HSM_SALT_SIZE) != EOK) {
return TEE_FAIL;
}
buffer_offset += HSM_SALT_SIZE;
if (memmove_s(buffer_local + buffer_offset, verify_start_info->sign_size,
verify_start_info->sign, verify_start_info->sign_size) != EOK) {
return TEE_FAIL;
}
return TEE_SUCCESS;
}
TEE_Result verify_init_request_sharemem(uint8_t **buffer_local, uint32_t *buffer_size,
HSM_VERIFY_START_INFO *verify_start_info)
{
uint32_t dst_size = HSM_CLIENT_DDR_LEN;
uint32_t ret;
*buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (*buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
ret = verify_init_data_move(*buffer_local, verify_start_info);
if (ret != TEE_SUCCESS) {
goto VERIFY_INIT_Ex_Handle;
}
*buffer_size = dst_size;
return TEE_SUCCESS;
VERIFY_INIT_Ex_Handle:
tloge("%s\n", __func__);
__SRE_MemFreeShared(*buffer_local, dst_size);
*buffer_local = NULL;
return TEE_ERROR_SECURITY;
}
@@ -1,127 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: HSM counter api function and algorithm check
* Author: chenyao
* Create: 2020-01-08
* Notes:
* History: 2020-01-08 chenyao create efuse api functions.
2020-06-24 chenyao add rim and nvcnt update functions.
*/
#include <stdarg.h>
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "hsm_efuse_api.h"
#include "efuse_api.h"
#include "hsm_public.h"
#include "tee_service_public.h"
#include "mem_ops_ext.h"
TEE_Result TEE_HSM_RIM_UpDate(uint32_t dev_id, uint8_t *rim_info, uint32_t rim_size)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
if (rim_size != HSM_RIM_MAX_SIZE) {
tloge("rim info size is wrong\n");
return TEE_ERROR_OUT_OF_MEMORY;
}
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("buffer is null, please realloc\n");
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(buffer_local, rim_size, rim_info, HSM_RIM_MAX_SIZE) != EOK) {
tloge("memmove rim info fail\n");
goto HSM_RIM_UPDATE_Ex_Handle;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_RIM_INFO_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_ROOT_KEY_SIZE);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_RIM_VALUE_UPDATE_CMD, &msg, HSM_RIM_VALUE_UPDATE_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_RIM_UPDATE_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_Power_On(uint32_t dev_id)
{
tee_service_ipc_msg_rsp rsp = {0};
tee_service_ipc_msg msg = {{0}};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("hsm power on, alloc smem failed!\n");
return TEE_ERROR_OUT_OF_MEMORY;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_EFUSE_POWER_ON_CMD, &msg, HSM_EFUSE_POWER_ON_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_Power_Off(uint32_t dev_id)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("hsm power off, alloc smem failed!\n");
return TEE_ERROR_OUT_OF_MEMORY;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_EFUSE_POWER_OFF_CMD, &msg, HSM_EFUSE_POWER_OFF_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
@@ -1,86 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description: HSM fuzz service test client api
* Author: chenyao
* Create: 2021-06-17
* Notes:
* History:
*/
#include <stdarg.h>
#include "securec.h"
#include "ta_framework.h"
#include "tee_log.h"
#include "hsm_public.h"
#include "hsm_fuzz_api.h"
#include "tee_service_public.h"
static TEE_Result service_fuzz_para_check(uint8_t *service_msg, uint32_t msg_size,
uint8_t *service_data, uint32_t data_size)
{
if ((service_msg == NULL) || (service_data == NULL)) {
return TEE_ERROR_NO_DATA;
}
if ((msg_size > sizeof(FUZZ_SERVICE_S)) || (data_size > HSM_CLIENT_DDR_LEN)) {
return TEE_ERROR_NO_DATA;
}
return TEE_SUCCESS;
}
TEE_Result TEE_HSM_SERVICE_FUZZ(uint8_t *service_msg, uint32_t msg_size, uint8_t *service_data, uint32_t data_size)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
FUZZ_SERVICE_S *service_fuzz = (FUZZ_SERVICE_S *)(uintptr_t)service_msg;
ret =-service_fuzz_para_check(service_msg, msg_size, service_data, data_size);
if (ret != TEE_SUCCESS) {
tloge("service fuzz para check fail");
return TEE_ERROR_OUT_OF_MEMORY;
}
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("memory alloc in fuzz service fail");
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(buffer_local, HSM_CLIENT_DDR_LEN, service_data, data_size) != 0) {
tloge("cpy service data fuzz service fail");
goto HSM_SERVICE_FUZZ_Ex_Handle;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)service_fuzz->param_len_0) << HSM_CONST_SHIFT_32) |
(uint64_t)(service_fuzz->param_len_1);
msg.args_data.arg3 = (((uint64_t)service_fuzz->param_len_2) << HSM_CONST_SHIFT_32) |
(uint64_t)(service_fuzz->param_len_3);
msg.args_data.arg4 = (((uint64_t)service_fuzz->param_len_4) << HSM_CONST_SHIFT_32) |
(uint64_t)(service_fuzz->param_len_5);
msg.args_data.arg5 = (((uint64_t)service_fuzz->param_len_6) << HSM_CONST_SHIFT_32) |
(uint64_t)(service_fuzz->param_len_7);
msg.args_data.arg6 = HSM_MSG_RESUME;
msg.args_data.arg7 = (((uint64_t)service_fuzz->cmd) << HSM_CONST_SHIFT_32) |
(uint64_t)(service_fuzz->ddr_para_num);
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_SERVICE_FUZZ_CMD, &msg, HSM_SERVICE_FUZZ_CMD, &rsp);
if (memmove_s(service_data, data_size, buffer_local, data_size) != 0) {
tloge("cpy buffer data fuzz service fail");
goto HSM_SERVICE_FUZZ_Ex_Handle;
}
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_SERVICE_FUZZ_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
@@ -1,691 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM kms api function.
* Author: chenyao
* Create: 2020-01-08
* Notes:
* History: 2020-01-08 chenyao create hsm_kms api functions.
*/
#include <stdarg.h>
#include "mem_ops_ext.h"
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "tee_service_public.h"
#include "hsm_kms_api.h"
#include "hsm_public.h"
#include "hsm_kms_internal.h"
TEE_Result TEE_HSM_GenSymeticKey(uint32_t dev_id, HSM_GENERATE_SYMKEY_INFO *generate_symkey_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t size1;
uint32_t state;
ret = generate_symkey_para_check(generate_symkey_info);
if (ret != TEE_SUCCESS)
return ret;
ret = generate_symkey_request_sharemem(&buffer_local, &buffer_size, generate_symkey_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)generate_symkey_info->symkey_authsize + HSM_IV_SIZE) << HSM_CONST_SHIFT_32)
| HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_GENERATE_SYMKEY_CMD, &msg, HSM_GENERATE_SYMKEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32) - HSM_KEY_ELEMENT_SIZE;
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if (size0 > HSM_SYMKEY_MAX_SIZE || size1 > HSM_PROTECTMSG_MAX_SIZE) {
goto HSM_GEN_SYMKEY_Ex_Handle;
}
state = memmove_s(generate_symkey_info->symkey.cryptokeyelementvalueref, size0,
buffer_local + HSM_KEY_ELEMENT_SIZE, size0);
if (state != EOK) {
goto HSM_GEN_SYMKEY_Ex_Handle;
}
state = memmove_s(generate_symkey_info->symkey_protectmsg, size1,
buffer_local + size0 + HSM_KEY_ELEMENT_SIZE, size1);
if (state != EOK) {
goto HSM_GEN_SYMKEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_GEN_SYMKEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_GenAsymeticKey(uint32_t dev_id, HSM_GENERATE_ASYMKEY_INFO *generate_asymkey_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t state;
ret = generate_asymkey_para_check(generate_asymkey_info);
if (ret != TEE_SUCCESS)
return ret;
ret = generate_asymkey_request_sharemem(&buffer_local, &buffer_size, generate_asymkey_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)HSM_KEY_ELEMENT_SIZE) << HSM_CONST_SHIFT_32) |
(((uint64_t)generate_asymkey_info->key_authsize + HSM_IV_SIZE));
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_GENERATE_ASYMKEY_CMD, &msg, HSM_GENERATE_ASYMKEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
state = hsm_asymetickey_rsp(&rsp, generate_asymkey_info, buffer_local);
if (state != TEE_SUCCESS) {
goto HSM_GEN_ASYMKEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_GEN_ASYMKEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_DeriveHuk(uint32_t dev_id, HSM_DERIVE_HUK_INFO *derive_huk_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t size1;
ret = derive_huk_para_check(derive_huk_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = derive_huk_request_sharemem(&buffer_local, &buffer_size, derive_huk_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)(HSM_DERIVE_KEY_HEAD + derive_huk_info->salt_size)) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)derive_huk_info->key_authsize + HSM_IV_SIZE) << HSM_CONST_SHIFT_32) |
HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_DERIVE_HUK_CMD, &msg, HSM_DERIVE_HUK_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32) - HSM_KEY_ELEMENT_SIZE;
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if ((size0 > HSM_ASYMKEY_MAX_SIZE) || (size1 > HSM_PROTECTMSG_MAX_SIZE)) {
goto HSM_DERIVE_HUK_Ex_Handle;
}
if (memmove_s(derive_huk_info->c_key.cryptokeyelementvalueref, size0,
buffer_local + HSM_KEY_ELEMENT_SIZE, size0) != EOK) {
goto HSM_DERIVE_HUK_Ex_Handle;
}
if (memmove_s(derive_huk_info->key_protectmsg, size1,
buffer_local + size0 + HSM_KEY_ELEMENT_SIZE, size1) != EOK) {
goto HSM_DERIVE_HUK_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_DERIVE_HUK_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_DeriveKey(uint32_t dev_id, HSM_DERIVE_KEY_INFO *derive_key_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t size1;
ret = derive_key_para_check(derive_key_info);
if (ret != TEE_SUCCESS)
return ret;
ret = derive_key_request_sharemem(&buffer_local, &buffer_size, derive_key_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_KEY_HEAD_SIZE + derive_key_info->salt_size) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg3 = (((uint64_t)derive_key_info->target_key_authsize + HSM_IV_SIZE) << HSM_CONST_SHIFT_32) |
((uint64_t)derive_key_info->source_key.cryptokeyelementsize + HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg4 = (((uint64_t)derive_key_info->source_key_authsize + HSM_IV_SIZE) << HSM_CONST_SHIFT_32) |
((uint64_t)derive_key_info->source_key_authsize + HSM_KEY_PROTECT_SIZE);
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_DERIVE_KEY_CMD, &msg, HSM_DERIVE_KEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32) - HSM_KEY_ELEMENT_SIZE;
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if (size0 > HSM_ASYMKEY_MAX_SIZE || size1 > HSM_PROTECTMSG_MAX_SIZE) {
goto HSM_DERIVE_KEY_Ex_Handle;
}
if (memmove_s(derive_key_info->target_key.cryptokeyelementvalueref, size0,
buffer_local + HSM_KEY_ELEMENT_SIZE, size0) != EOK) {
goto HSM_DERIVE_KEY_Ex_Handle;
}
if (memmove_s(derive_key_info->target_key_protectmsg, size1,
buffer_local + size0 + HSM_KEY_ELEMENT_SIZE, size1) != EOK) {
goto HSM_DERIVE_KEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_DERIVE_KEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_ImportKey(uint32_t dev_id, HSM_IMPORT_KEY_INFO *import_key_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t size1;
ret = import_key_para_check(import_key_info);
if (ret != TEE_SUCCESS)
return ret;
ret = import_key_request_sharemem(&buffer_local, &buffer_size, import_key_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)(HSM_KEY_HEAD_SIZE + import_key_info->salt_size)) << HSM_CONST_SHIFT_32) |
(uint64_t)(import_key_info->import_key.cryptokeyelementsize + HSM_KEY_INFO_SIZE);
msg.args_data.arg3 = (((uint64_t)HSM_KEY_ELEMENT_SIZE) << HSM_CONST_SHIFT_32) |
((uint64_t)(import_key_info->import_key_authsize + HSM_IV_SIZE));
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_IMPORT_KEY_CMD, &msg, HSM_IMPORT_KEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32) - HSM_KEY_ELEMENT_SIZE;
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if ((size0 > HSM_ASYMKEY_MAX_SIZE) || (size1 > HSM_PROTECTMSG_MAX_SIZE)) {
goto HSM_IMPORT_KEY_Ex_Handle;
}
if (memmove_s(import_key_info->import_key.cryptokeyelementvalueref, size0,
buffer_local + HSM_KEY_ELEMENT_SIZE, size0) != EOK) {
goto HSM_IMPORT_KEY_Ex_Handle;
}
if (memmove_s(import_key_info->import_key_protectmsg, size1,
buffer_local + size0 + HSM_KEY_ELEMENT_SIZE, size1) != EOK) {
goto HSM_IMPORT_KEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_IMPORT_KEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_ExchangePubKey(uint32_t dev_id, HSM_EXCHANGE_PUBKEY_INFO *exchange_pubkey)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
ret = exchange_pubkey_para_check(exchange_pubkey);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = exchange_pubkey_request_sharemem(&buffer_local, &buffer_size, exchange_pubkey);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_KEY_ELEMENT_SIZE + exchange_pubkey->exchange_pubkey.cryptokeyelementsize);
msg.args_data.arg3 = (((uint64_t)(HSM_IV_SIZE + exchange_pubkey->exchange_pubkey_authsize)) <<HSM_CONST_SHIFT_32) |
((uint64_t)(HSM_KEY_PROTECT_SIZE + exchange_pubkey->exchange_pubkey_authsize));
msg.args_data.arg4 = (((uint64_t)HSM_DOMAIN_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_EXCHANGE_CAL_PUB_CMD, &msg, HSM_EXCHANGE_CAL_PUB_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (size0 > HSM_ASYMKEY_MAX_SIZE) {
goto HSM_EXCHANGE_PUBKEY_Ex_Handle;
}
exchange_pubkey->generate_pubkey_len = size0;
if (memmove_s(exchange_pubkey->exchange_pubkey.cryptokeyelementvalueref, size0, buffer_local, size0) != EOK) {
goto HSM_EXCHANGE_PUBKEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_EXCHANGE_PUBKEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_ExchangeAgreeKey(uint32_t dev_id, HSM_EXCHANGE_KEY_INFO *exchange_agree_key)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t size1;
ret = exchange_agree_key_para_check(exchange_agree_key);
if (ret != TEE_SUCCESS)
return ret;
ret = exchange_agree_key_request_sharemem(&buffer_local, &buffer_size, exchange_agree_key);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)HSM_ALG_SIZE) << HSM_KEY_ELEMENT_SIZE) |
(uint64_t)(HSM_KEY_ELEMENT_SIZE + exchange_agree_key->exchange_prikey.cryptokeyelementsize);
msg.args_data.arg3 = (((uint64_t)(HSM_IV_SIZE +
exchange_agree_key->exchange_prikey_authsize)) <<HSM_CONST_SHIFT_32) |
((uint64_t)(HSM_KEY_PROTECT_SIZE + exchange_agree_key->exchange_prikey_authsize));
msg.args_data.arg4 = (((uint64_t)(exchange_agree_key->exchange_pubkey_len)) << HSM_KEY_ELEMENT_SIZE) |
((uint64_t)HSM_KEY_ELEMENT_SIZE);
msg.args_data.arg5 = (((uint64_t)(HSM_IV_SIZE +
exchange_agree_key->exchange_key_authsize)) << HSM_CONST_SHIFT_32) | (uint64_t)(HSM_DOMAIN_SIZE);
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_EXCHANGE_AGREE_KEY_CMD, &msg, HSM_EXCHANGE_AGREE_KEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32) - HSM_KEY_ELEMENT_SIZE;
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if ((size0 > HSM_ASYMKEY_MAX_SIZE) || (size1 > HSM_AUTH_MAX_SIZE)) {
goto HSM_EXCHANGE_KEY_Ex_Handle;
}
if (memmove_s(exchange_agree_key->exchange_key.cryptokeyelementvalueref, size0,
buffer_local + HSM_KEY_ELEMENT_SIZE, size0) != EOK) {
goto HSM_EXCHANGE_KEY_Ex_Handle;
}
if (memmove_s(exchange_agree_key->exchange_key_protectmsg, size1,
buffer_local + size0 + HSM_KEY_ELEMENT_SIZE, size1) != EOK) {
goto HSM_EXCHANGE_KEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_EXCHANGE_KEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_UpdateProtectMsg(uint32_t dev_id, HSM_UPDATE_PROKEY_INFO *update_prokey_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t size1;
ret = update_prokey_para_check(update_prokey_info);
if (ret != TEE_SUCCESS)
return ret;
ret = update_prokey_request_sharemem(&buffer_local, &buffer_size, update_prokey_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_KEY_ELEMENT_SIZE +
update_prokey_info->prokey.cryptokeyelementsize) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_IV_SIZE + update_prokey_info->prokey_authsize);
msg.args_data.arg3 = ((uint64_t)(HSM_KEY_PROTECT_SIZE +
update_prokey_info->prokey_authsize) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_UPDATE_PROTECT_KEY_CMD, &msg, HSM_UPDATE_PROTECT_KEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32) - HSM_KEY_ELEMENT_SIZE;
size1 = (uint32_t)(rsp.msg.args_data.arg2);
if ((size0 > HSM_ASYMKEY_MAX_SIZE) || (size1 > HSM_PROTECTMSG_MAX_SIZE)) {
goto HSM_UPDATE_PROTECT_KEY_Ex_Handle;
}
if (memmove_s(update_prokey_info->prokey.cryptokeyelementvalueref, size0,
buffer_local + HSM_KEY_ELEMENT_SIZE, size0) != EOK) {
goto HSM_UPDATE_PROTECT_KEY_Ex_Handle;
}
if (memmove_s(update_prokey_info->prokey_protectmsg, size1,
buffer_local + size0 + HSM_KEY_ELEMENT_SIZE, size1) != EOK) {
goto HSM_UPDATE_PROTECT_KEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_UPDATE_PROTECT_KEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_UpdateAuth(uint32_t dev_id, HSM_UPDATE_KEYAUTH_INFO *update_keyauth_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
uint32_t state;
ret = update_keyauth_para_check(update_keyauth_info);
if (ret != TEE_SUCCESS)
return ret;
ret = update_keyauth_request_sharemem(&buffer_local, &buffer_size, update_keyauth_info);
if (ret != TEE_SUCCESS)
return ret;
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_IV_SIZE + update_keyauth_info->past_key_authsize) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_KEY_PROTECT_SIZE + update_keyauth_info->past_key_authsize);
msg.args_data.arg3 = ((uint64_t)(HSM_IV_SIZE + update_keyauth_info->new_key_authsize) << HSM_CONST_SHIFT_32) |
HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_UPDATE_KEY_AUTH_CMD, &msg, HSM_UPDATE_KEY_AUTH_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (size0 > HSM_PROTECTMSG_MAX_SIZE) {
goto HSM_UPDATE_AUTH_Ex_Handle;
}
state = memmove_s(update_keyauth_info->key_protectmsg, size0, buffer_local, size0);
if (state != EOK) {
goto HSM_UPDATE_AUTH_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_UPDATE_AUTH_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_DeleteKey(uint32_t dev_id, HSM_DELETE_KEY_INFO *delete_key_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
ret = delete_key_para_check(delete_key_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = delete_key_request_sharemem(&buffer_local, &buffer_size, delete_key_info);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_KEY_PROTECT_SIZE +
delete_key_info->delete_key_authsize) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_IV_SIZE + delete_key_info->delete_key_authsize);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_DELETE_KEY_CMD, &msg, HSM_DELETE_KEY_CMD, &rsp);
__SRE_MemFreeShared(buffer_local, buffer_size);
return rsp.ret;
}
TEE_Result TEE_HSM_ExportKey(uint32_t dev_id, HSM_EXPORT_KEY_INFO *export_key_info)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size;
uint32_t size0;
ret = export_key_para_check(export_key_info);
if (ret != TEE_SUCCESS) {
return ret;
}
ret = export_key_request_sharemem(&buffer_local, &buffer_size, export_key_info);
if (ret != TEE_SUCCESS) {
return ret;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = ((uint64_t)(HSM_KEY_HEAD_SIZE + export_key_info->salt_size) << HSM_CONST_SHIFT_32) |
(uint64_t)(HSM_KEY_ELEMENT_SIZE + export_key_info->export_key.cryptokeyelementsize);
msg.args_data.arg3 = (((uint64_t)(HSM_IV_SIZE + export_key_info->export_key_authsize)) << HSM_CONST_SHIFT_32) |
((uint64_t)(HSM_KEY_PROTECT_SIZE + export_key_info->export_key_authsize));
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_EXPORT_KEY_CMD, &msg, HSM_EXPORT_KEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
size0 = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (size0 > (HSM_ASYMKEY_MAX_SIZE + HSM_KEY_APPEND_SIZE)) {
goto HSM_EXPORT_KEY_Ex_Handle;
}
if (memmove_s(export_key_info->export_key_info, size0, buffer_local, size0) != EOK) {
goto HSM_EXPORT_KEY_Ex_Handle;
}
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_EXPORT_KEY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_Bbox(uint32_t dev_id, HSM_BBOX_INFO *hsm_bbox_info, uint64_t tv_sec, uint64_t tv_usec)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("TEE_HSM_Bbox, alloc smem failed!\n");
return TEE_ERROR_OUT_OF_MEMORY;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)(sizeof(uint64_t)) << HSM_CONST_SHIFT_32) + sizeof(uint64_t));
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
if (memmove_s(buffer_local, sizeof(uint64_t), &tv_sec, sizeof(uint64_t)) != EOK) {
goto HSM_BBOX_Ex_Handle;
}
if (memmove_s(buffer_local + sizeof(uint64_t), sizeof(uint64_t), &tv_usec, sizeof(uint64_t)) != EOK) {
goto HSM_BBOX_Ex_Handle;
}
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_BBOX_CMD, &msg, HSM_BBOX_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
*hsm_bbox_info->state = *(uint32_t *)buffer_local;
} else if (ret == TEE_ERROR_TIMEOUT) {
*hsm_bbox_info->state = HSM_BBOX_TIMEOUT;
}
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_BBOX_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_notify_prereset(uint32_t dev_id)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
if (dev_id > 1) {
return TEE_SUCCESS;
}
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("TEE_HSM_notify_prereset, alloc smem failed!\n");
return TEE_ERROR_OUT_OF_MEMORY;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_NOTIFY_PRERESET_CMD, &msg, HSM_NOTIFY_PRERESET_CMD, &rsp);
ret = rsp.ret;
tloge("TEE_HSM_notify_prereset ret=0x%x\n", ret);
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_BBOX_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
File diff suppressed because it is too large Load Diff
@@ -1,108 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: HSM rpmb ak key provide api
* Author: chenyao
* Create: 2020-05-06
* Notes:
* History:
*/
#include <stdarg.h>
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "tee_service_public.h"
#include "hsm_rpmb_api.h"
#include "hsm_public.h"
TEE_Result TEE_HSM_GenRpmbKey(uint32_t dev_id, uint8_t *rpmb_key)
{
tee_service_ipc_msg_rsp rsp = {0};
tee_service_ipc_msg msg = {{0}};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t key_size;
uint32_t state;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_FAIL;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_GEN_RPMBKEY_CMD, &msg, HSM_GEN_RPMBKEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
key_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (key_size != HSM_RPMB_KEY_LEN) {
ret = TEE_ERROR_OUT_OF_MEMORY;
goto OUT;
}
state = memmove_s((void *)rpmb_key, key_size, buffer_local, key_size);
if (state != EOK) {
ret = TEE_ERROR_OUT_OF_MEMORY;
goto OUT;
}
}
OUT:
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
TEE_Result TEE_HSM_GenRpmbWrappingKey(uint32_t dev_id, uint8_t *rpmb_wrapping_key)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t key_size;
uint32_t state;
TEE_Result ret;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
tloge("GenRpmbWrappingKey,alloc smem failed!\n");
return TEE_FAIL;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = HSM_MSG_RESUME;
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_GEN_RPMB_WARPPINGKEY_CMD, &msg, HSM_GEN_RPMB_WARPPINGKEY_CMD, &rsp);
ret = rsp.ret;
if (ret == TEE_SUCCESS) {
key_size = (uint32_t)(rsp.msg.args_data.arg2 >> HSM_CONST_SHIFT_32);
if (key_size != HSM_RPMB_WRAPPING_KEY_LEN) {
ret = TEE_ERROR_OUT_OF_MEMORY;
goto OUT;
}
state = memmove_s(rpmb_wrapping_key, key_size, buffer_local, key_size);
if (state != EOK) {
ret = TEE_ERROR_OUT_OF_MEMORY;
goto OUT;
}
}
OUT:
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
}
@@ -1,116 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: HSM verify api
* Author: chenyao
* Create: 2020-05-21
* Notes:
* History:
*/
#include <stdarg.h>
#include "securec.h"
#include "ta_framework.h"
#include "tee_log.h"
#include "tee_obj.h"
#include "securec.h"
#include "string.h"
#include "hsm_public.h"
#include "hsm_verify_api.h"
#include "tee_service_public.h"
#include "hsm_update_lib_api.h"
#include "mem_ops_ext.h"
TEE_Result TEE_HSM_SOC_VERIFY(uint32_t dev_id, uint64_t image_addr, uint32_t image_len, uint32_t img_id)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(buffer_local, IMG_ADDR_SIZE, &image_addr, IMG_ADDR_SIZE)) {
goto HSM_SOC_VERIFY_Ex_Handle;
}
if (memmove_s(buffer_local + IMG_ADDR_SIZE, IMG_LEN_SIZE, &image_len, IMG_LEN_SIZE)) {
goto HSM_SOC_VERIFY_Ex_Handle;
}
if (memmove_s(buffer_local + IMG_ADDR_SIZE + IMG_LEN_SIZE, IMG_ID_SIZE, &img_id, IMG_ID_SIZE)) {
goto HSM_SOC_VERIFY_Ex_Handle;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)IMG_ADDR_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(IMG_LEN_SIZE);
msg.args_data.arg3 = (((uint64_t)IMG_ID_SIZE) << HSM_CONST_SHIFT_32) | HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_SOC_VERIFY_CMD, &msg, HSM_SOC_VERIFY_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_SOC_VERIFY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
TEE_Result TEE_HSM_Hboot1a_Trans(uint32_t dev_id)
{
tee_service_ipc_msg msg = {{0}};
tee_service_ipc_msg_rsp rsp = {0};
TEE_Result ret;
uint8_t *buffer_local = NULL;
uint32_t buffer_size = HSM_CLIENT_DDR_LEN;
uint32_t image_addr = 0x9A9A4B4B;
uint32_t image_len = 0xABAB55AA;
ret = lib_hboot1a_addr_get(dev_id, &image_addr, &image_len);
if (ret != TEE_SUCCESS) {
tloge("get hboot1_a addr fail\n");
return TEE_SUCCESS;
}
buffer_local = (uint8_t *)(uintptr_t)tee_alloc_sharemem_aux(&g_hsm_uuid, HSM_CLIENT_DDR_LEN);
if (buffer_local == NULL) {
return TEE_ERROR_OUT_OF_MEMORY;
}
if (memmove_s(buffer_local, IMG_ADDR_SIZE, &image_addr, IMG_ADDR_SIZE) != EOK) {
goto HSM_SOC_VERIFY_Ex_Handle;
}
if (memmove_s(buffer_local + IMG_ADDR_SIZE, IMG_LEN_SIZE, &image_len, IMG_LEN_SIZE) != EOK) {
goto HSM_SOC_VERIFY_Ex_Handle;
}
msg.args_data.arg0 = (uint64_t)(uintptr_t)(buffer_local);
msg.args_data.arg1 = (uint64_t)(buffer_size);
msg.args_data.arg2 = (((uint64_t)IMG_ADDR_SIZE) << HSM_CONST_SHIFT_32) | (uint64_t)(IMG_LEN_SIZE);
msg.args_data.arg3 = HSM_MSG_RESUME;
msg.args_data.arg4 = HSM_MSG_RESUME;
msg.args_data.arg5 = HSM_MSG_RESUME;
msg.args_data.arg6 = (uint64_t)dev_id;
msg.args_data.arg7 = HSM_MSG_RESUME;
tee_common_ipc_proc_cmd(HSM_TASK_NAME, HSM_HBOOT1A_TRANS_CMD, &msg, HSM_HBOOT1A_TRANS_CMD, &rsp);
ret = rsp.ret;
__SRE_MemFreeShared(buffer_local, buffer_size);
return ret;
HSM_SOC_VERIFY_Ex_Handle:
__SRE_MemFreeShared(buffer_local, buffer_size);
return TEE_ERROR_OUT_OF_MEMORY;
}
@@ -1,74 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
* Description: scmi libs source file
* Author: huawei
* Create: 2019/1/14
*/
#include "sre_syscalls_id_ext.h"
#include "hmdrv.h"
#include "syscall_api_common.h"
#include "scmi_lib_api.h"
#define SCMI_SMEM_PADDR2VADDR_MAGIC 0x5A5A5A5A
uint32_t lib_scmi_channel_open(uint32_t dev_id, uint32_t channel)
{
uint64_t args[ARRAY_INDEX2] = { 0 };
args[ARRAY_INDEX0] = channel;
args[ARRAY_INDEX1] = dev_id;
return hm_drv_call(SYSCALL_SCMI_CHANNEL_OPEN, args, ARRAY_SIZE(args));
}
uint32_t lib_scmi_channel_close(uint32_t dev_id, uint32_t channel)
{
uint64_t args[ARRAY_INDEX2] = { 0 };
args[ARRAY_INDEX0] = channel;
args[ARRAY_INDEX1] = dev_id;
return hm_drv_call(SYSCALL_SCMI_CHANNEL_CLOSE, args, ARRAY_SIZE(args));
}
uint32_t lib_scmi_channel_send_data(uint32_t dev_id, uint32_t channel,
uint8_t *buf, uint32_t len)
{
uint64_t args[ARRAY_INDEX5] = {0};
uint64_t buf_addr = (uint64_t)(uintptr_t)buf;
args[ARRAY_INDEX0] = channel;
args[ARRAY_INDEX1] = (uint64_t)upper_32_bits((uintptr_t)buf_addr);
args[ARRAY_INDEX2] = (uint64_t)lower_32_bits((uintptr_t)buf_addr);
args[ARRAY_INDEX3] = len;
args[ARRAY_INDEX4] = dev_id;
return hm_drv_call(SYSCALL_SCMI_CHANNEL_SEND_DATA, args, ARRAY_SIZE(args));
}
uint32_t lib_scmi_check_task_and_get_data(uint32_t dev_id, uint32_t channel, uint8_t *buf, uint32_t len)
{
uint64_t args[ARRAY_INDEX5] = {0};
uint64_t buf_addr = (uint64_t)(uintptr_t)buf;
args[ARRAY_INDEX0] = channel;
args[ARRAY_INDEX1] = (uint64_t)upper_32_bits((uintptr_t)buf_addr);
args[ARRAY_INDEX2] = (uint64_t)lower_32_bits((uintptr_t)buf_addr);
args[ARRAY_INDEX3] = len;
args[ARRAY_INDEX4] = dev_id;
return hm_drv_call(SYSCALL_SCMI_CHANNEL_TASK_AND_GET_DATA, args, ARRAY_SIZE(args));
}
uint32_t lib_hiss_shared_paddr_to_vaddr(uint32_t dev_id, uint64_t *vaddr_out)
{
uint64_t args[ARRAY_INDEX4] = {0};
args[ARRAY_INDEX0] = SCMI_SMEM_PADDR2VADDR_MAGIC;
args[ARRAY_INDEX1] = (uint64_t)lower_32_bits((uintptr_t)vaddr_out);
args[ARRAY_INDEX2] = (uint64_t)upper_32_bits((uintptr_t)vaddr_out);
args[ARRAY_INDEX3] = dev_id;
return hm_drv_call(SYSCALL_SCMI_CHANNEL_PADDR2VADDR, args, ARRAY_SIZE(args));
}
@@ -1,18 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: scmi libs api file
* Author: pengcong
* Create: 2020/1/14
*/
#ifndef SCMI_LIB_API_H
#define SCMI_LIB_API_H
#define SCMI_LIB_RESULT_SUCCESS 0x0U
uint32_t lib_scmi_channel_open(uint32_t dev_id, uint32_t channel);
uint32_t lib_scmi_channel_close(uint32_t dev_id, uint32_t channel);
uint32_t lib_scmi_channel_send_data(uint32_t dev_id, uint32_t channel, uint8_t *buf, uint32_t len);
uint32_t lib_scmi_check_task_and_get_data(uint32_t dev_id, uint32_t channel, uint8_t *buf, uint32_t len);
uint32_t lib_hiss_shared_paddr_to_vaddr(uint32_t dev_id, uint64_t *vaddr_out);
#endif
@@ -1,20 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: sec libs source file
* Author: chenyao
* Create: 2019/4/2
*/
#include "sre_syscalls_id.h"
#include "hmdrv.h"
#include "syscall_api_common.h"
#include "sec_lib_api.h"
uint32_t __get_provision_key(uint8_t *provision_key)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)(provision_key),
};
return hm_drv_call(SW_SYSCALL_SEC_PRO_KEY, args, ARRAY_SIZE(args));
}
@@ -1,15 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
* Description: sec libs api file
* Author: chenyao
* Create: 2020/4/2
*/
#ifndef SEC_LIB_API_H
#define SEC_LIB_API_H
#include <stdint.h>
uint32_t __get_provision_key(uint8_t *provision_key);
#endif
@@ -1,46 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: sfc libs source file
* Author: chenyao
* Create: 2019/11/2
*/
#include "sre_syscalls_id_ext.h"
#include "hmdrv.h"
#include "syscall_api_common.h"
#include "sfc_lib_api.h"
uint32_t lib_mdc_flash_read(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX4] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = length;
args[ARRAY_INDEX2] = chip_id;
args[ARRAY_INDEX3] = (uint64_t)(uintptr_t)(buffer);
return hm_drv_call(SYSCALL_MDC_FLASH_READ, args, ARRAY_SIZE(args));
}
uint32_t lib_mdc_flash_write(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX4] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = length;
args[ARRAY_INDEX2] = chip_id;
args[ARRAY_INDEX3] = (uint64_t)(uintptr_t)(buffer);
return hm_drv_call(SYSCALL_MDC_FLASH_WRITE, args, ARRAY_SIZE(args));
}
uint32_t lib_mdc_flash_erase(uint32_t offset, uint32_t length, uint32_t chip_id)
{
uint64_t args[ARRAY_INDEX4] = {0};
args[ARRAY_INDEX0] = offset;
args[ARRAY_INDEX1] = length;
args[ARRAY_INDEX2] = chip_id;
return hm_drv_call(SYSCALL_MDC_FLASH_ERASE, args, ARRAY_SIZE(args));
}
@@ -1,20 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description: sfc libs api file
* Author: huawei
* Create: 2020/11/2
*/
#ifndef SFC_LIB_API_H
#define SFC_LIB_API_H
#include <stdint.h>
#define SEC_LIB_RESULT_SUCCESS 0x0
#define SEC_LIB_RESULT_FAILED 0x5A5A5A5A
uint32_t lib_mdc_flash_read(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id);
uint32_t lib_mdc_flash_write(uint32_t offset, uint8_t *buffer, uint32_t length, uint32_t chip_id);
uint32_t lib_mdc_flash_erase(uint32_t offset, uint32_t length, uint32_t chip_id);
#endif
@@ -1,49 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/efuse
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/sec/include
${PROJECT_SOURCE_DIR}/vendor/ascend/libvendor_shared/src/libhsm_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/src
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/efuse
${PROJECT_SOURCE_DIR}/vendor/ascend/libvendor_shared/src/efuse
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/ascend/sfc
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_DEFINITIONS
DEF_BUILDUSERMODE
)
endif()
tee_add_library(vendor_static STATIC
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
NO_INSTALL
)
-32
View File
@@ -1,32 +0,0 @@
MODULE := libvendor_static$(TARG).a
flags += -Wall -Wextra
libvendor_static_c_files := $(wildcard ../libvendor_shared/src/*.c)
libvendor_static_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
libvendor_static_c_files += $(wildcard src/efuse/*.c)
libvendor_static_c_files += $(wildcard src/hsm_upgrade/*.c)
libvendor_static_c_files += $(wildcard src/scmi/*.c)
libvendor_static_c_files += $(wildcard src/sec/*.c)
libvendor_static_c_files += $(wildcard src/libhsm_client/src/*.c)
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/efuse
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/sec/include/
#for hsm_client
inc-flags += -I$(TOPDIR)/vendor/ascend/libvendor_shared/src/libhsm_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/src
inc-flags += -I$(TOPDIR)/libs/libplatdrv/platform/ascend/efuse
inc-flags += -I$(TOPDIR)/vendor/ascend/libvendor_shared/src/efuse
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
-2
View File
@@ -1,2 +0,0 @@
add_subdirectory(libvendor_shared)
add_subdirectory(libvendor_static)
@@ -1,75 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_DEFINITIONS
DEF_BUILDUSERMODE
)
endif()
list(APPEND VENDOR_SHARED_LINKER_FLAGS
-Wl,-shared
-Wl,-X
-Wl,-EL
-Wl,-z,text
-Wl,-z,now
-Wl,-z,relro
-Wl,-z,noexecstack
-Wl,--gc-sections
-L${PREBUILD_LIBS}/${ARCH}
-nostdlib
-Wl,-z,max-page-size=4096
)
list(FIND PRODUCT_APPS "vendor_shared" index)
if (${index} GREATER -1)
set(IF_INSTALL DO_INSTALL)
endif()
tee_add_library(vendor_shared SHARED
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
LINKER_FLAGS
${CHOOSE_LLD}
${VENDOR_SHARED_LINKER_FLAGS}
${COMMON_LDFLAGS}
LINKGROUP
${VENDOR_SHARED_LIBRARIES}
${COMMON_LIBGCC_COMPS}
LIBS_INSTALL_PATH
${BOOTFS_STAGE_DIR}
${IF_INSTALL}
)
if ("${ARCH}" STREQUAL "arm")
set_target_properties(vendor_shared PROPERTIES OUTPUT_NAME "vendor_shared_a32")
endif()
-33
View File
@@ -1,33 +0,0 @@
SONAME := libvendor_shared$(TARG).so
libvendor_shared_c_files := $(wildcard src/*.c)
libvendor_shared_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
MODULE_FILE = $(BUILD_DIR)/$(SONAME)
INSTALL_FILE = $(LIB_DIR)/$(SONAME)
target: $(MODULE_FILE)
$(INSTALL_FILE): $(MODULE_FILE)
@test -d $(LIB_DIR) || mkdir -p $(LIB_DIR)
@echo "[ INSTALL ] $(MODULE_FILE)"
$(VER)cp -rafp $(MODULE_FILE) $(LIB_DIR)
$(MODULE_FILE): $(libvendor_shared_objs)
@echo "[ LD ] $@ LIB_DIR=$(LIB_DIR)"
$(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections -o $@ \
$^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group $(LIB_VENDOR_FLAGS) \
$(LIBCOMPILER_RT_BUILTINS) --end-group -nostdlib
@@ -1,41 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_DEFINITIONS
DEF_BUILDUSERMODE
)
endif()
tee_add_library(vendor_static STATIC
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
NO_INSTALL
)
-16
View File
@@ -1,16 +0,0 @@
MODULE := libvendor_static$(TARG).a
libvendor_static_c_files := $(wildcard ../libvendor_shared/src/*.c)
libvendor_static_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
-2
View File
@@ -1,2 +0,0 @@
add_subdirectory(libvendor_shared)
add_subdirectory(libvendor_static)
-106
View File
@@ -1,106 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
${PROJECT_SOURCE_DIR}/vendor/common/src/tee_crypto_kds_api.c
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_FLAGS
-DDEF_BUILDUSERMODE
)
endif()
list(APPEND VENDOR_SHARED_LINKER_FLAGS
-Wl,--shared
-Wl,-X
-Wl,-EL
-Wl,-z,text
-Wl,-z,now
-Wl,-z,relro
-Wl,-z,noexecstack
-Wl,--gc-sections
-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/export.txt
-Wl,-L${PREBUILD_LIBS}/${ARCH}
-nostdlib
-Wl,-z,max-page-size=4096
${CMAKE_CURRENT_BINARY_DIR}/extern.txt
)
if ("${ARCH}" STREQUAL "arm" AND "${CONFIG_ENABLE_XOM32}" STREQUAL "y")
list(APPEND VENDOR_SHARED_LINKER_FLAGS
-T${XOM_LIB_LDS}
)
endif()
list(REMOVE_ITEM TEE_C_FLAGS "-Werror")
set(TEE_PRECOMPILE_FLAGS ${TEE_C_FLAGS})
list(REMOVE_ITEM TEE_PRECOMPILE_FLAGS "-march=armv8-a")
foreach(d ${TEE_C_DEFINITIONS})
list(APPEND TEE_PRECOMPILE_FLAGS -D${d})
endforeach()
add_custom_target(ct_vendor_shared_export)
add_custom_target(ct_vendor_shared_extern)
add_custom_command(
TARGET ct_vendor_shared_export
COMMAND ${CMAKE_C_COMPILER} ${TEE_PRECOMPILE_FLAGS} -x assembler-with-cpp -E --no-line-commands ${CMAKE_CURRENT_SOURCE_DIR}/export.txt -o ${CMAKE_CURRENT_BINARY_DIR}/export.txt
)
add_custom_command(
TARGET ct_vendor_shared_extern
COMMAND ${CMAKE_C_COMPILER} ${TEE_PRECOMPILE_FLAGS} -x assembler-with-cpp -E --no-line-commands ${CMAKE_CURRENT_SOURCE_DIR}/extern.txt -o ${CMAKE_CURRENT_BINARY_DIR}/extern.txt
)
list(FIND PRODUCT_APPS "vendor_shared" index)
if (${index} GREATER -1)
set(IF_INSTALL DO_INSTALL)
endif()
tee_add_library(vendor_shared SHARED
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
LINKER_FLAGS
${CHOOSE_LLD}
${VENDOR_SHARED_LINKER_FLAGS}
${COMMON_LDFLAGS}
LINKGROUP
${VENDOR_SHARED_LIBRARIES}
${COMMON_LIBGCC_COMPS}
LIBS_INSTALL_PATH
${BOOTFS_STAGE_DIR}
${IF_INSTALL}
)
if ("${ARCH}" STREQUAL "arm")
set_target_properties(vendor_shared PROPERTIES OUTPUT_NAME "vendor_shared_a32")
endif()
if ("${BUILD_TOOL}" STREQUAL "clang")
add_dependencies(vendor_shared ct_vendor_shared_extern ct_vendor_shared_export)
endif()
-41
View File
@@ -1,41 +0,0 @@
SONAME := libvendor_shared$(TARG).so
libvendor_shared_c_files := $(wildcard src/*.c)
libvendor_shared_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
MODULE_FILE = $(BUILD_DIR)/$(SONAME)
INSTALL_FILE = $(LIB_DIR)/$(SONAME)
target: $(MODULE_FILE)
$(INSTALL_FILE): $(MODULE_FILE)
@test -d $(LIB_DIR) || mkdir -p $(LIB_DIR)
@echo "[ INSTALL ] $(MODULE_FILE)"
$(VER)cp -rafp $(MODULE_FILE) $(LIB_DIR)
$(BUILD_DIR)/extern.txt: extern.txt $(BUILD_DIR)/export.txt
@echo "preprocess ${BUILD_DIR}/extern.txt"
@mkdir -p $(@D)
@${CC} ${flags} -P -E -o $@ -x c $<
$(BUILD_DIR)/export.txt: export.txt
@echo "preprocess ${BUILD_DIR}/export.txt"
@mkdir -p $(@D)
@${CC} ${flags} -P -E -o $@ -x c $<
$(MODULE_FILE): $(BUILD_DIR)/extern.txt $(libvendor_shared_objs)
@echo "[ LD ] $@ LIB_DIR=$(LIB_DIR)"
$(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections --version-script=$(BUILD_DIR)/export.txt -o $@ \
$^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH)-$(HM_PLATFORM) --start-group $(ld-flags) $(LIB_VENDOR_FLAGS) \
$(LIBGCC_FILE) --end-group -nostdlib -z max-page-size=4096
-6
View File
@@ -1,6 +0,0 @@
{
global:
/* vendor_shared internal */
__tee_hal_get_dieid;
local: *;
};
-4
View File
@@ -1,4 +0,0 @@
EXTERN(
/* vendor_shared internal */
__tee_hal_get_dieid
)
@@ -1,43 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_FLAGS
-DDEF_BUILDUSERMODE
)
endif()
list(REMOVE_ITEM TEE_C_FLAGS "-Werror")
tee_add_library(vendor_static STATIC
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
NO_INSTALL
)
-18
View File
@@ -1,18 +0,0 @@
MODULE := libvendor_static$(TARG).a
flags += -Wall -Wextra
libvendor_static_c_files := $(wildcard ../libvendor_shared/src/*.c)
libvendor_static_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
-2
View File
@@ -1,2 +0,0 @@
add_subdirectory(libvendor_shared)
add_subdirectory(libvendor_static)
@@ -1,103 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description: PIN security enhancement.
* Create: 2021-06-07
*/
#ifndef PIN_CODE_API_H
#define PIN_CODE_API_H
#include <tee_internal_api.h>
#define unused (void)
/* return code */
typedef enum _pin_result_ {
PINCODE_SUCCESS = TEE_SUCCESS,
PINCODE_ERR_NOT_SUPPORTED = 0xA40F0001,
PINCODE_ERR_BAD_PARAMS, /* 0xA40F0002 */
PINCODE_ERR_BAD_LENGTH, /* 0xA40F0003 */
PINCODE_ERR_RPMB_READ_FAILED, /* 0xA40F0004 */
PINCODE_ERR_RPMB_WRITE_FAILED, /* 0xA40F0005 */
PINCODE_ERR_COS_UNREADY, /* 0xA40F0006 */
PINCODE_ERR_SHORT_BUFFER, /* 0xA40F0007 */
PINCODE_ERR_SECURITY, /* 0xA40F0008 */
PINCODE_ERR_RAPDU_ILLEGAL, /* 0xA40F0009 */
PINCODE_ERR_BAD_RAPDU_LEN, /* 0xA40F000A */
PINCODE_ERR_DERIVE_KEY, /* 0xA40F000B */
PINCODE_ERR_ALLOC_OBJ_ERR, /* 0xA40F000C */
PINCODE_ERR_ALLOC_HANDLE_ERR, /* 0xA40F000D */
PINCODE_ERR_SET_KEY_ERR, /* 0xA40F000E */
PINCODE_ERR_SET_CRYPTO_ERR, /* 0xA40F000F */
PINCODE_ERR_HMAC_INIT, /* 0xA40F0010 */
PINCODE_ERR_HMAC_UPDATE, /* 0xA40F0011 */
PINCODE_ERR_HMAC_DOFINAL, /* 0xA40F0012 */
PINCODE_ERR_VERIFY_PIN, /* 0xA40F0013 */
PINCODE_ERR_UNKNOWN, /* 0xA40F000E */
} pin_result;
#define pincode_err_others(sw) (0xA40F0000 | (sw))
/* structure of parameters */
struct memref_in {
const uint8_t *buffer;
uint32_t length;
};
struct memref_out {
uint8_t *buffer;
uint32_t *size; /* the maximum size of buffer in bytes for input, the real size of buffer in bytes for output. */
};
/*
* @brief : registers pin.
* @param[in] : key_id, the key id.
* @param[in] : pin, pin hash value.
* @param[out] : handle, the handle of the PIN.
* @param[out] : key_factor, the key factor used for generate handle.
* @return : Operation status, success(0) or other failure status.
*/
inline TEE_Result tee_ext_pincode_register_pin(const struct memref_in *key_id, const struct memref_in *pin,
struct memref_out *handle, struct memref_out *key_factor)
{
unused(key_id);
unused(pin);
unused(handle);
unused(key_factor);
return PINCODE_ERR_NOT_SUPPORTED;
}
/*
* @brief : verifies pin.
* @param[in] : key_id, the key id.
* @param[in] : pin, pin hash value.
* @param[in] : handle, the handle of the PIN.
* @param[out] : key_factor, the key factor used for generate handle.
* @return : Operation status, success(0) or other failure status.
*/
inline TEE_Result tee_ext_pincode_verify_pin(const struct memref_in *key_id, const struct memref_in *pin,
const struct memref_in *handle, struct memref_out *key_factor)
{
unused(key_id);
unused(pin);
unused(handle);
unused(key_factor);
return PINCODE_ERR_NOT_SUPPORTED;
}
/*
* @brief : power on the chip.
* @return : Operation status, success(0) or other failure status.
*/
inline TEE_Result tee_ext_pincode_poweron(void)
{
return PINCODE_ERR_NOT_SUPPORTED;
}
/*
* @brief : power off the chip.
* @return : Operation status, success(0) or other failure status.
*/
inline TEE_Result tee_ext_pincode_poweroff(void)
{
return PINCODE_ERR_NOT_SUPPORTED;
}
#endif
-32
View File
@@ -1,32 +0,0 @@
# MODULE is a lib
MODULE := libseplat.a
libseplat_c_files += $(wildcard src/*.c)
c-flags += -fno-builtin
c-flags += -I$(TOPDIR)/vendor/higeneric/libseplat/include
c-flags += -I$(TOPDIR)/vendor/higeneric/libvendor_shared/src
ifeq ($(chip_type),es)
c-flags += -I$(TOPDIR)/../../../../../vendor/hisi/ap/platform/$(TARGET_BOARD_PLATFORM)_es
else
c-flags += -I$(TOPDIR)/../../../../../vendor/hisi/ap/platform/$(TARGET_BOARD_PLATFORM)
endif
c-flags += -Werror
c-flags += -Wextra
c-flags += -Wdate-time
c-flags += -Wfloat-equal
c-flags += -Wshadow
c-flags += -Wformat=2
c-flags += -O2
ifeq ($(seplat), london)
c-flags += -DCONFIG_SEPLAT_FEATURE
endif # london
include $(TOPDIR)/mk/lib-common.mk
# Header files/directories this library provides
EXPORT_HDRS := $(wildcard include/*)
@@ -1,18 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description:Header file for seplat API.
* Create: 2021/01/03
*/
#ifndef SEPLAT_API_H
#define SEPLAT_API_H
#include <tee_internal_api.h>
#include <stdint.h>
TEE_Result TEE_EXT_SEPLATIsAvailable(void);
TEE_Result TEE_EXT_SEPLATPowerOn(uint32_t vote_id);
TEE_Result TEE_EXT_SEPLATPowerOff(uint32_t vote_id);
TEE_Result TEE_EXT_SEPLATReset(uint32_t vote_id, uint32_t op_type);
#endif /* SEPLAT_API_H */
@@ -1,84 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description:APIs for sepalt.
* Create: 2021/01/03
*/
#include "seplat_api.h"
#include "seplat.h"
#include "seplat_define.h"
#include "seplat_errno.h"
#include "seplat_status.h"
#ifdef CONFIG_SEPLAT_FEATURE
TEE_Result TEE_EXT_SEPLATIsAvailable(void)
{
uint32_t ret;
ret = seplat_get_dts_status();
if (ret == SEPLAT_DTS_ABSENCE)
tloge("%s:seplat is absence!\n", __func__);
return ret;
}
TEE_Result TEE_EXT_SEPLATPowerOn(uint32_t vote_id)
{
uint32_t ret;
ret = seplat_power_ctrl(vote_id, SEPLAT_POWER_ON_CMD, SEPLAT_POWER_OP_BOOT);
if (ret != SEPLAT_OK) {
tloge("%s:power on failed:vote:%d, ret=%x.\n", __func__, vote_id, ret);
return ret;
}
return TEE_SUCCESS;
}
TEE_Result TEE_EXT_SEPLATPowerOff(uint32_t vote_id)
{
uint32_t ret;
ret = seplat_power_ctrl(vote_id, SEPLAT_POWER_OFF_CMD, SEPLAT_POWER_OP_BOOT);
if (ret != SEPLAT_OK) {
tloge("%s:power off failed:vote:%d, ret=%x.\n", __func__, vote_id, ret);
return ret;
}
return TEE_SUCCESS;
}
TEE_Result TEE_EXT_SEPLATReset(uint32_t vote_id, uint32_t op_type)
{
uint32_t ret;
ret = seplat_power_ctrl(vote_id, SEPLAT_POWER_RESET_CMD, op_type);
if (ret != SEPLAT_OK) {
tloge("%s:reset failed:vote:%d, ret=%x.\n", __func__, vote_id, ret);
return ret;
}
return TEE_SUCCESS;
}
#else /* CONFIG_SEPLAT_FEATURE */
TEE_Result TEE_EXT_SEPLATIsAvailable(void)
{
return TEE_ERROR_SERVICE_NOT_EXIST;
}
TEE_Result TEE_EXT_SEPLATPowerOn(uint32_t vote_id)
{
(void)vote_id;
return TEE_ERROR_SERVICE_NOT_EXIST;
}
TEE_Result TEE_EXT_SEPLATPowerOff(uint32_t vote_id)
{
(void)vote_id;
return TEE_ERROR_SERVICE_NOT_EXIST;
}
TEE_Result TEE_EXT_SEPLATReset(uint32_t vote_id, uint32_t op_type)
{
(void)vote_id;
(void)op_type;
return TEE_ERROR_SERVICE_NOT_EXIST;
}
#endif /* CONFIG_SEPLAT_FEATURE */
@@ -1,161 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/chip_info.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/extra_syms.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/hdcp.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/hisi_mspc.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/inse.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/secboot.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/secflash.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/file_encry_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/fp_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/fr_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/hisi_hieps_task.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/hisi_privacy_protection_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/hisi_secboot_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/npu_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/secmem_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/vdecry_drv.c
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
${PROJECT_SOURCE_DIR}/vendor/common/src/tee_crypto_kds_api.c
${PROJECT_SOURCE_DIR}/libs/libsec_flash_client/src/sec_flash_api.c
)
if ("${CONFIG_SE_SERVICE_32BIT}" STREQUAL "true" OR "${CONFIG_SE_SERVICE_64BIT}" STREQUAL "true")
list(APPEND TEE_C_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/se_status.c
)
endif()
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
${PROJECT_SOURCE_DIR}/libs/libsec_flash_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/src
${PROJECT_SOURCE_DIR}/libs/libvltmm_a32/include
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_FLAGS
-DDEF_BUILDUSERMODE
)
endif()
if ("${CONFIG_HISI_MSPC_IPC_TEST}" STREQUAL "true")
list(APPEND TEE_C_FLAGS
-DCONFIG_HISI_MSPC_IPC_TEST
)
endif()
list(APPEND VENDOR_SHARED_LIBRARIES
mspcore
rot
art
biometric
sec_flash_client
chinadrm
)
if ("${CONFIG_WEAVER}" STREQUAL "true")
list(APPEND VENDOR_SHARED_LIBRARIES
weaver
)
endif()
if ("${CONFIG_VLTMM_SRV}" STREQUAL "true")
list(APPEND VENDOR_SHARED_LIBRARIES
vltmm
)
endif()
list(APPEND VENDOR_SHARED_LINKER_FLAGS
-Wl,--shared
-Wl,-X
-Wl,-EL
-Wl,-z,text
-Wl,-z,now
-Wl,-z,relro
-Wl,-z,noexecstack
-Wl,--gc-sections
-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/export.txt
-Wl,-L${PREBUILD_LIBS}/${ARCH}
-nostdlib
-Wl,-z,max-page-size=4096
${CMAKE_CURRENT_BINARY_DIR}/extern.txt
)
if ("${ARCH}" STREQUAL "arm" AND "${CONFIG_ENABLE_XOM32}" STREQUAL "y")
list(APPEND VENDOR_SHARED_LINKER_FLAGS
-Wl,-T${XOM_LIB_LDS}
)
endif()
list(REMOVE_ITEM TEE_C_FLAGS "-Werror")
set(TEE_PRECOMPILE_FLAGS ${TEE_C_FLAGS})
list(REMOVE_ITEM TEE_PRECOMPILE_FLAGS "-march=armv8-a")
foreach(d ${TEE_C_DEFINITIONS})
list(APPEND TEE_PRECOMPILE_FLAGS -D${d})
endforeach()
add_custom_target(kirin_vendor_shared_export)
add_custom_target(kirin_vendor_shared_extern)
add_custom_command(
TARGET kirin_vendor_shared_export
COMMAND ${CMAKE_C_COMPILER} ${TEE_PRECOMPILE_FLAGS} -x assembler-with-cpp -E --no-line-commands ${CMAKE_CURRENT_SOURCE_DIR}/export.txt -o ${CMAKE_CURRENT_BINARY_DIR}/export.txt
)
add_custom_command(
TARGET kirin_vendor_shared_extern
COMMAND ${CMAKE_C_COMPILER} ${TEE_PRECOMPILE_FLAGS} -x assembler-with-cpp -E --no-line-commands ${CMAKE_CURRENT_SOURCE_DIR}/extern.txt -o ${CMAKE_CURRENT_BINARY_DIR}/extern.txt
)
list(FIND PRODUCT_APPS "vendor_shared" index)
if (${index} GREATER -1)
set(IF_INSTALL DO_INSTALL)
endif()
tee_add_library(vendor_shared SHARED
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
LINKER_FLAGS
${CHOOSE_LLD}
${VENDOR_SHARED_LINKER_FLAGS}
${COMMON_LDFLAGS}
${LIB_VENDOR_FLAGS}
LINKGROUP
${VENDOR_SHARED_LIBRARIES}
${COMMON_LIBGCC_COMPS}
LIBS_INSTALL_PATH
${BOOTFS_STAGE_DIR}
${IF_INSTALL}
)
if ("${ARCH}" STREQUAL "arm")
set_target_properties(vendor_shared PROPERTIES OUTPUT_NAME "vendor_shared_a32")
endif()
if ("${BUILD_TOOL}" STREQUAL "clang")
add_dependencies(vendor_shared kirin_vendor_shared_extern kirin_vendor_shared_export)
endif()
@@ -1,83 +0,0 @@
SONAME := libvendor_shared$(TARG).so
FILES := $(wildcard src/*.c)
libvendor_shared_c_files := $(filter-out src/se_status.c src/hisi_mspc.c src/hisi_mspc_stubs.c, $(FILES))
libvendor_shared_c_files += $(wildcard src/driver_api/*.c)
ifneq ($(findstring true, $(CONFIG_SE_SERVICE_32BIT) $(CONFIG_SE_SERVICE_64BIT)),)
libvendor_shared_c_files += src/se_status.c
endif
libvendor_shared_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
inc-flags += -I$(TOPDIR)/libs/libvltmm_a32/include
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/src
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
ifneq ($(filter $(TARGET_BOARD_PLATFORM), baltimore), )
libvendor_shared_c_files += src/hisi_mspc.c
else
libvendor_shared_c_files += src/hisi_mspc_stubs.c
endif
ifeq ($(CONFIG_HISI_MSPC_IPC_TEST), true)
flags += -DCONFIG_HISI_MSPC_IPC_TEST
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
MODULE_FILE = $(BUILD_DIR)/$(SONAME)
INSTALL_FILE = $(LIB_DIR)/$(SONAME)
target: $(MODULE_FILE)
$(INSTALL_FILE): $(MODULE_FILE)
@test -d $(LIB_DIR) || mkdir -p $(LIB_DIR)
@echo "[ INSTALL ] $(MODULE_FILE)"
$(VER)cp -rafp $(MODULE_FILE) $(LIB_DIR)
ld-flags := -lmspcore$(TARG) -lrot$(TARG) -lart$(TARG) -lbiometric$(TARG) -lsec_flash_client$(TARG) -lchinadrm$(TARG)
ifeq ($(CONFIG_WEAVER), true)
ld-flags += -lweaver$(TARG)
endif
ifeq ($(CONFIG_VLTMM_SRV), true)
ld-flags += -lvltmm$(TARG)
endif
ifeq ($(xom32_enable), y)
ld-flags += -T $(XOM_LIB_LDS)
endif
$(BUILD_DIR)/extern.txt: extern.txt $(BUILD_DIR)/export.txt
@echo "preprocess ${BUILD_DIR}/extern.txt"
@mkdir -p $(@D)
@${CC} ${flags} -P -E -o $@ -x c $<
$(BUILD_DIR)/export.txt: export.txt
@echo "preprocess ${BUILD_DIR}/export.txt"
@mkdir -p $(@D)
@${CC} ${flags} -P -E -o $@ -x c $<
ifeq ($(xom32_enable), y)
$(MODULE_FILE): $(BUILD_DIR)/extern.txt $(libvendor_shared_objs)
@echo "[ LD ] $@ LIB_DIR=$(LIB_DIR)"
$(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections --version-script=$(BUILD_DIR)/export.txt -o $@ \
$^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group $(ld-flags) $(LIB_VENDOR_FLAGS) \
$(LIBCOMPILER_RT_BUILTINS) --end-group -nostdlib -z max-page-size=4096
$(VER)$(XOM) $@
$(VER)$(OBJCOPY) $@ --remove-section ".xomloc"
else
$(MODULE_FILE): $(BUILD_DIR)/extern.txt $(libvendor_shared_objs)
@echo "[ LD ] $@ LIB_DIR=$(LIB_DIR)"
$(VER)$(LD) --shared -X -EL -z text -z now -z relro -z noexecstack --gc-sections --version-script=$(BUILD_DIR)/export.txt -o $@ \
$^ -L$(LIB_DIR) -L$(PREBUILD_LIBS)/$(ARCH) --start-group $(ld-flags) $(LIB_VENDOR_FLAGS) \
$(LIBCOMPILER_RT_BUILTINS) --end-group -nostdlib -z max-page-size=4096
endif
@@ -1,259 +0,0 @@
{
global:
/* vendor_shared internal */
__tee_hal_get_dieid;
TEE_inSE_support;
TEE_EXT_Get_Skytone_Version;
__hdcp13_key_all_set;
__hdcp22_key_set;
__hdcp_dp_enable;
__hdcp_get_value;
__hdcp_set_reg;
__hdcp_ioctl;
__hdcp_wfd_handle_map;
__hdcp_wfd_handle_unmap;
__scard_connect;
__scard_disconnect;
__driver_p61_factory_test;
__scard_transmit;
__scard_support_mode;
__scard_send;
__scard_receive;
__scard_get_status;
__inse_connect;
__inse_disconnect;
__ese_transmit_data;
__ese_read_data;
__scard_get_ese_type;
__SE_getflag;
__SE_setflag;
__hisi_secboot_process_soc_addr;
__hisi_secboot_copy_soc_data;
__hisi_secboot_soc_verification;
__hisi_secboot_soc_reset;
__hisi_secboot_soc_set;
__hisi_secboot_get_vrl_addr;
__secboot_get_cuid;
__bsp_modem_call;
__sre_se_channel_info_write;
__sre_se_channel_info_read;
__sre_se_deactive_write;
__sre_se_deactive_read;
__sre_seaid_switch_write;
__sre_seaid_list_len_read;
__sre_seaid_switch_read;
__sre_se_connect_info_write;
__sre_se_connect_info_read;
__hisi_mspc_check_secflash;
__hisi_mspc_fac_mode_enter;
__hisi_mspc_fac_mode_exit;
__hisi_mspc_recovery;
__hisi_mspc_secflash_writelock;
__secflash_chip_reset;
__secflash_power_save;
/* seplat */
seplat_get_dts_status;
seplat_power_ctrl;
/* driver_api */
__file_encry_interface;
__driver_fingerprint_command;
__driver_spi_full_duplex;
__driver_spi_full_duplex_with_speed;
__driver_spi_half_duplex_with_speed;
__driver_spi_dev2_full_duplex;
__driver_spi_dev2_full_duplex_with_speed;
__driver_spi_dev2_half_duplex_with_speed;
__driver_fp_set_spi_mode;
__fr_read_current_time;
__fr_secure_memory_map;
__fr_secure_memory_unmap;
__fr_is_secure_memory;
__fr_flush_cache;
__fr_sion_pool_flag_set;
__fr_sion_pool_flag_unset;
__fr_get_static_phy_addr;
__tee_call_hieps_drivers;
__hisi_secboot_copy_img_from_os;
__eiius_encrypto_ctr;
__eiius_image_verify;
__eiius_get_paddr;
__eiius_secure_memory_map;
__eiius_secure_memory_unmap;
__npu_syscall_ioctl_cmdproc;
__npu_syscall_llseek_cmdproc;
__npu_syscall_open_cmdproc;
__npu_syscall_release_cmdproc;
__npu_syscall_write_cmdproc;
__teesvm_ioctl;
__sion_ioctl;
sion_mmap;
sion_munmap;
sion_create_smmu_domain;
sion_destroy_smmu_domain;
ddr_sec_cfg;
sion_mmap_sfd;
sion_munmap_sfd;
sion_ddr_sec_cfg;
secmem_get_version;
__SECURE_TEE_Mmap;
__SECURE_TEE_Unmap;
__SECURE_FlushCache;
__SECURE_ISSecureMemory;
__ese_proto7816_reset;
__phNxpEse_GetOsMode;
__ese_set_nfc_chiptype;
__mspe_poweron;
__mspe_poweroff;
__mspe_rnd_gen_trnd;
__mspe_sm2_gen_key;
__mspe_sm2_encrypt;
__mspe_sm2_decrypt;
__mspe_sm3_hash_init;
__mspe_sm3_hash_update;
__mspe_sm3_hash_dofinal;
__mspe_sm3_hash_sigle;
__mspe_sm4_set_key;
__mspe_sm4_set_iv;
__mspe_sm4_init;
__mspe_sm4_update;
__mspe_sm4_dofinal;
__mspe_km_derive_kdr;
__mspe_sm9_sign;
__mspe_sm9_verify;
__mspe_sm9_encrypt;
__mspe_sm9_decrypt;
__mspe_sm9_wrap_key;
__mspe_sm9_unwrap_key;
__mspe_sm9_pre_data;
__secisp_mem_end;
#ifdef DEF_ENG
__tee_call_bus_drivers;
#endif
#if (defined TEE_SUPPORT_SEM || defined TEE_SUPPORT_SE_SERVICE_32BIT || defined TEE_SUPPORT_SE_SERVICE_64BIT)
/* msp core start */
TEE_EXT_MSPLoadSA;
TEE_EXT_MSPInstallSA;
TEE_EXT_MSPGetStatus;
/* msp core end */
#endif
/* weaver start */
TEE_EXT_WeaverGetNumSlots;
TEE_EXT_WeaverWrite;
TEE_EXT_WeaverRead;
TEE_EXT_WeaverErase;
TEE_EXT_WeaverEraseAll;
TEE_EXT_WeaverGetStatus;
TEE_EXT_WeaverGetErrorType;
/* weaver end */
/* secflash start */
TEE_EXT_SecFlashIsAvailable;
TEE_EXT_SecFlashFactoryRecovery;
TEE_EXT_SecFlashPowerSaving;
TEE_EXT_SecFlashReset;
TEE_EXT_SecFlashGetBindingKey;
TEE_EXT_SecFlashWriteLockEnable;
__secflash_chip_reset;
__secflash_power_save;
sf_creat_persistent_object;
sf_open_persistent_object;
sf_read_object_data;
sf_write_object_data;
sf_truncate_object_data;
sf_seek_object_data;
sf_close_and_delete_persistent_object;
sf_info_object_data;
sf_sync_persistent_object;
sf_rename_persistent_object;
sf_close_object;
/* secflash end */
/* mspc start */
TEE_EXT_MSPIsAvailable;
__hisi_mspc_check_secflash;
TEE_EXT_MSPServiceIsAvailable;
__hisi_mspc_power_on;
__hisi_mspc_power_off;
TEE_EXT_MspcRecovery;
TEE_EXT_MspcPowerOn;
TEE_EXT_MspcPowerOff;
TEE_EXT_MspcIpcTest;
TEE_EXT_MspcDdrRead;
TEE_EXT_MspcDdrWrite;
__mspc_ipc_test;
__mspc_ddr_read;
__mspc_ddr_write;
/* mspc end */
/* root of trust start */
TEE_EXT_ROTImportKey;
TEE_EXT_ROTExportCert;
TEE_EXT_ROTSign;
TEE_EXT_ROTStoreID;
TEE_EXT_ROTVerifyID;
TEE_EXT_ROTGenerateKey;
TEE_EXT_ROTGenerateAppKey;
TEE_EXT_ROTExportKey;
TEE_EXT_ROTVerify;
TEE_EXT_ROTComputeMAC;
TEE_EXT_ROTCompareMAC;
TEE_EXT_ROTEncrypt;
TEE_EXT_ROTDecrypt;
TEE_EXT_ROTCertExist;
TEE_EXT_ROTAttestKey;
TEE_EXT_ROTGetBlobHandle;
/* root of trust end */
/* art start */
TEE_EXT_ARTAllocSlot;
TEE_EXT_ARTReadCounter;
TEE_EXT_ARTIncreaseCounter;
/* art end */
/* biometric start */
TEE_EXT_BioLoadSA;
TEE_EXT_BioInstallSA;
TEE_EXT_BioStartSA;
TEE_EXT_BioSendCommand;
TEE_EXT_BioCloseSA;
TEE_EXT_BioReInit;
/* biometric end */
/* secure memory begin */
#ifdef TEE_SUPPORT_VLTMM_SRV
vlt_create_zone;
vlt_destroy_zone;
vlt_malloc;
vlt_free;
vlt_open;
vlt_close;
vlt_map;
vlt_unmap;
vlt_import_fd;
vlt_pool_dump;
vlt_shrinker;
vlt_errno;
vlt_create_siommu_domain;
vlt_destroy_siommu_domain;
#endif
secmem_smmu_domain_init;
secmem_smmu_domain_destroy;
secmem_get_version;
tee_ese_transmit;
tee_ese_read;
/* secure memory end */
/* mspe chianDRM api start */
cdrm_hisee_video_init;
cdrm_hisee_video_update;
cdrm_hisee_video_dofinal;
cdrm_hisee_video_deinit;
TEE_AEDecryptFinal_KDS;
TEE_AEEncryptFinal_KDS;
/* mspe chianDRM api end */
local: *;
};
@@ -1,254 +0,0 @@
EXTERN(
/* vendor_shared internal */
__tee_hal_get_dieid
TEE_inSE_support
TEE_EXT_Get_Skytone_Version
__hdcp13_key_all_set
__hdcp22_key_set
__hdcp_dp_enable
__hdcp_get_value
__hdcp_set_reg
__hdcp_ioctl
__hdcp_wfd_handle_map
__hdcp_wfd_handle_unmap
__scard_connect
__scard_disconnect
__driver_p61_factory_test
__scard_transmit
__scard_support_mode
__scard_send
__scard_receive
__scard_get_status
__inse_connect
__inse_disconnect
__ese_transmit_data
__ese_read_data
__scard_get_ese_type
__SE_getflag
__SE_setflag
__hisi_secboot_process_soc_addr
__hisi_secboot_copy_soc_data
__hisi_secboot_soc_verification
__hisi_secboot_soc_reset
__hisi_secboot_soc_set
__hisi_secboot_get_vrl_addr
__secboot_get_cuid
__bsp_modem_call
__sre_se_channel_info_write
__sre_se_channel_info_read
__sre_se_deactive_write
__sre_se_deactive_read
__sre_seaid_switch_write
__sre_seaid_list_len_read
__sre_seaid_switch_read
__sre_se_connect_info_write
__sre_se_connect_info_read
__hisi_mspc_check_secflash
__hisi_mspc_fac_mode_enter
__hisi_mspc_fac_mode_exit
__hisi_mspc_recovery
__hisi_mspc_secflash_writelock
__secflash_chip_reset
__secflash_power_save
/* seplat */
seplat_get_dts_status
seplat_power_ctrl
/* driver_api */
__file_encry_interface
__driver_fingerprint_command
__driver_spi_full_duplex
__driver_spi_full_duplex_with_speed
__driver_spi_half_duplex_with_speed
__driver_spi_dev2_full_duplex
__driver_spi_dev2_full_duplex_with_speed
__driver_spi_dev2_half_duplex_with_speed
__driver_fp_set_spi_mode
__fr_read_current_time
__fr_secure_memory_map
__fr_secure_memory_unmap
__fr_is_secure_memory
__fr_flush_cache
__fr_sion_pool_flag_set
__fr_sion_pool_flag_unset
__fr_get_static_phy_addr
__tee_call_hieps_drivers
__hisi_secboot_copy_img_from_os
__eiius_encrypto_ctr
__eiius_image_verify
__eiius_get_paddr
__eiius_secure_memory_map
__eiius_secure_memory_unmap
__npu_syscall_ioctl_cmdproc
__npu_syscall_llseek_cmdproc
__npu_syscall_open_cmdproc
__npu_syscall_release_cmdproc
__npu_syscall_write_cmdproc
__teesvm_ioctl
__sion_ioctl
sion_mmap
sion_munmap
sion_create_smmu_domain
sion_destroy_smmu_domain
ddr_sec_cfg
sion_mmap_sfd
sion_munmap_sfd
sion_ddr_sec_cfg
secmem_get_version
secmem_smmu_domain_init
secmem_smmu_domain_destroy
__SECURE_TEE_Mmap
__SECURE_TEE_Unmap
__SECURE_FlushCache
__SECURE_ISSecureMemory
__ese_proto7816_reset
__phNxpEse_GetOsMode
__ese_set_nfc_chiptype
__mspe_poweron
__mspe_poweroff
__mspe_rnd_gen_trnd
__mspe_sm2_gen_key
__mspe_sm2_encrypt
__mspe_sm2_decrypt
__mspe_sm3_hash_init
__mspe_sm3_hash_update
__mspe_sm3_hash_dofinal
__mspe_sm3_hash_sigle
__mspe_sm4_set_key
__mspe_sm4_set_iv
__mspe_sm4_init
__mspe_sm4_update
__mspe_sm4_dofinal
__mspe_km_derive_kdr
__mspe_sm9_sign
__mspe_sm9_verify
__mspe_sm9_encrypt
__mspe_sm9_decrypt
__mspe_sm9_wrap_key
__mspe_sm9_unwrap_key
__mspe_sm9_pre_data
__secisp_mem_end
#ifdef DEF_ENG
__tee_call_bus_drivers;
#endif
#if (defined TEE_SUPPORT_SEM || defined TEE_SUPPORT_SE_SERVICE_32BIT || defined TEE_SUPPORT_SE_SERVICE_64BIT)
/* msp core start */
TEE_EXT_MSPLoadSA
TEE_EXT_MSPInstallSA
TEE_EXT_MSPGetStatus
/* msp core end */
#endif
/* weaver start */
TEE_EXT_WeaverGetNumSlots
TEE_EXT_WeaverWrite
TEE_EXT_WeaverRead
TEE_EXT_WeaverErase
TEE_EXT_WeaverEraseAll
TEE_EXT_WeaverGetStatus
TEE_EXT_WeaverGetErrorType
/* weaver end */
/* secflash start */
TEE_EXT_SecFlashIsAvailable
TEE_EXT_SecFlashFactoryRecovery
TEE_EXT_SecFlashPowerSaving
TEE_EXT_SecFlashReset
TEE_EXT_SecFlashGetBindingKey
TEE_EXT_SecFlashWriteLockEnable
__secflash_chip_reset
__secflash_power_save
sf_creat_persistent_object
sf_open_persistent_object
sf_read_object_data
sf_write_object_data
sf_truncate_object_data
sf_seek_object_data
sf_close_and_delete_persistent_object
sf_info_object_data
sf_sync_persistent_object
sf_rename_persistent_object
sf_close_object
/* secflash end */
/* mspc start */
TEE_EXT_MSPIsAvailable
__hisi_mspc_check_secflash
TEE_EXT_MSPServiceIsAvailable
__hisi_mspc_power_on
__hisi_mspc_power_off
TEE_EXT_MspcRecovery
TEE_EXT_MspcPowerOn
TEE_EXT_MspcPowerOff
TEE_EXT_MspcIpcTest
TEE_EXT_MspcDdrRead
TEE_EXT_MspcDdrWrite
__mspc_ipc_test
__mspc_ddr_read
__mspc_ddr_write
/* mspc end */
/* root of trust start */
TEE_EXT_ROTImportKey
TEE_EXT_ROTExportCert
TEE_EXT_ROTSign
TEE_EXT_ROTStoreID
TEE_EXT_ROTVerifyID
TEE_EXT_ROTGenerateKey
TEE_EXT_ROTGenerateAppKey
TEE_EXT_ROTExportKey
TEE_EXT_ROTVerify
TEE_EXT_ROTComputeMAC
TEE_EXT_ROTCompareMAC
TEE_EXT_ROTEncrypt
TEE_EXT_ROTDecrypt
TEE_EXT_ROTCertExist
TEE_EXT_ROTAttestKey
TEE_EXT_ROTGetBlobHandle
/* root of trust end */
/* art start */
TEE_EXT_ARTAllocSlot
TEE_EXT_ARTReadCounter
TEE_EXT_ARTIncreaseCounter
/* art end */
/* biometric start */
TEE_EXT_BioLoadSA
TEE_EXT_BioInstallSA
TEE_EXT_BioStartSA
TEE_EXT_BioSendCommand
TEE_EXT_BioCloseSA
TEE_EXT_BioReInit
/* biometric end */
/* secure memory begin */
#ifdef TEE_SUPPORT_VLTMM_SRV
vlt_create_zone
vlt_destroy_zone
vlt_malloc
vlt_free
vlt_open
vlt_close
vlt_map
vlt_unmap
vlt_import_fd
vlt_pool_dump
vlt_shrinker
vlt_errno
vlt_create_siommu_domain
vlt_destroy_siommu_domain
#endif
tee_ese_transmit
tee_ese_read
secmem_get_version
/* secure memory end */
/* mspe chianDRM api start */
cdrm_hisee_video_init
cdrm_hisee_video_update
cdrm_hisee_video_dofinal
cdrm_hisee_video_deinit
/* mspe chianDRM api end */
)
@@ -1,26 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: functions to get chip info
* Create: 2020-4-6
*/
#include "chip_info.h"
#include <stdint.h>
#include <hm_mman_ext.h>
#include <hmdrv.h>
#include <hm_msg_type.h> /* for ARRAY_SIZE */
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "lib_timer.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "tee_defines.h"
#include "tee_bit_ops.h"
__attribute__((visibility("default"))) \
int32_t __tee_hal_get_dieid(uint32_t *in_buffer)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)(in_buffer),
};
return hm_drv_call(SW_SYSCALL_TEE_HAL_GET_DIEID, args, ARRAY_SIZE(args));
}
@@ -1,26 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved.
* Description: hieps drive interface, Analysis of test commands.
* call different test interfaces
* Author:
* Create: 2020-9-11
*/
#include "hmdrv.h"
#include "mem_page_ops.h"
#include <sre_syscalls_id_ext.h>
#include "tee_log.h"
#ifdef DEF_ENG
uint32_t __tee_call_bus_drivers(uint32_t cmd, const char *parm_info,
uint32_t parm_size)
{
uint64_t args[] = {
(uint64_t)cmd,
(uint64_t)(uintptr_t)parm_info,
(uint64_t)parm_size,
};
return hm_drv_call(SW_SYSCALL_LSBUS_DRV, args, ARRAY_SIZE(args));
}
#endif
@@ -1,10 +0,0 @@
#ifndef __BUS_DRV_TEST_TASK_H__
#define __BUS_DRV_TEST_TASK_H__
#include "stdint.h"
#ifdef DEF_ENG
uint32_t __tee_call_bus_drivers(uint32_t cmd,
const char *parm_info, uint32_t parm_size);
#endif
#endif
@@ -1,27 +0,0 @@
#include <stdint.h>
#include <hm_mman_ext.h>
#include "lib_timer.h"
#include "sre_hwi.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "sre_syscalls_ext.h"
#include "tee_internal_api.h"
#include "tee_log.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
#ifdef TEE_SUPPORT_FILE_ENCRY
__attribute__((visibility("default"))) \
INT32 __file_encry_interface(INT32 cmd_id, UINT8 *iv_buf, UINT32 length)
{
uint64_t args[] = {
(uint64_t)cmd_id,
(uint64_t)(uintptr_t)iv_buf, /* Not support 64bit TA */
(uint64_t)length,
};
return hm_drv_call(SW_SYSCALL_FILE_ENCRY_INTERFACE, args, ARRAY_SIZE(args));
}
#endif
@@ -1,103 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Create: 2019-05-08
* Description: fingerprint driver interface.
*/
#include <stdint.h>
#include <hm_mman_ext.h>
#include "lib_timer.h"
#include "sre_hwi.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "sre_syscalls_ext.h"
#include "tee_internal_api.h"
#include "tee_log.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
int __driver_fingerprint_command(void *command_info)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)command_info,
};
return hm_drv_call(SW_SYSCALL_FP_COMMAND_INFO, args, ARRAY_SIZE(args));
}
int __driver_spi_full_duplex(void *p_write_info, void *p_read_info)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_write_info,
(uint64_t)(uintptr_t)p_read_info,
};
return hm_drv_call(SW_SYSCALL_FP_SPI_TRANSACTION, args, ARRAY_SIZE(args));
}
int __driver_spi_full_duplex_with_speed(void *p_write_info, void *p_read_info, int speed)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_write_info,
(uint64_t)(uintptr_t)p_read_info,
(uint64_t)speed,
};
return hm_drv_call(SW_SYSCALL_FP_SPI_FULL_DUPLEX_WITH_SPEED_TRANSACTION, args, ARRAY_SIZE(args));
}
int __driver_spi_half_duplex_with_speed(void *p_write_info, void *p_read_info, int speed)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_write_info,
(uint64_t)(uintptr_t)p_read_info,
(uint64_t)speed,
};
return hm_drv_call(SW_SYSCALL_FP_SPI_HALF_DUPLEX_WITH_SPEED_TRANSACTION, args, ARRAY_SIZE(args));
}
int __driver_spi_dev2_full_duplex(void *p_write_info, void *p_read_info)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_write_info,
(uint64_t)(uintptr_t)p_read_info,
};
return hm_drv_call(SW_SYSCALL_FP_SPI_DEV2_TRANSACTION, args, ARRAY_SIZE(args));
}
int __driver_spi_dev2_full_duplex_with_speed(void *p_write_info, void *p_read_info, int speed)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_write_info,
(uint64_t)(uintptr_t)p_read_info,
(uint64_t)speed,
};
return hm_drv_call(SW_SYSCALL_FP_SPI_DEV2_FULL_DUPLEX_WITH_SPEED_TRANSACTION, args, ARRAY_SIZE(args));
}
int __driver_spi_dev2_half_duplex_with_speed(void *p_write_info, void *p_read_info, int speed)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_write_info,
(uint64_t)(uintptr_t)p_read_info,
(uint64_t)speed,
};
return hm_drv_call(SW_SYSCALL_FP_SPI_DEV2_HALF_DUPLEX_WITH_SPEED_TRANSACTION, args, ARRAY_SIZE(args));
}
int __driver_fp_set_spi_mode(int mode)
{
uint64_t args[] = {
(uint64_t)mode,
};
return hm_drv_call(SW_SYSCALL_FP_SET_SPI_MODE, args, ARRAY_SIZE(args));
}
@@ -1,97 +0,0 @@
#include <stdint.h>
#include <hm_mman_ext.h>
#include <cache_flush.h>
#include "lib_timer.h"
#include "sre_hwi.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "sre_syscalls_ext.h"
#include "tee_internal_api.h"
#include "tee_log.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
#define ADDR_OFFSET 32
unsigned int __fr_read_current_time(__attribute__((unused)) void *command_info)
{
return hm_drv_call(SW_SYSCALL_FR_READ_CURRENT_TIME, NULL, 0);
}
int __fr_secure_memory_map(paddr_t phy_addr, unsigned int size, unsigned int *virt_addr, unsigned int secure_mode,
unsigned int cache_mode)
{
uint64_t args[] = {
(uint64_t)phy_addr,
(uint64_t)size,
(uint64_t)(uintptr_t)virt_addr, /* Not support 64bit TA now */
(uint64_t)secure_mode,
(uint64_t)cache_mode,
};
int ret = hm_drv_call(SW_SYSCALL_FR_SECURE_TEE_MMAP, args, ARRAY_SIZE(args));
if (ret == 0) {
__dma_flush_range(*virt_addr, *virt_addr + size);
}
return ret;
}
int __fr_secure_memory_unmap(unsigned int virt_addr, unsigned int size)
{
uint64_t args[] = {
(uint64_t)virt_addr,
(uint64_t)size,
};
return hm_drv_call(SW_SYSCALL_FR_SECURE_TEE_UNMAP, args, ARRAY_SIZE(args));
}
int __fr_is_secure_memory(paddr_t addr, unsigned int size, unsigned int protect_id)
{
uint64_t args[] = {
(uint64_t)addr,
(uint64_t)size,
(uint64_t)protect_id,
};
return hm_drv_call(SW_SYSCALL_FR_SECURE_ISSECUREMEM, args, ARRAY_SIZE(args));
}
void __fr_flush_cache(unsigned int start, unsigned int end)
{
__dma_flush_range(start, end);
}
int __fr_sion_pool_flag_set(unsigned int type)
{
uint64_t args[] = {
(uint64_t)type,
};
return hm_drv_call(SW_SYSCALL_FR_SECURE_ION_SET, args, ARRAY_SIZE(args));
}
int __fr_sion_pool_flag_unset(unsigned int type)
{
uint64_t args[] = {
(uint64_t)type,
};
return hm_drv_call(SW_SYSCALL_FR_SECURE_ION_UNSET, args, ARRAY_SIZE(args));
}
int __fr_get_static_phy_addr(paddr_t *addr, unsigned int type, unsigned int index, unsigned int size)
{
if (addr == NULL) {
return -1;
}
uint32_t ret;
uint32_t phy_addr = 0;
uint64_t args[] = {
(uint64_t)(uintptr_t)&phy_addr,
(uint64_t)type,
(uint64_t)index,
(uint64_t)size,
};
ret = hm_drv_call(SW_SYSCALL_FR_GET_STATIC_PHY_ADDR, args, ARRAY_SIZE(args));
*addr = (paddr_t)phy_addr;
return ret;
}
@@ -1,28 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved.
* Description: eps drive interface, Analysis of test commands.
* call different test interfaces
* Create: 2018-12-01
*/
#include "hmdrv.h"
#include "mem_page_ops.h"
#include <sre_syscalls_id_ext.h>
uint32_t __tee_call_hieps_drivers(uint32_t cmd, const char *input, uint32_t max_input_len, const char *parm_info,
uint32_t parm_size)
{
uint64_t args[] = {
(uint64_t)cmd,
(uint64_t)(uintptr_t)input,
(uint64_t)max_input_len,
(uint64_t)(uintptr_t)parm_info,
(uint64_t)parm_size,
};
#ifdef CONFIG_FEATURE_SEPLAT
return hm_drv_multithread_call(SW_EPS_CDRM, args, ARRAY_SIZE(args));
#else
return hm_drv_call(SW_EPS_CDRM, args, ARRAY_SIZE(args));
#endif
}
@@ -1,9 +0,0 @@
#ifndef __HISI_HIEPS_TASK_H__
#define __HISI_HIEPS_TASK_H__
#include "stdint.h"
uint32_t __tee_call_hieps_drivers(uint32_t cmd, const char *input, uint32_t max_input_len,
const char *parm_info, uint32_t parm_size);
#endif
@@ -1,21 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved.
* Description: hisp drive interface.
* call different test interfaces
* Author: xiehanhua x00474758
* Create: 2020-07-06
*/
#include "hmdrv.h"
#include <sre_syscalls_id_ext.h>
int __secisp_mem_end()
{
#ifdef TEE_SUPPORT_SECISP
uint64_t args[] = {
};
return hm_drv_call(SW_SYSCALL_SECISP_MEM_END, args, ARRAY_SIZE(args));
#endif
return 0;
}
@@ -1,240 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: privacy data protection api syscall interface, call tee drvier api
* Create: 2020-03-10
*/
#include "hisi_privacy_protection_drv.h"
#include "hmdrv.h"
#include "mem_page_ops.h"
#include <sre_syscalls_id_ext.h>
uint32_t __mspe_poweron(uint32_t cmd, uint32_t id, uint32_t profile)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)id,
(uint64_t)profile,
};
return hm_drv_call(SW_PRIP_POWERON, args, ARRAY_SIZE(args));
}
uint32_t __mspe_poweroff(uint32_t cmd, uint32_t id, uint32_t profile)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)id,
(uint64_t)profile,
};
return hm_drv_call(SW_PRIP_POWEROFF, args, ARRAY_SIZE(args));
}
uint32_t __mspe_rnd_gen_trnd(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_RNG_GEN_TRND, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm2_gen_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM2_GEN_KEY, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm2_encrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM2_ENCRYPT, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm2_decrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM2_DECRYPT, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm3_hash_init(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM3_HASH_INIT, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm3_hash_update(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM3_HASH_UPDATE, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm3_hash_dofinal(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM3_HASH_DOFINAL, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm3_hash_sigle(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM3_HASH_SIGLE, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm4_set_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM4_SET_KEY, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm4_set_iv(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM4_SET_IV, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm4_init(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM4_INIT, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm4_update(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM4_UDATE, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm4_dofinal(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM4_DOFINAL, args, ARRAY_SIZE(args));
}
uint32_t __mspe_km_derive_kdr(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_KM_DERIVE_KDR, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_sign(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_SIGN, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_verify(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_VERIFY, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_wrap_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_WRAP_KEY, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_unwrap_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_UNWRAP_KEY, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_encrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_ENCRYPT, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_decrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_DECRYPT, args, ARRAY_SIZE(args));
}
uint32_t __mspe_sm9_pre_data(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen)
{
uint64_t args[] = { (uint64_t)cmd,
(uint64_t)(uintptr_t)sendbuf,
(uint64_t)sendlen,
};
return hm_drv_call(SW_PRIP_SM9_PRE_DATA, args, ARRAY_SIZE(args));
}
@@ -1,36 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: privacy data protection api syscall interface, call tee drvier api
* Create: 2020-03-10
*/
#ifndef HISI_PRIVACY_PROTECTION_DRV_H
#define HISI_PRIVACY_PROTECTION_DRV_H
#include "stdint.h"
/* privacy protection */
uint32_t __mspe_poweron(uint32_t cmd, uint32_t id, uint32_t profile);
uint32_t __mspe_poweroff(uint32_t cmd, uint32_t id, uint32_t profile);
uint32_t __mspe_rnd_gen_trnd(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm2_gen_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm2_encrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm2_decrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm3_hash_init(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm3_hash_update(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm3_hash_dofinal(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm3_hash_sigle(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm4_set_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm4_set_iv(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm4_init(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm4_update(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm4_dofinal(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_km_derive_kdr(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_sign(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_verify(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_wrap_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_unwrap_key(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_encrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_decrypt(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
uint32_t __mspe_sm9_pre_data(uint32_t cmd, const uint8_t *sendbuf, uint32_t sendlen);
#endif
@@ -1,79 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Create: 2019-05-08
* Description: secboot interface.
*/
#include "hmdrv.h"
#include "mem_page_ops.h"
#include <sre_syscalls_id_ext.h>
#define ADDR_OFFSET 32
__attribute__((visibility("default"))) uint32_t __hisi_secboot_copy_img_from_os(uint32_t soc_type)
{
uint64_t args[] = {
(uint64_t)soc_type,
};
return hm_drv_call(SW_COPY_IMG_FROM_OS_DRIVER, args, ARRAY_SIZE(args));
}
uint32_t __eiius_encrypto_ctr(paddr_t in_paddr, paddr_t out_paddr, uint32_t in_size, uint8_t *iv_vaddr,
uint32_t iv_size, uint32_t mode)
{
uint64_t args[] = {
(uint64_t)in_paddr,
(uint64_t)out_paddr,
(uint64_t)in_size,
(uint64_t)(uintptr_t)iv_vaddr, /* Not support 64bit TA now */
(uint64_t)iv_size,
(uint64_t)mode,
};
return hm_drv_call(SW_EIIUS_ENCRYPTO_DATA, args, ARRAY_SIZE(args));
}
int32_t __eiius_image_verify(paddr_t data_paddr, paddr_t vrl_paddr, uint32_t maxsize, uint32_t is_decrypto)
{
uint64_t args[] = {
(uint64_t)data_paddr,
(uint64_t)vrl_paddr,
(uint64_t)maxsize,
(uint64_t)is_decrypto,
};
return hm_drv_call(SW_EIIUS_VERIFY_DATA, args, ARRAY_SIZE(args));
}
uint32_t __eiius_get_paddr(uint32_t *low_paddr, uint32_t *high_paddr, uint32_t *p_size, uint32_t addr_type)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)low_paddr, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)high_paddr, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)p_size, /* Not support 64bit TA now */
(uint64_t)addr_type,
};
return hm_drv_call(SW_EIIUS_GET_PADDR, args, ARRAY_SIZE(args));
}
uint32_t __eiius_secure_memory_map(paddr_t phy_addr, unsigned int size, unsigned int *virt_addr,
unsigned int secure_mode, unsigned int cache_mode)
{
uint64_t args[] = {
(uint64_t)phy_addr,
(uint64_t)size,
(uint64_t)(uintptr_t)virt_addr, /* Not support 64bit TA now */
(uint64_t)secure_mode,
(uint64_t)cache_mode,
};
return hm_drv_call(SW_EIIUS_MAP_ADDR, args, ARRAY_SIZE(args));
}
uint32_t __eiius_secure_memory_unmap(unsigned int virt_addr, unsigned int size)
{
uint64_t args[] = {
(uint64_t)virt_addr,
(uint64_t)size,
};
return hm_drv_call(SW_EIIUS_UNMAP_ADDR, args, ARRAY_SIZE(args));
}
@@ -1,72 +0,0 @@
#include <stdint.h>
#include <hm_mman_ext.h>
#include "lib_timer.h"
#include "sre_syscall.h"
#include "sre_syscalls_ext.h"
#include "tee_internal_api.h"
#include "tee_log.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
unsigned int __npu_syscall_ioctl_cmdproc(void *command_info)
{
if (command_info == NULL)
return -1;
uint64_t args[] = {
(uint64_t)(uintptr_t)command_info /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_NPU_IOCTL_CFG, args, ARRAY_SIZE(args));
}
unsigned int __npu_syscall_llseek_cmdproc(void *command_info)
{
if (command_info == NULL)
return -1;
uint64_t args[] = {
(uint64_t)(uintptr_t)command_info /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_NPU_LLSEEK_CFG, args, ARRAY_SIZE(args));
}
unsigned int __npu_syscall_open_cmdproc(void)
{
return hm_drv_call(SW_SYSCALL_NPU_OPEN_MODE_CFG, NULL, 0);
}
unsigned int __npu_syscall_release_cmdproc(void *command_info)
{
if (command_info == NULL)
return -1;
uint64_t args[] = {
(uint64_t)(uintptr_t)command_info /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_NPU_REALEASE_MODE_CFG, args, ARRAY_SIZE(args));
}
unsigned int __npu_syscall_write_cmdproc(void *command_info)
{
if (command_info == NULL)
return -1;
uint64_t args[] = {
(uint64_t)(uintptr_t)command_info /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_NPU_WRITE_INSTR_CFG, args, ARRAY_SIZE(args));
}
#ifdef TEE_SUPPORT_SVM
int __teesvm_ioctl(int svm_ta_tag, void *mcl)
{
uint64_t args[] = {
(uint64_t)svm_ta_tag,
(uint64_t)mcl,
};
return hm_drv_call(SW_SYSCALL_NPU_SMMU_SVM, args, ARRAY_SIZE(args));
}
#endif
@@ -1,159 +0,0 @@
#include "secmem_drv.h"
#include <stdint.h>
#include <hm_mman_ext.h>
#include "lib_timer.h"
#include "sre_hwi.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "tee_internal_api.h"
#ifdef TEE_SUPPORT_VLTMM_SRV
#include <vltmm_client_api.h>
#endif
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
/*
* RTOSck integrated Secure Element API
* in rtosck:
* __XXXX are used by el0 apps (e.g.: ta)
* XXXX are used by kernel (e.g.: drivers)
* due to the drivers now are moved to el0, most apis we need to
* provide two version.
*/
#ifdef TEE_SUPPORT_TZMP2
__attribute__((visibility("default"))) int __sion_ioctl(int ion_ta_tag, void *mcl)
{
uint64_t args[] = {
(uint64_t)ion_ta_tag,
(uint64_t)(uintptr_t)mcl,
};
return hm_drv_call(SW_SYSCALL_SECMEM_ION_IOCTL_SECTA, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
unsigned int sion_mmap(void *sglist, unsigned int size, unsigned int protect_id, int mode, int cached, int used_by_ta)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)sglist, (uint64_t)size, (uint64_t)protect_id, (uint64_t)mode, (uint64_t)cached,
(uint64_t)used_by_ta,
};
return hm_drv_call(SW_SYSCALL_SECMEM_ION_MMAP, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
int sion_munmap(void *sglist, unsigned int va, unsigned int size, unsigned int protect_id, int mode, int used_by_ta)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)sglist, (uint64_t)va, (uint64_t)size,
(uint64_t)protect_id, (uint64_t)mode, (uint64_t)used_by_ta,
};
return hm_drv_call(SW_SYSCALL_SECMEM_ION_MUNMAP, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) int ddr_sec_cfg(struct sglist *sglist, int feature_id, int ddr_cfg_type)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)sglist,
(uint64_t)feature_id,
(uint64_t)ddr_cfg_type,
};
return hm_drv_call(SW_SYSCALL_SECMEM_DDR_CFG, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
unsigned int sion_mmap_sfd(unsigned int sfd, unsigned int size, unsigned int protect_id, int mode, int cached, int used_by_ta)
{
uint64_t args[] = {
(uint64_t)sfd, (uint64_t)size, (uint64_t)protect_id, (uint64_t)mode, (uint64_t)cached,
(uint64_t)used_by_ta,
};
return hm_drv_call(SW_SYSCALL_SECMEM_ION_MMAP_SFD, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
int sion_munmap_sfd(unsigned int sfd, unsigned int va, unsigned int size, unsigned int protect_id, int mode, int used_by_ta)
{
uint64_t args[] = {
(uint64_t)sfd, (uint64_t)va, (uint64_t)size,
(uint64_t)protect_id, (uint64_t)mode, (uint64_t)used_by_ta,
};
return hm_drv_call(SW_SYSCALL_SECMEM_ION_MUNMAP_SFD, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
int sion_ddr_sec_cfg(u16 buffer_id, unsigned int size,
int cached, int feature_id, int ddr_cfg_type)
{
uint64_t args[] = {
(uint64_t)buffer_id,
(uint64_t)size,
(uint64_t)cached,
(uint64_t)feature_id,
(uint64_t)ddr_cfg_type,
};
return hm_drv_call(SW_SYSCALL_SECMEM_DDR_CFG_SFD, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
int sion_create_smmu_domain(u32 protect_id, u64 pgtable_addr,
u32 pgtable_size)
{
uint64_t args[] = {
(uint64_t)protect_id,
(uint64_t)pgtable_addr,
(uint64_t)pgtable_size,
};
return hm_drv_call(SW_SYSCALL_SECMEM_CREATE_DOMAIN, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
int sion_destroy_smmu_domain(u32 protect_id)
{
uint64_t args[] = {
(uint64_t)protect_id,
};
return hm_drv_call(SW_SYSCALL_SECMEM_DESTROY_DOMAIN, args, ARRAY_SIZE(args));
}
#endif
__attribute__((visibility("default"))) \
int secmem_get_version(void)
{
int version = VERSION_1;
#ifdef TEE_SUPPORT_VLTMM_SRV
version = VERSION_2;
#endif
return version;
}
#ifndef UNUSED
#define UNUSED(x) ((void)(x))
#endif
__attribute__((visibility("default"))) \
int secmem_smmu_domain_init(uint32_t sid, uint32_t size)
{
#ifdef TEE_SUPPORT_VLTMM_SRV
return vlt_create_siommu_domain(sid, size);
#endif
UNUSED(sid);
UNUSED(size);
return 0;
}
__attribute__((visibility("default"))) \
int secmem_smmu_domain_destroy(uint32_t sid)
{
#ifdef TEE_SUPPORT_VLTMM_SRV
return vlt_destroy_siommu_domain(sid);
#endif
UNUSED(sid);
return 0;
}
@@ -1,41 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Description: moved from teeos, secmem driver
* Create: 2019-11-08
*/
#ifndef LIBTEE_DRIVER_API_SECMEM_DRV_H
#define LIBTEE_DRIVER_API_SECMEM_DRV_H
#include "dynion.h" // struct sglist
enum SEC_Task {
SEC_TASK_DRM = 0x0,
SEC_TASK_SEC,
SEC_TASK_TINY,
SEC_TASK_MAX,
};
#ifdef TEE_SUPPORT_TZMP2
/* sec_mem */
int __sion_ioctl(int ion_ta_tag, void *mcl);
unsigned int sion_mmap(void *sglist, unsigned int size, unsigned int protect_id, int mode, int cached, int used_by_ta);
int sion_munmap(void *sglist, unsigned int va, unsigned int size, unsigned int protect_id, int mode, int used_by_ta);
int ddr_sec_cfg(struct sglist *sglist, int feature_id, int ddr_cfg_type);
extern int sion_create_smmu_domain(u32 protect_id,
u64 pgtable_addr, u32 pgtable_size);
extern int sion_destroy_smmu_domain(u32 protect_id);
#endif
extern int secmem_smmu_domain_init(uint32_t sid, uint32_t size);
extern int secmem_smmu_domain_destroy(uint32_t sid);
int secmem_get_version(void);
/* same as secmem_api.h */
enum {
VERSION_1 = 1,
VERSION_2 = 2,
};
#endif /* LIBTEE_DRIVER_API_SECMEM_DRV_H */
@@ -1,70 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Create: 2019-05-08
* Description: vdecry driver interface.
*/
#include <stdint.h>
#include <hm_mman_ext.h>
#include <cache_flush.h>
#include "mem_page_ops.h"
#include "lib_timer.h"
#include "sre_hwi.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "tee_internal_api.h"
#include "tee_log.h"
#include "mem_page_ops.h" // paddr_t
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
typedef struct mem_map_para {
paddr_t phy_addr;
unsigned int size;
unsigned int secure_mode;
unsigned int cache_mode;
unsigned int protect_id;
unsigned int buff_id;
} MEM_Map_Para_S;
typedef struct mem_unmap_para {
unsigned int vir_addr;
unsigned int secure_mode;
unsigned int size;
unsigned int protect_id;
unsigned int buff_id;
} MEM_UnMap_Para_S;
int __SECURE_TEE_Mmap(struct mem_map_para *mem_para, unsigned int *virt_addr)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)mem_para, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)virt_addr /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_SECURE_TEE_MMAP, args, ARRAY_SIZE(args));
}
int __SECURE_TEE_Unmap(struct mem_unmap_para *mem_para)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)mem_para /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_SECURE_TEE_UNMAP, args, ARRAY_SIZE(args));
}
void __SECURE_FlushCache(unsigned int start, unsigned int end)
{
__dma_flush_range(start, end);
}
int __SECURE_ISSecureMemory(paddr_t addr, unsigned int size, unsigned int protect_id)
{
uint64_t args[] = { (uint64_t)addr, (uint64_t)((addr >> 32) & 0xffffffff), /* addr offset */
(uint64_t)size, (uint64_t)protect_id };
return hm_drv_call(SW_SYSCALL_SECURE_ISSEUCREMEM, args, ARRAY_SIZE(args));
}
@@ -1,25 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: symbles export for use
* Create: 2020-03-20
*/
#include <stdbool.h>
#include <stdint.h>
#define SE_CRYPTO_SUPPORT 0x1U
#define SE_CRYPTO_NOT_SUPPORT 0x0U
#define SKYTONE_VERSION 10000U
uint32_t TEE_inSE_support()
{
#ifdef FEATURE_SE_CRYPTO
return SE_CRYPTO_SUPPORT;
#else
return SE_CRYPTO_NOT_SUPPORT;
#endif
}
uint32_t TEE_EXT_Get_Skytone_Version()
{
return SKYTONE_VERSION;
}
@@ -1,102 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2018. All rights reserved.
*
*
* Create: 2018-05-06
*
* Description: HDCP(High -bandwidth Digital Content Protection) functions f
* or compatible RTOSck SRE syscalls
*/
#include <stdint.h>
#include <hmdrv.h>
#include <hm_msg_type.h> // for ARRAY_SIZE
#include "sre_syscalls_id_ext.h"
/*
* CODEREVIEW CHECKLIST
* ARG: no need to check, pass to platdrv directly
* RIGHTS: N/A
* BUFOVF: N/A
* LOG: N/A
* RET:
* - return hm_drv_call() return value
* RACING: N/A
* LEAK: N/A
* ARITHOVF: N/A
*/
int32_t __hdcp13_key_all_set(void *key_all)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)key_all, /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_HDCP13_KEY_ALL_SET, args, ARRAY_SIZE(args));
}
int32_t __hdcp22_key_set(void *duk, void *kpf)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)duk, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)kpf, /* Not support 64bit TA now */
};
return hm_drv_call(SW_SYSCALL_HDCP22_KEY_SET, args, ARRAY_SIZE(args));
}
int32_t __hdcp_dp_enable(unsigned int dp_flag)
{
uint64_t args[] = {
(uint64_t)dp_flag,
};
return hm_drv_call(SW_SYSCALL_HDCP_DP_ENABLE, args, ARRAY_SIZE(args));
}
int32_t __hdcp_get_value(unsigned int offset)
{
uint64_t args[] = {
(uint64_t)offset,
};
return hm_drv_call(SW_SYSCALL_HDCP_GET_VALUE, args, ARRAY_SIZE(args));
}
int32_t __hdcp_set_reg(unsigned int reg_value, unsigned int offset)
{
uint64_t args[] = {
(uint64_t)reg_value,
(uint64_t)offset,
};
return hm_drv_call(SW_SYSCALL_HDCP_SET_REG, args, ARRAY_SIZE(args));
}
int __hdcp_ioctl(unsigned int cmd_id, unsigned int data,
void* buf, unsigned int size)
{
uint64_t args[] = {
(uint64_t)cmd_id,
(uint64_t)data,
(uint64_t)(uintptr_t)buf, /* Not support 64bit TA now */
(uint64_t)size,
};
return hm_drv_call(SW_SYSCALL_HDCP_IOCTL, args, ARRAY_SIZE(args));
}
int __hdcp_wfd_handle_map(unsigned int *mappedAddr, unsigned int cacheMode,
unsigned int secShareFd, unsigned int dataLen)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)mappedAddr,
(uint64_t)cacheMode,
(uint64_t)secShareFd,
(uint64_t)dataLen
};
return hm_drv_call(SW_SYSCALL_HDCP_WFD_HANDLE_MAP, args, ARRAY_SIZE(args));
}
int __hdcp_wfd_handle_unmap(unsigned int secShareFd, unsigned int dataLen)
{
uint64_t args[] = {
(uint64_t)secShareFd,
(uint64_t)dataLen
};
return hm_drv_call(SW_SYSCALL_HDCP_WFD_HANDLE_UNMAP, args, ARRAY_SIZE(args));
}
@@ -1,71 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: Syscall to call MSPC drivers.
* Create: 2020/03/20
*/
#include <sre_syscalls_id_ext.h>
#include <hmdrv.h>
#include <tee_log.h>
#include <tee_defines.h>
enum mspc_factory_cmd {
MSPC_FAC_MODE_ENTER,
MSPC_FAC_MODE_EXIT,
MSPC_FAC_RECOVERY,
MSPC_FAC_WRITE_LOCK,
};
int32_t __hisi_mspc_check_secflash(uint32_t *status)
{
uint64_t args[] = { (uint64_t)(uintptr_t)status };
if (!status) {
tloge("%s: invalid param!\n", __func__);
return TEE_ERROR_BAD_PARAMETERS;
}
return hm_drv_call(SW_SYSCALL_MSPC_CHECK_SECFLASH, args, ARRAY_SIZE(args));
}
int32_t __hisi_mspc_fac_mode_enter(void)
{
uint64_t args[] = { MSPC_FAC_MODE_ENTER, 0 };
return hm_drv_multithread_call(SW_SYSCALL_MSPC_FACOTRY_CMD, args, ARRAY_SIZE(args));
}
int32_t __hisi_mspc_fac_mode_exit(void)
{
uint64_t args[] = { MSPC_FAC_MODE_EXIT, 0 };
return hm_drv_multithread_call(SW_SYSCALL_MSPC_FACOTRY_CMD, args, ARRAY_SIZE(args));
}
int32_t __hisi_mspc_recovery(uint32_t flags)
{
uint64_t args[] = { MSPC_FAC_RECOVERY, (uint64_t)flags };
return hm_drv_multithread_call(SW_SYSCALL_MSPC_FACOTRY_CMD, args, ARRAY_SIZE(args));
}
int32_t __hisi_mspc_power_on(uint32_t vote_id)
{
uint64_t args[] = { (uint64_t)vote_id };
return hm_drv_call(SW_SYSCALL_MSPC_POWER_ON, args, ARRAY_SIZE(args));
}
int32_t __hisi_mspc_power_off(uint32_t vote_id)
{
uint64_t args[] = { (uint64_t)vote_id };
return hm_drv_call(SW_SYSCALL_MSPC_POWER_OFF, args, ARRAY_SIZE(args));
}
int32_t __hisi_mspc_secflash_writelock(uint32_t is_set_op)
{
uint64_t args[] = { MSPC_FAC_WRITE_LOCK, (uint64_t)is_set_op };
return hm_drv_multithread_call(SW_SYSCALL_MSPC_FACOTRY_CMD, args, ARRAY_SIZE(args));
}
@@ -1,21 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: Header file for MSPC API drivers
* Author : z00452790
* Create: 2020/07/07
*/
#ifndef __HISI_MSPC_TASK_H__
#define __HISI_MSPC_TASK_H__
#include "stdint.h"
int32_t __hisi_mspc_fac_mode_enter(void);
int32_t __hisi_mspc_fac_mode_exit(void);
int32_t __hisi_mspc_power_on(uint32_t vote_id);
int32_t __hisi_mspc_power_off(uint32_t vote_id);
int32_t __hisi_mspc_recovery(uint32_t flags);
int32_t __hisi_mspc_check_secflash(uint32_t *status);
int32_t __hisi_mspc_secflash_writelock(uint32_t is_set_op);
#endif /* end of __HISI_MSPC_TASK_H__ */
@@ -1,42 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: Syscall to call MSPC drivers.
* Create: 2020/06/09
*/
#include <sre_syscalls_id_ext.h>
#include <hmdrv.h>
#include <tee_log.h>
#include <tee_defines.h>
#ifdef CONFIG_HISI_MSPC_IPC_TEST
int32_t __mspc_ipc_test(uint8_t *msg, uint32_t len)
{
uint64_t args[] = { (uint64_t)(uintptr_t)msg,
(uint64_t)len,
};
return hm_drv_call(SW_SYSCALL_MSPC_IPC_TEST, args, ARRAY_SIZE(args));
}
int32_t __mspc_ddr_read(uint32_t addr, uint32_t len, uint8_t *buff, uint32_t *bufflen)
{
uint64_t args[] = { (uint64_t)addr,
(uint64_t)len,
(uint64_t)(uintptr_t)buff,
(uint64_t)(*bufflen),
(uint64_t)(uintptr_t)bufflen,
(uint64_t)sizeof(uint32_t),
};
return hm_drv_call(SW_SYSCALL_MSPC_DDR_READ, args, ARRAY_SIZE(args));
}
int32_t __mspc_ddr_write(uint8_t *buff, uint32_t bufflen, uint32_t addr)
{
uint64_t args[] = { (uint64_t)(uintptr_t)buff,
(uint64_t)bufflen,
(uint64_t)addr,
};
return hm_drv_call(SW_SYSCALL_MSPC_DDR_WRITE, args, ARRAY_SIZE(args));
}
#endif
@@ -1,19 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: Header file for MSPC IPC test drivers
* Author : z00452790
* Create: 2020/07/07
*/
#ifndef __HISI_MSPC_TASK_H__
#define __HISI_MSPC_TASK_H__
#include "stdint.h"
#ifdef CONFIG_HISI_MSPC_IPC_TEST
int32_t __mspc_ipc_test(uint8_t *msg, uint32_t len);
int32_t __mspc_ddr_read(uint32_t addr, uint32_t len, uint8_t *buff, uint32_t *bufflen);
int32_t __mspc_ddr_write(uint8_t *buff, uint32_t bufflen, uint32_t addr);
#endif
#endif /* end of __HISI_MSPC_TASK_H__ */
@@ -1,43 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: Syscall to call MSPC drivers stubs.
* Author : z00452790
* Create: 2020/07/09
*/
#include "hisi_mspc.h"
#include "stdint.h"
int32_t __hisi_mspc_fac_mode_enter(void)
{
return -1;
}
int32_t __hisi_mspc_fac_mode_exit(void)
{
return -1;
}
int32_t __hisi_mspc_power_on(uint32_t vote_id)
{
(void)vote_id;
return -1;
}
int32_t __hisi_mspc_power_off(uint32_t vote_id)
{
(void)vote_id;
return -1;
}
int32_t __hisi_mspc_recovery(uint32_t flags)
{
(void)flags;
return -1;
}
int32_t __hisi_mspc_check_secflash(uint32_t *status)
{
(void)status;
return -1;
}
int32_t __hisi_mspc_secflash_writelock(uint32_t is_set_op)
{
(void)is_set_op;
return -1;
}
@@ -1,228 +0,0 @@
/* ************************************************************************** */
/* */
/* Copyright 2008 - 2050, Huawei Tech. Co., Ltd. */
/* ALL RIGHTS RESERVED */
/* */
/* ************************************************************************** */
#include <stdint.h>
#include <hm_mman_ext.h>
#include <hm_msg_type.h> // for ARRAY_SIZE
#include "lib_timer.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "tee_internal_api.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "hmdrv.h"
#include <stdio.h>
/*
* RTOSck integrated Secure Element API
* in rtosck:
* __XXXX are used by el0 apps (e.g.: ta)
* XXXX are used by kernel (e.g.: drivers)
* due to the drivers now are moved to el0, most apis we need to
* provide two version.
*/
int __scard_connect(int reader_id, unsigned int vote_id,
void *p_atr, unsigned int *atr_len)
{
if (!atr_len) {
printf("__scard_connect: invalid args art_len is null\n");
return -1;
}
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)vote_id,
(uint64_t)(uintptr_t)p_atr, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)atr_len, /* Not support 64bit TA now */
};
uint32_t lens[] = {
0,
0,
0,
sizeof(unsigned int)
};
return hm_drv_call_ex(SW_SYSCALL_SCARD_CONNECT, args, lens,
ARRAY_SIZE(args), NULL, 0);
}
int __scard_disconnect(int reader_id, unsigned int vote_id)
{
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)vote_id,
};
return hm_drv_call(SW_SYSCALL_SCARD_DISCONNECT, args, ARRAY_SIZE(args));
}
int __driver_p61_factory_test(int reader_id)
{
uint64_t args[] = {
(uint64_t)reader_id,
};
return hm_drv_call(SW_SYSCALL_P61_FAC_TEST, args, ARRAY_SIZE(args));
}
int __phNxpEse_GetOsMode(void)
{
return hm_drv_call(SW_SYSCALL_ESE_GET_OS_MODE, NULL, 0);
}
int __ese_proto7816_reset(void)
{
return hm_drv_call(SW_SYSCALL_ESE_7816_RESET, NULL, 0);
}
int __ese_set_nfc_chiptype(int chip_type)
{
uint64_t args[] = {
(uint64_t)chip_type,
};
return hm_drv_call(SW_SYSCALL_SET_NFC_TYPE, args, ARRAY_SIZE(args));
}
int __scard_transmit(int reader_id, unsigned char *p_cmd, unsigned int cmd_len,
unsigned char *p_rsp, unsigned int *rsp_len)
{
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)(uintptr_t)p_cmd, /* Not support 64bit TA now */
(uint64_t)cmd_len,
(uint64_t)(uintptr_t)p_rsp, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)rsp_len, /* Not support 64bit TA now */
};
uint32_t lens[] = {
0,
0,
0,
0,
sizeof(unsigned int)
};
if (!rsp_len) {
printf("__scard_transmit: invalid args, rsp_len is null\n");
return -1;
}
#ifdef CONFIG_FEATURE_SEPLAT
return hm_drv_call_multithread_ex(SW_SYSCALL_SCARD_TRANSMIT, args, lens,
ARRAY_SIZE(args), (void*)rsp_len,
sizeof(unsigned int));
#else
return hm_drv_call_ex(SW_SYSCALL_SCARD_TRANSMIT, args, lens,
ARRAY_SIZE(args), (void*)rsp_len,
sizeof(unsigned int));
#endif
}
int __scard_support_mode(int reader_id)
{
uint64_t args[] = {
(uint64_t)reader_id,
};
return hm_drv_call(SW_SYSCALL_SCARD_SUPPORT_MODE, args, ARRAY_SIZE(args));
}
int __scard_send(int reader_id, unsigned char *p_cmd, unsigned int cmd_len)
{
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)(uintptr_t)p_cmd, /* Not support 64bit TA now */
(uint64_t)cmd_len,
};
uint32_t lens[] = { 0, 0, 0 };
if (cmd_len < SYSCALL_DATA_MAX) {
lens[1] = cmd_len;
};
return hm_drv_call_multithread_ex(SW_SYSCALL_SCARD_SEND, args, lens, ARRAY_SIZE(args), NULL, 0);
}
int __scard_receive(unsigned char *p_rsp, unsigned int *rsp_len)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)p_rsp, /* Not support 64bit TA now */
(uint64_t)(uintptr_t)rsp_len, /* Not support 64bit TA now */
};
uint32_t lens[] = { 0, sizeof(unsigned int) };
return hm_drv_call_multithread_ex(SW_SYSCALL_SCARD_RECEIVE, args, lens,
ARRAY_SIZE(args), rsp_len, sizeof(unsigned int));
}
int __scard_get_status(void)
{
return hm_drv_call(SW_SYSCALL_SCARD_GET_STATUS, NULL, 0);
}
int __inse_connect(void *id)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)id, /* Not support 64bit TA now */
};
uint32_t lens[] = { sizeof(unsigned int) };
return hm_drv_call_ex(SW_SYSCALL_SE_CONNECT, args, lens, ARRAY_SIZE(args), NULL, 0);
}
int __inse_disconnect(void *id)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)id, /* Not support 64bit TA now */
};
uint32_t lens[] = { sizeof(unsigned int) };
return hm_drv_call_ex(SW_SYSCALL_SE_DISCONNECT, args, lens, ARRAY_SIZE(args), NULL, 0);
}
int __ese_transmit_data(unsigned char *data, unsigned int data_size)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)data, /* Not support 64bit TA now */
(uint64_t)data_size,
};
return hm_drv_call(SW_SYSCALL_ESE_TRANSMIT, args, ARRAY_SIZE(args));
}
int __ese_read_data(unsigned char *data, unsigned int data_size)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)data, /* Not support 64bit TA now */
(uint64_t)data_size,
};
return hm_drv_call(SW_SYSCALL_ESE_READ, args, ARRAY_SIZE(args));
}
int __scard_get_ese_type(void)
{
return hm_drv_call(SW_SYSCALL_SCARD_GET_ESE_TYPE, NULL, 0);
}
#ifdef FEATURE_SE
int __SE_getflag(void)
{
return hm_drv_call(SW_SYSCALL_SE_GETFLAG, NULL, 0);
}
int __SE_setflag(int flag)
{
uint64_t args[] = {
(uint64_t)flag,
};
return hm_drv_call(SW_SYSCALL_SE_SETFLAG, args, ARRAY_SIZE(args));
}
#else
int __SE_getflag(void)
{
return 0;
}
int __SE_setflag(int flag)
{
(void)flag;
return 0;
}
#endif
@@ -1,111 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Author: h00424236
* Create: 2019-05-08
* Description: ese interface.
*/
#include "hmdrv.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "tee_internal_api.h"
#include <string.h>
#define TEE_SERVICE_SEM \
{ \
0xaaa862d1, 0x22fe, 0x4609, \
{ \
0xa4, 0xee, 0x86, 0x67, 0xf6, 0x53, 0x8f, 0x18 \
} \
}
#define CMD_SE_ESE_TRANSMIT 0x00000008
#define CMD_SE_ESE_READ 0x00000009
#define PARAMS_NUM 4
static TEE_TASessionHandle g_sem_session;
static int open_sem_session(TEE_TASessionHandle *session)
{
TEE_Result ret;
TEE_UUID uuid = TEE_SERVICE_SEM;
TEE_Param params[PARAMS_NUM];
uint32_t param_types;
uint32_t return_origin = 0;
if (session == NULL)
return -1;
param_types =
TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE);
ret = TEE_OpenTASession(&uuid, TEE_TIMEOUT_INFINITE, param_types, params, session, &return_origin);
if (ret != TEE_SUCCESS)
tloge("Open TA Session FAIL, ret = %x, origin = %x", ret, return_origin);
return ret;
}
static void close_sem_session(TEE_TASessionHandle session)
{
TEE_CloseTASession(session);
tlogd("Close TA Session");
}
int tee_ese_transmit(unsigned char *data, unsigned int size)
{
uint32_t param_types;
uint32_t return_origin = 0;
TEE_Result ret;
TEE_Param params[PARAMS_NUM];
int rc;
rc = open_sem_session(&g_sem_session);
if (rc) {
tloge("ese Open TA Session FAIL, ret=%d\n", rc);
return rc;
}
params[0].memref.buffer = (void *)data;
params[0].memref.size = size;
param_types =
TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE);
ret = TEE_InvokeTACommand(g_sem_session, TEE_TIMEOUT_INFINITE, CMD_SE_ESE_TRANSMIT, param_types, params,
&return_origin);
if (ret != TEE_SUCCESS)
tloge("tee ese transmit ret = %x, origin = %x\n", ret, return_origin);
close_sem_session(g_sem_session);
return ret;
}
int tee_ese_read(unsigned int *data, unsigned int size)
{
uint32_t param_types;
uint32_t return_origin = 0;
TEE_Result ret;
TEE_Param params[PARAMS_NUM];
int rc;
rc = open_sem_session(&g_sem_session);
if (rc) {
tloge("ese Open TA Session FAIL, ret=%d\n", rc);
return rc;
}
params[0].memref.buffer = (void *)data;
params[0].memref.size = size;
param_types =
TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE);
ret =
TEE_InvokeTACommand(g_sem_session, TEE_TIMEOUT_INFINITE, CMD_SE_ESE_READ, param_types, params, &return_origin);
if (ret != TEE_SUCCESS)
tloge("tee ese read ret = %x, origin = %x\n", ret, return_origin);
close_sem_session(g_sem_session);
return ret;
}
@@ -1,123 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: set and get se channel information from platdrv
* Create: 2020-1-14
*/
#include "se_status.h"
#include <hmdrv.h>
#include <hm_msg_type.h> /* for ARRAY_SIZE */
#include "tee_bit_ops.h"
#include "sre_syscalls_id.h"
__attribute__((visibility("default"))) \
void __sre_se_channel_info_write(uint32_t reader_id, uint32_t channel_id, uint32_t task_id)
{
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)channel_id,
(uint64_t)task_id,
};
(void)hm_drv_call(SW_SYSCALL_SE_CHANNELINFO_WRITE, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_se_channel_info_read(uint32_t reader_id, uint32_t *task_id, uint32_t *cnt)
{
if (task_id == NULL || cnt == NULL || *cnt == 0)
return;
uint64_t args[] = {
(uint64_t)(uintptr_t)task_id,
(uint64_t)(uintptr_t)cnt,
(uint64_t)reader_id,
};
(void)hm_drv_call(SW_SYSCALL_SE_CHANNELINFO_READ, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_se_deactive_write(uint32_t deactive)
{
uint64_t args[] = {
(uint64_t)deactive,
};
(void)hm_drv_call(SW_SYSCALL_SE_DEACTIVE_WRITE, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_se_deactive_read(uint32_t *deactive)
{
if (deactive == NULL)
return;
uint64_t args[] = {
(uint64_t)(uintptr_t)deactive,
};
(void)hm_drv_call(SW_SYSCALL_SE_DEACTIVE_READ, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_seaid_switch_write(uint8_t *seaid_list, uint32_t seaid_list_len)
{
if (seaid_list == NULL || seaid_list_len == 0)
return;
uint64_t args[] = {
(uint64_t)(uintptr_t)seaid_list,
(uint64_t)seaid_list_len,
};
(void)hm_drv_call(SW_SYSCALL_SEAID_SWITCH_WRITE, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_seaid_list_len_read(uint32_t *seaid_list_len)
{
if (seaid_list_len == NULL)
return;
uint64_t args[] = {
(uint64_t)(uintptr_t)seaid_list_len,
};
(void)hm_drv_call(SW_SYSCALL_SEAID_LIST_LEN_READ, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_seaid_switch_read(uint8_t *seaid_list, uint32_t seaid_list_len)
{
if (seaid_list == NULL || seaid_list_len == 0)
return;
uint64_t args[] = {
(uint64_t)(uintptr_t)seaid_list,
(uint64_t)seaid_list_len,
};
(void)hm_drv_call(SW_SYSCALL_SEAID_SWITCH_READ, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_se_connect_info_write(uint32_t reader_id, uint8_t *se_connect_info, uint32_t se_connect_info_len)
{
if (se_connect_info == NULL || se_connect_info_len == 0)
return;
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)(uintptr_t)se_connect_info,
(uint64_t)se_connect_info_len,
};
(void)hm_drv_call(SW_SYSCALL_SE_CONNECT_INFO_WRITE, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __sre_se_connect_info_read(uint32_t reader_id, uint8_t *se_connect_info, uint32_t *se_connect_info_len)
{
if (se_connect_info == NULL || se_connect_info_len == NULL || *se_connect_info_len == 0)
return;
uint64_t args[] = {
(uint64_t)reader_id,
(uint64_t)(uintptr_t)se_connect_info,
(uint64_t)(uintptr_t)se_connect_info_len,
};
(void)hm_drv_call(SW_SYSCALL_SE_CONNECT_INFO_READ, args, ARRAY_SIZE(args));
}
@@ -1,121 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2018. All rights reserved.
*
*
* Create: 2018-04-07
*
* Description: security boot functions for compatible RTOSck SRE syscalls
*/
#include <stdint.h>
#include <hm_mman_ext.h>
#include <hmdrv.h>
#include <hm_msg_type.h> /* for ARRAY_SIZE */
#include "lib_timer.h"
#include "sre_task.h"
#include "sre_syscall.h"
#include "tee_defines.h"
#include <sre_syscalls_id.h>
#include <sre_syscalls_id_ext.h>
#include "tee_bit_ops.h"
#include "secboot_drv_call.h"
/*
* CODEREVIEW CHECKLIST
* ARG: no need to check, pass to platdrv directly
* RIGHTS: N/A
* BUFOVF: N/A
* LOG: N/A
* RET:
* - return hm_drv_call() return value
* RACING: N/A
* LEAK: N/A
* ARITHOVF: N/A
*/
#define HIGH_SHIFT 32
__attribute__((visibility("default"))) \
UINT32 __hisi_secboot_process_soc_addr(UINT32 soc_type, const paddr_t src_addr, UINT32 process_type)
{
uint64_t args[] = {
(uint64_t)soc_type,
(uint64_t)src_addr,
(uint64_t)process_type,
};
return hm_drv_call(SW_PROCESS_SOC_ADDR, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
UINT32 __hisi_secboot_copy_soc_data(UINT32 soc_type, UINT32 offset, const paddr_t src_addr, unsigned len)
{
uint64_t args[] = {
(uint64_t)soc_type,
(uint64_t)offset,
(uint64_t)src_addr,
(uint64_t)len,
};
return hm_drv_call(SW_COPY_SOC_DATA_TYPE, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
UINT32 __hisi_secboot_soc_verification(UINT32 socType, UINT32 vrlAddress, paddr_t imageAddress, unsigned int lock_state)
{
uint64_t args[] = {
(uint64_t)socType,
(uint64_t)vrlAddress,
(uint64_t)imageAddress,
(uint64_t)lock_state,
};
return hm_drv_call(SW_VERIFY_SOC_DATA_TYPE, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
UINT32 __secboot_get_cuid(UINT8 *cuid, UINT32 len)
{
uint64_t args[] = {
(uint64_t)(uintptr_t)cuid,
(uint64_t)len,
};
return hm_drv_call(SW_GET_CUID, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
UINT32 __hisi_secboot_soc_reset(UINT32 soc_type)
{
uint64_t args[] = {
(uint64_t)soc_type,
};
return hm_drv_call(SW_SOC_IMAGE_RESET, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
UINT32 __hisi_secboot_soc_set(UINT32 soc_type)
{
uint64_t args[] = {
(uint64_t)soc_type,
};
return hm_drv_call(SW_SOC_IMAGE_SET, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
void __hisi_secboot_get_vrl_addr(UINT32 vrl_address)
{
uint64_t args[] = {
(uint64_t)vrl_address,
};
(void)hm_drv_call(SW_SOC_GET_VRL_ADDR, args, ARRAY_SIZE(args));
}
__attribute__((visibility("default"))) \
int __bsp_modem_call(unsigned int func_cmd, unsigned int arg1, void *arg2, unsigned int arg3)
{
uint64_t args[] = {
(uint64_t)func_cmd,
(uint64_t)arg1,
(uint64_t)(uintptr_t)arg2, /* Not support 64bit TA now */
(uint64_t)arg3,
};
return hm_drv_call(SW_SYSCALL_BSP_MODEM_CALL, args, ARRAY_SIZE(args));
}
@@ -1,31 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved.
* Description: secure flash module driver.
* Create: 2019/9/3
*/
#include <stdint.h>
#include "hm_mman_ext.h"
#include "hm_msg_type.h"
#include "sre_syscall.h"
#include "sre_syscalls_id.h"
#include "sre_syscalls_id_ext.h"
#include "hmdrv.h"
#ifdef CONFIG_HISI_SECFLASH
int32_t __secflash_chip_reset(uint32_t type)
{
uint64_t args[] = { (uint64_t)type };
return hm_drv_call(SW_SYSCALL_SECFLASH_RESET, args, ARRAY_SIZE(args));
}
int32_t __secflash_power_save(void)
{
return hm_drv_call(SW_SYSCALL_SECFLASH_POWER_SAVE, NULL, 0);
}
#endif
@@ -1,26 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description: Drivers for seplat.
* Create: 2021/01/03
*/
#include <sre_syscalls_id_ext.h>
#include <hmdrv.h>
#include <tee_log.h>
#include <tee_defines.h>
uint32_t seplat_get_dts_status(void)
{
uint64_t args[] = {};
return hm_drv_call(SW_SYSCALL_SEPLAT_GET_DTS_STATUS, args, ARRAY_SIZE(args));
}
uint32_t seplat_power_ctrl(uint32_t vote_id, uint32_t cmd, uint32_t op_type)
{
uint64_t args[] = {
(uint64_t)vote_id,
(uint64_t)cmd,
(uint64_t)op_type,
};
return hm_drv_call(SW_SYSCALL_SEPLAT_POWER_CTRL, args, ARRAY_SIZE(args));
}
@@ -1,15 +0,0 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
* Description: Header file for seplat share interface.
* Create: 2021/02/07
*/
#ifndef SEPLAT_H
#define SEPLAT_H
#include <stdint.h>
uint32_t seplat_get_dts_status(void);
uint32_t seplat_power_ctrl(uint32_t vote_id, uint32_t cmd, uint32_t op_type);
#endif /* SEPLAT_H */
@@ -1,76 +0,0 @@
include(apps_lib_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
include(apps_feature_macro)
list(APPEND TEE_C_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/chip_info.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/extra_syms.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/hdcp.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/hisi_mspc.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/inse.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/secboot.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/secflash.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/file_encry_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/fp_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/fr_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/hisi_hieps_task.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/hisi_privacy_protection_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/hisi_secboot_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/npu_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/secmem_drv.c
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/driver_api/vdecry_drv.c
${PROJECT_SOURCE_DIR}/vendor/common/src/chip_info.c
${PROJECT_SOURCE_DIR}/libs/libsec_flash_client/src/sec_flash_api.c
)
if ("${CONFIG_SE_SERVICE_32BIT}" STREQUAL "true" OR "${CONFIG_SE_SERVICE_64BIT}" STREQUAL "true")
list(APPEND TEE_C_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/../libvendor_shared/src/se_status.c
)
endif()
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/libs/libvltmm_a32/include
${PROJECT_SOURCE_DIR}/drivers/platdrv/include
${PROJECT_SOURCE_DIR}/vendor/common/include
${PLATFORM_DIR}/common/tee_config
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
${PROJECT_SOURCE_DIR}/libs/libsec_flash_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/include
${PROJECT_SOURCE_DIR}/sys_libs/libteeagentcommon_client/src
)
if ("${TARGET_BUILD_VARIANT}" STREQUAL "user")
list(APPEND TEE_C_FLAGS
-DDEF_BUILDUSERMODE
)
endif()
if ("${CONFIG_HISI_MSPC_IPC_TEST}" STREQUAL "true")
list(APPEND TEE_C_FLAGS
-DCONFIG_HISI_MSPC_IPC_TEST
)
endif()
list(REMOVE_ITEM TEE_C_FLAGS "-Werror")
tee_add_library(vendor_static STATIC
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
NO_INSTALL
)
@@ -1,36 +0,0 @@
MODULE := libvendor_static$(TARG).a
FILES := $(wildcard ../libvendor_shared/src/*.c)
libvendor_static_c_files := $(filter-out ../libvendor_shared/src/se_status.c ../libvendor_shared/src/hisi_mspc.c ../libvendor_shared/src/hisi_mspc_stubs.c, $(FILES))
libvendor_static_c_files += $(wildcard ../libvendor_shared/src/driver_api/*.c)
ifneq ($(findstring true, $(CONFIG_SE_SERVICE_32BIT)$(CONFIG_SE_SERVICE_64BIT)),)
libvendor_static_c_files += ../libvendor_shared/src/se_status.c
endif
libvendor_static_c_files += $(wildcard $(TOPDIR)/vendor/common/src/*.c)
libvendor_shared_c_files += $(wildcard $(TOPDIR)/libs/libsec_flash_client/src/*.c)
inc-flags += -I$(TOPDIR)/libs/libvltmm_a32/include
inc-flags += -I$(TOPDIR)/drivers/platdrv/include
inc-flags += -I$(TOPDIR)/vendor/common/include
inc-flags += -I$(PLATFORM_DIR)/common/tee_config
inc-flags += -I$(PLATFORM_DIR)/$(PLATFORM_NAME)/$(PRODUCT_NAME)/common/tee_config
inc-flags += -I$(TOPDIR)/libs/libsec_flash_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/include
inc-flags += -I$(TOPDIR)/sys_libs/libteeagentcommon_client/src
ifeq ($(strip $(TARGET_BUILD_VARIANT)), user)
inc-flags += -DDEF_BUILDUSERMODE
endif
ifneq ($(filter $(TARGET_BOARD_PLATFORM), baltimore), )
libvendor_static_c_files += ../libvendor_shared/src/hisi_mspc.c
else
libvendor_static_c_files += ../libvendor_shared/src/hisi_mspc_stubs.c
endif
ifeq ($(CONFIG_HISI_MSPC_IPC_TEST), true)
flags += -DCONFIG_HISI_MSPC_IPC_TEST
endif
include $(TOPDIR)/mk/lib-common.mk
include $(TOPDIR)/mk/feature-macro.mk
-6
View File
@@ -1,6 +0,0 @@
add_subdirectory(libvendor_shared)
add_subdirectory(libvendor_static)
if ("${TARGET_BOARD_PLATFORM}" STREQUAL "shaolingun")
add_subdirectory(devchip_apps)
add_subdirectory(libdevchip_api)
endif()
@@ -1,48 +0,0 @@
list(REMOVE_ITEM TEE_C_FLAGS "-Werror")
if ("${CFG_HI_TEE_COMMON_SUPPORT}" STREQUAL "y")
add_subdirectory(common)
endif()
if ("${CFG_HI_TEE_DEMO_SUPPORT}" STREQUAL "y")
add_subdirectory(demo)
endif()
if ("${CFG_HI_TEE_DEMUX_SUPPORT}" STREQUAL "y")
add_subdirectory(demux)
endif()
if ("${CFG_HI_TEE_HDMIRX_SUPPORT}" STREQUAL "y")
add_subdirectory(hdmirx)
endif()
if ("${CFG_HI_TEE_HDMITX_SUPPORT}" STREQUAL "y")
add_subdirectory(hdmitx)
endif()
if ("${CFG_HI_TEE_KEYSLOT_SUPPORT}" STREQUAL "y")
add_subdirectory(keyslot)
endif()
if ("${CFG_HI_TEE_KLAD_SUPPORT}" STREQUAL "y")
add_subdirectory(klad)
endif()
if ("${CFG_HI_TEE_NPU_TEST_SUPPORT}" STREQUAL "y")
add_subdirectory(npu_test)
endif()
if ("${CFG_HI_TEE_OTP_SUPPORT}" STREQUAL "y")
add_subdirectory(otp)
endif()
if ("${CFG_HI_TEE_PVR_SUPPORT}" STREQUAL "y")
add_subdirectory(pvr)
endif()
if ("${CFG_HI_TEE_SMMU_SUPPORT}" STREQUAL "y")
add_subdirectory(smmu)
endif()
if ("${CFG_HI_TEE_SSM_SUPPORT}" STREQUAL "y")
add_subdirectory(ssm)
endif()
if ("${CFG_HI_TEE_SSM_TEST_SUPPORT}" STREQUAL "y")
add_subdirectory(ssm_test)
add_subdirectory(ssm_test_2)
endif()
if ("${CFG_HI_TEE_TEST_CIPHER_SUPPORT}" STREQUAL "y")
add_subdirectory(test_cipher)
endif()
if ("${CFG_HI_TEE_VFMW_SUPPORT}" STREQUAL "y")
add_subdirectory(vfmw)
endif()
-142
View File
@@ -1,142 +0,0 @@
ifeq ($(CFG_HI_TEE_EXPORT_FLAG),)
TEE_DIR ?= $(shell cd $(CURDIR)/.. && /bin/pwd)
#include $(TEE_DIR)/secureos/itrustee/build/base.mk
endif
KEYMASTER_TA_DIR := $(shell ([ -d $(SDK_DIR)/../component/ta/keymaster ] && echo ../../../../component/ta/keymaster) || \
([ -d $(SDK_DIR)/../modules/ta/keymaster ] && echo ../../../../modules/ta/keymaster) || \
([ -d $(SDK_DIR)/../component/drm/ta/keymaster ] && echo ../../../../component/drm/ta/keymaster) || \
([ -d $(SDK_DIR)/../hidolphin/component/ta/keymaster ] && echo ../../../../hidolphin/component/ta/keymaster) || \
([ -d keymaster ] && echo 'keymaster') || \
echo '')
$(info KEYMASTER_TA_DIR = $(KEYMASTER_TA_DIR))
GATEKEEPER_TA_DIR := $(shell ([ -d $(SDK_DIR)/../component/ta/gatekeeper ] && echo ../../../../component/ta/gatekeeper) || \
([ -d $(SDK_DIR)/../modules/ta/gatekeeper ] && echo ../../../../modules/ta/gatekeeper) || \
([ -d $(SDK_DIR)/../component/drm/ta/gatekeeper ] && echo ../../../../component/drm/ta/gatekeeper) || \
([ -d $(SDK_DIR)/../hidolphin/component/ta/gatekeeper ] && echo ../../../../hidolphin/component/ta/gatekeeper) || \
([ -d gatekeeper ] && echo 'gatekeeper') || \
echo '')
$(info GATEKEEPER_TA_DIR = $(GATEKEEPER_TA_DIR))
CDRM_KEY_TA_DIR := $(shell ([ -d $(SDK_DIR)/../component/ta/cdrm_key ] && echo ../../../../component/ta/cdrm_key) || \
([ -d $(SDK_DIR)/../modules/ta/cdrm_key ] && echo ../../../../modules/ta/cdrm_key) || \
([ -d $(SDK_DIR)/../component/drm/ta/cdrm_key ] && echo ../../../../component/drm/ta/cdrm_key) || \
([ -d $(SDK_DIR)/../hidolphin/component/ta/cdrm_key ] && echo ../../../../hidolphin/component/ta/cdrm_key) || \
([ -d cdrm_key ] && echo 'cdrm_key') || \
echo '')
$(info CDRM_KEY_TA_DIR = $(CDRM_KEY_TA_DIR))
devchip_tadirs :=
devchip_tas :=
HI_TEE_API_DIR := $(TOPDIR)/vendor/huanglong/libdevchip_api
HI_TEE_TA_DIR := $(TOPDIR)/vendor/huanglong/devchip_apps
ifeq ($(strip $(CFG_HI_TEE_DEMO_SUPPORT)), y)
devchip_tadirs += demo
devchip_tas += task_hisi_demo.elf
endif
ifeq ($(strip $(CFG_HI_TEE_KEYMASTER_SUPPORT)), y)
ifneq ($(KEYMASTER_TA_DIR), )
devchip_tadirs += $(KEYMASTER_TA_DIR)
devchip_tas += task_keymaster.elf
endif
endif
ifeq ($(strip $(CFG_HI_TEE_GATEKEEPER_SUPPORT)), y)
ifneq ($(GATEKEEPER_TA_DIR), )
devchip_tadirs += $(GATEKEEPER_TA_DIR)
devchip_tas += task_gatekeeper.elf
endif
endif
ifeq ($(strip $(CFG_HI_TEE_CHINADRM_KEY_SUPPORT)), y)
ifneq ($(CDRM_KEY_TA_DIR), )
devchip_tadirs += $(CDRM_KEY_TA_DIR)
devchip_tas += task_cdrm_key.elf
endif
endif
ifeq ($(strip $(CFG_HI_TEE_SSM_TEST_SUPPORT)), y)
devchip_tadirs += ssm_test
devchip_tas += task_hisi_ssm_test.elf
devchip_tadirs += ssm_test_2
devchip_tas += task_hisi_ssm_test_2.elf
endif
ifeq ($(strip $(CFG_HI_TEE_SSM_SUPPORT)), y)
devchip_tadirs += ssm
devchip_tas += task_hisi_ssm.elf
endif
ifeq ($(strip $(CFG_HI_TEE_SMMU_SUPPORT)), y)
devchip_tadirs += smmu
devchip_tas += smmu_task.elf
endif
ifeq ($(strip $(CFG_HI_TEE_COMMON_SUPPORT)), y)
devchip_tadirs += common
devchip_tas += task_hisi_common.elf
endif
ifeq ($(strip $(CFG_HI_TEE_OTP_SUPPORT)), y)
devchip_tadirs += otp
devchip_tas += task_hisi_otp.elf
endif
ifeq ($(strip $(CFG_HI_TEE_KLAD_SUPPORT)), y)
devchip_tadirs += klad
devchip_tas += task_hisi_klad.elf
endif
ifeq ($(strip $(CFG_HI_TEE_HDMITX_SUPPORT)), y)
devchip_tadirs += hdmitx
devchip_tas += task_hisi_hdmitx.elf
endif
ifeq ($(strip $(CFG_HI_TEE_KEYSLOT_SUPPORT)), y)
devchip_tadirs += keyslot
devchip_tas += task_hisi_keyslot.elf
endif
ifeq ($(strip $(CFG_HI_TEE_DEMUX_SUPPORT)), y)
devchip_tadirs += demux
devchip_tas += task_hisi_dmx.elf
endif
ifeq ($(strip $(CFG_HI_TEE_CIPHER_SUPPORT)), y)
#devchip_tadirs += cipher
devchip_tas +=
endif
ifeq ($(strip $(CFG_HI_TEE_TEST_CIPHER_SUPPORT)), y)
devchip_tadirs += test_cipher
devchip_tas += task_hisi_test_cipher.elf
endif
ifeq ($(strip $(CFG_HI_TEE_VFMW_SUPPORT)), y)
devchip_tadirs += vfmw
devchip_tas += task_hisi_vfmw.elf
endif
ifeq ($(strip $(CFG_HI_TEE_PVR_SUPPORT)), y)
devchip_tadirs += pvr
devchip_tas += task_hisi_pvr.elf
endif
ifeq ($(strip $(CFG_HI_TEE_HDMIRX_SUPPORT)), y)
devchip_tadirs += hdmirx
devchip_tas += task_hisi_hdmirx.elf
endif
ifeq ($(strip $(CFG_HI_TEE_NPU_TEST_SUPPORT)), y)
devchip_tadirs += npu_test
devchip_tas += task_hisi_npu_test.elf
endif
#ifeq ($(strip $()), y)
#devchip_tadirs +=
#devchip_tas +=
#endif
@@ -1,59 +0,0 @@
include(apps_ta_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
list(APPEND DEVCHIP_LIBRARIES
devchip_api
)
list(APPEND TEE_C_FLAGS
-DTEE_PARAM_TYPE_NSSMMU_HAND_INPUT=0x9
-DTEE_PARAM_TYPE_SECSMMU_HAND_INPUT=0xa
-DTEE_PARAM_TYPE_PHYS_HAND_INPUT=0xb
)
list(APPEND TEE_INCLUDE_PATH
${PROJECT_SOURCE_DIR}/vendor/huanglong/devchip_apps/common
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/huanglong/hi3751v900/devchip_drv/include
${PROJECT_SOURCE_DIR}/vendor/huanglong/libdevchip_api/include
${PROJECT_SOURCE_DIR}/vendor/huanglong/libdevchip_api/common
${PROJECT_SOURCE_DIR}/vendor/huanglong/libdevchip_api/ta_al/itrustee
)
list(APPEND TEE_C_SOURCES
hisi_common_task.c
)
list(FIND PRODUCT_APPS "task_hisi_common.elf" index)
if (${index} GREATER -1)
set(IF_INSTALL DO_INSTALL)
endif()
tee_add_executable(task_hisi_common.elf
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
LD_FLAGS
${TA_LDFLAGS}
LINKGROUP
${DEVCHIP_LIBRARIES}
INSTALL_DIR
${BOOTFS_STAGE_DIR}
${IF_INSTALL}
)
@@ -1,11 +0,0 @@
# TARGET is common TA app
TARGET := task_hisi_common.elf
c_files := $(wildcard *.c)
# Libraries
LIBS :=
c-flags += -I$(HI_TEE_API_DIR)/common
include $(HI_TEE_TA_DIR)/itrustee_ta.mk
@@ -1,92 +0,0 @@
/*
* Copyright (C) Hisilicon Technologies Co., Ltd. 2019-2019. All rights reserved.
* Description: common TA
*/
#include "hi_tee_hal.h"
#include "hi_tee_errno.h"
#include "tee_common_utils.h"
#define TEEC_CMD_GET_VERSION 0
#define UNUSED(x) ((x) = (x))
#define PARA_NUM 4
/* define the parameter check macro */
#define CHECK_PARAM_TYPES(param_types, type0, type1, type2, type3) do { \
if ((param_types) != TEE_PARAM_TYPES(type0, type1, type2, type3)) { \
ta_debug("[%d]line bad parameter types!\n", __LINE__); \
return TEE_ERROR_BAD_PARAMETERS; \
} \
} while (0)
__DEFAULT TEE_Result TA_CreateEntryPoint(void)
{
TEE_Result ret;
hi_char general_session_name[] = "tee_common_session";
/* root id for all client */
ret = AddCaller_CA_exec(general_session_name, 0);
if (ret != TEE_SUCCESS) {
tloge("AddCaller_CA_exec %s for root failed!\n", general_session_name);
goto out;
}
ret = TEE_SUCCESS;
out:
return ret;
}
__DEFAULT TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types, TEE_Param params[PARA_NUM],
hi_void **session_context)
{
UNUSED(param_types);
UNUSED(params);
UNUSED(session_context);
return TEE_SUCCESS;
}
__DEFAULT TEE_Result TA_InvokeCommandEntryPoint(hi_void *session_context, uint32_t cmd_id, uint32_t param_types,
TEE_Param params[PARA_NUM])
{
TEE_Result ret;
UNUSED(session_context);
switch (cmd_id) {
case TEEC_CMD_GET_VERSION: {
hi_void *buf = params[0].memref.buffer;
hi_u32 buf_size = params[0].memref.size;
hi_u32 total_size = params[1].value.a;
common_check_pointer(buf);
CHECK_PARAM_TYPES(param_types, TEE_PARAM_TYPE_MEMREF_INOUT, TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE);
ret = tee_common_get_version_info((hi_char *)buf, buf_size, total_size);
if (ret != HI_SUCCESS) {
ret = TEE_ERROR_GENERIC;
} else {
ret = TEE_SUCCESS;
}
break;
}
default: {
ret = TEE_ERROR_BAD_PARAMETERS;
tloge("Invalid cmd[0x%x]!\n", cmd_id);
break;
}
}
return ret;
}
__DEFAULT void TA_CloseSessionEntryPoint(hi_void* session_context)
{
UNUSED(session_context);
}
__DEFAULT void TA_DestroyEntryPoint(void)
{
return;
}
@@ -1,57 +0,0 @@
include(apps_ta_common)
include(apps_svc_common)
include(apps_sub_cfg)
include(apps_subcommon)
list(APPEND TEE_C_FLAGS
-DAPI_LEVEL=3
)
list(APPEND TEE_INCLUDE_PATH
${PLATFORM_DIR}/common/tee_config
${PROJECT_SOURCE_DIR}/libs/libplatdrv/platform/common/crypto
${PLATFORM_DIR}/${PLATFORM_NAME}/${PRODUCT_NAME}/common/tee_config
)
list(APPEND TEE_C_SOURCES
src/crypto_operation.c
src/gp_api_adapt_big_data.c
src/gp_api_adapt_small_data.c
src/gp_api_adapt_util.c
src/gp_keyblob_operation.c
src/invoke.c
src/invoke_check.c
src/invoke_function.c
src/kms_key_node.c
src/kms_tag_api.c
)
list(FIND PRODUCT_APPS "kms.elf" index)
if (${index} GREATER -1)
set(IF_INSTALL DO_INSTALL)
endif()
tee_add_executable(kms.elf
SOURCES
${TEE_C_SOURCES}
COMPILE_TOOL
clang
COMPILER_FLAGS
${TEE_C_FLAGS}
COMPILER_DEFINITIONS
${TEE_C_DEFINITIONS}
PRIVATE_INCLUDES
${TEE_INCLUDE_PATH}
LD_FLAGS
${TA_LDFLAGS}
INSTALL_DIR
${BOOTFS_STAGE_DIR}
${IF_INSTALL}
)
@@ -1,13 +0,0 @@
# TARGET is a TA app
TARGET := task_hisi_demo.elf
c_files := $(wildcard ./*.c) \
$(wildcard ./test/*.c)
# Libraries
LIBS :=
c-flags += -I$(HI_TEE_API_DIR)/demo/ \
-I./test/
include $(HI_TEE_TA_DIR)/itrustee_ta.mk

Some files were not shown because too many files have changed in this diff Show More