Skip to content

Commit aa6708c

Browse files
committed
v1.0.1 release
1 parent 7f14232 commit aa6708c

File tree

273 files changed

+63196
-1732
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

273 files changed

+63196
-1732
lines changed

Readme.md

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ Rust SGX SDK helps developers write Intel SGX applications in Rust programming l
33

44
To achieve better security, we recommend developers to apply [Non-bypassable Security Paradigm (NbSP)](https://github.com/baidu/rust-sgx-sdk/blob/master/documents/nbsp.pdf) to the system design and implementation.
55

6+
## v1.0.1 Release
7+
This version supports the Rust nightly build (nightly-2018-07-16) in master branch and the most recent Rust stable build (stable-2018-07-10). And it supports the latest Intel SGX SDK **v2.2**. New third party libraries include: bytes, http, iovec, rust-crypto, rust-fnv and rust-threshold-secret-sharing. New code sample 'secretsharing' and 'rust-threshold-secret-sharing' is provided by @davidp94. Please refer to [release_notes](release_notes.md) for further details.
8+
69
## v1.0.0 Release
710
We proudly announce v1.0.0 of rust-sgx-sdk! We port Parity's [Webassembly Interpreter](https://github.com/paritytech/wasmi) to Intel SGX and provide a full functional in-enclave [wasmi sample](samplecode/wasmi), and a [sample solution](samplecode/psi) of two-party private-set-intersection resisting side-channel attacks! From this version, we start to support most recent stable branch of Rust instead of nightly for better stability and future production use. Thus, the [stable branch](https://github.com/baidu/rust-sgx-sdk/tree/rust-stable) of v1.0.0 supports the most recent Rust stable toolchain (1.26.0 stable-2018-05-07), while the master only supports Rust nightly toolchain of nightly-2018-04-11. Please refer to [release_notes](release_notes.md) for further details.
811

@@ -19,7 +22,7 @@ This version provides a new namespace: `sgx_tstd::untrusted`, including `sgx_tst
1922

2023
Ubuntu 16.04
2124

22-
[Intel SGX SDK 2.1.3 for Linux](https://01.org/intel-software-guard-extensions/downloads) installed
25+
[Intel SGX SDK 2.2 for Linux](https://01.org/intel-software-guard-extensions/downloads) installed
2326

2427
Docker (Recommended)
2528

@@ -34,7 +37,7 @@ Install Intel SGX driver and SDK first. And refer to [Dockerfile](https://github
3437

3538
### Using docker (Recommended) without ME support
3639

37-
First, make sure Intel SGX Driver 2.1.3 is installed and functions well. `/dev/isgx` should be appeared.
40+
First, make sure Intel SGX Driver 2.2 is installed and functions well. `/dev/isgx` should be appeared.
3841

3942
Second, pull the docker image. If you'd like to work on stable branch of Rust and `rust-stable` branch of this SDK, please pull `baiduxlab/sgx-rust-stable` instead.
4043

@@ -138,6 +141,8 @@ We provide eighteen sample codes to help developers understand how to write Encl
138141

139142
* `psi` is a prototype solution of the Private-Set-Intersection problem.
140143

144+
* `secretsharing` shows the usage of Shamir sharing in Rust-SGX environment (provided by @davidp94).
145+
141146
# Samples of ported third-party libraries
142147

143148
As of v0.9.5, we provide 25 ported third-party libraries. All of them could be compiled using xargo (`XARGO_SGX=1` make) or cargo (`make`).

dockerfile/Dockerfile

+8-8
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ RUN apt-get update && apt-get install -y build-essential ocaml automake autoconf
4646
# systemctl enable jhi
4747

4848
RUN mkdir /root/sgx && \
49-
wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.1.3/ubuntu64-desktop/sgx_linux_x64_psw_2.1.103.44322.bin && \
50-
wget -O /root/sgx/sdk.bin https://download.01.org/intel-sgx/linux-2.1.3/ubuntu64-desktop/sgx_linux_x64_sdk_2.1.103.44322.bin && \
49+
wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.2/ubuntu64-desktop/sgx_linux_x64_psw_2.2.100.45311.bin && \
50+
wget -O /root/sgx/sdk.bin https://download.01.org/intel-sgx/linux-2.2/ubuntu64-desktop/sgx_linux_x64_sdk_2.2.100.45311.bin && \
5151
cd /root/sgx && \
5252
chmod +x /root/sgx/psw.bin && \
5353
/root/sgx/psw.bin && \
@@ -57,16 +57,16 @@ RUN mkdir /root/sgx && \
5757

5858
ADD patch /root/
5959

60-
RUN wget -O /root/src.tar.gz https://github.com/intel/linux-sgx/archive/sgx_2.1.3.tar.gz && \
60+
RUN wget -O /root/src.tar.gz https://github.com/intel/linux-sgx/archive/sgx_2.2.tar.gz && \
6161
cd /root && tar xzf src.tar.gz && \
62-
cd /root/linux-sgx-sgx_2.1.3 && git apply ../patch && \
63-
/root/linux-sgx-sgx_2.1.3/download_prebuilt.sh && \
64-
cd /root/linux-sgx-sgx_2.1.3 && make -j && \
65-
cp /root/linux-sgx-sgx_2.1.3/build/linux/libsgx_tstdc.a /opt/sgxsdk/lib64/libsgx_tstdc.a
62+
cd /root/linux-sgx-sgx_2.2 && git apply ../patch && \
63+
/root/linux-sgx-sgx_2.2/download_prebuilt.sh && \
64+
cd /root/linux-sgx-sgx_2.2 && make -j && \
65+
cp /root/linux-sgx-sgx_2.2/build/linux/libsgx_tstdc.a /opt/sgxsdk/lib64/libsgx_tstdc.a
6666

6767
RUN wget 'https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init' -O /root/rustup-init && \
6868
chmod +x /root/rustup-init && \
69-
echo '1' | /root/rustup-init --default-toolchain nightly-2018-04-12 && \
69+
echo '1' | /root/rustup-init --default-toolchain nightly-2018-07-16 && \
7070
echo 'source /root/.cargo/env' >> /root/.bashrc && \
7171
/root/.cargo/bin/rustup component add rust-src && \
7272
/root/.cargo/bin/cargo install xargo && \

dockerfile/experimental/Dockerfile

+13-12
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
# * Redistributions of source code must retain the above copyright
1010
# notice, this list of conditions and the following disclaimer.
1111
# * Redistributions in binary form must reproduce the above copyright
12-
# notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the
12+
# notice, this list of conditions and the following disclaimer in
13+
# the documentation and/or other materials provided with the
1314
# distribution.
1415
# * Neither the name of Baidu, Inc., nor the names of its
1516
# contributors may be used to endorse or promote products derived
@@ -54,8 +55,8 @@ RUN mkdir /root/sgx && \
5455
# cd jhi && mkdir build && cd build && cmake .. && make && make install && \
5556
# systemctl enable jhi
5657

57-
RUN wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.1.3/ubuntu64-desktop/sgx_linux_x64_psw_2.1.103.44322.bin && \
58-
wget -O /root/sgx/sdk.bin https://download.01.org/intel-sgx/linux-2.1.3/ubuntu64-desktop/sgx_linux_x64_sdk_2.1.103.44322.bin && \
58+
RUN wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.2/ubuntu64-desktop/sgx_linux_x64_psw_2.2.100.45311.bin && \
59+
wget -O /root/sgx/sdk.bin https://download.01.org/intel-sgx/linux-2.2/ubuntu64-desktop/sgx_linux_x64_sdk_2.2.100.45311.bin && \
5960
cd /root/sgx && \
6061
chmod +x /root/sgx/psw.bin && \
6162
/root/sgx/psw.bin && \
@@ -65,18 +66,18 @@ RUN wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.1.3/ubun
6566

6667
ADD all.patch /root/
6768

68-
RUN wget -O /root/src.tar.gz https://github.com/intel/linux-sgx/archive/sgx_2.1.3.tar.gz && \
69-
cd /root && tar xzf src.tar.gz && \
70-
cd /root/linux-sgx-sgx_2.1.3 && patch -t -p1 < ../all.patch && \
71-
/root/linux-sgx-sgx_2.1.3/download_prebuilt.sh && \
72-
cd /root/linux-sgx-sgx_2.1.3 && make -j && \
73-
cp /root/linux-sgx-sgx_2.1.3/build/linux/libsgx_tstdc.a /opt/sgxsdk/lib64/libsgx_tstdc.a && \
74-
cp /root/linux-sgx-sgx_2.1.3/build/linux/aesm_service /opt/intel/sgxpsw/aesm/aesm_service && \
75-
cp /root/linux-sgx-sgx_2.1.3/build/linux/libsgx_uae_service.so /usr/lib/libsgx_uae_service.so
69+
RUN wget -O /root/src.tar.gz https://github.com/intel/linux-sgx/archive/sgx_2.2.tar.gz && \
70+
cd /root && tar xzf src.tar.gz && \
71+
cd /root/linux-sgx-sgx_2.2 && patch -t -p1 < ../all.patch && \
72+
/root/linux-sgx-sgx_2.2/download_prebuilt.sh && \
73+
cd /root/linux-sgx-sgx_2.2 && make -j && \
74+
cp /root/linux-sgx-sgx_2.2/build/linux/libsgx_tstdc.a /opt/sgxsdk/lib64/libsgx_tstdc.a && \
75+
cp /root/linux-sgx-sgx_2.2/build/linux/aesm_service /opt/intel/sgxpsw/aesm/aesm_service && \
76+
cp /root/linux-sgx-sgx_2.2/build/linux/libsgx_uae_service.so /usr/lib/libsgx_uae_service.so
7677

7778
RUN wget 'https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init' -O /root/rustup-init && \
7879
chmod +x /root/rustup-init && \
79-
echo '1' | /root/rustup-init --default-toolchain nightly-2018-04-12 && \
80+
echo '1' | /root/rustup-init --default-toolchain nightly-2018-07-16 && \
8081
echo 'source /root/.cargo/env' >> /root/.bashrc && \
8182
/root/.cargo/bin/rustup component add rust-src && \
8283
/root/.cargo/bin/cargo install xargo && \

dockerfile/rust-stable/Dockerfile

+8-8
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ RUN apt-get update && apt-get install -y build-essential ocaml automake autoconf
4646
# systemctl enable jhi
4747

4848
RUN mkdir /root/sgx && \
49-
wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.1.3/ubuntu64-desktop/sgx_linux_x64_psw_2.1.103.44322.bin && \
50-
wget -O /root/sgx/sdk.bin https://download.01.org/intel-sgx/linux-2.1.3/ubuntu64-desktop/sgx_linux_x64_sdk_2.1.103.44322.bin && \
49+
wget -O /root/sgx/psw.bin https://download.01.org/intel-sgx/linux-2.2/ubuntu64-desktop/sgx_linux_x64_psw_2.2.100.45311.bin && \
50+
wget -O /root/sgx/sdk.bin https://download.01.org/intel-sgx/linux-2.2/ubuntu64-desktop/sgx_linux_x64_sdk_2.2.100.45311.bin && \
5151
cd /root/sgx && \
5252
chmod +x /root/sgx/psw.bin && \
5353
/root/sgx/psw.bin && \
@@ -57,16 +57,16 @@ RUN mkdir /root/sgx && \
5757

5858
ADD patch /root/
5959

60-
RUN wget -O /root/src.tar.gz https://github.com/intel/linux-sgx/archive/sgx_2.1.3.tar.gz && \
60+
RUN wget -O /root/src.tar.gz https://github.com/intel/linux-sgx/archive/sgx_2.2.tar.gz && \
6161
cd /root && tar xzf src.tar.gz && \
62-
cd /root/linux-sgx-sgx_2.1.3 && git apply ../patch && \
63-
/root/linux-sgx-sgx_2.1.3/download_prebuilt.sh && \
64-
cd /root/linux-sgx-sgx_2.1.3 && make -j && \
65-
cp /root/linux-sgx-sgx_2.1.3/build/linux/libsgx_tstdc.a /opt/sgxsdk/lib64/libsgx_tstdc.a
62+
cd /root/linux-sgx-sgx_2.2 && git apply ../patch && \
63+
/root/linux-sgx-sgx_2.2/download_prebuilt.sh && \
64+
cd /root/linux-sgx-sgx_2.2 && make -j && \
65+
cp /root/linux-sgx-sgx_2.2/build/linux/libsgx_tstdc.a /opt/sgxsdk/lib64/libsgx_tstdc.a
6666

6767
RUN wget 'https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init' -O /root/rustup-init && \
6868
chmod +x /root/rustup-init && \
69-
echo '1' | /root/rustup-init --default-toolchain stable-2018-05-10 && \
69+
echo '1' | /root/rustup-init --default-toolchain stable-2018-07-10 && \
7070
echo 'source /root/.cargo/env' >> /root/.bashrc && \
7171
/root/.cargo/bin/rustup component add rust-src && \
7272
/root/.cargo/bin/cargo install xargo && \

release_notes.md

+13
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
# Rust SGX SDK v1.0.1 Release Notes
2+
3+
**Support Intel SGX SDK v2.2**
4+
5+
**Support Rust nightly-2018-07-16**
6+
7+
**Support Rust stable-2018-07-10**
8+
9+
**New third party libraries** bytes, http, iovec, rust-crypto, rust-fnv and rust-threshold-secret-sharing.
10+
11+
**New code sample** Thanks to @davidp94 for the secretsharing code sample.
12+
13+
114
# Rust SGX SDK v1.0.0 Release Notes
215

316
Baidu X-Lab provides Rust SGX SDK that is a bundle of basic libraries, scripts and ported libraries for developing Intel SGX programs in Rust programming language. Based on this SDK, developers could easily build up their SGX programs in Rust. Rust SGX SDK provides the strongest defence and helps protect the secret data reside in an enclave effectively even when the OS is compromised. It is important to real world data privacy and cloud security. Since the first day of open source, we have recevied many recommendations and supports from both academic and industry. Today, we are proudly releasing the 1.0.0 version of Rust SGX SDK, indicating that Rust SGX SDK is becoming stable and ready for production.

samplecode/crypto/app/app.c

+39-1
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,11 @@ int SGX_CDECL main(int argc, char *argv[])
318318
printf("\n");
319319

320320
printf("[+] Starting aes-gcm-128 decrypt calculation\n");
321-
printf("[+] aes-gcm-128 expected plaintext: %s", aes_gcm_plaintext);
321+
printf("[+] aes-gcm-128 expected plaintext:");
322+
for(i = 0; i < 16; i ++) {
323+
printf("%02x", aes_gcm_plaintext[i]);
324+
}
325+
printf("\n");
322326

323327
uint8_t aes_gcm_decrypted_text[16] = {0};
324328
sgx_ret = aes_gcm_128_decrypt(global_eid,
@@ -395,6 +399,40 @@ int SGX_CDECL main(int argc, char *argv[])
395399
}
396400
printf("\n");
397401

402+
uint8_t rsa_msg[] = {
403+
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
404+
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
405+
0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
406+
0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
407+
0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
408+
0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
409+
0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
410+
0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10,
411+
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
412+
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
413+
0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
414+
0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
415+
0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
416+
0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
417+
0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
418+
0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
419+
};
420+
421+
sgx_ret = rsa_key(global_eid,
422+
&enclave_ret,
423+
rsa_msg,
424+
sizeof(rsa_msg));
425+
426+
if(sgx_ret != SGX_SUCCESS) {
427+
print_error_message(sgx_ret);
428+
return -1;
429+
}
430+
if(enclave_ret != SGX_SUCCESS) {
431+
print_error_message(enclave_ret);
432+
return -1;
433+
}
434+
printf("rsa_key success. \n");
435+
398436
/* Destroy the enclave */
399437
sgx_destroy_enclave(global_eid);
400438

samplecode/crypto/enclave/Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ default = []
1212

1313
[target.'cfg(not(target_env = "sgx"))'.dependencies]
1414
sgx_types = { path = "../../../sgx_types" }
15+
sgx_trts = { path = "../../../sgx_trts" }
1516
sgx_tstd = { path = "../../../sgx_tstd" }
16-
sgx_tcrypto = { path = "../../../sgx_tcrypto" }
17+
sgx_tcrypto = { path = "../../../sgx_tcrypto" }

samplecode/crypto/enclave/Enclave.config.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<EnclaveConfiguration>
33
<ProdID>0</ProdID>
44
<ISVSVN>0</ISVSVN>
5-
<StackMaxSize>0x40000</StackMaxSize>
6-
<HeapMaxSize>0x100000</HeapMaxSize>
5+
<StackMaxSize>0x80000</StackMaxSize>
6+
<HeapMaxSize>0x10000000</HeapMaxSize>
77
<TCSNum>1</TCSNum>
88
<TCSPolicy>1</TCSPolicy>
99
<DisableDebug>0</DisableDebug>

samplecode/crypto/enclave/Enclave.edl

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ enclave {
6060
[in] uint8_t key[16],
6161
[out] uint8_t cmac[16]);
6262

63+
public sgx_status_t rsa_key([in, size=len] const uint8_t* text, size_t len);
64+
6365
};
6466

6567
untrusted {

samplecode/crypto/enclave/src/lib.rs

+101
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,14 @@
3434

3535
extern crate sgx_types;
3636
extern crate sgx_tcrypto;
37+
extern crate sgx_trts;
3738
#[cfg(not(target_env = "sgx"))]
3839
#[macro_use]
3940
extern crate sgx_tstd as std;
4041

4142
use sgx_types::*;
4243
use sgx_tcrypto::*;
44+
use sgx_trts::memeq::ConsttimeMemEq;
4345
use std::vec::Vec;
4446
use std::slice;
4547
use std::ptr;
@@ -354,3 +356,102 @@ pub extern "C" fn aes_cmac(text: *const u8,
354356

355357
sgx_status_t::SGX_SUCCESS
356358
}
359+
360+
361+
#[no_mangle]
362+
pub extern "C" fn rsa_key(text: * const u8, text_len: usize) -> sgx_status_t {
363+
364+
let text_slice = unsafe { slice::from_raw_parts(text, text_len) };
365+
366+
if text_slice.len() != text_len {
367+
return sgx_status_t::SGX_ERROR_INVALID_PARAMETER;
368+
}
369+
370+
let mod_size: i32 = 256;
371+
let exp_size: i32 = 4;
372+
let mut n: Vec<u8> = vec![0_u8; mod_size as usize];
373+
let mut d: Vec<u8> = vec![0_u8; mod_size as usize];
374+
let mut e: Vec<u8> = vec![1, 0, 1, 0];
375+
let mut p: Vec<u8> = vec![0_u8; mod_size as usize / 2];
376+
let mut q: Vec<u8> = vec![0_u8; mod_size as usize / 2];
377+
let mut dmp1: Vec<u8> = vec![0_u8; mod_size as usize / 2];
378+
let mut dmq1: Vec<u8> = vec![0_u8; mod_size as usize / 2];
379+
let mut iqmp: Vec<u8> = vec![0_u8; mod_size as usize / 2];
380+
381+
let result = rsgx_create_rsa_key_pair(mod_size,
382+
exp_size,
383+
n.as_mut_slice(),
384+
d.as_mut_slice(),
385+
e.as_mut_slice(),
386+
p.as_mut_slice(),
387+
q.as_mut_slice(),
388+
dmp1.as_mut_slice(),
389+
dmq1.as_mut_slice(),
390+
iqmp.as_mut_slice());
391+
392+
match result {
393+
Err(x) => {
394+
return x;
395+
},
396+
Ok(()) => {},
397+
}
398+
399+
let privkey = SgxRsaPrivKey::new();
400+
let pubkey = SgxRsaPubKey::new();
401+
402+
let result = pubkey.create(mod_size,
403+
exp_size,
404+
n.as_slice(),
405+
e.as_slice());
406+
match result {
407+
Err(x) => return x,
408+
Ok(()) => {},
409+
};
410+
411+
let result = privkey.create(mod_size,
412+
exp_size,
413+
e.as_slice(),
414+
p.as_slice(),
415+
q.as_slice(),
416+
dmp1.as_slice(),
417+
dmq1.as_slice(),
418+
iqmp.as_slice());
419+
match result {
420+
Err(x) => return x,
421+
Ok(()) => {},
422+
};
423+
424+
let mut ciphertext: Vec<u8> = vec![0_u8; 256];
425+
let mut chipertext_len: usize = ciphertext.len();
426+
let ret = pubkey.encrypt_sha256(ciphertext.as_mut_slice(),
427+
&mut chipertext_len,
428+
text_slice);
429+
match ret {
430+
Err(x) => {
431+
return x;
432+
},
433+
Ok(()) => {
434+
println!("rsa chipertext_len: {:?}", chipertext_len);
435+
},
436+
};
437+
438+
let mut plaintext: Vec<u8> = vec![0_u8; 256];
439+
let mut plaintext_len: usize = plaintext.len();
440+
let ret = privkey.decrypt_sha256(plaintext.as_mut_slice(),
441+
&mut plaintext_len,
442+
ciphertext.as_slice());
443+
match ret {
444+
Err(x) => {
445+
return x;
446+
},
447+
Ok(()) => {
448+
println!("rsa plaintext_len: {:?}", plaintext_len);
449+
},
450+
};
451+
452+
if plaintext[..plaintext_len].consttime_memeq(text_slice) == false {
453+
return sgx_status_t::SGX_ERROR_UNEXPECTED;
454+
}
455+
456+
sgx_status_t::SGX_SUCCESS
457+
}

samplecode/hello-rust/app/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ build = "build.rs"
77
[dependencies]
88
sgx_types = { path = "../../../sgx_types" }
99
sgx_urts = { path = "../../../sgx_urts" }
10+
dirs = "1.0.2"

0 commit comments

Comments
 (0)