26
26
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
27
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
29
+ extern crate dirs;
29
30
extern crate sgx_types;
30
31
extern crate sgx_urts;
31
- extern crate dirs;
32
32
use sgx_types:: * ;
33
33
use sgx_urts:: SgxEnclave ;
34
34
35
- use std:: io:: { Read , Write } ;
36
35
use std:: fs;
36
+ use std:: io:: { Read , Write } ;
37
37
use std:: path;
38
38
39
39
static ENCLAVE_FILE : & ' static str = "enclave.signed.so" ;
40
40
static ENCLAVE_TOKEN : & ' static str = "enclave.token" ;
41
41
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 ;
45
49
}
46
50
47
51
fn init_enclave ( ) -> SgxResult < SgxEnclave > {
48
-
49
52
let mut launch_token: sgx_launch_token_t = [ 0 ; 1024 ] ;
50
53
let mut launch_token_updated: i32 = 0 ;
51
54
// Step 1: try to retrieve the launch token saved by last transaction
@@ -58,7 +61,7 @@ fn init_enclave() -> SgxResult<SgxEnclave> {
58
61
println ! ( "[+] Home dir is {}" , path. display( ) ) ;
59
62
home_dir = path;
60
63
true
61
- } ,
64
+ }
62
65
None => {
63
66
println ! ( "[-] Cannot get home dir" ) ;
64
67
false
@@ -69,14 +72,17 @@ fn init_enclave() -> SgxResult<SgxEnclave> {
69
72
if use_token == true {
70
73
match fs:: File :: open ( & token_file) {
71
74
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
+ }
74
80
Ok ( mut f) => {
75
81
println ! ( "[+] Open token file success! " ) ;
76
82
match f. read ( & mut launch_token) {
77
83
Ok ( 1024 ) => {
78
84
println ! ( "[+] Token file valid!" ) ;
79
- } ,
85
+ }
80
86
_ => println ! ( "[+] Token file invalid, will create new token file" ) ,
81
87
}
82
88
}
@@ -86,58 +92,62 @@ fn init_enclave() -> SgxResult<SgxEnclave> {
86
92
// Step 2: call sgx_create_enclave to initialize an enclave instance
87
93
// Debug Support: set 2nd parameter to 1
88
94
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
+ ) ) ;
95
106
96
107
// Step 3: save the launch token if it is updated
97
108
if use_token == true && launch_token_updated != 0 {
98
109
// reopen the file with write capablity
99
110
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!" ) ,
105
114
} ,
106
115
Err ( _) => {
107
116
println ! ( "[-] Failed to save updated enclave token, but doesn't matter" ) ;
108
- } ,
117
+ }
109
118
}
110
119
}
111
120
112
121
Ok ( enclave)
113
122
}
114
123
115
124
fn main ( ) {
116
-
117
125
let enclave = match init_enclave ( ) {
118
126
Ok ( r) => {
119
127
println ! ( "[+] Init Enclave Successful {}!" , r. geteid( ) ) ;
120
128
r
121
- } ,
129
+ }
122
130
Err ( x) => {
123
131
println ! ( "[-] Init Enclave Failed {}!" , x. as_str( ) ) ;
124
132
return ;
125
- } ,
133
+ }
126
134
} ;
127
135
128
136
let input_string = String :: from ( "This is a normal world string passed into Enclave!\n " ) ;
129
137
130
138
let mut retval = sgx_status_t:: SGX_SUCCESS ;
131
139
132
140
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
+ )
137
147
} ;
138
148
139
149
match result {
140
- sgx_status_t:: SGX_SUCCESS => { } ,
150
+ sgx_status_t:: SGX_SUCCESS => { }
141
151
_ => {
142
152
println ! ( "[-] ECALL Enclave Failed {}!" , result. as_str( ) ) ;
143
153
return ;
0 commit comments