#include "UtilityFunctions.h" using namespace util; void SafeFree(void *ptr) { if (NULL != ptr) { free(ptr); ptr = NULL; } } string GetRandomString() { string str = lexical_cast((random_generator())()); str.erase(remove(str.begin(), str.end(), '-'), str.end()); return str; } string ByteArrayToString(const uint8_t *arr, int size) { ostringstream convert; for (int a = 0; a < size; a++) { convert << setfill('0') << setw(2) << hex << (unsigned int)arr[a]; } return convert.str(); } string ByteArrayToStringNoFill(const uint8_t *arr, int size) { ostringstream convert; for (int a = 0; a < size; a++) { convert << hex << (int)arr[a]; } return convert.str(); } int HexStringToByteArray(string str, uint8_t **arr) { vector bytes; for (unsigned int i=0; i vec(str.begin(), str.end()); *arr = (uint8_t*) malloc(sizeof(uint8_t) * vec.size()); copy(vec.begin(), vec.end(), *arr); return vec.size(); } string ByteArrayToNoHexString(const uint8_t *arr, int size) { std::ostringstream convert; for (int a = 0; a < size; a++) { convert << (uint8_t)arr[a]; } return convert.str(); } string UIntToString(uint32_t *arr, int size) { stringstream ss; for (int i=0; i(t)), istreambuf_iterator()); *content = (char*) malloc(sizeof(char) * (str.size()+1)); memset(*content, '\0', (str.size()+1)); str.copy(*content, str.size()); return str.size(); } int ReadFileToBuffer(string filePath, uint8_t **content) { ifstream file(filePath, ios::binary | ios::ate); streamsize file_size = file.tellg(); file.seekg(0, ios::beg); std::vector buffer(file_size); if (file.read(buffer.data(), file_size)) { string str(buffer.begin(), buffer.end()); vector vec(str.begin(), str.end()); *content = (uint8_t*) malloc(sizeof(uint8_t) * vec.size()); copy(vec.begin(), vec.end(), *content); return str.length(); } return -1; } int RemoveFile(string filePath) { if (remove(filePath.c_str()) != 0 ) { Log("Error deleting file: " + filePath); return 1; } else Log("File deleted successfully: " + filePath); return 0; } static sgx_errlist_t sgx_errlist[] = { { SGX_ERROR_UNEXPECTED, "Unexpected error occurred.", NULL }, { SGX_ERROR_INVALID_PARAMETER, "Invalid parameter.", NULL }, { SGX_ERROR_OUT_OF_MEMORY, "Out of memory.", NULL }, { SGX_ERROR_ENCLAVE_LOST, "Power transition occurred.", "Please refer to the sample \"PowerTransition\" for details." }, { SGX_ERROR_INVALID_ENCLAVE, "Invalid enclave image.", NULL }, { SGX_ERROR_INVALID_ENCLAVE_ID, "Invalid enclave identification.", NULL }, { SGX_ERROR_INVALID_SIGNATURE, "Invalid enclave signature.", NULL }, { SGX_ERROR_OUT_OF_EPC, "Out of EPC memory.", NULL }, { SGX_ERROR_NO_DEVICE, "Invalid SGX device.", "Please make sure SGX module is enabled in the BIOS, and install SGX driver afterwards." }, { SGX_ERROR_MEMORY_MAP_CONFLICT, "Memory map conflicted.", NULL }, { SGX_ERROR_INVALID_METADATA, "Invalid enclave metadata.", NULL }, { SGX_ERROR_DEVICE_BUSY, "SGX device was busy.", NULL }, { SGX_ERROR_INVALID_VERSION, "Enclave version was invalid.", NULL }, { SGX_ERROR_INVALID_ATTRIBUTE, "Enclave was not authorized.", NULL }, { SGX_ERROR_ENCLAVE_FILE_ACCESS, "Can't open enclave file.", NULL }, { SGX_ERROR_MODE_INCOMPATIBLE, "Target enclave mode is incompatible with the mode of the current RTS", NULL }, { SGX_ERROR_SERVICE_UNAVAILABLE, "sgx_create_enclave() needs the AE service to get a launch token", NULL }, { SGX_ERROR_SERVICE_TIMEOUT, "The request to the AE service timed out", NULL }, { SGX_ERROR_SERVICE_INVALID_PRIVILEGE, "The request requires some special attributes for the enclave, but is not privileged", NULL }, { SGX_ERROR_NDEBUG_ENCLAVE, "The enclave is signed as a product enclave and cannot be created as a debuggable enclave", NULL }, { SGX_ERROR_UNDEFINED_SYMBOL, "The enclave contains an import table", NULL }, { SGX_ERROR_INVALID_MISC, "The MiscSelct/MiscMask settings are not correct", NULL }, { SGX_ERROR_MAC_MISMATCH, "The input MAC does not match the MAC calculated", NULL } }; void print_error_message(sgx_status_t ret) { size_t idx = 0; size_t ttl = sizeof(sgx_errlist)/sizeof (sgx_errlist[0]); for (idx = 0; idx < ttl; idx++) { if (ret == sgx_errlist[idx].err) { if (NULL != sgx_errlist[idx].sug) Log("%s", sgx_errlist[idx].sug); Log("%s", sgx_errlist[idx].msg); break; } } if (idx == ttl) Log("Unexpected error occurred"); } string Base64decode(const string val) { return base64_decode(val); } string Base64encodeUint8(uint8_t *val, uint32_t len) { return base64_encode(val, len); }