Removed all sphinx key caching from mixnodes and gateways (#713)

* Removed all sphinx key caching from mixnodes and gateways

* Missing change in network monitor
This commit is contained in:
Jędrzej Stuczyński
2021-08-11 12:47:35 +01:00
committed by GitHub
parent fdd34863ba
commit fb253e53a4
37 changed files with 301 additions and 1151 deletions
@@ -18,6 +18,7 @@ use tokio_util::codec::Framed;
pub(crate) mod packet_processing;
#[derive(Clone)]
pub(crate) struct ConnectionHandler {
packet_processor: PacketProcessor,
delay_forwarding_channel: PacketDelayForwardSender,
@@ -34,13 +35,6 @@ impl ConnectionHandler {
}
}
pub(crate) fn clone_without_cache(&self) -> Self {
ConnectionHandler {
packet_processor: self.packet_processor.clone_without_cache(),
delay_forwarding_channel: self.delay_forwarding_channel.clone(),
}
}
fn delay_and_forward_packet(&self, mix_packet: MixPacket, delay: Option<SphinxDelay>) {
// determine instant at which packet should get forwarded. this way we minimise effect of
// being stuck in the queue [of the channel] to get inserted into the delay queue
@@ -3,16 +3,16 @@
use crate::node::node_statistics;
use crypto::asymmetric::encryption;
use mixnode_common::cached_packet_processor::error::MixProcessingError;
use mixnode_common::cached_packet_processor::processor::CachedPacketProcessor;
pub use mixnode_common::cached_packet_processor::processor::MixProcessingResult;
use mixnode_common::packet_processor::error::MixProcessingError;
pub use mixnode_common::packet_processor::processor::MixProcessingResult;
use mixnode_common::packet_processor::processor::SphinxPacketProcessor;
use nymsphinx::framing::packet::FramedSphinxPacket;
use tokio::time::Duration;
// PacketProcessor contains all data required to correctly unwrap and forward sphinx packets
#[derive(Clone)]
pub struct PacketProcessor {
/// Responsible for performing unwrapping
inner_processor: CachedPacketProcessor,
inner_processor: SphinxPacketProcessor,
/// Responsible for updating metrics data
node_stats_update_sender: node_statistics::UpdateSender,
@@ -22,21 +22,13 @@ impl PacketProcessor {
pub(crate) fn new(
encryption_key: &encryption::PrivateKey,
node_stats_update_sender: node_statistics::UpdateSender,
cache_entry_ttl: Duration,
) -> Self {
PacketProcessor {
inner_processor: CachedPacketProcessor::new(encryption_key.into(), cache_entry_ttl),
inner_processor: SphinxPacketProcessor::new(encryption_key.into()),
node_stats_update_sender,
}
}
pub(crate) fn clone_without_cache(&self) -> Self {
PacketProcessor {
inner_processor: self.inner_processor.clone_without_cache(),
node_stats_update_sender: self.node_stats_update_sender.clone(),
}
}
pub(crate) fn process_received(
&self,
received: FramedSphinxPacket,
+1 -1
View File
@@ -31,7 +31,7 @@ impl Listener {
loop {
match listener.accept().await {
Ok((socket, remote_addr)) => {
let handler = connection_handler.clone_without_cache();
let handler = connection_handler.clone();
tokio::spawn(handler.handle_connection(socket, remote_addr));
}
Err(err) => warn!("Failed to accept incoming connection - {:?}", err),
+2 -5
View File
@@ -101,11 +101,8 @@ impl MixNode {
) {
info!("Starting socket listener...");
let packet_processor = PacketProcessor::new(
self.sphinx_keypair.private_key(),
node_stats_update_sender,
self.config.get_cache_entry_ttl(),
);
let packet_processor =
PacketProcessor::new(self.sphinx_keypair.private_key(), node_stats_update_sender);
let connection_handler = ConnectionHandler::new(packet_processor, delay_forwarding_channel);