ChuanDou2021 opened a new issue, #401: URL: https://github.com/apache/incubator-teaclave-sgx-sdk/issues/401
I built a demo to calc Sha256,but got `Illegal instruction (core dumped)`. The Sha256 comes from crate [sha2](https://crates.io/crates/sha2). ```sh cd samplecode/helloworld BUILD_STD=cargo make cd bin ./app [+] Init Enclave Successful 2! This is a normal world string passed into Enclave! target_env = not sgx Illegal instruction (core dumped) ``` After some research,I found crate `cpufeatures` which `sha2`'s dependent library failed detect 'target_env = "sgx"', `cpufeatures` uses `cpuid` to check cpu features, then crash. And I found the file [x86_64-unknown-linux-sgx.json](https://github.com/apache/incubator-teaclave-sgx-sdk/blob/v2.0.0-preview/rustlib/x86_64-unknown-linux-sgx.json), assign `env` the value `gnu` , than's the problem, if I change `env` value from `gnu` to `sgx`, it's ok. ```sh [+] Init Enclave Successful 2! This is a normal world string passed into Enclave! target_env = sgx This is a in-Enclave Rust string! [+] ECall Success... ``` This is my demo codes: ```sh diff --git a/samplecode/helloworld/enclave/Cargo.toml b/samplecode/helloworld/enclave/Cargo.toml index 40d61163..81b6301a 100644 --- a/samplecode/helloworld/enclave/Cargo.toml +++ b/samplecode/helloworld/enclave/Cargo.toml @@ -31,3 +31,7 @@ default = [] [target.'cfg(not(target_vendor = "teaclave"))'.dependencies] sgx_types = { path = "../../../sgx_types" } sgx_tstd = { path = "../../../sgx_tstd" } + +[dependencies] +sha2 = "0.10.2" +hex-literal = "0.3.4" diff --git a/samplecode/helloworld/enclave/src/lib.rs b/samplecode/helloworld/enclave/src/lib.rs index 5fd6daf4..66984701 100644 --- a/samplecode/helloworld/enclave/src/lib.rs +++ b/samplecode/helloworld/enclave/src/lib.rs @@ -29,6 +29,9 @@ use std::slice; use std::string::String; use std::vec::Vec; +use hex_literal::hex; +use sha2::{Digest, Sha256, Sha512}; + /// # Safety #[no_mangle] pub unsafe extern "C" fn say_something(some_string: *const u8, some_len: usize) -> SgxStatus { @@ -53,6 +56,28 @@ pub unsafe extern "C" fn say_something(some_string: *const u8, some_len: usize) // Rust style convertion hello_string += String::from_utf8(word_vec).expect("Invalid UTF-8").as_str(); + let target_env = { + let mut s = String::new(); + + #[cfg(not(target_env = "sgx"))] + s.push_str("not sgx"); + + #[cfg(target_env = "sgx")] + s.push_str("sgx"); + + s + }; + println!("target_env = {}", target_env); + + let mut hasher = Sha256::new(); + // write input message + hasher.update(b"hello world"); + let result = hasher.finalize(); + assert_eq!( + result[..], + hex!("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9")[..] + ); + // Ocall to normal world for output println!("{}", &hello_string); ``` Thanks. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@teaclave.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@teaclave.apache.org For additional commands, e-mail: notifications-h...@teaclave.apache.org