c++stlsgxenclave

C++ Arguments to SGX Enclave Edge Functions


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.


Solution

  • #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:

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