Skip to content

Commit b8fcdf5

Browse files
committed
BLD: implemented newTaskEncryptionKey in enclave
1 parent 4534984 commit b8fcdf5

File tree

17 files changed

+1073
-72
lines changed

17 files changed

+1073
-72
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
pub mod types;
2+
pub mod traits;

enclave/safetrace/app/src/keys_u.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use crate::common_u::errors::EnclaveFailError;
2-
use enigma_types::{EnclaveReturn, PubKey};
32
use failure::Error;
43
use sgx_types::{sgx_enclave_id_t, sgx_status_t};
5-
//use enigma_types::{EnclaveReturn, PubKey, RawPointer};
4+
use crate::enigma_types::types::{EnclaveReturn};
65

76
extern {
87
pub fn ecall_get_user_key(
@@ -15,7 +14,7 @@ extern {
1514
}
1615

1716

18-
pub fn get_user_key(eid: sgx_enclave_id_t, user_pubkey: &PubKey) -> Result<(Box<[u8]>, [u8; 65]), Error> {
17+
pub fn get_user_key(eid: sgx_enclave_id_t, user_pubkey: &[u8; 64]) -> Result<(Box<[u8]>, [u8; 65]), Error> {
1918
let mut sig = [0u8; 65];
2019
let mut ret = EnclaveReturn::Success;
2120
let mut serialized_ptr = 0u64;

enclave/safetrace/app/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ pub mod enigma_types;
3838
pub mod common_u;
3939
pub mod keys_u;
4040
pub mod networking;
41+
pub mod ocalls_u;
4142

4243
use networking::{ipc_listener, IpcListener};
4344
use futures::Future;
44-
45-
45+
pub use ocalls_u::{ocall_save_to_memory};
4646

4747
static ENCLAVE_FILE: &'static str = "enclave.signed.so";
4848

enclave/safetrace/app/src/networking/ipc_listener.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ impl IpcListener {
2828
}
2929
}
3030

31-
//pub fn handle_message(request: Multipart, spid: &str, eid: sgx_enclave_id_t, retries: u32) -> Multipart {
3231
pub fn handle_message(request: Multipart, spid: &str, eid: sgx_enclave_id_t, retries: u32) -> Multipart {
3332
let mut responses = Multipart::new();
3433
for msg in request {
@@ -46,14 +45,14 @@ pub fn handle_message(request: Multipart, spid: &str, eid: sgx_enclave_id_t, ret
4645
responses
4746
}
4847

48+
4949
pub(self) mod handling {
5050
use crate::networking::messages::*;
5151
use crate::keys_u;
5252
use failure::Error;
5353
use sgx_types::{sgx_enclave_id_t, sgx_status_t};
5454
use hex::{FromHex, ToHex};
5555
use std::str;
56-
use rmp_serde::Deserializer;
5756
use serde::Deserialize;
5857
use serde_json::Value;
5958

@@ -64,6 +63,11 @@ pub(self) mod handling {
6463

6564
type ResponseResult = Result<IpcResponse, Error>;
6665

66+
#[derive(Serialize, Deserialize)]
67+
struct PubkeyResult {
68+
pubkey: Vec<u8>
69+
}
70+
6771
pub fn get_enclave_report(eid: sgx_enclave_id_t, spid: &str, retries: u32) -> ResponseResult {
6872
let result = IpcResults::EnclaveReport { spid: spid.to_string() };
6973
Ok(IpcResponse::GetEnclaveReport { result })
@@ -77,19 +81,26 @@ pub(self) mod handling {
7781

7882
let (msg, sig) = keys_u::get_user_key(eid, &user_pubkey)?;
7983

80-
let mut des = Deserializer::new(&msg[..]);
81-
let res: Value = Deserialize::deserialize(&mut des).unwrap();
82-
let pubkey = serde_json::from_value::<Vec<u8>>(res["pubkey"].clone())?;
84+
// Enigma-core implementation used MessagePack, but rmp-serde is not available
85+
// so replaced MessagePack serialization with plain JSON serialization
86+
//let mut des = Deserializer::new(&msg[..]);
87+
//let res: Value = Deserialize::deserialize(&mut des).unwrap();
88+
//let pubkey = serde_json::from_value::<Vec<u8>>(res["pubkey"].clone())?;
89+
//let pubkey = serde_json::from_slice::<Vec<u8>>(&msg)?;
90+
let res = match str::from_utf8(&msg) {
91+
Ok(v) => v,
92+
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
93+
};
94+
95+
let pubkey: PubkeyResult = serde_json::from_str(res)?;
8396

84-
let result = IpcResults::DHKey {dh_key: pubkey.to_hex(), sig: sig.to_hex() };
85-
//let result = IpcResults::DHKey {dh_key: _user_pubkey.to_string(), sig: _user_pubkey.to_string()};
97+
let result = IpcResults::DHKey {taskPubKey: pubkey.pubkey.to_hex(), sig: sig.to_hex() };
8698

8799
Ok(IpcResponse::NewTaskEncryptionKey { result })
88100
}
89101

90102
// TODO
91103
//#[logfn(DEBUG)]
92-
// pub fn compute_task(db: &mut DB, input: IpcTask, eid: sgx_enclave_id_t) -> ResponseResult {
93104
pub fn add_personal_data( input: IpcInput, eid: sgx_enclave_id_t) -> ResponseResult {
94105
let mut ret = sgx_status_t::SGX_SUCCESS;
95106
let data = serde_json::to_string(&input).unwrap();
@@ -102,7 +113,6 @@ pub(self) mod handling {
102113

103114
// TODO
104115
//#[logfn(DEBUG)]
105-
// pub fn compute_task(db: &mut DB, input: IpcTask, eid: sgx_enclave_id_t) -> ResponseResult {
106116
pub fn find_match( input: IpcInput, eid: sgx_enclave_id_t) -> ResponseResult {
107117
let result = IpcResults::FindMatch { status: Status::Passed };
108118
Ok(IpcResponse::FindMatch { result })

enclave/safetrace/app/src/networking/messages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub enum IpcResults {
4747
//EnclaveReport { #[serde(rename = "signingKey")] signing_key: String, report: String, signature: String },
4848
EnclaveReport { spid: String },
4949
#[serde(rename = "result")]
50-
DHKey { dh_key: String, sig: String },
50+
DHKey { taskPubKey: String, sig: String },
5151
AddPersonalData { status: Status },
5252
FindMatch { status: Status },
5353
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use std::{ptr, slice};
2+
use enigma_types::traits::SliceCPtr;
3+
//use crate::esgx::general;
4+
5+
#[no_mangle]
6+
pub unsafe extern "C" fn ocall_save_to_memory(data_ptr: *const u8, data_len: usize) -> u64 {
7+
let data = slice::from_raw_parts(data_ptr, data_len).to_vec();
8+
let ptr = Box::into_raw(Box::new(data.into_boxed_slice())) as *const u8;
9+
ptr as u64
10+
}

enclave/safetrace/enclave/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,18 @@ default = []
1414
sgx_types = { git = "https://github.com/apache/teaclave-sgx-sdk.git" }
1515
sgx_tstd = { git = "https://github.com/apache/teaclave-sgx-sdk.git", features = ["backtrace"] }
1616
sgx_trts = { git = "https://github.com/apache/teaclave-sgx-sdk.git" }
17+
sgx_rand = { git = "https://github.com/apache/teaclave-sgx-sdk.git" }
18+
sgx_tseal = { git = "https://github.com/apache/teaclave-sgx-sdk.git" }
1719

1820
[dependencies]
21+
arrayvec = { version = "0.4.10", default-features = false }
22+
rustc-hex = { version = "2.0.1", default-features = false }
1923
serde = { git = "https://github.com/mesalock-linux/serde-sgx", features = ["derive"] }
2024
serde_json = { git = "https://github.com/mesalock-linux/serde-json-sgx" }
25+
libsecp256k1 = { version = "0.2" }
26+
lazy_static = {version = "1.3.0", features = ["spin_no_std"] }
27+
tiny-keccak = { version = "1.4" }
28+
sha2 = { version = "0.8.0", default-features = false}
2129

2230
[patch.'https://github.com/apache/teaclave-sgx-sdk.git']
2331
sgx_alloc = { path = "../../incubator-teaclave-sgx-sdk/sgx_alloc" }

enclave/safetrace/enclave/Enclave.edl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ enclave {
2626
trusted {
2727
/* define ECALLs here. */
2828

29-
public sgx_status_t say_something([in, size=len] const uint8_t* some_string, size_t len);
30-
3129
public sgx_status_t ecall_add_personal_data([in, size=len] const uint8_t* some_string, size_t len);
3230

3331
public sgx_status_t ecall_get_user_key(
@@ -36,4 +34,7 @@ enclave {
3634
[out] uint64_t* serialized_ptr
3735
);
3836
};
37+
untrusted {
38+
uint64_t ocall_save_to_memory([in, count=data_len] const uint8_t* data_ptr, size_t data_len);
39+
};
3940
};

enclave/safetrace/enclave/src/data.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ use sgx_types::*;
22
use serde::{Serialize, Deserialize};
33
use std::{slice};
44
use std::string::String;
5-
use std::vec::Vec;
6-
use std::fmt;
5+
//use std::vec::Vec;
76

87
// Structs
98
#[derive(Serialize, Deserialize, Clone, Debug)]

0 commit comments

Comments
 (0)