C++ SGX 安全区边缘函数的参数

C++ Arguments to SGX Enclave Edge Functions

本文关键字:参数 函数 边缘 SGX 安全区 C++      更新时间:2023-10-16

我正在尝试编写一个简单的SGX飞地,它接受布尔向量,但显然edger8r创建了c代码;所以edl代码

enclave{
  from "sgx_tstdc.edl" import *;
  include "BetaDist.h"
  include <vector>
  trusted {
         BetaDist Estimate(std::vector<bool> X, double max_z, double max_delta); 
  };
  untrusted {
  };
};

产生编译错误(有趣的是,英特尔编译器以"灾难性错误"的标题报告它),指出找不到标头vector

在我看来,只需使用 c++ 标志编译输出边缘代码即可解决问题。这样行得通吗?即使是这样,有没有更干净的方法来做到这一点(即具有C++标准类型参数的边缘函数)?

PS:我没有足够的代表来添加新标签,有人会用"edger8r"标记它吗?我认为这会有所帮助。

#include是不正确的EDL语法。无需哈希 - include

ecalls 和 ocall 中的参数必须是 C 类型 - 因此不支持 vectorbool

对于vector,您需要将其转换为 C 类型(可能创建一个结构或 void 指针),然后传递一个带有其长度的指针。

对于bool,我想,最好传递一个int来表示布尔值。

您还必须为指针指定特殊属性:

  • [in] - 如果要将其复制到安全区(您还需要指定其长度)(也称为按值传递)
  • [out] - 如果要从安全区复制回来
  • [user_check] - 最简单的选择 - 您只需传递一个指针,安全区将读取和写入不受信任的内存。(又名通过指针)

不要忘记将参数重新转换为C++类型!