---
title: API简介
description: "- kunpengsecl开源库已实现了远程证明的整体流程，用户可直接使用该库熟悉远程证明的整体流程和组件。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/trustzone/fg/kunpengtrustzone_20_0023.html
sourcePath: /source/zh/kunpengcctrustzone/trustzone/fg/kunpengtrustzone_20_0023.html
indexId: 25aab6b5ce5cf03d72bdcec7a33293ffbb970bdc4ce24bb5f583f3b48f1df46872
---
# API简介

- kunpengsecl开源库已实现了远程证明的整体流程，用户可直接使用该库熟悉远程证明的整体流程和组件。
- 若有深度定制化需求，可通过如下介绍以及《iTrustee SDK开发者手册》了解底层开放的接口。《iTrustee SDK开发者手册》需向华为业务负责人申请获取。


为了实现远程证明，TEE OS底层对外提供两种类型的接口，一种是给特权QTA提供的特权级接口（Quoting System Interface, QSI），另一种是给其他TA提供的非特权级接口（Quoting Application Interface, QAI），其中TA调用QTA提供的接口，可以通过TA调用TA的方式实现。目前，特权级接口QSI共有1个，非特权级接口QAI共有3个。另外，QCA lib和QTA已封装好对TEE OS底层的接口调用，用户可使用QCA lib提供的接口完成TEE OS底层接口调用。以下为API的简单介绍。

#### TEE侧特权接口

```
struct ra_buffer_data {
    uint32_t length;
    uint8_t *buffer;
};
TEE_Result ra_qsi_invoke(struct ra_buffer_data *in, struct ra_buffer_data *out);
```

该接口只能由QTA调用，入参与出参的buffer都为格式化的json字符串。json的结构体大致如下，详情可参考《iTrustee SDK开发者手册》。

```
{
    "handler": "xxxxx",
    "payload": {....}
}
```

通过handler的值可实现如下操作：

- Provision：生成AK密钥和AK证书，获取度量报告前需先执行此操作。入参的payload中可指定远程证明的场景。无AS场景下无出参，有AS场景下，出参的payload中包含QTA的度量、随机生成的AK公钥，还包括设备证书对payload的签名。
- SaveAKCert：在有AS场景下需要调用此接口保存AS回的证书。入参中包含AS返回的证书，无DAA（Direct Anonymous Attestation）场景时无出参，有DAA场景时返回随机化后的AK证书。
- ValidateAKCert：仅在有AS且有DAA模式下，调用SaveAKCert返回随机化的AK证书后，调用此接口验证AK证书并保存原证书。
- Report：获取度量报告。入参包括待度量的TA的uuid，出参包括待度量TA的基准度量等信息。


#### TEE侧非特权接口

```
// 获取度量报告，入参出参和特权接口获取度量报告时一致。
TEE_Result ra_local_report(struct ra_buffer_data *in, struct ra_buffer_data *out);
# 该接口与TA的度量值绑定，生成随机Key，对data进行加密和解密，只有该TA且度量值未变时，才能解密之前加密的数据
TEE_Result ra_seal(uint8_t *data, size_t in_size, uint8_t *cipher_data, size_t *cipher_size, uint32_t alg);
TEE_Result ra_unseal(uint8_t *cipher_data, size_t cipher_size, uint8_t *data, size_t *out_size, uint32_t alg);
```

该接口可由任意非特权TA调用。


#### REE侧接口

为方便用户迅速开发远程证明应用，QCA lib/QTA已对TEE OS底层接口调用完成了封装，用户只需在开发REE侧的应用，即可完成接口调用。

```
TEEC_Result RemoteAttest(struct ra_buffer_data *in, struct ra_buffer_data *out);
TEEC_Result RegisterContainer(struct ra_buffer_data *container_info, TEEC_Context *context, TEEC_Session *session, uint32_t *origin);
```

- RemoteAttest：对ra_qsi_invoke接口的封装，入参同ra_qsi_invoke的入参，为序列化的json字符串。
- RegisterContainer：从1.4.0起，为支持容器内远程证明，host上的QCA lib新增的接口，container_info为序列化的json结构体。
  1 2 3 4 { "container_id": "容器id", "nsid": "容器nsid" }


libqca-report和QTA-report完成了容器内TEE OS接口调用的封装。libqca-report只有RemoteAttest接口，并只能用于获取报告。若是容器调用libqca-report，其输入json结构体中需要增加如下容器信息。

```
{
    ......
    "payload": {
        .....
        "container_info": {
            "id": "容器id",
            "type": "容器类型"
        }
    }
}
```
