TEE开发中 Client API 汇总

TEE Client API

头文件

include “tee_client_api.h”

0.一些数据类型

typedef struct
{
	uint32_t timeLow;
	uint16_t timeMid;
	uint16_t timeHiAndVersion;
	uint8_t clockSeqAndNode[8];
} TEEC_UUID;

typedef struct
{
	<Implementation-Defined Type> imp;
} TEEC_Context;

typedef struct
{
	<Implementation-Defined Type> imp;
} TEEC_Session;

typedef struct
{
	void* buffer;
	size_t size;
	uint32_t flags;    //TEEC_MEM_INPUT: CA -> TEE   or   TEEC_MEM_OUTPUT  :TEE -> CA
	<Implementation-Defined Type> imp;
} TEEC_SharedMemory;

typedef struct
{
	void* buffer;
	size_t size;
} TEEC_TempMemoryReference;

typedef struct
{
	TEEC_SharedMemory* parent;
	size_t size;
	size_t offset;
} TEEC_RegisteredMemoryReference;

typedef struct
{
	uint32_t a;
	uint32_t b;
} TEEC_Value;

//该联合体的选择依赖于 TEEC_Operation 结构体中的paramTypes参数
typedef union
{
	TEEC_TempMemoryReference tmpref;
	TEEC_RegisteredMemoryReference memref;
	TEEC_Value value;
} TEEC_Parameter;

typedef struct
{
	uint32_t started;
	uint32_t paramTypes;
	TEEC_Parameter params[4];
	<Implementation-Defined Type> imp;
} TEEC_Operation;

1.初始化函数

TEEC_Result TEEC_InitializeContext(
	const char* name,
	TEEC_Context* context)

描述:建立一个从client到TEE的上下文

2.关闭初始化的会话上下文

void TEEC_FinalizeContext(
	 TEEC_Context* context)

描述:关闭Client application 和 TEE的连接

3.注册共享内存 TEEC_RegisterSharedMemory

TEEC_Result TEEC_RegisterSharedMemory(
	TEEC_Context* context,
	TEEC_SharedMemory* sharedMem)

typedef struct
{
	void* buffer;
	size_t size;
	uint32_t flags;
	<Implementation-Defined Type> imp;
} TEEC_SharedMemory;

flags:
1. TEEC_MEM_INPUT   //通过内存可以传输数据,方向从Client 到TEE
2. TEEC_MEM_OUTPUT

描述:将客户端的内存共享到TEE中,共享之前要填充sharedMem的结构体变量

4.在TEE内分配新的内存 TEEC_AllocateSharedMemory

TEEC_Result TEEC_AllocateSharedMemory(
	TEEC_Context* context,
	TEEC_SharedMemory* sharedMem)

描述:在TEE中分配一个新的内存,参数通上,参考P34

5.释放共享内存 TEEC_ReleaseSharedMemory

void TEEC_ReleaseSharedMemory (
	TEEC_SharedMemory* sharedMem)

描述:这个函数释放之前注册/分配的共享内存

6.打开一个会话 TEEC_OpenSession

TEEC_Result TEEC_OpenSession (
	TEEC_Context* context,   //
	TEEC_Session* session,
	const TEEC_UUID* destination,
	uint32_t connectionMethod,
	const void* connectionData,
	TEEC_Operation* operation,
	uint32_t* returnOrigin)

参数:

  • context:指向初始化的TEE的上下文的指针
  • session:指向要打开会话结构体的指针
  • destination:指向包含目标可信应用程序的UUID的结构的指针
  • connectionMethod:连接使用的方法
    • TEEC_LOGIN_PUBLIC
    • TEEC_LOGIN_USER
    • TEEC_LOGIN_GROUP
    • TEEC_LOGIN_APPLICATION
    • TEEC_LOGIN_USER_APPLICATION
    • TEEC_LOGIN_GROUP_APPLICATION
  • connectionData:支持所选连接方法所需的任何必要数据
  • operation:(暂时未理解)
  • returnOrigin:可以为NULL,也可以是指向返回变量的指针,如“TEEC_ORIGIN_TRUSTED_APP”

描述:
在客户端应用程序(CA)和指定的可信任应用程序(TA)之间创建一个新的会话

7.关闭会话 TEEC_CloseSession

void TEEC_CloseSession (
	TEEC_Session* session)

描述
关闭会话

8.调用命令 TEEC_InvokeCommand

TEEC_Result TEEC_InvokeCommand(
	TEEC_Session* session,
	uint32_t commandID,
	TEEC_Operation* operation,
	uint32_t* returnOrigin)

参数

  • session:将在其中调用命令的开放会话
  • commandID:要调用的受信任应用程序中的命令的标识符
  • operation:指向客户端应用程序初始化的TEEC_Operation 结构体的指针
  • returnOrigin:返回

描述
此函数调用指定会话中的一个命令
####9.取消请求 TEEC_RequestCancellation

void TEEC_RequestCancellation(
	TEEC_Operation* operation)

描述
此函数请求取消挂起的开放会话操作或者命令调用操作,这个函数仅仅向TEE发送一个信号就返回了,有可能会被忽略

####10.函数宏:TEEC_PARAM_TYPES

	uint32_t TEEC_PARAM_TYPES( param0Type, param1Type, param2Type, param3Type)

描述
这个类似函数的宏构建了一个常量,其中包含四个参数类型,用于TEEC_Operation结构的paramTypes字段。它接受4个参数,这些参数必须取自下表描述的常量值。

名字 描述
TEEC_NONE 0x00000000 未使用该参数
TEEC_VALUE_INPUT 0x00000001 参数是标记TEEC_Value 为输入
TEEC_VALUE_OUTPUT 0x00000002 标记TEEC_Value 为输出
TEEC_VALUE_INOUT 0x00000003 标记TEEC_Value 为输入输出
TEEC_MEMREF_TEMP_INPUT 0x00000005
TEEC_MEMREF_TEMP_OUTPUT 0x00000006
TEEC_MEMREF_TEMP_INOUT 0x00000007
TEEC_MEMREF_WHOLE 0x0000000C
TEEC_MEMREF_PARTIAL_INPUT 0x0000000D
TEEC_MEMREF_PARTIAL_OUTPUT 0x0000000E
TEEC_MEMREF_PARTIAL_INOUT 0x0000000F

结束

猜你喜欢

转载自blog.csdn.net/qq_38074673/article/details/87983586