518 lines
18 KiB
Diff
518 lines
18 KiB
Diff
From d8d225ed834a9cfe63b305ccd2ce97f5b3ebdfb4 Mon Sep 17 00:00:00 2001
|
|
From: Li Feng <lifeng68@huawei.com>
|
|
Date: Mon, 26 Apr 2021 09:32:12 +0000
|
|
Subject: [PATCH 08/14] example: add example for LRT(long running task)
|
|
|
|
Signed-off-by: Li Feng <lifeng68@huawei.com>
|
|
---
|
|
CMakeLists.txt | 1 +
|
|
examples/lrt/CMakeLists.txt | 34 +++++
|
|
examples/lrt/enclave/CMakeLists.txt | 158 ++++++++++++++++++++++++
|
|
examples/lrt/enclave/Enclave.config.xml | 12 ++
|
|
examples/lrt/enclave/Enclave.lds | 11 ++
|
|
examples/lrt/enclave/lrt.c | 23 ++++
|
|
examples/lrt/enclave/manifest.txt.in | 8 ++
|
|
examples/lrt/host/CMakeLists.txt | 85 +++++++++++++
|
|
examples/lrt/host/main.c | 70 +++++++++++
|
|
examples/lrt/lrt.edl | 19 +++
|
|
10 files changed, 421 insertions(+)
|
|
create mode 100644 examples/lrt/CMakeLists.txt
|
|
create mode 100644 examples/lrt/enclave/CMakeLists.txt
|
|
create mode 100644 examples/lrt/enclave/Enclave.config.xml
|
|
create mode 100644 examples/lrt/enclave/Enclave.lds
|
|
create mode 100644 examples/lrt/enclave/lrt.c
|
|
create mode 100644 examples/lrt/enclave/manifest.txt.in
|
|
create mode 100644 examples/lrt/host/CMakeLists.txt
|
|
create mode 100644 examples/lrt/host/main.c
|
|
create mode 100644 examples/lrt/lrt.edl
|
|
|
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index a4d1668..1d036ea 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -58,6 +58,7 @@ if(CC_SGX)
|
|
add_subdirectory(${LOCAL_ROOT_PATH}/examples/helloworld)
|
|
add_subdirectory(${LOCAL_ROOT_PATH}/examples/seal_data)
|
|
# add_subdirectory(${LOCAL_ROOT_PATH}/examples/tls_enclave)
|
|
+# add_subdirectory(${LOCAL_ROOT_PATH}/examples/lrt)
|
|
endif()
|
|
|
|
install(FILES ${LOCAL_ROOT_PATH}/conf/logrotate.d/secgear
|
|
diff --git a/examples/lrt/CMakeLists.txt b/examples/lrt/CMakeLists.txt
|
|
new file mode 100644
|
|
index 0000000..9059590
|
|
--- /dev/null
|
|
+++ b/examples/lrt/CMakeLists.txt
|
|
@@ -0,0 +1,34 @@
|
|
+# 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.
|
|
+
|
|
+project(HelloWorldLRT C)
|
|
+
|
|
+set(CMAKE_C_STANDARD 99)
|
|
+
|
|
+set(CURRENT_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
|
+
|
|
+#set edl name
|
|
+set(EDL_FILE lrt.edl)
|
|
+set(CODEGEN codegen)
|
|
+
|
|
+if(CC_GP)
|
|
+ set(CODETYPE trustzone)
|
|
+ execute_process(COMMAND uuidgen -r OUTPUT_VARIABLE UUID)
|
|
+ string(REPLACE "\n" "" UUID ${UUID})
|
|
+ add_definitions(-DPATH="/data/${UUID}.sec")
|
|
+endif()
|
|
+
|
|
+if(CC_SGX)
|
|
+ set(CODETYPE sgx)
|
|
+ add_definitions(-DPATH="${CMAKE_CURRENT_BINARY_DIR}/enclave/enclave.signed.so")
|
|
+endif()
|
|
+
|
|
+add_subdirectory(${CURRENT_ROOT_PATH}/enclave)
|
|
+add_subdirectory(${CURRENT_ROOT_PATH}/host)
|
|
diff --git a/examples/lrt/enclave/CMakeLists.txt b/examples/lrt/enclave/CMakeLists.txt
|
|
new file mode 100644
|
|
index 0000000..64494cc
|
|
--- /dev/null
|
|
+++ b/examples/lrt/enclave/CMakeLists.txt
|
|
@@ -0,0 +1,158 @@
|
|
+# 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 lrt)
|
|
+
|
|
+#set sign key
|
|
+set(PEM Enclave_private.pem)
|
|
+
|
|
+#set sign tool
|
|
+set(SIGN_TOOL ${LOCAL_ROOT_PATH}/tools/sign_tool/sign_tool.sh)
|
|
+
|
|
+#set enclave src code
|
|
+set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/lrt.c)
|
|
+
|
|
+#set log level
|
|
+set(PRINT_LEVEL 3)
|
|
+add_definitions(-DPRINT_LEVEL=${PRINT_LEVEL})
|
|
+
|
|
+if(CC_GP)
|
|
+ #set signed output
|
|
+ set(OUTPUT ${UUID}.sec)
|
|
+ #set whilelist. default: /vendor/bin/teec_hello
|
|
+ set(WHITE_LIST_0 /vendor/bin/helloworld)
|
|
+ set(WHITE_LIST_OWNER root)
|
|
+ set(WHITE_LIST_1 /vendor/bin/secgear_helloworld)
|
|
+ set(WHITELIST WHITE_LIST_0 WHITE_LIST_1)
|
|
+
|
|
+ set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.c ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_args.h)
|
|
+ add_custom_command(OUTPUT ${AUTO_FILES}
|
|
+ DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE}
|
|
+ COMMAND ${CODEGEN} --${CODETYPE} --trusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/gp)
|
|
+endif()
|
|
+
|
|
+if(CC_SGX)
|
|
+ set(OUTPUT enclave.signed.so)
|
|
+ set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.c)
|
|
+ add_custom_command(OUTPUT ${AUTO_FILES}
|
|
+ DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE}
|
|
+ COMMAND ${CODEGEN} --${CODETYPE} --trusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/sgx --search-path ${SGXSDK}/include)
|
|
+endif()
|
|
+
|
|
+set(COMMON_C_FLAGS "-W -Wall -Werror -fno-short-enums -fno-omit-frame-pointer -fstack-protector \
|
|
+ -Wstack-protector --param ssp-buffer-size=4 -frecord-gcc-switches -Wextra -nostdinc -nodefaultlibs \
|
|
+ -fno-peephole -fno-peephole2 -Wno-main -Wno-error=unused-parameter \
|
|
+ -Wno-error=unused-but-set-variable -Wno-error=format-truncation=")
|
|
+
|
|
+set(COMMON_C_LINK_FLAGS "-Wl,-z,now -Wl,-z,relro -Wl,-z,noexecstack -Wl,-nostdlib -nodefaultlibs -nostartfiles")
|
|
+
|
|
+if(CC_GP)
|
|
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt.in" "${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt")
|
|
+
|
|
+ set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -march=armv8-a ")
|
|
+ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s -fPIC")
|
|
+ set(CMAKE_SHARED_LINKER_FLAGS "${COMMON_C_LINK_FLAGS} -Wl,-s")
|
|
+
|
|
+ set(ITRUSTEE_TEEDIR ${iTrusteeSDK}/)
|
|
+ set(ITRUSTEE_LIBC ${iTrusteeSDK}/thirdparty/open_source/musl/libc)
|
|
+
|
|
+ if(${CMAKE_VERSION} VERSION_LESS "3.13.0")
|
|
+ link_directories(${CMAKE_BINARY_DIR}/lib/)
|
|
+ endif()
|
|
+
|
|
+ add_library(${PREFIX} SHARED ${SOURCE_FILES} ${AUTO_FILES})
|
|
+
|
|
+ target_include_directories( ${PREFIX} PRIVATE
|
|
+ ${CMAKE_CURRENT_BINARY_DIR}
|
|
+ ${LOCAL_ROOT_PATH}/inc/host_inc
|
|
+ ${LOCAL_ROOT_PATH}/inc/host_inc/gp
|
|
+ ${LOCAL_ROOT_PATH}/inc/enclave_inc
|
|
+ ${LOCAL_ROOT_PATH}/inc/enclave_inc/gp
|
|
+ ${ITRUSTEE_TEEDIR}/include/TA
|
|
+ ${ITRUSTEE_TEEDIR}/include/TA/huawei_ext
|
|
+ ${ITRUSTEE_LIBC}/arch/aarch64
|
|
+ ${ITRUSTEE_LIBC}/
|
|
+ ${ITRUSTEE_LIBC}/arch/arm/bits
|
|
+ ${ITRUSTEE_LIBC}/arch/generic
|
|
+ ${ITRUSTEE_LIBC}/arch/arm
|
|
+ ${LOCAL_ROOT_PATH}/inc/enclave_inc/gp/itrustee)
|
|
+
|
|
+ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0")
|
|
+ target_link_directories(${PREFIX} PRIVATE
|
|
+ ${CMAKE_BINARY_DIR}/lib/)
|
|
+ endif()
|
|
+
|
|
+ foreach(WHITE_LIST ${WHITELIST})
|
|
+ add_definitions(-D${WHITE_LIST}="${${WHITE_LIST}}")
|
|
+ endforeach(WHITE_LIST)
|
|
+ add_definitions(-DWHITE_LIST_OWNER="${WHITE_LIST_OWNER}")
|
|
+
|
|
+ target_link_libraries(${PREFIX} -lsecgear_tee)
|
|
+
|
|
+ add_custom_command(TARGET ${PREFIX}
|
|
+ POST_BUILD
|
|
+ COMMAND bash ${SIGN_TOOL} -d sign -x trustzone -i ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PREFIX}.so -c ${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt
|
|
+ -o ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${OUTPUT})
|
|
+
|
|
+ install(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${OUTPUT}
|
|
+ DESTINATION /data
|
|
+ PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
|
+
|
|
+endif()
|
|
+
|
|
+if(CC_SGX)
|
|
+ set(SGX_DIR ${SGXSDK})
|
|
+ set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -m64 -fvisibility=hidden")
|
|
+ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s")
|
|
+ set(LINK_LIBRARY_PATH ${SGX_DIR}/lib64)
|
|
+
|
|
+ if(CC_SIM)
|
|
+ set(Trts_Library_Name sgx_trts_sim)
|
|
+ set(Service_Library_Name sgx_tservice_sim)
|
|
+ else()
|
|
+ set(Trts_Library_Name sgx_trts)
|
|
+ set(Service_Library_Name sgx_tservice)
|
|
+ endif()
|
|
+
|
|
+ set(Crypto_Library_Name sgx_tcrypto)
|
|
+
|
|
+ set(CMAKE_SHARED_LINKER_FLAGS "${COMMON_C_LINK_FLAGS} -Wl,-z,defs -Wl,-pie -Bstatic -Bsymbolic -eenclave_entry \
|
|
+ -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds")
|
|
+
|
|
+ if(${CMAKE_VERSION} VERSION_LESS "3.13.0")
|
|
+ link_directories(${LINK_LIBRARY_PATH})
|
|
+ endif()
|
|
+
|
|
+ add_library(${PREFIX} SHARED ${SOURCE_FILES} ${AUTO_FILES})
|
|
+
|
|
+ target_include_directories(${PREFIX} PRIVATE
|
|
+ ${CMAKE_CURRENT_BINARY_DIR}
|
|
+ ${SGX_DIR}/include/tlibc
|
|
+ ${SGX_DIR}/include/libcxx
|
|
+ ${SGX_DIR}/include
|
|
+ ${LOCAL_ROOT_PATH}/inc/host_inc
|
|
+ ${LOCAL_ROOT_PATH}/inc/host_inc/sgx)
|
|
+
|
|
+ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0")
|
|
+ target_link_directories(${PREFIX} PRIVATE
|
|
+ ${LINK_LIBRARY_PATH})
|
|
+ endif()
|
|
+
|
|
+ target_link_libraries(${PREFIX} -Wl,--whole-archive ${Trts_Library_Name} -Wl,--no-whole-archive
|
|
+ -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l${Crypto_Library_Name} -l${Service_Library_Name} -Wl,--end-group)
|
|
+ add_custom_command(TARGET ${PREFIX}
|
|
+ POST_BUILD
|
|
+ COMMAND umask 0177
|
|
+ COMMAND openssl genrsa -3 -out ${PEM} 3072
|
|
+ COMMAND bash ${SIGN_TOOL} -d sign -x sgx -i ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PREFIX}.so -k ${PEM} -o ${OUTPUT} -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.config.xml)
|
|
+endif()
|
|
+
|
|
+set_target_properties(${PREFIX} PROPERTIES SKIP_BUILD_RPATH TRUE)
|
|
diff --git a/examples/lrt/enclave/Enclave.config.xml b/examples/lrt/enclave/Enclave.config.xml
|
|
new file mode 100644
|
|
index 0000000..e94c9bc
|
|
--- /dev/null
|
|
+++ b/examples/lrt/enclave/Enclave.config.xml
|
|
@@ -0,0 +1,12 @@
|
|
+<EnclaveConfiguration>
|
|
+ <ProdID>0</ProdID>
|
|
+ <ISVSVN>0</ISVSVN>
|
|
+ <StackMaxSize>0x40000</StackMaxSize>
|
|
+ <HeapMaxSize>0x100000</HeapMaxSize>
|
|
+ <TCSNum>10</TCSNum>
|
|
+ <TCSPolicy>1</TCSPolicy>
|
|
+ <!-- Recommend changing 'DisableDebug' to 1 to make the enclave undebuggable for enclave release -->
|
|
+ <DisableDebug>0</DisableDebug>
|
|
+ <MiscSelect>0</MiscSelect>
|
|
+ <MiscMask>0xFFFFFFFF</MiscMask>
|
|
+</EnclaveConfiguration>
|
|
diff --git a/examples/lrt/enclave/Enclave.lds b/examples/lrt/enclave/Enclave.lds
|
|
new file mode 100644
|
|
index 0000000..ab77e64
|
|
--- /dev/null
|
|
+++ b/examples/lrt/enclave/Enclave.lds
|
|
@@ -0,0 +1,11 @@
|
|
+enclave.so
|
|
+{
|
|
+ global:
|
|
+ g_global_data_sim;
|
|
+ g_global_data;
|
|
+ enclave_entry;
|
|
+ g_peak_heap_used;
|
|
+ local:
|
|
+ *;
|
|
+};
|
|
+
|
|
diff --git a/examples/lrt/enclave/lrt.c b/examples/lrt/enclave/lrt.c
|
|
new file mode 100644
|
|
index 0000000..982e50c
|
|
--- /dev/null
|
|
+++ b/examples/lrt/enclave/lrt.c
|
|
@@ -0,0 +1,23 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include "lrt_t.h"
|
|
+
|
|
+#define TA_HELLO_WORLD "Secgear Long Running Task!"
|
|
+#define BUF_MAX 32
|
|
+int get_string(char *buf)
|
|
+{
|
|
+ strncpy(buf, TA_HELLO_WORLD, strlen(TA_HELLO_WORLD) + 1);
|
|
+ return 0;
|
|
+}
|
|
diff --git a/examples/lrt/enclave/manifest.txt.in b/examples/lrt/enclave/manifest.txt.in
|
|
new file mode 100644
|
|
index 0000000..7b8ecf5
|
|
--- /dev/null
|
|
+++ b/examples/lrt/enclave/manifest.txt.in
|
|
@@ -0,0 +1,8 @@
|
|
+gpd.ta.appID: @UUID@
|
|
+gpd.ta.service_name: test0108
|
|
+gpd.ta.singleInstance: true
|
|
+gpd.ta.multiSession: false
|
|
+gpd.ta.multiCommand: false
|
|
+gpd.ta.instanceKeepAlive: false
|
|
+gpd.ta.dataSize: 16384
|
|
+gpd.ta.stackSize: 20480
|
|
diff --git a/examples/lrt/host/CMakeLists.txt b/examples/lrt/host/CMakeLists.txt
|
|
new file mode 100644
|
|
index 0000000..13f891a
|
|
--- /dev/null
|
|
+++ b/examples/lrt/host/CMakeLists.txt
|
|
@@ -0,0 +1,85 @@
|
|
+# 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 lrt)
|
|
+#set host exec name
|
|
+set(OUTPUT secgear_lrt)
|
|
+#set host src code
|
|
+set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/main.c)
|
|
+
|
|
+#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_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s")
|
|
+
|
|
+if(CC_GP)
|
|
+ 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/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/examples/lrt/host/main.c b/examples/lrt/host/main.c
|
|
new file mode 100644
|
|
index 0000000..ba078c7
|
|
--- /dev/null
|
|
+++ b/examples/lrt/host/main.c
|
|
@@ -0,0 +1,70 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+
|
|
+#include <stdio.h>
|
|
+#include <unistd.h>
|
|
+#include <linux/limits.h>
|
|
+#include "enclave.h"
|
|
+#include "lrt_u.h"
|
|
+
|
|
+#define BUF_LEN 32
|
|
+
|
|
+int main()
|
|
+{
|
|
+ int retval = 0;
|
|
+ char *path = PATH;
|
|
+ char buf[BUF_LEN];
|
|
+ cc_enclave_t *context = NULL;
|
|
+ cc_enclave_result_t res;
|
|
+
|
|
+ printf("Create secgear enclave\n");
|
|
+
|
|
+ char real_p[PATH_MAX];
|
|
+ /* check file exists, if not exist then use absolute path */
|
|
+ if (realpath(path, real_p) == NULL) {
|
|
+ if (getcwd(real_p, sizeof(real_p)) == NULL) {
|
|
+ printf("Cannot find enclave.sign.so");
|
|
+ return -1;
|
|
+ }
|
|
+ if (PATH_MAX - strlen(real_p) <= strlen("/enclave.signed.so")) {
|
|
+ printf("Failed to strcat enclave.sign.so path");
|
|
+ return -1;
|
|
+ }
|
|
+ (void)strcat(real_p, "/enclave.signed.so");
|
|
+ }
|
|
+
|
|
+ res = cc_enclave_create(real_p, AUTO_ENCLAVE_TYPE, 0, SECGEAR_DEBUG_FLAG, NULL, 0, &context);
|
|
+ if (res != CC_SUCCESS) {
|
|
+ printf("Create enclave error\n");
|
|
+ return res;
|
|
+ }
|
|
+
|
|
+ while(true) {
|
|
+ res = get_string(context, &retval, buf);
|
|
+ if (res != CC_SUCCESS || retval != (int)CC_SUCCESS) {
|
|
+ printf("Ecall enclave error\n");
|
|
+ goto out;
|
|
+ } else {
|
|
+ printf("%s\n", buf);
|
|
+ }
|
|
+ sleep(1);
|
|
+ }
|
|
+
|
|
+out:
|
|
+ if (context != NULL) {
|
|
+ res = cc_enclave_destroy(context);
|
|
+ if(res != CC_SUCCESS) {
|
|
+ printf("Destroy enclave error\n");
|
|
+ }
|
|
+ }
|
|
+ return res;
|
|
+}
|
|
diff --git a/examples/lrt/lrt.edl b/examples/lrt/lrt.edl
|
|
new file mode 100644
|
|
index 0000000..73dc375
|
|
--- /dev/null
|
|
+++ b/examples/lrt/lrt.edl
|
|
@@ -0,0 +1,19 @@
|
|
+/*
|
|
+ * 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.
|
|
+ */
|
|
+
|
|
+enclave {
|
|
+ include "secgear_urts.h"
|
|
+ from "secgear_tstdc.edl" import *;
|
|
+ trusted {
|
|
+ public int get_string([out, size=32]char *buf);
|
|
+ };
|
|
+};
|
|
--
|
|
2.27.0
|
|
|