1# TEE Client组件 2 3## 简介 4 5TEE Client组件向OpenHarmony侧CA(Client APP,即客户端应用)提供访问TEE的API接口,同时也包含TEE的代理服务,配合TEE实现安全存储、日志打印等功能。 6 7TEE Client组件包含如下模块: 8 9- libteec.so:为系统组件Native应用提供TEE Client API。 10- libteec_vendor.so:为芯片组件Native应用提供TEE Client API。 11- cadaemon:转发CA请求到Tzdriver驱动。 12- teecd:作为TEE的代理服务,支持TEE实现安全存储等功能。 13- tlogcat:支持打印TEE日志。 14 15图1 TEE Client组件架构图 16 17![](figures/tee_client.drawio.png) 18 19## 目录 20 21``` 22base/tee/tee_client 23├── frameworks 24│ └── libteec_vendor # libteec_vendor.so库,提供TEE Client API 25├── interfaces 26│ ├── inner_api # 本组件内部接口 27| └── kits # 发布到SDK中的libteec.so库和对应的TEE Client API 28└── services 29 ├── authentication # CA身份识别(预留功能,暂未使能) 30 ├── cadaemon # 转发CA请求 31 ├── teecd # TEE代理服务 32 └── tlogcat # TEE日志服务 33``` 34 35## 接口说明 36 37TEE Client组件对CA提供的API列表如下: 38 39| 名称 | 描述 | 40| ------------------------------------------------------------ | -------------------- | 41| TEEC_InitializeContext (const char *name, TEEC_Context *context) | 初始化TEE上下文。 | 42| TEEC_FinalizeContext (TEEC_Context *context) | 结束TEE上下文。 | 43| TEEC_OpenSession (TEEC_Context *context, TEEC_Session *session, const TEEC_UUID *destination, uint32_t connectionMethod, const void *connectionData, TEEC_Operation *operation, uint32_t *returnOrigin) | 建立与TEE的会话。 | 44| TEEC_CloseSession (TEEC_Session *session) | 关闭与TEE的会话。 | 45| TEEC_InvokeCommand (TEEC_Session *session, uint32_t commandID, TEEC_Operation *operation, uint32_t *returnOrigin) | 向TEE发送命令。 | 46| TEEC_RegisterSharedMemory (TEEC_Context *context, TEEC_SharedMemory *sharedMem) | 注册共享内存。 | 47| TEEC_AllocateSharedMemory (TEEC_Context *context, TEEC_SharedMemory *sharedMem) | 申请共享内存。 | 48| TEEC_ReleaseSharedMemory (TEEC_SharedMemory *sharedMem) | 释放共享内存。 | 49| TEEC_RequestCancellation (TEEC_Operation *operation) | 取消正在运行的操作。 | 50 51上述API均是GlobalPlatform TEE标准规定的,可参考《[TEE Client API Specification v1.0 (GPD_SPE_007)](https://globalplatform.org/specs-library/?filter-committee=tee)》。少量实现与GlobalPlatform TEE规范有差异,差异点如下: 52 531. TEEC_OpenSession接口的TEEC_Context结构体成员 ta_path支持指定TA的文件路径(限制在/data目录)。 54 55 举例如下: 56 57 ``` 58 TEEC_Context context; 59 context.ta_path = (uint8_t *)"/data/58dbb3b9-4a0c-42d2-a84d-7c7ab17539fc.sec" 60 ``` 61 62 如果CA不通过ta_path指定TA的文件路径,则TEE Client会从缺省路径下读取uuid.sec(uuid需要替换为TA的真实uuid)命名的TA文件。缺省路径有两个:/system/bin和/vendor/bin。 63 642. TEEC_OpenSession接口入参connectionMethod只支持TEEC_LOGIN_IDENTIFY。 65 66 对于TEEC_OpenSession函数中第四个入参connectionMethod,GP规范定义了六种Login Method,TEE Client组件拓展了TEEC_LOGIN_IDENTIFY的类型,且只支持该种connectionMethod。 67 683. 调用TEEC_OpenSession时,TEEC_Operation参数有限制。 69 70 在调用TEEC_OpenSession接口时,TEEC_Operation中params[2]和params[3]是预留给系统的,不允许CA使用,CA仅可以使用params[0]和params[1]。 71 72## 编译指导 73 74TEE Client组件支持单独编译调试,以RK3568芯片为例,运行以下命令编译TEE Client组件: 75 76``` 77./build.sh --product-name rk3568 --ccache --build-target tee_client 78``` 79 80编译产物路径:out/rk3568/tee/tee_client 81 82可将编译产物自行推入设备中进行调试: 83 84``` 85hdc file send cadaemon.json /system/profile/ 86hdc file send cadaemon.cfg /system/etc/init/ 87hdc file send libteec.so /system/lib/ 88hdc file send libcadaemon.so /system/lib/ 89hdc file send tlogcat /system/bin/ 90hdc file send libteec_vendor.so /vendor/lib/ 91hdc file send teecd /vendor/bin/ 92``` 93 94## 相关仓 95 96[tee_tzdriver](https://gitee.com/openharmony-sig/tee_tee_tzdriver) 97