接口说明

secGear 机密计算统一编程框架分为安全侧和非安全侧,这里给出用户开发应用程序所需的接口。除这些接口外,安全侧还继承了 ARM TrustZone 和 Intel SGX 的开源 POSIC 接口。

cc_enclave_create

创建 enclave 接口

功能

初始化接口,函数根据不同 type,调用不同的 TEE 创建函数,完成不同 TEE 方案关于 enclave 上下文初始化,由非安全侧调用

函数声明:

cc_enclave_result_t cc_enclave_create(const char* path, enclave_type_t type, uint32_t version,uint32_t flags,const enclave_features_t* features,uint32_t features_count, cc_enclave_t ** enclave);

参数:

  • Path:入参,要加载的 enclave 路径
  • Type:入参,用来指定 TEE 解决方案, 如 SGX_ENCLAVE_TYPE、GP_ENCLAVE_TYPE、AUTO_ENCLAVE_TYPE
  • version:入参,指定的 enclave engine 的版本,目前只有一个版本,取值为 0。
  • Flags:入参,标志位,说明这个 enclave 运行状态,例如调试状态 SECGEAR_DEBUG_FLAG、模拟状态 SECGEAR_SIMULATE_FLAG(目前不支持)
  • features:入参,用于设置一些关于 enclave 支持的特性,例如 SGX 的 PCL、 switchless 等。目前不支持,请设置为 NULL
  • features_count:入参,入参 features 特性结构体的数量。目前不支持,请设置为 0
  • enclave:出参,创建的 enclave 上下文

返回值:

  • CE_SUCCESS:认证信息验证成功
  • CE_ERROR_INVALID_PARAMETER:输入参数有误
  • CE_ERROR_OUT_OF_MEMORY:无可用内存
  • CC_FAIL:通用错误
  • CC_ERROR_UNEXPECTED:不可预期错误
  • CC_ERROR_ENCLAVE_MAXIMUM:单个 app 创建的 enclave 数量达到最
  • CC_ERROR_INVALID_PATH:安全二进制路径无效
  • CC_ERROR_NO_FIND_REGFUNC:enclave 引擎搜索失败

cc_enclave_destroy

销毁 enclave 接口

功能

调用不同 TEE 的退出函数,释放已经创建的 enclave 实体,由非安全侧调用

函数声明:

cc_enclave_result_t cc_enclave_destroy (cc_enclave_t ** enclave);

参数:

  • enclave:入参,已经创建 enclave 的上下文

返回值:

  • CE_SUCCESS:认证信息验证成功
  • CE_ERROR_INVALID_PARAMETER:输入参数有误
  • CE_ERROR_OUT_OF_MEMORY:无可用内存
  • CC_ERROR_NO_FIND_UNREGFUNC:enclave引擎搜索失败
  • CC_FAIL:通用错误
  • CC_ERROR_UNEXPECTED:不可预期错误

cc_enclave_generate_random

随机数生成

功能

用于在安全侧生成密码安全的随机数

函数声明:

cc_enclave_result_t cc_enclave_generate_random(void *buffer, size_t size)

参数:

  • *buffer:入参,生成随机数的缓冲区
  • size:入参,缓冲区的长度

返回值:

  • CE_OK:认证信息验证成功
  • CE_ERROR_INVALID_PARAMETER:输入参数有误
  • CE_ERROR_OUT_OF_MEMORY:无可用内存

cc_enclave_seal_data

数据持久化

功能

用于加密 enclave 内部数据,使数据可以在 enclave 外部持久化存储,由安全侧调用

函数声明:

cc_enclave_result_t cc_enclave_seal_data(uint8_t *seal_data, uint32_t seal_data_len,

​ cc_enclave_sealed_data_t *sealed_data, uint32_t sealed_data_len,

​ uint8_t *additional_text, uint32_t additional_text_len)

参数:

  • seal_data:入参,需要加密的数据
  • seal_data_len:入参,需要加密数据的长度
  • sealed_data:出参,加密后的数据处理句柄
  • sealed_data_len:出参,加密后的密文长度
  • additional_text:入参,加密所需的附加消息
  • additional_text_len:入参,附加消息长度

返回值:

  • CE_SUCCESS:数据加密成功
  • CE_ERROR_INVALID_PARAMETER:输入参数有误
  • CE_ERROR_OUT_OF_MEMORY:无可用内存
  • CC_ERROR_SHORT_BUFFER:传入的buffer过小
  • CC_ERROR_GENERIC:底层硬件通用错误

cc_enclave_unseal_data

数据解密

功能

用于解密 enclave 密封过的数据,用于将外部持久化数据重新导回 enclave 环境中,由安全侧调用

函数声明:

cc_enclave_result_t cc_enclave_unseal_data(cc_enclave_sealed_data_t *sealed_data,

uint8_t *decrypted_data, uint32_t *decrypted_data_len,

uint8_t *additional_text, uint32_t *additional_text_len)

参数:

  • sealed_data:入参,已加密数据的句柄
  • decrypted_data:出参,解密之后的密文数据buffer
  • decrypted_data_len:出参,解密后密文长度
  • additional_text:出参,解密后附加消息
  • additional_text_len:出参,解密后附加消息长度

返回值:

  • CE_SUCCESS:数据解密成功
  • CE_ERROR_INVALID_PARAMETER:输入参数有误
  • CE_ERROR_OUT_OF_MEMORY:无可用内存
  • CC_ERROR_SHORT_BUFFER:传入的buffer过小
  • CC_ERROR_GENERIC:底层硬件通用错误

cc_enclave_get_sealed_data_size

获取加密数据的大小

功能

用于 sealed_data 数据的大小,主要用于分配解密后的数据空间,由安全侧与非安全侧皆可调用

函数声明:

uint32_t cc_enclave_get_sealed_data_size(const uint32_t add_len, const uint32_t seal_data_len);

参数:

  • add_len:入参,附加消息长度
  • sealed_data_len:入参,加密信息的长度

返回值:

  • UINT32_MAX:参数错误或函数执行错误
  • others:函数执行成功,返回值为当前 sealed_data 结构的大小

cc_enclave_get_encrypted_text_size

获取加密消息的长度

功能

获取加密数数据中加密消息的长度,由安全侧调用

函数声明:

uint32_t cc_enclave_get_encrypted_text_size(const cc_enclave_sealed_data_t *sealed_data);

参数:

  • sealed_data:入参,加密数据的句柄

返回值:

  • UINT32_MAX:参数错误或函数执行错误
  • others:函数执行成功,返回值为当前 sealed_data 中加密消息的长度

cc_enclave_get_add_text_size

获取附加消息的长度

功能

获取加密数数据中附加消息的长度,由安全侧调用

函数声明:

uint32_t cc_enclave_get_add_text_size(const cc_enclave_sealed_data_t *sealed_data);

参数:

  • sealed_data:入参,加密数据的句柄

返回值:

  • UINT32_MAX:参数错误或函数执行错误
  • others:函数执行成功,返回值为当前sealed_data中附加消息的长度

cc_enclave_memory_in_enclave

安全内存检查。当前,本接口只支持Intel SGX调用,不支持iTrustee调用,在iTrustee架构下,用户的安全进程 无法对非安全侧内存地址进行写入,因此用户编写安全程序时不需要调用此接口进行检查。

功能

用于校验指定长度的内存地址是否都属于安全侧内存,由安全侧调用

函数声明:

bool cc_enclave_memory_in_enclave(const void *addr, size_t size)

参数:

  • *addr:入参,指定需要校验的内存地址
  • size:入参,自内存地址起需要校验的长度

返回值:

  • true:指定区域内存都在安全区范围内
  • false:指定区域的内存有部分或者全部不在安全范围内

cc_enclave_memory_out_enclave

安全内存检查。当前,本接口只支持Intel SGX调用,不支持iTrustee调用,在iTrustee架构下,用户的安全进程 无法对非安全侧内存地址进行写入,因此用户编写安全程序时不需要调用此接口进行检查。

功能

用于校验指定长度的内存地址是否都属于非安全侧内存,由安全侧调用

函数声明:

bool cc_enclave_memory_out_enclave(const void *addr, size_t size)

参数:

  • *addr:入参,指定需要校验的内存地址
  • size:入参,自内存地址起需要校验的长度

返回值:

  • true:指定区域内存都在非安全区
  • false:指定区域的内存有部分或者全部在安全区

PrintInfo

消息打印

功能

用于安全侧日志的打印,本接口输出安全侧用户想打印的信息,输入日志保存在非安全侧/var/log/secgear/secgear.log中

函数声明:

void PrintInfo(int level, const char *fmt, …);

参数:

  • level:入参,日志打印等级,可选项为PRINT_ERROR, PRINT_WARNING, PRINT_STRACE, PRINT_DEBUG
  • fmt: 入参,需要输出的字符创

返回值:

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。