You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by rd...@apache.org on 2022/08/06 15:10:19 UTC

[incubator-teaclave-sgx-sdk] branch v2.0.0-preview updated: Add logger samplecode

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


The following commit(s) were added to refs/heads/v2.0.0-preview by this push:
     new 448d0ba4 Add logger samplecode
448d0ba4 is described below

commit 448d0ba4d83fe0f517701c5e5152b156731eb86c
Author: volcano <vo...@163.com>
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  |  39 +++++++
 11 files changed, 522 insertions(+)

diff --git a/samplecode/logger/Makefile b/samplecode/logger/Makefile
new file mode 100644
index 00000000..e5ebd227
--- /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,untrusted_fs
+	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..39269767
--- /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_fs", "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..71806a29
--- /dev/null
+++ b/samplecode/logger/enclave/src/lib.rs
@@ -0,0 +1,39 @@
+// 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;
+use std::string::String;
+
+/// # 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: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org