TEE
接口描述
TEE (Trusted Execution Environment)可信执行环境。它保证在内部加载的代码和数据在保密性和完整性方面受到保护。作为独立执行环境的tee提供安全功能,如独立执行、使用tee执行的应用程序的完整性以及保密性。tee提供了一个执行空间,此空间内提供了更高级别的安全性。
csi_tee_aes_encrypt
int32_t csi_tee_aes_encrypt(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t iv[16],
uint8_t *out,
tee_aes_mode_e mode);
- 功能描述:
- TEE AES加密。长度应为块大小的倍数(16字节)调用此函数后,将更新iv的内容。
- 参数:
in
: 输入缓存区,指向纯文本缓冲区的指针。
in_len
: 输入缓存区长度。
key
:指向密钥的指针。
key_len
:密钥长度(对于aes128,必须为16字节;对于aes192,必须为24字节;对于aes256,必须为32字节)。
iv
: 初始向量IV(Initialization Vector),CBC模式下使用。
out
:输出缓存区,指向密文存储区域的指针。
mode
:TEE AES模式,见tee_aes_mode_e定义。
- 返回值:
csi_tee_aes_decrypt
int32_t csi_tee_aes_decrypt(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t iv[16],
uint8_t *out,
uint32_t mode);
- 功能描述:
- TEE AES解密。长度应为块大小的倍数(16字节)调用此函数后,将更新iv的内容。
- 参数:
in
: 输入缓存区,指向密文缓冲区的指针。
in_len
: 输入缓存区长度。
key
:指向密钥的指针。
key_len
:密钥长度(对于aes128,必须为16字节;对于aes192,必须为24字节;对于aes256,必须为32字节)。
iv
: 初始向量IV(Initialization Vector),CBC模式下使用。
out
:输出缓存区,指向明文存储区域的指针。
mode
:TEE AES模式,见tee_aes_mode_e定义。
- 返回值:
tee_aes_mode_e:
名字 |
定义 |
备注 |
TEE_AES_MODE_ECB |
TEE ECB 模式 |
|
TEE_AES_MODE_CBC |
TEE CBC 模式 |
|
TEE_AES_MODE_MAX |
无效 |
csi_tee_aes_encrypt_ecb
#define csi_tee_aes_encrypt_ecb(in, in_len, key, key_len, out) \
csi_tee_aes_encrypt(in, in_len, key, key_len, NULL, out, TEE_AES_MODE_ECB)
- 功能描述:
- TEE AES ECB模式加密。长度应为块大小的倍数(16字节)调用此函数后,将更新iv的内容。
- 参数:
in
: 输入缓存区,指向纯文本缓冲区的指针。
in_len
: 输入缓存区长度。
key
:指向密钥的指针。
key_len
:密钥长度(对于aes128,必须为16字节;对于aes192,必须为24字节;对于aes256,必须为32字节)。
out
:输出缓存区,指向密文存储区域的指针。
- 返回值:
csi_tee_aes_decrypt_ecb
#define csi_tee_aes_decrypt_ecb(in, in_len, key, key_len, out) \
csi_tee_aes_decrypt(in, in_len, key, key_len, NULL, out, TEE_AES_MODE_ECB)
- 功能描述:
- TEE AES ECB模式解密。长度应为块大小的倍数(16字节)调用此函数后,将更新iv的内容。
- 参数:
in
: 输入缓存区,指向密文缓冲区的指针。
in_len
: 输入缓存区长度。
key
:指向密钥的指针。
key_len
:密钥长度(对于aes128,必须为16字节;对于aes192,必须为24字节;对于aes256,必须为32字节)。
out
:输出缓存区,指向明文存储区域的指针。
- 返回值:
csi_tee_aes_encrypt_cbc
#define csi_tee_aes_encrypt_cbc(in, in_len, key, key_len, iv, out) \
csi_tee_aes_encrypt(in, in_len, key, key_len, iv, out, TEE_AES_MODE_CBC)
- 功能描述:
- TEE AES CBC模式加密。长度应为块大小的倍数(16字节)调用此函数后,将更新iv的内容。
- 参数:
in
: 输入缓存区,指向纯文本缓冲区的指针。
in_len
: 输入缓存区长度。
key
:指向密钥的指针。
key_len
:密钥长度(对于aes128,必须为16字节;对于aes192,必须为24字节;对于aes256,必须为32字节)。
iv
: 初始向量IV(Initialization Vector)。
out
:输出缓存区,指向密文存储区域的指针。
- 返回值:
csi_tee_aes_decrypt_cbc
#define csi_tee_aes_decrypt_cbc(in, in_len, key, key_len, iv, out) \
csi_tee_aes_decrypt(in, in_len, key, key_len, iv, out, TEE_AES_MODE_CBC)
- 功能描述:
- TEE AES CBC模式解密。长度应为块大小的倍数(16字节)调用此函数后,将更新iv的内容。
- 参数:
in
: 输入缓存区,指向密文缓冲区的指针。
in_len
: 输入缓存区长度。
key
:指向密钥的指针。
key_len
:密钥长度(对于aes128,必须为16字节;对于aes192,必须为24字节;对于aes256,必须为32字节)。
iv
: 初始向量IV(Initialization Vector)。
out
:输出缓存区,指向明文存储区域的指针
- 返回值:
csi_tee_base64
int32_t csi_tee_base64(const uint8_t *in, uint32_t in_len,
uint8_t *out, uint32_t *out_len,
uint32_t is_encode,
uint32_t wsafe);
- 功能描述:
- 参数:
in
: 输入缓存区。
in_len
: 输入缓存区长度。
out
:输出缓存区。
out_len
:存储输出数据长度的地址。
is_encode
: is_encode = 1 表示编码, is_encode = 0 表示解码。
wsafe
: base64 websafe功能,设置1,用“-”替换“+/”
- 返回值:
csi_tee_base64_encode
#define csi_tee_base64_encode(in,in_len,out,out_len) \
csi_tee_base64(in,in_len,out,out_len,1,0)
- 功能描述:
- 参数:
in
: 输入缓存区。
in_len
: 输入缓存区长度。
out
:输出缓存区。
out_len
:存储输出数据长度的地址。
- 返回值:
csi_tee_base64_decode
#define csi_tee_base64_decode(in,in_len,out,out_len) \
csi_tee_base64(in,in_len,out,out_len,0,0)
- 功能描述:
- 参数:
in
: 输入缓存区。
in_len
: 输入缓存区长度。
out
:输出缓存区。
out_len
:存储输出数据长度的地址。
- 返回值:
csi_tee_base64_websafe_encode
#define csi_tee_base64_websafe_encode(in,in_len,out,out_len) \
csi_tee_base64(in,in_len,out,out_len,1,1)
- 功能描述:
- 参数:
in
: 输入缓存区。
in_len
: 输入缓存区长度。
out
:输出缓存区。
out_len
:存储输出数据长度的地址。
- 返回值:
csi_tee_base64_websafe_decode
#define csi_tee_base64_websafe_decode(in,in_len,out,out_len) \
csi_tee_base64(in,in_len,out,out_len,0,1)
- 功能描述:
- 参数:
in
: 输入缓存区。
in_len
: 输入缓存区长度。
out
:输出缓存区。
out_len
:存储输出数据长度的地址。
- 返回值:
csi_tee_get_cid
int32_t csi_tee_get_cid(uint8_t *out, uint32_t *out_len);
- 功能描述:
- 参数:
out
:输出缓存区,存储CID。
out_len
:存储输出数据长度的地址。
- 返回值:
csi_tee_enter_lpm
int32_t csi_tee_enter_lpm(uint32_t gate, uint32_t irqid, tee_lpm_mode_e mode);
- 功能描述:
- 参数:
gate
:暂不启用。
irqid
:暂不启用。
tee_lpm_mode_e
:低功耗模式,见tee_lpm_mode_e定义。
- 返回值:
tee_lpm_mode_e:
名字 |
定义 |
备注 |
TEE_LPM_MODE_WAIT |
lpm等待 |
|
TEE_LPM_MODE_DOZE |
lpm低级省电模式 |
|
TEE_LPM_MODE_STOP |
lpm停止 |
|
TEE_LPM_MODE_STANDBY |
lpm空闲 |
|
TEE_LPM_MODE_CLOCK |
lpm时钟 |
|
TEE_LPM_MODE_MAX |
无效 |
csi_tee_get_manifest_info
int32_t csi_tee_get_manifest_info(uint8_t *out, uint32_t *out_len, char *name);
- 功能描述:
- 参数:
out
:指向信息缓冲区的指针。
out_len
:若提取成功,则存储提取数据的长度。
name
: 需要获取的信息名称。
- 返回值:
csi_tee_get_sys_img_info
#define csi_tee_get_sys_img_info(out,out_len,img_name) \
csi_tee_get_manifest_info(out,out_len,img_name)
- 功能描述:
- 参数:
out
:指向镜像缓存区的指针。
out_len
:若提取成功,则存储提取数据的长度。
img_name
: 需要获的镜像名称。
- 返回值:
csi_tee_get_sys_os_version
#define csi_tee_get_sys_os_version(out,out_len) \
csi_tee_get_manifest_info(out,out_len,"os_v")
- 功能描述:
- 参数:
out
:指向系统版本存储缓冲区的指针。
out_len
:若提取成功,则存储提取数据的长度。
- 返回值:
csi_tee_get_sys_partition
#define csi_tee_get_sys_partition(out,out_len) \
csi_tee_get_manifest_info(out,out_len,"sys_p")
- 功能描述:
- 参数:
out
:存储缓冲区的指针。
out_len
:若提取成功,则存储提取数据的长度。
- 返回值:
csi_tee_rand_seed
int32_t csi_tee_rand_seed(uint32_t seed);
csi_tee_rand_generate
int32_t csi_tee_rand_generate(uint8_t *out, uint32_t out_len);
- 功能描述:
- 参数:
out
:随机日期的存储区。
out_len
:数据存储器区的长度。
- 返回值:
csi_tee_rsa_sign
int32_t csi_tee_rsa_sign(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t *sign, uint32_t *sign_len,
tee_rsa_sign_type_e type);
- 功能描述:
- 参数:
in
:指向摘要缓冲区的指针。
in_len
:摘要缓冲区长度。
key
:密钥指,指向私钥,密钥包含n, e, d。
key_len
:私钥大小,对于RSA1024必须是1283 = 384字节,对于RSA2048必须是2563 = 768字节。
sign
:签名缓存区
sign_len
:签名缓存区长度
tee_rsa_sign_type_e
:签名类型,见tee_rsa_sign_type_e定义。
- 返回值:
csi_tee_rsa_verify
int32_t csi_tee_rsa_verify(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t *sign, uint32_t sign_len,
tee_rsa_sign_type_e type);
- 功能描述:
- 参数:
in
:指向摘要缓冲区的指针。
in_len
:摘要缓冲区长度。
key
:密钥指,指向公包含n, e。
key_len
:公钥大小,对于RSA1024必须是1282 = 256字节,对于RSA2048必须是2562 = 512字节
sign
:签名缓存区
sign_len
:签名缓存区长度
tee_rsa_sign_type_e
:签名类型,见tee_rsa_sign_type_e定义。
- 返回值:
名称 |
定义 |
备注 |
TEE_RSA_MD5 |
MD5 |
|
TEE_RSA_SHA1 |
哈希1 |
|
TEE_RSA_SHA256 |
哈希256 |
|
TEE_RSA_SIGN_TYPE_MAX |
无效 |
csi_tee_rsa_encrypt
int32_t csi_tee_rsa_encrypt(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t *out, uint32_t *out_len,
tee_rsa_padding_mode_e padding);
- 功能描述:
- 参数:
in
:指向明文数据的指针。
in_len
:明文数据长度。
key
:密钥指,指向公钥包含n, e。
key_len
:公钥大小,对于RSA1024必须是1282 = 256字节,对于RSA2048必须是2562 = 512字节
out
:密文缓冲区。
out_len
:密文数据长度。
tee_rsa_padding_mode_e
:填充模式,tee_rsa_padding_mode_e定义。
- 返回值:
csi_tee_rsa_decrypt
int32_t csi_tee_rsa_decrypt(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t *out, uint32_t *out_len,
tee_rsa_padding_mode_e padding);
- 功能描述:
- 参数:
in
:指向密文数据的指针指针。
in_len
:密文数据长度。
key
:密钥指,指向私钥,包含n, e,d。
key_len
:密钥长度私钥大小,RSA1024必须为1283=384字节,RSA2048必须为2563=768字节。
out
:明文数据存储区。
out_len
:明文数据长度。
tee_rsa_padding_mode_e
:填充模式,tee_rsa_padding_mode_e定义。
- 返回值:
tee_rsa_padding_mode_e:
名称 |
定义 |
备注 |
TEE_RSA_PKCS1_PADDING |
RSA PKCS填充模式 |
|
TEE_RSA_NO_PADDING |
RSA 无填充模式 |
csi_tee_cid_rsa_sign
#define csi_tee_cid_rsa_sign(in,in_len,sign,sign_len,type) \
csi_tee_rsa_sign(in,in_len,NULL,0,sign,sign_len,type)
- 功能描述:
- TEE RSA 使用内部私钥签名。(仅在密钥设置存在时使用)
- 参数:
in
:指向摘要缓冲区的指针。
in_len
:摘要缓冲区长度。
sign
:签名缓存区
sign_len
:签名缓存区长度
tee_rsa_sign_type_e
:签名类型,见tee_rsa_sign_type_e定义。
- 返回值:
csi_tee_rsa_sign
#define csi_tee_cid_rsa_verify(in,in_len,sign,sign_len,type) \
csi_tee_rsa_verify(in,in_len,NULL,0,sign,sign_len,type)
- 功能描述:
- TEE RSA使用内部公钥验证。(仅在密钥设置存在时使用)
- 参数:
in
:指向摘要缓冲区的指针。
in_len
:摘要缓冲区长度。
sign
:签名缓存区
sign_len
:签名缓存区长度
tee_rsa_sign_type_e
:签名类型,见tee_rsa_sign_type_e定义。
- 返回值:
csi_tee_cid_rsa_encrypt
#define csi_tee_cid_rsa_encrypt(in,in_len,out,out_len,padding) \
csi_tee_rsa_encrypt(in,in_len,NULL,0,out,out_len,padding)
- 功能描述:
- TEE RSA使用内部公钥加密。(仅在密钥设置存在时使用)
- 参数:
in
:指向明文数据的指针。
in_len
:明文数据长度。
out
:密文缓冲区。
out_len
:密文数据长度。
tee_rsa_padding_mode_e
:填充模式,tee_rsa_padding_mode_e定义。
- 返回值:
csi_tee_cid_rsa_decrypt
#define csi_tee_cid_rsa_decrypt(in,in_len,out,out_len,padding) \
csi_tee_rsa_decrypt(in,in_len,NULL,0,out,out_len,padding)
- 功能描述:
- 参数:
in
:指向密文数据的指针指针。
in_len
:密文数据长度。
out
:明文数据存储区。
out_len
:明文数据长度。
tee_rsa_padding_mode_e
:填充模式,tee_rsa_padding_mode_e定义。
- 返回值:
csi_tee_img_rsa_verify
int32_t csi_tee_img_rsa_verify(const uint8_t *in, uint32_t in_len,
uint8_t *sign, uint32_t sign_len,
tee_rsa_sign_type_e type);
- 功能描述:
- 参数:
in
:指向摘要缓冲区的指针。
in_len
:摘要缓冲区长度。
sign
:签名缓存区
sign_len
:签名缓存区长度
tee_rsa_sign_type_e
:签名类型,见tee_rsa_sign_type_e定义。
- 返回值:
csi_tee_hmac
int32_t csi_tee_hmac(const uint8_t *in, uint32_t in_len,
const uint8_t *key, uint32_t key_len,
uint8_t *out,
tee_hmac_type_e type,
tee_hash_op_e hash_op,
uint32_t *ctx);
- 功能描述:
- 参数:
in
:指向输入数据存储区。
in_len
:输入数据长度。
key
:密钥存储区。
key_len
:密钥长度。
out
:输出数据存储区
type
:见tee_hmac_type_e定义。
hash_op
:hash操作,见tee_hash_op_e定义。
- ctx:指向hmac上下文的指针
- 返回值:
csi_tee_hmac_digest
#define csi_tee_hmac_digest(in,in_len,key,key_len,out,type) \
csi_tee_hmac(in,in_len,key,key_len,out,type,TEE_HASH_OP_NONE,NULL)
- 功能描述:
- 参数:
in
:指向输入数据存储区。
in_len
:输入数据长度。
key
:密钥存储区。
key_len
:密钥长度。
out
:输出数据存储区
type
:见Tee_hmac_type_e定义。
- 返回值:
tee_hmac_type_e:
名称 |
定义 |
备注 |
TEE_HMAC_SHA1 = 1, ///< |
HMAC with SHA1 |
tee_hash_op_e:
名称 |
定义 |
备注 |
TEE_HASH_OP_NONE |
无操作 |
|
TEE_HASH_OP_START |
hash 初始化 |
|
TEE_HASH_OP_UPDATA |
hash 更新 |
|
TEE_HASH_OP_FINISH |
hash 结束 |
|
TEE_HASH_OP_MAX |
无效 |
csi_tee_sha
int32_t csi_tee_sha(const uint8_t *in, uint32_t in_len,
uint8_t *out,
tee_sha_type_t type,
tee_hash_op_e hash_op,
void *ctx);
- 功能描述:
- TEE SHA,调用csi_tee_sha_digest、csi_tee_sha_start、csi_tee_sha_update或csi_tee_sha_finish优于使用csi_tee_sha。根据类型,需要设置足够大的缓存区,例如TEE_SHA1是20字节,TEE_SHA256是32字节。
- 参数:
in
:指向输入数据存储区。
in_len
:输入数据长度。
out
:数据输出缓存区
type
:见tee_hmac_type_e]定义。
hash_op
:hash操作,见tee_hash_op_e定义。
- ctx:指向sha上下文的指针
- 返回值:
csi_tee_sha_digest
#define csi_tee_sha_digest(in,in_len,out,type) \
csi_tee_sha(in,in_len,out,type,TEE_HASH_OP_NONE,NULL);
- 功能描述:
- 参数:
in
:指向输入数据存储区。
in_len
:输入数据长度。
out
:数据输出缓存区
type
:见tee_hmac_type_e定义。
- ctx:指向sha上下文的指针
- 返回值:
csi_tee_sha_start
#define csi_tee_sha_start(type,ctx) \
csi_tee_sha(NULL,0,NULL,type,TEE_HASH_OP_START,ctx);
- 功能描述:
- 参数:
type
:见tee_hmac_type_e定义。
- ctx:指向sha上下文的指针
- 返回值:
csi_tee_sha_update
#define csi_tee_sha_update(in,in_len,ctx) \
csi_tee_sha(in,in_len,NULL,0,TEE_HASH_OP_UPDATA,ctx);
- 功能描述:
- 参数:
in
:指向输入数据存储区。
in_len
:输入数据长度。
- ctx:指向sha上下文的指针
- 返回值:
csi_tee_sha_finish
#define csi_tee_sha_finish(out,ctx) \
csi_tee_sha(NULL,0,out,0,TEE_HASH_OP_FINISH,ctx);
- 功能描述:
- 参数:
out
:数据输出缓存区
- ctx:指向sha上下文的指针
- 返回值:
csi_tee_dev_info_get
int32_t csi_tee_dev_info_get(const uint8_t *name_encrypted, uint32_t name_encrypted_len,
const uint8_t *product_key_encrypted,
uint32_t product_key_encrypted_len,
const uint8_t *name, uint32_t *name_len,
const uint8_t *product_key, uint32_t *product_key_len);
- 功能描述:
- 参数:
name_encrypted
:指向设备名称密文
- name_encrypted_len:设备名称密文长度
product_key_encrypted
:指向设备产品密钥密文
- product_key_encrypted_len:设备产品密钥密文长度
name
:设备名称存储区
- name_len:设备名称长度
product_key
:产品密钥
- product_key_len:产品密钥长度
- 返回值:
csi_tee_dev_info_sign
int32_t csi_tee_dev_info_sign(const uint8_t *in, uint32_t in_len,
const uint8_t *device_secret, uint32_t device_secret_len,
const uint8_t *sign, uint32_t *sign_len);
- 功能描述:
- 参数:
in
:输入数据
in_len
:输入数据长度
device_secret
:设备密文
device_secret_len
:设备密文长度
sign
: 签名缓存区
sign_len
:签名长度
- 返回值:
csi_tee_dev_info_crypt
int32_t csi_tee_dev_info_crypt(const uint8_t *in, uint32_t in_len,
uint8_t *out, uint32_t *out_len,
uint8_t is_enc);
- 功能描述:
- 参数:
in
:输入数据。
in_len
:输入数据长度。
out
:输出数据。
out_len
:输出数据长度。
is_enc
: 1加密,0解密。
- 返回值:
csi_tee_dev_info_crypt
#define csi_tee_dev_info_encrypt(in, in_len, out, out_len) \
csi_tee_dev_info_crypt(in, in_len, out, out_len, 1)
- 功能描述:
- 参数:
in
:输入数据。
in_len
:输入数据长度。
out
:输出数据。
out_len
:输出数据长度。
- 返回值:
csi_tee_dev_info_decrypt
#define csi_tee_dev_info_decrypt(in, in_len, out, out_len) \
csi_tee_dev_info_crypt(in, in_len, out, out_len, 0)
- 功能描述:
- 参数:
in
:输入数据。
in_len
:输入数据长度。
out
:输出数据。
out_len
:输出数据长度。
- 返回值:
csi_tee_set_sys_freq
int32_t csi_tee_set_sys_freq(uint32_t clk_src, uint32_t clk_val)
- 功能描述:
- 参数:
clk_src
: 时钟源。
clk_val
:系统时钟频率。
- 返回值:
csi_tee_get_sys_freq
int32_t csi_tee_get_sys_freq(uint32_t *clk_val);
csi_tee_read_reg
int32_t csi_tee_read_reg(uint32_t addr, uint32_t *val);
csi_tee_write_reg
int32_t csi_tee_write_reg(uint32_t addr, uint32_t val);