C++ Arguments to SGX Enclave Edge Functions

巧了我就是萌 提交于 2019-11-30 09:43:06

问题


I'm trying to write a simple SGX enclave that takes in a vector of booleans, but apparently edger8r creates c code; so the edl code

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 {
  };
};

produces a compile error (Amusingly, the Intel compiler reports it under the title "catastrophic error") saying header vector can't be found.

It seems to me that the problem can be solved just by compiling the output edge code with a c++ flag. Would that work? Even if so, is there a cleaner way to do this (i.e. having edge functions with C++ standard-typed parameters)?

PS: I don't have enough rep to add a new tag, would anyone tag this with 'edger8r'? It'll be helpful I think.


回答1:


#include is incorrect EDL syntax. No need for hash - include

Arguments in ecalls and ocalls have to be C type - so, vector and bool are not supported.

For vector you need to convert it into C type (maybe create a struct or void pointer), then pass a pointer with its length.

For bool, I guess, better to pass an int to represent a Boolean value.

You also have to specify special attribute for pointers:

  • [in] - if you want to copy it into enclave (you also need to specify its length) (aka pass by value)
  • [out] - if you want to copy back from enclave
  • [user_check] - the easiest option - you just pass a pointer and enclave will read from and write to untrusted memory. (aka pass by pointer)

Do not forget to cast arguments back into C++ types!



来源:https://stackoverflow.com/questions/41901884/c-arguments-to-sgx-enclave-edge-functions

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!