diff --git a/wallfacer/verify/enclave/host/CMakeLists.txt b/wallfacer/verify/enclave/host/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..bc27339716691013547f65db95842145e9e44c73 --- /dev/null +++ b/wallfacer/verify/enclave/host/CMakeLists.txt @@ -0,0 +1,88 @@ +# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. +# secGear is licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. + +#set auto code prefix +set(PREFIX enclave) +#set host exec name +set(OUTPUT secgear_enclave) +#set host src code +set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) + +set(CMAKE_CXX_STANDARD 11) + +#set auto code +if(CC_GP) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.c ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_args.h) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --untrusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/gp) +endif() + +if(CC_SGX) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.c) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --untrusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/sgx --search-path ${SGXSDK}/include) +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O2 -fPIE") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s") + +if(CC_GP) + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${SECGEAR_INSTALL_PATH}) + endif() + add_executable(${OUTPUT} ${SOURCE_FILE} ${AUTO_FILES}) + target_include_directories(${OUTPUT} PRIVATE + ${LOCAL_ROOT_PATH}/inc/host_inc + ${LOCAL_ROOT_PATH}/inc/host_inc/gp + ${CMAKE_CURRENT_BINARY_DIR}) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${OUTPUT} PRIVATE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + endif() +endif() + +if(CC_SGX) + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + endif() + add_executable(${OUTPUT} ${SOURCE_FILE} ${AUTO_FILES}) + target_include_directories(${OUTPUT} PRIVATE + ${LOCAL_ROOT_PATH}/inc/host_inc + ${LOCAL_ROOT_PATH}/inc/host_inc/sgx + ${CMAKE_CURRENT_BINARY_DIR}) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${OUTPUT} PRIVATE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + endif() +endif() + +if(CC_SIM) + target_link_libraries(${OUTPUT} secgearsim) +else() + target_link_libraries(${OUTPUT} secgear) +endif() +set_target_properties(${OUTPUT} PROPERTIES SKIP_BUILD_RPATH TRUE) + +if(CC_GP) + #itrustee install whitelist /vender/bin/teec_hello + install(TARGETS ${OUTPUT} + RUNTIME + DESTINATION /vendor/bin/ + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) +endif() + +if(CC_SGX) + install(TARGETS ${OUTPUT} + RUNTIME + DESTINATION ${CMAKE_BINARY_DIR}/bin/ + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) +endif() + diff --git a/wallfacer/verify/enclave/host/main.cpp b/wallfacer/verify/enclave/host/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a74a5ce6607f1222aa3db152a0a6a6a6f4343229 --- /dev/null +++ b/wallfacer/verify/enclave/host/main.cpp @@ -0,0 +1,101 @@ +#include +#include"enclave.h" +#include +#include +#include"Enclave1_u.h" + +#define MAX_LEN 1024 + +using namespace std; + +const char hexChars[] = "0123456789abcdef"; +int dec(char ch) { + if ('0' <= ch && ch <= '9') { + return ch - '0'; + } + if ('a' <= ch && ch <= 'f') { + return ch - 'a' + 10; + } + if ('A' <= ch && ch <= 'F') { + return ch - 'A' + 10; + } + return -1; +} +uint32_t transferToU32(char* src,int base=10) { + uint32_t result = 0; + for (int i = 0; src[i]; i++) { + result = result * base + dec(src[i]); + } + return result; +} + +char tmpresult[512]; +char* transferFromString(string src) { + int siz = src.length(); + if (siz < 512) { + for (int i = 0; i <= siz; i++) { + tmpresult[i] = src[i]; + } + } + return tmpresult; +} + +int main(int argc, char* argv[]) { + cc_enclave_t *eid; + cc_enclave_result_t ret; + char *path = transferFromString(PATH); + + ret = cc_enclave_create(path, AUTO_ENCLAVE_TYPE, 0, SECGEAR_DEBUG_FLAG, NULL, 0, &eid); + if (ret != CC_SUCCESS) { + printf("ERR: %#x ,failed to create enclave.\n", ret); + return -1; + } + char buffer[MAX_LEN]; + uint32_t uints[2] = {}; + if (argc > 1) { + if(strcmp(argv[1],"initServer")==0){ + uints[0] = transferToU32(argv[4]); + initKeys(eid, uints); + setN(eid, argv[3], strlen(argv[3]) + 1); + setD(eid, argv[2], strlen(argv[2]) + 1); + getCD(eid, buffer, MAX_LEN); + printf("%s\n", buffer); + getKeys(eid, uints); + printf("%u\n%u\n", uints[0], uints[1]); + } + else if(strcmp(argv[1], "passwordEncryption") == 0){ + setN(eid, argv[4], strlen(argv[4]) + 1); + setCD(eid, argv[3], strlen(argv[3]) + 1); + setRSAsource(eid, argv[2], strlen(argv[2]) + 1); + uints[0] = transferToU32(argv[5]); + setKeys(eid, uints); + getRSAresult(eid, buffer, MAX_LEN); + printf("%s\n", buffer); + } + else if(strcmp(argv[1], "embedding") == 0){ + setN(eid, argv[5], strlen(argv[5]) + 1); + setCD(eid, argv[4], strlen(argv[4]) + 1); + setNPW(eid, argv[3], strlen(argv[3]) + 1); + setRSAsource(eid, argv[2], strlen(argv[2]) + 1); + uints[0] = transferToU32(argv[8]); + registerSeed(eid, uints); + uints[0] = transferToU32(argv[6]); + uints[1] = transferToU32(argv[7]); + setKeys(eid, uints); + calcEmbeddingResult(eid); + getX(eid, buffer, MAX_LEN); + printf("%s\n", buffer); + getMu(eid, buffer, MAX_LEN); + printf("%s\n", buffer); + getK(eid, buffer, MAX_LEN); + printf("%s\n", buffer); + getNWID(eid, buffer, MAX_LEN); + printf("%s\n", buffer); + } + } + + if (CC_SUCCESS != cc_enclave_destroy(eid)) { + return -1; + } + return 0; +}