5#if !defined(PLATFORM_VIRTUAL) && !defined(PLATFORM_SNP)
6# error Should only be included in cchost builds with virtual support
19 void* virtual_enclave_handle,
const char* func_name)
21 if (virtual_enclave_handle ==
nullptr)
23 throw std::logic_error(
24 "Cannot find symbol - library was not loaded correctly");
27 void* sym = dlsym(virtual_enclave_handle, func_name);
30 throw std::logic_error(
31 fmt::format(
"Failed to find symbol: {}\n {}", func_name, dlerror()));
52# define oe_result_str(x) x
61 const uint8_t* input_buffer,
62 size_t input_buffer_size,
63 uint8_t* output_buffer,
64 size_t output_buffer_size,
65 size_t* output_bytes_written);
72 auto virtual_enclave_handle = dlopen(
75#
if defined(__has_feature)
76#
if __has_feature(address_sanitizer)
83 if (virtual_enclave_handle ==
nullptr)
85 throw std::logic_error(
86 fmt::format(
"Could not load virtual enclave: {}", dlerror()));
88 return virtual_enclave_handle;
93 auto err = dlclose(handle);
96 LOG_FAIL_FMT(
"Error while terminating virtual enclave: {}", dlerror());
101 void* virtual_enclave_handle,
103 void* enclave_config,
105 size_t ccf_config_size,
106 uint8_t* startup_snapshot,
107 size_t startup_snapshot_size,
109 size_t node_cert_size,
110 size_t* node_cert_len,
111 uint8_t* service_cert,
112 size_t service_cert_size,
113 size_t* service_cert_len,
114 uint8_t* enclave_version,
115 size_t enclave_version_size,
116 size_t* enclave_version_len,
119 size_t num_worker_thread,
142 static create_node_func_t create_node_func =
143 get_enclave_exported_function<create_node_func_t>(
144 virtual_enclave_handle,
"enclave_create_node");
146 *status = create_node_func(
151 startup_snapshot_size,
159 enclave_version_size,
181 using run_func_t = bool (*)();
183 static run_func_t run_func = get_enclave_exported_function<run_func_t>(
184 virtual_enclave_handle,
"enclave_run");
186 *_retval = run_func();
CreateNodeStatus
Definition enclave_interface_types.h:8
@ OEAttesterInitFailed
Definition enclave_interface_types.h:34
@ OEVerifierInitFailed
Definition enclave_interface_types.h:31
@ MemoryNotOutsideEnclave
Definition enclave_interface_types.h:25
@ EnclaveInitFailed
Definition enclave_interface_types.h:28
StartType
Definition enclave_interface_types.h:113
#define LOG_FAIL_FMT
Definition logger.h:396
LoggerLevel
Definition logger_level.h:6
void terminate_virtual_enclave(void *handle)
Definition virtual_enclave.h:91
void * load_virtual_enclave(const char *path)
Definition virtual_enclave.h:70
void oe_enclave_t
Definition virtual_enclave.h:44
void(* oe_ocall_func_t)(const uint8_t *input_buffer, size_t input_buffer_size, uint8_t *output_buffer, size_t output_buffer_size, size_t *output_bytes_written)
Definition virtual_enclave.h:60
oe_result_t virtual_run(void *virtual_enclave_handle, bool *_retval)
Definition virtual_enclave.h:179
oe_enclave_type_t
Definition virtual_enclave.h:48
@ OE_ENCLAVE_TYPE_SGX
Definition virtual_enclave.h:49
size_t oe_log_level_t
Definition virtual_enclave.h:45
oe_result_t virtual_create_node(void *virtual_enclave_handle, CreateNodeStatus *status, void *enclave_config, uint8_t *ccf_config, size_t ccf_config_size, uint8_t *startup_snapshot, size_t startup_snapshot_size, uint8_t *node_cert, size_t node_cert_size, size_t *node_cert_len, uint8_t *service_cert, size_t service_cert_size, size_t *service_cert_len, uint8_t *enclave_version, size_t enclave_version_size, size_t *enclave_version_len, StartType start_type, LoggerLevel enclave_log_level, size_t num_worker_thread, void *time_location)
Definition virtual_enclave.h:100
T get_enclave_exported_function(void *virtual_enclave_handle, const char *func_name)
Definition virtual_enclave.h:18
constexpr oe_result_t OE_OK
Definition virtual_enclave.h:41
int oe_result_t
Definition virtual_enclave.h:40
constexpr oe_result_t OE_FAILURE
Definition virtual_enclave.h:42