OPTEE CA和TA通信 實現從java到ca

OP-TEE:Secure world OS(optee_os)、normal world client(optee_client)、test suite(optee_test/xtest)以及linux驅動

optee_os: https://github.com/OP-TEE/optee_os

optee_client: https://github.com/OP-TEE/optee_client    主要生成libteec.so, 是包含用於與可信操作系統通信的API的庫

optee_test:https://github.com/OP-TEE/optee_test

可參考書籍《手機安全和可信應用開發指南:TrustZone與OP-TEE技術詳解 》

CA(Client Application,運行在normal world)和TA(Trust Application,運行在secure world)

TA又分爲用戶TA(user ta)和靜態TA(static ta),靜態TA是和optee build在一起的

CA主要通過TEEC_UUID來調用TA

 

Java層調用庫包:System.loadLibrary("ca"); 引用native層函數

調用jni函數

 

libca.so

Jni層:調用CA程序

加載頭文件,引用CA的C函數

extern "C" 
{
    #include "ca.h"
}

CA層:通過TEEC_OpenSession調用libteec.so,其中TEEC_UUID的對應具體要通信的TA

TEEC_InvokeCommand  通過cmd_id調用TA對應函數

 

user TA層:TEEC_UUID.ta (換成具體對應的uuid.ta)   TA端程序

TA_OpenSessionEntryPoint  響應CA端TEEC_OpenSession

TA_InvokeCommandEntryPoint  對應函數cmd_id   響應CA端TEEC_InvokeCommand

可以通過TEEC_UUID調用具體的STA程序

TEE_OpenTASession

TEE_InvokeTACommand

 

STA層(static TA):

utee_open_ta_session  響應user TA端TEE_OpenTASession

utee_invoke_ta_command   對應函數commandID  響應user TA端TEE_InvokeTACommand

 

由於CA端與TA端是隔離的,如果需要交換數據的話,要使用:TEEC_MEMREF_TEMP_INOUT/TEEC_MEMREF_PARTIAL_INOUT  這兩種內存映射,一個是臨時一個是部分的

TEEC_MEMREF_TEMP_INOUT:臨時內存引用指向的是共享內存緩衝區,而不是共享內存控制結構

TEEC_MEMREF_PARTIAL_INOUT :部分內存引用,指向父共享內存塊的子區域,允許模塊中任 意字節域共享給可信應用,需要通過TEEC_AllocateSharedMemory申請

CA如果還需要跟STA(static TA)交換數據的話,需要在user TA中重新申請內存,緩存上述所說的內存映射或者內存緩衝區,由user TA端與STA端交換數據,並把交換後的數據拷貝到相應的內存映射或者內存緩衝區,返回到CA端。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章