属性访问(GP Internal API)

GP TEE Internal Core API中定义了一系列属性访问函数,可以访问属性集合中的单个属性,并将其转换成各种类型。这些函数可以用来访问TA配置属性、CA属性等。

被转换成的类型

包括:

Binary block,二进制块

32-bit unsigned integer,32位无符号整数

Boolean,布尔型

UUID,

Identity (a pair composed of a login method and a UUID),由登录方式和UUID组成的身份信息

通过函数TEE_GetPropertyAsString获取的属性必须被转换为以UTF-8编码的可打印字符串。以上各种类型转换成UTF-8编码的可打印字符串的规则如下:

A、二进制块,转换为与其对应的Base64编码一致的字符串。

B、32位无符号整数,可以表示为十进制、十六进制、二进制,decimal-integer: [0-9,_]+{K,M}?   hexadecimal-integer: 0[x,X][0-9,a-f,A-F,_]+   binary-integer: 0[b,B][0,1,_]+

如:1024可以表示为“1K”, “0X400”, “0b100_0000_0000”

C、布尔值,转成“true”或“false”

D、UUID

E、身份信息,转成 identity: integer (':'uuid)? 形式

枚举属性

属性集中的属性可以被枚举,

使用TEE_AllocatePropertyEnumerator函数分配一个属性枚举器;

调用TEE_StartPropertyEnumerator函数开始枚举,传递枚举集上所需的伪句柄;

使用枚举句柄和一个NULL名调用TEE_GetProperty[AsXXX]函数。

枚举器可以以任意顺序提供属性。

属性操作函数

1、TEE_Result TEE_GetPropertyAsString(TEE_PropSetHandle propsetOrEnumerator, [instringopt] char* name, [outstring] char* valueBuffer, size_t* valueBufferLen);

2、TEE_Result TEE_GetPropertyAsBool(TEE_PropSetHandle propsetOrEnumerator, [instringopt] char* name, [out] bool* value );

3、TEE_Result TEE_GetPropertyAsU32(TEE_PropSetHandle propsetOrEnumerator, [instringopt] char* name, [out] uint32_t* value );

4、TEE_Result TEE_GetPropertyAsBinaryBlock(TEE_PropSetHandle propsetOrEnumerator, [instringopt] char* name, [outbuf] void* valueBuffer, size_t* valueBufferLen);

5、TEE_Result TEE_GetPropertyAsUUID(TEE_PropSetHandle propsetOrEnumerator, [instringopt] char* name, [out] TEE_UUID* value);

6、TEE_Result TEE_GetPropertyAsIdentity(TEE_PropSetHandle propsetOrEnumerator, [instringopt] char* name, [out] TEE_Identity* value );

7、TEE_Result TEE_AllocatePropertyEnumerator([out] TEE_PropSetHandle* enumerator);

分配一个属性枚举器对象,一旦分配了属性枚举器上的句柄,就可以使用函数TEE_StartPropertyEnumerator来枚举该属性集中的属性。

8、void TEE_FreePropertyEnumerator(TEE_PropSetHandle enumerator);

释放一个属性枚举器对象。

9、void TEE_StartPropertyEnumerator(TEE_PropSetHandle enumerator, TEE_PropSetHandle propSet);

开始枚举某个枚举器中的属性,一旦枚举器附着上每个枚举集,

  • 通过传递枚举集的枚举器句柄和值为NULL的名称,使用TEE_GetPropertyAsXXX函数检索属性
  • 使用函数TEE_GetPropertyName在枚举器中检索当前属性的名称
  • 使用函数TEE_GetNextProperty将枚举推进到属性集中的下一个属性

10、void TEE_ResetPropertyEnumerator(TEE_PropSetHandle enumerator);

将属性枚举器重置为其刚分配后的状态

11、TEE_Result TEE_GetPropertyName(TEE_PropSetHandle enumerator, [outstring] void* nameBuffer, size_t* nameBufferLen);

获取枚举器中当前属性的名称

12、TEE_Result TEE_GetNextProperty(TEE_PropSetHandle enumerator);

将枚举器前进到下一个属性

TA可配置属性

每个TA都关联着一个配置属性,其可以通过属性访问函数和TEE_PROPSET_CURRENT_TA伪句柄进行访问。下表定义了TA的标准配置属性:

属性名称 属性类型 意义
gpd.ta.appID UUID TA标识符
gpd.ta.singleInstance Boolean

true:为所有会话创建一个TA实例

false: 为每一个会话创建一个单独的TA实例

gpd.ta.multiSession Boolean TA实例是否支持多会话,当gpd.ta.singleInstance属性为false时该属性忽略。 
gpd.ta.instanceKeepAlive Boolean

没有会话连接时,是否应保留TA实例上下文。实例上下文定义为TA实例内存空间中的所有可写数据,包括实例堆。gpd.ta.singleInstance设置为ture时该属性才有意义。

当该属性为false,在TA上打开一个或多个会话时必须创建TA会话,当TA上没有任何会话时必须将其销毁。当该属性为true,仅当TEE关闭时TA实例才会终止。

gpd.ta.dataSize Integer TA堆空间大小,通过TEE_Malloc分配的内存块是从该空间中提取的 
gpd.ta.stackSize Integer  TA栈空间大小
gpd.ta.version String 该TA的版本号
gpd.ta.description String 可选的TA描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 客户端属性

标准的客户端属性可以使用属性访问函数和TEE_PROPSET_CURRENT_CLIENT伪句柄进行访问;其他非标准的客户端属性可以由具体实现定义,但必须定义在gpd.之外的命名空间。

请注意,只能在与客户端关联的TA入口点的上下文中访问客户端属性,即以下函数中:TA_OpenSessionEntryPoint,TA_InvokeCommandEntryPoint或TA_CloseSessionEntryPoint。

属性名称 属性类型 意义
gpd.client.identity Identity

当前客户端的身份信息,可以通过TEE_GetPropertyAsIdentity函数获取该值。

TA可以使用客户端身份来执行访问控制,如其可以拒绝为未识别的客户端打开会话。

 

 

 

 

 

具体TEE属性

通过属性访问函数和TEE_PROPSET_TEE_IMPLEMENTATION伪句柄来检索TEE属性。标准的TEE属性包括:

属性名称 属性类型 意义
gpd.tee.apiversion String API实现的版本号,当前版本时“1.1”。
gpd.tee.description String

API实现描述,该属性的具体内容取决于实现,通常包含实现的版本、内部版本号及其他配置信息。

gpd.tee.deviceID UUID 一个设备标识符在所有GP TEE中必须时全局唯一的。如果一个设备上由多个GP TEE,则每个TEE应该有唯一的一个gpd.tee.deviceID。
gpd.tee.systemTime.protectionLevel Integer

系统时间执行所提供的保护级别

gpd.tee.TAPersistentTime.protectionLevel Integer TA Persistent时间提供的保护级别
gpd.tee.arith.maxBigIntSize Integer  TEE Arithmetical API算法支持的大整数的最大位数。超出此限制,由于预分配的资源不足或硬件限制,可能会导致panic
gpd.tee.cryptography.ecc Boolean 是否支持ECC算法
gpd.tee.trustedStorage.antiRollback.protectionLevel Integer 防回滚安全存储的保护级别,0-无防回滚保护,100-安全存储的防回滚机制在REE级别实现,1000-安全存储的防回滚机制基于TEE控制的硬件
gpd.tee.trustedos.implementation.version String TEE实现的详细版本号。当TOS代码发生任何更新时,此属性值必须得到修改
gpd.tee.trustedos.implementation.binaryversion binary 等效于gpd.tee.trustedos.implementation.version的二进制值
gpd.tee.trustedos.manufacturer String TOS制造商名字
gpd.tee.firmware.implementation.version String TOS固件的详细版本号
gpd.tee.firmware.implementation.binaryversion binary 等效于gpd.tee.firmware.implementation.version的二进制值
gpd.tee.firmware.manufacturer String TOS固件制造商的名称,如果没有此固件,则为空字符串

 

 

 

 

原文地址:https://www.cnblogs.com/caidi/p/14700207.html