头文件tee_client_api.h申明了可用的Client API,主要包含下列:
1、TEEC_Result TEEC_InitializeContext(const char* name,TEEC_Context* context)
此函数初始化一个新的TEEC_Context变量,在CA 和TEE之间建立连接。参数name标识了是哪个TEE,如果其为NULL,CA将会选择默认的TEE来建立连接。
2、void TEEC_FinalizeContext(TEEC_Context* context)
此函数终止一个初始化的TEEC_Context,关闭CA和TEE之间的连接。在调用该函数之前必须确保所有的session已经关闭,且所有的共享内存被释放。
3、TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context* context,TEEC_SharedMemory* sharedMem)
此函数将依据sharedMem参数将现有CA端内存注册为共享内存。
sharedMem:指向要进行注册的内存区域,CA必须在调用此函数之前填充TEEC_SharedMemory结构
4、TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context* context,TEEC_SharedMemory* sharedMem)
此函数将依据sharedMem参数分配一个新的内存块作为共享内存。
5、void TEEC_ReleaseSharedMemory (TEEC_SharedMemory* sharedMem)
此函数注销或取消分配先前初始化的共享内存块。
对于使用TEEC_AllocateSharedMemory分配的内存缓冲区,函数必须释放基础内存,且在返回前将sharedMem结构的buffer和size字段设置为NULL和0。在调用此函数后CA不得访问该区域。
对于使用TEEC_RegisterSharedMemory注册的内存,函数必须从TEE中注销基础内存,但是由于该内存归CA程序所有,因此该内存区域对CA程序仍然可用。
6、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)
此函数在CA和TA之间打开一个新的会话,该会话用于CA、TA之间的联系,目标TA由destination参数中的UUID指定。
7、void TEEC_CloseSession (TEEC_Session* session)
此函数关闭CA、TA之前的会话,会话中的所有命令必须在调用此函数之前完成。
8、TEEC_Result TEEC_InvokeCommand(TEEC_Session* session,uint32_t commandID,TEEC_Operation* operation,uint32_t* returnOrigin)
该函数用来在指定的会话中调用命令,参数commandID标识了应该调用TA中的具体哪个功能。
一个command可以选择携带一个载荷,如果其存在则operation参数指向CA产生的TEEC_Operation数据结构;如果operation为NULL,则不会与TA交换任何参数,仅交换commandID。
operation参数也用来管理命令取消。如果需要取消,则operation参数指针必须为非NULL,并且CA必须在调用此函数之前将operation.started域设置为零。
Operation Payload按以下步骤依次处理:
A,检查Operation Payload中的每个参数。如果参数是临时内存引用,
B,与TEE交换的所有存储区域的内容均已同步。
C,对于TEEC_VALUE_INPUT、TEEC_VALUE_INOUT类型的参数,读取所有标记为输入参数的字段。
D,将Operation发送给TA,在执行命令期间,TA可以读取输入内存引用所引用的内存中保存的数据;也可以将数据写入输出内存引用所引用的内存中。但是在命令完成之前,无法保证CA程序可以看到这些修改。
E,命令完成后,函数必须更新标记为输出参数的Memory Reference数据结构中的size字段。
F、命令完成后,函数必须更新所有标记为输出的值参数的字段,即类型为TEEC_VALUE_OUTPUT或TEEC_VALUE_INOUT的字段。
G、取消注册在函数开始时临时注册的所有内存区域,即在每个内存区域上调用函数TEEC_ReleaseSharedMemory。、
H、控制权被传递回调用的CA代码。
该函数的执行结果在return code(TEEC_Result)和return origin(returnOrigin)中返回。
9、void TEEC_RequestCancellation(TEEC_Operation* operation)
该函数请求取消OpenSession或InvokeCommand。由于TEE Client API是同步的,所以该函数需要在执行TEEC_OpenSession或TEEC_InvokeCommand线程以外的线程中调用。
该函数只是向TEE发送一个取消信号并立即返回。此函数返回时,不能保证操作已经取消。另外,取消请求只是一个提示,TEE、TA可以忽略取消请求。
原文:https://www.cnblogs.com/caidi/p/14693736.html