This is an automated email from the ASF dual-hosted git repository. rduan pushed a commit to branch v2.0.0-preview in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-sgx-sdk.git
commit 6a8c0987f6f59c3ed928fda66a603180e6d42885 Author: volcano <[email protected]> AuthorDate: Sat Aug 6 23:10:10 2022 +0800 Add logger samplecode --- samplecode/logger/Makefile | 191 ++++++++++++++++++++++++++++++++++ samplecode/logger/app/Cargo.toml | 26 +++++ samplecode/logger/app/build.rs | 37 +++++++ samplecode/logger/app/src/main.rs | 63 +++++++++++ samplecode/logger/enclave/Cargo.toml | 34 ++++++ samplecode/logger/enclave/Xargo.toml | 24 +++++ samplecode/logger/enclave/config.xml | 31 ++++++ samplecode/logger/enclave/enclave.edl | 26 +++++ samplecode/logger/enclave/enclave.lds | 12 +++ samplecode/logger/enclave/private.pem | 39 +++++++ samplecode/logger/enclave/src/lib.rs | 38 +++++++ 11 files changed, 521 insertions(+) diff --git a/samplecode/logger/Makefile b/samplecode/logger/Makefile new file mode 100644 index 00000000..013a44c4 --- /dev/null +++ b/samplecode/logger/Makefile @@ -0,0 +1,191 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +######## SGX SDK Settings ######## + +SGX_SDK ?= /opt/intel/sgxsdk +SGX_MODE ?= HW +SGX_ARCH ?= x64 + +TOP_DIR := ../.. +include $(TOP_DIR)/buildenv.mk + +ifeq ($(shell getconf LONG_BIT), 32) + SGX_ARCH := x86 +else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32) + SGX_ARCH := x86 +endif + +ifeq ($(SGX_ARCH), x86) + SGX_COMMON_CFLAGS := -m32 + SGX_LIBRARY_PATH := $(SGX_SDK)/lib + SGX_BIN_PATH := $(SGX_SDK)/bin/x86 +else + SGX_COMMON_CFLAGS := -m64 + SGX_LIBRARY_PATH := $(SGX_SDK)/lib64 + SGX_BIN_PATH := $(SGX_SDK)/bin/x64 +endif + +SGX_EDGER8R := $(SGX_BIN_PATH)/sgx_edger8r +ifneq ($(SGX_MODE), HYPER) + SGX_ENCLAVE_SIGNER := $(SGX_BIN_PATH)/sgx_sign +else + SGX_ENCLAVE_SIGNER := $(SGX_BIN_PATH)/sgx_sign_hyper + SGX_EDGER8R_MODE := --sgx-mode $(SGX_MODE) +endif + +######## CUSTOM Settings ######## + +CUSTOM_LIBRARY_PATH := ./lib +CUSTOM_BIN_PATH := ./bin +CUSTOM_SYSROOT_PATH := ./sysroot +CUSTOM_EDL_PATH := $(ROOT_DIR)/sgx_edl/edl +CUSTOM_COMMON_PATH := $(ROOT_DIR)/common + +######## EDL Settings ######## + +Enclave_EDL_Files := enclave/enclave_t.c enclave/enclave_t.h app/enclave_u.c app/enclave_u.h + +######## APP Settings ######## + +App_Rust_Flags := --release +App_Src_Files := $(shell find app/ -type f -name '*.rs') $(shell find app/ -type f -name 'Cargo.toml') +App_Include_Paths := -I ./app -I$(SGX_SDK)/include -I$(CUSTOM_COMMON_PATH)/inc -I$(CUSTOM_EDL_PATH) +App_C_Flags := $(CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths) + +App_Rust_Path := ./app/target/release +App_Enclave_u_Object := $(CUSTOM_LIBRARY_PATH)/libenclave_u.a +App_Name := $(CUSTOM_BIN_PATH)/app + +######## Enclave Settings ######## + +# BUILD_STD=no use no_std +# BUILD_STD=cargo use cargo-std-aware +# BUILD_STD=xargo use xargo +BUILD_STD ?= cargo + +Rust_Build_Target := x86_64-unknown-linux-sgx +Rust_Target_Path := $(ROOT_DIR)/rustlib + +ifneq ($(BUILD_STD), cargo) +ifneq ($(BUILD_STD), xargo) +$(error Only supports building with build_std strategy!!) +endif +endif + +ifeq ($(BUILD_STD), cargo) + Rust_Build_Std := --release -Z build-std=core,alloc + Rust_Std_Features := --features env,untrusted_time + Rust_Target_Flags := --target $(Rust_Target_Path)/$(Rust_Build_Target).json + Rust_Sysroot_Path := $(CURDIR)/sysroot + Rust_Sysroot_Flags := RUSTFLAGS="--sysroot $(Rust_Sysroot_Path)" +else + Rust_Unstable_Flags := RUSTFLAGS="-Z force-unstable-if-unmarked" +endif + +RustEnclave_Build_Flags := --release +RustEnclave_Src_Files := $(shell find enclave/ -type f -name '*.rs') $(shell find enclave/ -type f -name 'Cargo.toml') +RustEnclave_Include_Paths := -I$(CUSTOM_COMMON_PATH)/inc -I$(CUSTOM_COMMON_PATH)/inc/tlibc -I$(CUSTOM_EDL_PATH) + +RustEnclave_Link_Libs := -L$(CUSTOM_LIBRARY_PATH) -lenclave +RustEnclave_Compile_Flags := $(ENCLAVE_CFLAGS) $(RustEnclave_Include_Paths) +RustEnclave_Link_Flags := -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles \ + -Wl,--start-group $(RustEnclave_Link_Libs) -Wl,--end-group \ + -Wl,--version-script=enclave/enclave.lds \ + $(ENCLAVE_LDFLAGS) + +RustEnclave_Out_Path := ./enclave/target/$(Rust_Build_Target)/release +RustEnclave_Lib_Name := $(RustEnclave_Out_Path)/liblogger.a +RustEnclave_Name := $(CUSTOM_BIN_PATH)/enclave.so +RustEnclave_Signed_Name := $(CUSTOM_BIN_PATH)/enclave.signed.so + +.PHONY: all +all: $(Enclave_EDL_Files) $(App_Name) $(RustEnclave_Signed_Name) + +######## EDL Objects ######## + +$(Enclave_EDL_Files): $(SGX_EDGER8R) enclave/enclave.edl + $(SGX_EDGER8R) $(SGX_EDGER8R_MODE) --trusted enclave/enclave.edl --search-path $(CUSTOM_COMMON_PATH)/inc --search-path $(CUSTOM_EDL_PATH) --trusted-dir enclave + $(SGX_EDGER8R) $(SGX_EDGER8R_MODE) --untrusted enclave/enclave.edl --search-path $(CUSTOM_COMMON_PATH)/inc --search-path $(CUSTOM_EDL_PATH) --untrusted-dir app + @echo "GEN => $(Enclave_EDL_Files)" + +######## App Objects ######## + +app/enclave_u.o: $(Enclave_EDL_Files) + @$(CC) $(App_C_Flags) -c app/enclave_u.c -o $@ + +$(App_Enclave_u_Object): app/enclave_u.o + @mkdir -p $(CUSTOM_LIBRARY_PATH) + @$(AR) rcsD $@ $^ + +$(App_Name): $(App_Enclave_u_Object) app + @mkdir -p $(CUSTOM_BIN_PATH) + @cp $(App_Rust_Path)/app $(CUSTOM_BIN_PATH) + @echo "LINK => $@" + +######## Enclave Objects ######## + +enclave/enclave_t.o: $(Enclave_EDL_Files) + @$(CC) $(RustEnclave_Compile_Flags) -c enclave/enclave_t.c -o $@ + +$(RustEnclave_Name): enclave/enclave_t.o enclave + @mkdir -p $(CUSTOM_LIBRARY_PATH) + @mkdir -p $(CUSTOM_BIN_PATH) + @cp $(RustEnclave_Lib_Name) $(CUSTOM_LIBRARY_PATH)/libenclave.a + @$(CXX) enclave/enclave_t.o -o $@ $(RustEnclave_Link_Flags) + @echo "LINK => $@" + +$(RustEnclave_Signed_Name): $(RustEnclave_Name) enclave/config.xml + @$(SGX_ENCLAVE_SIGNER) sign -key enclave/private.pem -enclave $(RustEnclave_Name) -out $@ -config enclave/config.xml + @echo "SIGN => $@" + +######## Build App ######## + +.PHONY: app +app: + @cd app && SGX_SDK=$(SGX_SDK) cargo build $(App_Rust_Flags) + +######## Build Enclave ######## + +.PHONY: enclave +enclave: +ifeq ($(BUILD_STD), cargo) + @cd $(Rust_Target_Path)/std && cargo build $(Rust_Build_Std) $(Rust_Target_Flags) $(Rust_Std_Features) + + @rm -rf $(Rust_Sysroot_Path) + @mkdir -p $(Rust_Sysroot_Path)/lib/rustlib/$(Rust_Build_Target)/lib + @cp -r $(Rust_Target_Path)/std/target/$(Rust_Build_Target)/release/deps/* $(Rust_Sysroot_Path)/lib/rustlib/$(Rust_Build_Target)/lib + + @cd enclave && $(Rust_Sysroot_Flags) cargo build $(Rust_Target_Flags) $(RustEnclave_Build_Flags) +else + @cd enclave && $(Rust_Unstable_Flags) RUST_TARGET_PATH=$(Rust_Target_Path) xargo build --target $(Rust_Build_Target) $(RustEnclave_Build_Flags) +endif + +######## Run Enclave ######## + +.PHONY: run +run: $(App_Name) $(RustEnclave_Signed_Name) + @echo -e '\n===== Run Enclave =====\n' + @cd bin && RUST_LOG=trace ./app + +.PHONY: clean +clean: + @rm -f $(App_Name) $(RustEnclave_Name) $(RustEnclave_Signed_Name) enclave/*_t.* app/*_u.* + @cd enclave && cargo clean + @cd app && cargo clean + @cd $(Rust_Target_Path)/std && cargo clean + @rm -rf $(CUSTOM_BIN_PATH) $(CUSTOM_LIBRARY_PATH) $(CUSTOM_SYSROOT_PATH) diff --git a/samplecode/logger/app/Cargo.toml b/samplecode/logger/app/Cargo.toml new file mode 100644 index 00000000..b289769a --- /dev/null +++ b/samplecode/logger/app/Cargo.toml @@ -0,0 +1,26 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +[package] +name = "app" +version = "1.0.0" +authors = ["The Teaclave Authors"] +edition = "2021" + +[dependencies] +sgx_types = { path = "../../../sgx_types" } +sgx_urts = { path = "../../../sgx_urts" } diff --git a/samplecode/logger/app/build.rs b/samplecode/logger/app/build.rs new file mode 100644 index 00000000..23b8f5e7 --- /dev/null +++ b/samplecode/logger/app/build.rs @@ -0,0 +1,37 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License.. + +use std::env; + +fn main() { + println!("cargo:rerun-if-env-changed=SGX_MODE"); + println!("cargo:rerun-if-changed=build.rs"); + + let sdk_dir = env::var("SGX_SDK").unwrap_or_else(|_| "/opt/intel/sgxsdk".to_string()); + let mode = env::var("SGX_MODE").unwrap_or_else(|_| "HW".to_string()); + + println!("cargo:rustc-link-search=native=../lib"); + println!("cargo:rustc-link-lib=static=enclave_u"); + + println!("cargo:rustc-link-search=native={}/lib64", sdk_dir); + match mode.as_ref() { + "SIM" | "SW" => println!("cargo:rustc-link-lib=dylib=sgx_urts_sim"), + "HYPER" => println!("cargo:rustc-link-lib=dylib=sgx_urts_hyper"), + "HW" => println!("cargo:rustc-link-lib=dylib=sgx_urts"), + _ => println!("cargo:rustc-link-lib=dylib=sgx_urts"), + } +} diff --git a/samplecode/logger/app/src/main.rs b/samplecode/logger/app/src/main.rs new file mode 100644 index 00000000..c896afad --- /dev/null +++ b/samplecode/logger/app/src/main.rs @@ -0,0 +1,63 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License.. + +extern crate sgx_types; +extern crate sgx_urts; + +use sgx_types::error::SgxStatus; +use sgx_types::types::*; +use sgx_urts::enclave::SgxEnclave; + +static ENCLAVE_FILE: &str = "enclave.signed.so"; + +extern "C" { + fn output_log( + eid: EnclaveId, + retval: *mut SgxStatus, + some_string: *const u8, + len: usize, + ) -> SgxStatus; +} + +fn main() { + let enclave = match SgxEnclave::create(ENCLAVE_FILE, true) { + Ok(enclave) => { + println!("[+] Init Enclave Successful {}!", enclave.eid()); + enclave + } + Err(err) => { + println!("[-] Init Enclave Failed {}!", err.as_str()); + return; + } + }; + + let input_string = String::from("This is a normal world string passed into Enclave."); + let mut retval = SgxStatus::Success; + + let result = unsafe { + output_log( + enclave.eid(), + &mut retval, + input_string.as_ptr() as *const u8, + input_string.len(), + ) + }; + match result { + SgxStatus::Success => println!("[+] ECall Success..."), + _ => println!("[-] ECall Enclave Failed {}!", result.as_str()), + } +} diff --git a/samplecode/logger/enclave/Cargo.toml b/samplecode/logger/enclave/Cargo.toml new file mode 100644 index 00000000..f68e0644 --- /dev/null +++ b/samplecode/logger/enclave/Cargo.toml @@ -0,0 +1,34 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +[package] +name = "logger" +version = "1.0.0" +authors = ["The Teaclave Authors"] +edition = "2021" + +[lib] +name = "logger" +crate-type = ["staticlib"] + +[features] +default = [] + +[dependencies] +log = "0.4" +env_logger = "0.9" +sgx_libc = { path = "../../../sgx_libc" } diff --git a/samplecode/logger/enclave/Xargo.toml b/samplecode/logger/enclave/Xargo.toml new file mode 100644 index 00000000..b194bfbc --- /dev/null +++ b/samplecode/logger/enclave/Xargo.toml @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +[dependencies] +alloc = {} + +[dependencies.std] +path = "../../../rustlib/std" +features = ["env", "untrusted_time"] +stage = 1 diff --git a/samplecode/logger/enclave/config.xml b/samplecode/logger/enclave/config.xml new file mode 100644 index 00000000..0cf1f46d --- /dev/null +++ b/samplecode/logger/enclave/config.xml @@ -0,0 +1,31 @@ +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + ~ +--> +<!-- Please refer to User's Guide for the explanation of each field --> +<EnclaveConfiguration> + <ProdID>0</ProdID> + <ISVSVN>0</ISVSVN> + <StackMaxSize>0x40000</StackMaxSize> + <HeapMaxSize>0x100000</HeapMaxSize> + <TCSNum>1</TCSNum> + <TCSPolicy>0</TCSPolicy> + <DisableDebug>0</DisableDebug> + <MiscSelect>0</MiscSelect> + <MiscMask>0xFFFFFFFF</MiscMask> +</EnclaveConfiguration> diff --git a/samplecode/logger/enclave/enclave.edl b/samplecode/logger/enclave/enclave.edl new file mode 100644 index 00000000..d20ab559 --- /dev/null +++ b/samplecode/logger/enclave/enclave.edl @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +enclave { + from "sgx_env.edl" import *; + from "sgx_stdio.edl" import *; + from "sgx_tstd.edl" import *; + + trusted { + public sgx_status_t output_log([in, size=len] const uint8_t* some_string, size_t len); + }; +}; diff --git a/samplecode/logger/enclave/enclave.lds b/samplecode/logger/enclave/enclave.lds new file mode 100644 index 00000000..bdb7a4b5 --- /dev/null +++ b/samplecode/logger/enclave/enclave.lds @@ -0,0 +1,12 @@ +enclave.so +{ + global: + g_global_data_hyper; + g_global_data_sim; + g_global_data; + enclave_entry; + g_peak_heap_used; + g_peak_rsrv_mem_committed; + local: + *; +}; diff --git a/samplecode/logger/enclave/private.pem b/samplecode/logger/enclave/private.pem new file mode 100644 index 00000000..529d07be --- /dev/null +++ b/samplecode/logger/enclave/private.pem @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/samplecode/logger/enclave/src/lib.rs b/samplecode/logger/enclave/src/lib.rs new file mode 100644 index 00000000..01ef10a8 --- /dev/null +++ b/samplecode/logger/enclave/src/lib.rs @@ -0,0 +1,38 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License.. + +extern crate sgx_libc; +extern crate sgx_types; + +use log::{debug, error, info, trace}; +use sgx_types::error::SgxStatus; +use std::slice; + +/// # Safety +#[no_mangle] +pub unsafe extern "C" fn output_log(some_string: *const u8, some_len: usize) -> SgxStatus { + env_logger::init(); + + debug!("this is a debug {}.", "message"); + error!("this is printed by default."); + + let str_slice = slice::from_raw_parts(some_string, some_len); + info!("{}", String::from_utf8(str_slice.to_vec()).unwrap()); + trace!("{}", "This is a in-Enclave Rust string."); + + SgxStatus::Success +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
