enclave { include "stdbool.h" include "sgx_tcrypto.h" include "sgx_tseal.h" include "../Enclave/enclave_api.h" from "sgx_pthread.edl" import *; from "sgx_tstdc.edl" import sgx_thread_wait_untrusted_event_ocall, sgx_thread_set_untrusted_event_ocall, sgx_thread_setwait_untrusted_events_ocall, sgx_thread_set_multiple_untrusted_events_ocall; trusted { public void ecall_identity_key_new( [out] sgx_ec256_public_t *outpub, [out,size=610] sgx_sealed_data_t *outsealedpriv); public bool ecall_identity_key_load( [out] sgx_ec256_public_t *outpub, [in,size=610] const sgx_sealed_data_t *insealedpriv); public bool ecall_config_load( threadid_t nthreads, [in] struct EnclaveAPIParams *apiparams, [in,count=num_nodes] struct EnclaveAPINodeConfig *apinodeconfigs, nodenum_t num_nodes, nodenum_t my_node_num); public void ecall_close(); public bool ecall_comms_start( [user_check]void *cbpointer); public bool ecall_message( nodenum_t node_num, uint32_t message_len); public bool ecall_chunk( nodenum_t node_num, [user_check] const uint8_t *chunkdata, uint32_t chunklen); public size_t ecall_precompute_sort(int sizeidx); public bool ecall_ingest_raw( [user_check] uint8_t *msgs, uint32_t num_msgs); public void ecall_routing_proceed( [user_check]void *cbpointer); public bool ecall_ingest_msgbundle(clientid_t cid, [user_check] uint8_t *msgbundle, uint32_t num_msgs); public bool ecall_ingestion_authenticate(clientid_t cid, [user_check] uint8_t *auth_string); public bool ecall_storage_authenticate(clientid_t cid, [user_check] uint8_t *auth_string); public void ecall_supply_storage_buffers( [user_check] unsigned char *mailboxes, uint32_t mailboxes_size, [user_check] unsigned char *tokens, uint32_t tokens_size); }; untrusted { void ocall_print_string( [in, string] const char *str); unsigned long ocall_print_string_with_rtclock( [in, string] const char *str); unsigned long ocall_print_string_with_rtclock_diff( [in, string] const char *str, unsigned long before); uint8_t *ocall_message( nodenum_t node_num, uint32_t message_len); uint8_t *ocall_chunk( nodenum_t node_num, [user_check] uint8_t *chunkdata, uint32_t chunklen); void ocall_comms_ready( [user_check] void *cbpointer); void ocall_routing_round_complete( [user_check] void *cbpointer, uint32_t round_num); }; };