@@ -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 {
3231pub 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+
4949pub ( 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 } )
0 commit comments