diff --git a/mixnode/src/node/mod.rs b/mixnode/src/node/mod.rs index 1ae4b6e65d..78f49f33f1 100644 --- a/mixnode/src/node/mod.rs +++ b/mixnode/src/node/mod.rs @@ -39,6 +39,7 @@ impl Config { pub enum MixProcessingError { SphinxRecoveryError, ReceivedFinalHopError, + SphinxProcessingError, } impl From for MixProcessingError { @@ -115,10 +116,14 @@ impl PacketProcessor { let packet = SphinxPacket::from_bytes(packet_data.to_vec())?; let (next_packet, next_hop_address, delay) = match packet.process(processing_data.secret_key) { - ProcessedPacket::ProcessedPacketForwardHop(packet, address, delay) => { + Ok(ProcessedPacket::ProcessedPacketForwardHop(packet, address, delay)) => { (packet, address, delay) } - _ => return Err(MixProcessingError::ReceivedFinalHopError), + Ok(_) => return Err(MixProcessingError::ReceivedFinalHopError), + Err(e) => { + warn!("Failed to unwrap Sphinx pakcet: {:?}", e); + return Err(MixProcessingError::SphinxProcessingError); + } }; let next_mix = MixPeer::new(next_hop_address); diff --git a/sfw-provider/src/provider/mix_handling/mod.rs b/sfw-provider/src/provider/mix_handling/mod.rs index 1670311dd1..c7a4e8cc02 100644 --- a/sfw-provider/src/provider/mix_handling/mod.rs +++ b/sfw-provider/src/provider/mix_handling/mod.rs @@ -1,5 +1,6 @@ use crate::provider::storage::StoreData; use crypto::identity::DummyMixIdentityPrivateKey; +use log::warn; use sphinx::{ProcessedPacket, SphinxPacket}; use std::path::PathBuf; use std::sync::{Arc, RwLock}; @@ -8,11 +9,12 @@ use std::sync::{Arc, RwLock}; // DUPLICATE WITH MIXNODE CODE!!! #[derive(Debug)] pub enum MixProcessingError { - SphinxRecoveryError, - ReceivedForwardHopError, + FileIOFailure, InvalidPayload, NonMatchingRecipient, - FileIOFailure, + ReceivedForwardHopError, + SphinxRecoveryError, + SphinxProcessingError, } impl From for MixProcessingError { @@ -63,10 +65,14 @@ impl MixPacketProcessor { let read_processing_data = processing_data.read().unwrap(); let (client_address, client_surb_id, payload) = match packet.process(read_processing_data.secret_key.as_scalar()) { - ProcessedPacket::ProcessedPacketFinalHop(client_address, surb_id, payload) => { + Ok(ProcessedPacket::ProcessedPacketFinalHop(client_address, surb_id, payload)) => { (client_address, surb_id, payload) } - _ => return Err(MixProcessingError::ReceivedForwardHopError), + Ok(_) => return Err(MixProcessingError::ReceivedForwardHopError), + Err(e) => { + warn!("Error unwrapping Sphinx packet: {:?}", e); + return Err(MixProcessingError::SphinxProcessingError); + } }; // TODO: should provider try to be recovering plaintext? this would potentially make client retrieve messages of non-constant length,