You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.6 KiB
156 lines
4.6 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2021. All rights reserved.
|
|
* Description: tee keyslot test.
|
|
* Author: Hisilicon
|
|
* Create: 2019-07-25
|
|
*/
|
|
|
|
#include <unistd.h>
|
|
#include "tee_client_api.h"
|
|
|
|
#define ext_err_dft(format, arg...) printf("%s,%d: " format, __FUNCTION__, __LINE__, ## arg)
|
|
#define ext_info_dft(format, arg...) printf("%s,%d: " format, __FUNCTION__, __LINE__, ## arg)
|
|
|
|
#define HANDLE_MAX_NUM 4
|
|
|
|
typedef enum {
|
|
EXT_KEYSLOT_TYPE_TSCIPHER = 0x00,
|
|
EXT_KEYSLOT_TYPE_MCIPHER,
|
|
EXT_KEYSLOT_TYPE_HMAC,
|
|
EXT_KEYSLOT_TYPE_MAX
|
|
} ext_keyslot_type;
|
|
|
|
#define KEYSLOT_CMD_CREATE 0
|
|
#define KEYSLOT_CMD_DESTROY 1
|
|
|
|
static int g_session_open = -1;
|
|
static TEEC_Context g_teec_context = {0};
|
|
static TEEC_Session g_teec_session = {0};
|
|
static TEEC_UUID g_teec_uuid = { 0x59e80d08, 0xad42, 0x11e9, { 0xa2, 0xa3, 0x2a, 0x2a, 0xe2, 0xdb, 0xcc, 0xe4 } };
|
|
|
|
static int tee_sec_init()
|
|
{
|
|
TEEC_Result teec_rst;
|
|
TEEC_Operation sess_op = {0};
|
|
uint32_t origin = 0;
|
|
|
|
if (g_session_open > 0) {
|
|
g_session_open++;
|
|
return 0;
|
|
}
|
|
ext_err_dft("===================init=======================\n");
|
|
|
|
teec_rst = TEEC_InitializeContext(NULL, &g_teec_context);
|
|
if (teec_rst != TEEC_SUCCESS) {
|
|
ext_err_dft("Teec Initialize context failed!\n");
|
|
return teec_rst;
|
|
}
|
|
sess_op.started = 1;
|
|
sess_op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE,
|
|
TEEC_MEMREF_TEMP_INPUT,
|
|
TEEC_MEMREF_TEMP_INPUT);
|
|
teec_rst = TEEC_OpenSession(&g_teec_context,
|
|
&g_teec_session,
|
|
&g_teec_uuid,
|
|
TEEC_LOGIN_IDENTIFY,
|
|
NULL,
|
|
&sess_op,
|
|
&origin);
|
|
if (teec_rst != TEEC_SUCCESS) {
|
|
ext_err_dft("Teec open session failed!\n");
|
|
(void)TEEC_FinalizeContext(&g_teec_context);
|
|
return (int)teec_rst;
|
|
}
|
|
g_session_open = 1;
|
|
return 0;
|
|
}
|
|
|
|
static int tee_sec_deinit()
|
|
{
|
|
if (g_session_open > 0) {
|
|
g_session_open--;
|
|
}
|
|
|
|
if (g_session_open != 0) {
|
|
return 0;
|
|
}
|
|
(void)TEEC_CloseSession(&g_teec_session);
|
|
(void)TEEC_FinalizeContext(&g_teec_context);
|
|
|
|
g_session_open = -1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int tee_sec_key_slot_create(ext_keyslot_type keyslot_type, unsigned int *handle)
|
|
{
|
|
TEEC_Result teec_result;
|
|
TEEC_Operation teec_operation = {0};
|
|
|
|
if (handle == NULL) {
|
|
ext_err_dft("handle is NULL \n");
|
|
return -1;
|
|
}
|
|
|
|
teec_operation.started = 1;
|
|
teec_operation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INOUT,
|
|
TEEC_NONE,
|
|
TEEC_NONE,
|
|
TEEC_NONE);
|
|
teec_operation.params[0].value.a = (unsigned int)keyslot_type;
|
|
teec_result = TEEC_InvokeCommand(&g_teec_session, KEYSLOT_CMD_CREATE, &teec_operation, NULL);
|
|
if (teec_result != TEEC_SUCCESS) {
|
|
ext_err_dft("Teec invoke command failed, cmd = 0x%08x\n", KEYSLOT_CMD_CREATE);
|
|
}
|
|
*handle = teec_operation.params[0].value.b;
|
|
return (int)teec_result;
|
|
}
|
|
|
|
static int tee_sec_key_slot_destroy(unsigned int handle)
|
|
{
|
|
TEEC_Result teec_result;
|
|
TEEC_Operation teec_operation = {0};
|
|
|
|
teec_operation.started = 1;
|
|
teec_operation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
|
|
TEEC_NONE,
|
|
TEEC_NONE,
|
|
TEEC_NONE);
|
|
teec_operation.params[0].value.a = handle;
|
|
teec_result = TEEC_InvokeCommand(&g_teec_session, KEYSLOT_CMD_DESTROY, &teec_operation, NULL);
|
|
if (teec_result != TEEC_SUCCESS) {
|
|
ext_err_dft("Teec invoke command failed, cmd = 0x%08x\n", KEYSLOT_CMD_DESTROY);
|
|
}
|
|
return (int)teec_result;
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
unsigned int handle[HANDLE_MAX_NUM] = {0};
|
|
int i;
|
|
int ret;
|
|
(void)argc;
|
|
|
|
if (argv == NULL) {
|
|
printf("argv is NULL \n");
|
|
return 0;
|
|
}
|
|
|
|
tee_sec_init();
|
|
|
|
sleep(1);
|
|
for (i = 0; i < HANDLE_MAX_NUM; i++) {
|
|
ret = tee_sec_key_slot_create(EXT_KEYSLOT_TYPE_MCIPHER, &handle[i]);
|
|
ext_err_dft("============> 0x%08x= 0x%08x\n", ret, handle[i]);
|
|
sleep(1);
|
|
}
|
|
for (i = 0; i < HANDLE_MAX_NUM; i++) {
|
|
ret = tee_sec_key_slot_destroy(handle[i]);
|
|
ext_err_dft("************> 0x%08x= 0x%08x\n", ret, handle[i]);
|
|
sleep(1);
|
|
}
|
|
tee_sec_deinit();
|
|
return ret;
|
|
}
|
|
|