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 |