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.
134 lines
3.5 KiB
134 lines
3.5 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2021. All rights reserved.
|
|
* Description: tee keyslot test.
|
|
* Author: Hisilicon
|
|
* Create: 2019-07-25
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include "uapi_keyslot.h"
|
|
|
|
#define sample_get_inputcmd(input_cmd) fgets((char *)(input_cmd), (sizeof(input_cmd) - 1), stdin)
|
|
#define ext_get_inputcmd(input_cmd) fgets((char *)(input_cmd), (sizeof(input_cmd) - 1), stdin)
|
|
|
|
#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 KLAD_HANDLE_LEN 0x4
|
|
|
|
static int privkey_slot_create(unsigned int *handle, unsigned int len, uapi_keyslot_attr *attr)
|
|
{
|
|
int ret;
|
|
unsigned int i, n;
|
|
|
|
if (len > KLAD_HANDLE_LEN) {
|
|
ext_err_dft("len > KLAD_HANDLE_LEN\n");
|
|
return -1;
|
|
}
|
|
|
|
ret = uapi_keyslot_init();
|
|
if (ret != TD_SUCCESS) {
|
|
goto out;
|
|
}
|
|
|
|
sleep(1);
|
|
for (i = 0; i < len; i++) {
|
|
handle[i] = 0;
|
|
attr->type = UAPI_KEYSLOT_TYPE_MCIPHER;
|
|
attr->secure_mode = UAPI_KEYSLOT_SECURE_MODE_NONE;
|
|
ret = uapi_keyslot_create(attr, &handle[i]);
|
|
if (ret != TD_SUCCESS) {
|
|
printf("Failed to uapi_keyslot_create func, ret = 0x%x\n", ret);
|
|
goto keyslot_destroy;
|
|
}
|
|
ext_err_dft("REE============> 0x%08x= 0x%08x\n", ret, handle[i]);
|
|
sleep(1);
|
|
}
|
|
printf("please input 'q' to quit!\n");
|
|
goto out;
|
|
|
|
keyslot_destroy:
|
|
for (n = 0; n < ((i > KLAD_HANDLE_LEN) ? KLAD_HANDLE_LEN : i); n++) {
|
|
if (uapi_keyslot_destroy(handle[n]) != TD_SUCCESS) {
|
|
printf("Failed to uapi_keyslot_destroy func, handle: 0x%08x , index : 0x%x\n", handle[n], n);
|
|
}
|
|
}
|
|
uapi_keyslot_deinit();
|
|
out:
|
|
return ret;
|
|
}
|
|
|
|
static td_void priv_key_slot_destroy(const unsigned int *handle, unsigned int len)
|
|
{
|
|
int ret;
|
|
unsigned int i;
|
|
|
|
if (len > KLAD_HANDLE_LEN) {
|
|
len = KLAD_HANDLE_LEN;
|
|
}
|
|
|
|
for (i = 0; i < len; i++) {
|
|
ret = uapi_keyslot_destroy(handle[i]);
|
|
printf("************> 0x%08x= 0x%08x\n", ret, handle[i]);
|
|
sleep(1);
|
|
}
|
|
uapi_keyslot_deinit();
|
|
return;
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
unsigned int handle[KLAD_HANDLE_LEN] = {0};
|
|
uapi_keyslot_attr attr = {0};
|
|
int i;
|
|
int ret;
|
|
td_char input_cmd[0x20] = {0};
|
|
(void)argc;
|
|
|
|
if (argv == TD_NULL) {
|
|
printf("argv is NULL \n");
|
|
return 0;
|
|
}
|
|
|
|
ret = privkey_slot_create(handle, KLAD_HANDLE_LEN, &attr);
|
|
if (ret != TD_SUCCESS) {
|
|
return ret;
|
|
}
|
|
|
|
while (1) {
|
|
sample_get_inputcmd(input_cmd);
|
|
if (input_cmd[0] == 'q') {
|
|
printf("prepare to quit!\n");
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < KLAD_HANDLE_LEN; i++) {
|
|
ret = uapi_keyslot_destroy(handle[i]);
|
|
ext_err_dft("************> 0x%08x= 0x%08x\n", ret, handle[i]);
|
|
sleep(1);
|
|
}
|
|
|
|
for (i = 0; i < KLAD_HANDLE_LEN; i++) {
|
|
handle[i] = 0;
|
|
attr.type = UAPI_KEYSLOT_TYPE_MCIPHER;
|
|
attr.secure_mode = UAPI_KEYSLOT_SECURE_MODE_TEE;
|
|
ret = uapi_keyslot_create(&attr, &handle[i]);
|
|
ext_err_dft("TEE============> 0x%08x= 0x%08x\n", ret, handle[i]);
|
|
sleep(1);
|
|
}
|
|
printf("please input 'q' to quit!\n");
|
|
while (1) {
|
|
sample_get_inputcmd(input_cmd);
|
|
if (input_cmd[0] == 'q') {
|
|
printf("prepare to quit!\n");
|
|
break;
|
|
}
|
|
}
|
|
|
|
priv_key_slot_destroy(handle, KLAD_HANDLE_LEN);
|
|
return ret;
|
|
}
|
|
|