2626// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2727// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2828
29+ extern crate dirs;
2930extern crate sgx_types;
3031extern crate sgx_urts;
31- extern crate dirs;
3232use sgx_types:: * ;
3333use sgx_urts:: SgxEnclave ;
3434
35- use std:: io:: { Read , Write } ;
3635use std:: fs;
36+ use std:: io:: { Read , Write } ;
3737use std:: path;
3838
3939static ENCLAVE_FILE : & ' static str = "enclave.signed.so" ;
4040static ENCLAVE_TOKEN : & ' static str = "enclave.token" ;
4141
42- extern {
43- fn say_something ( eid : sgx_enclave_id_t , retval : * mut sgx_status_t ,
44- some_string : * const u8 , len : usize ) -> sgx_status_t ;
42+ extern "C" {
43+ fn say_something (
44+ eid : sgx_enclave_id_t ,
45+ retval : * mut sgx_status_t ,
46+ some_string : * const u8 ,
47+ len : usize ,
48+ ) -> sgx_status_t ;
4549}
4650
4751fn init_enclave ( ) -> SgxResult < SgxEnclave > {
48-
4952 let mut launch_token: sgx_launch_token_t = [ 0 ; 1024 ] ;
5053 let mut launch_token_updated: i32 = 0 ;
5154 // Step 1: try to retrieve the launch token saved by last transaction
@@ -58,7 +61,7 @@ fn init_enclave() -> SgxResult<SgxEnclave> {
5861 println ! ( "[+] Home dir is {}" , path. display( ) ) ;
5962 home_dir = path;
6063 true
61- } ,
64+ }
6265 None => {
6366 println ! ( "[-] Cannot get home dir" ) ;
6467 false
@@ -69,14 +72,17 @@ fn init_enclave() -> SgxResult<SgxEnclave> {
6972 if use_token == true {
7073 match fs:: File :: open ( & token_file) {
7174 Err ( _) => {
72- println ! ( "[-] Open token file {} error! Will create one." , token_file. as_path( ) . to_str( ) . unwrap( ) ) ;
73- } ,
75+ println ! (
76+ "[-] Open token file {} error! Will create one." ,
77+ token_file. as_path( ) . to_str( ) . unwrap( )
78+ ) ;
79+ }
7480 Ok ( mut f) => {
7581 println ! ( "[+] Open token file success! " ) ;
7682 match f. read ( & mut launch_token) {
7783 Ok ( 1024 ) => {
7884 println ! ( "[+] Token file valid!" ) ;
79- } ,
85+ }
8086 _ => println ! ( "[+] Token file invalid, will create new token file" ) ,
8187 }
8288 }
@@ -86,58 +92,62 @@ fn init_enclave() -> SgxResult<SgxEnclave> {
8692 // Step 2: call sgx_create_enclave to initialize an enclave instance
8793 // Debug Support: set 2nd parameter to 1
8894 let debug = 1 ;
89- let mut misc_attr = sgx_misc_attribute_t { secs_attr : sgx_attributes_t { flags : 0 , xfrm : 0 } , misc_select : 0 } ;
90- let enclave = try!( SgxEnclave :: create ( ENCLAVE_FILE ,
91- debug,
92- & mut launch_token,
93- & mut launch_token_updated,
94- & mut misc_attr) ) ;
95+ let mut misc_attr = sgx_misc_attribute_t {
96+ secs_attr : sgx_attributes_t { flags : 0 , xfrm : 0 } ,
97+ misc_select : 0 ,
98+ } ;
99+ let enclave = try!( SgxEnclave :: create (
100+ ENCLAVE_FILE ,
101+ debug,
102+ & mut launch_token,
103+ & mut launch_token_updated,
104+ & mut misc_attr
105+ ) ) ;
95106
96107 // Step 3: save the launch token if it is updated
97108 if use_token == true && launch_token_updated != 0 {
98109 // reopen the file with write capablity
99110 match fs:: File :: create ( & token_file) {
100- Ok ( mut f) => {
101- match f. write_all ( & launch_token) {
102- Ok ( ( ) ) => println ! ( "[+] Saved updated launch token!" ) ,
103- Err ( _) => println ! ( "[-] Failed to save updated launch token!" ) ,
104- }
111+ Ok ( mut f) => match f. write_all ( & launch_token) {
112+ Ok ( ( ) ) => println ! ( "[+] Saved updated launch token!" ) ,
113+ Err ( _) => println ! ( "[-] Failed to save updated launch token!" ) ,
105114 } ,
106115 Err ( _) => {
107116 println ! ( "[-] Failed to save updated enclave token, but doesn't matter" ) ;
108- } ,
117+ }
109118 }
110119 }
111120
112121 Ok ( enclave)
113122}
114123
115124fn main ( ) {
116-
117125 let enclave = match init_enclave ( ) {
118126 Ok ( r) => {
119127 println ! ( "[+] Init Enclave Successful {}!" , r. geteid( ) ) ;
120128 r
121- } ,
129+ }
122130 Err ( x) => {
123131 println ! ( "[-] Init Enclave Failed {}!" , x. as_str( ) ) ;
124132 return ;
125- } ,
133+ }
126134 } ;
127135
128136 let input_string = String :: from ( "This is a normal world string passed into Enclave!\n " ) ;
129137
130138 let mut retval = sgx_status_t:: SGX_SUCCESS ;
131139
132140 let result = unsafe {
133- say_something ( enclave. geteid ( ) ,
134- & mut retval,
135- input_string. as_ptr ( ) as * const u8 ,
136- input_string. len ( ) )
141+ say_something (
142+ enclave. geteid ( ) ,
143+ & mut retval,
144+ input_string. as_ptr ( ) as * const u8 ,
145+ input_string. len ( ) ,
146+ )
137147 } ;
138148
139149 match result {
140- sgx_status_t:: SGX_SUCCESS => { } ,
150+ sgx_status_t:: SGX_SUCCESS => { }
141151 _ => {
142152 println ! ( "[-] ECALL Enclave Failed {}!" , result. as_str( ) ) ;
143153 return ;
0 commit comments