From 5dacb4d92d07fe2b9b28d1596f2d193f99942bbb Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 14:50:25 +0000 Subject: [PATCH 01/10] lib: re-exporting identity and persistence. --- src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 705f46dba5..ab56f42ee8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1 +1,3 @@ pub mod clients; +pub mod identity; +pub mod persistence; From 8ac6a84a557c43e7509c0488968426f33d8663a7 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:15:28 +0000 Subject: [PATCH 02/10] mixclient: using constant sized bytes for addressing --- src/clients/mix.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/clients/mix.rs b/src/clients/mix.rs index 84ea3df07c..0150bc5c45 100644 --- a/src/clients/mix.rs +++ b/src/clients/mix.rs @@ -1,6 +1,6 @@ -use crate::clients::directory::Client; use sphinx::route::Node as MixNode; use sphinx::SphinxPacket; +use std::net::{Ipv4Addr, SocketAddrV4}; use tokio::prelude::*; pub struct MixClient {} @@ -18,7 +18,12 @@ impl MixClient { ) -> Result<(), Box> { let bytes = packet.to_bytes(); - let mut stream = tokio::net::TcpStream::connect("127.0.0.1:8080").await?; + let b = mix.address; + let host = Ipv4Addr::new(b[0], b[1], b[2], b[3]); + let port: u16 = u16::from_be_bytes([b[4], b[5]]); + let socket_address = SocketAddrV4::new(host, port); + + let mut stream = tokio::net::TcpStream::connect(socket_address).await?; stream.write_all(&bytes[..]).await?; Ok(()) } From 9fe1d236944c3c01f31447f227dc87539f819c33 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:16:02 +0000 Subject: [PATCH 03/10] provider client: fixing warning on unused keepalive check --- src/clients/provider.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clients/provider.rs b/src/clients/provider.rs index fbf644b58c..b723a9fda0 100644 --- a/src/clients/provider.rs +++ b/src/clients/provider.rs @@ -25,7 +25,7 @@ impl ProviderClient { let mut socket = tokio::net::TcpStream::connect("127.0.0.1:9000").await?; println!("keep alive: {:?}", socket.keepalive()); - socket.set_keepalive(Some(tokio::time::Duration::from_secs(2))); + socket.set_keepalive(Some(Duration::from_secs(2))).unwrap(); socket.write_all(&bytes[..]).await?; if let Err(e) = socket.shutdown(Shutdown::Write) { eprintln!("failed to close write part of the socket; err = {:?}", e) From ad0f61ec3b466ca5839e9d87cccc8be2177e5d31 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:19:26 +0000 Subject: [PATCH 04/10] rustfmt --- src/clients/provider.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clients/provider.rs b/src/clients/provider.rs index b723a9fda0..04805142cb 100644 --- a/src/clients/provider.rs +++ b/src/clients/provider.rs @@ -17,7 +17,7 @@ impl ProviderClient { pub async fn retrieve_messages( &self, -// provider: &MixNode, + // provider: &MixNode, ) -> Result<(), Box> { let address = [42; 32]; let pull_request = PullRequest::new(address); From 02986bb2a06302bfaf7f19cfe40453097dd511b0 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:19:36 +0000 Subject: [PATCH 05/10] rustfmt --- src/clients/provider.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/clients/provider.rs b/src/clients/provider.rs index 04805142cb..e5a283e495 100644 --- a/src/clients/provider.rs +++ b/src/clients/provider.rs @@ -1,11 +1,9 @@ +use sfw_provider_requests::requests::{ProviderRequest, PullRequest}; +use sfw_provider_requests::responses::{ProviderResponse, PullResponse}; use sphinx::route::Node as MixNode; -use sphinx::SphinxPacket; -use tokio::prelude::*; -use sfw_provider_requests::*; use std::net::Shutdown; -use std::time::Duration; -use sfw_provider_requests::requests::{PullRequest, ProviderRequest}; -use sfw_provider_requests::responses::{PullResponse, ProviderResponse}; +use tokio::prelude::*; +use tokio::time::Duration; pub struct ProviderClient {} From a25af016a66ad8696058859896be25a384519fac Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:19:44 +0000 Subject: [PATCH 06/10] rustfmt --- src/clients/provider.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/clients/provider.rs b/src/clients/provider.rs index e5a283e495..42f8e45c8a 100644 --- a/src/clients/provider.rs +++ b/src/clients/provider.rs @@ -7,7 +7,6 @@ use tokio::time::Duration; pub struct ProviderClient {} - impl ProviderClient { pub fn new() -> Self { ProviderClient {} From 4a4976d56f36bbcc280869a7c62dff76f680ba78 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:20:16 +0000 Subject: [PATCH 07/10] run: serializing host address to bytes in constant-size format --- src/commands/run.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/commands/run.rs b/src/commands/run.rs index c6567fe037..2a0939e0ce 100644 --- a/src/commands/run.rs +++ b/src/commands/run.rs @@ -82,22 +82,30 @@ fn route_from(topology: &Topology, route_len: usize) -> Vec { let mut route = vec![]; let nodes = topology.mix_nodes.iter(); for mix in nodes.take(route_len) { - let address_bytes = bytes::zero_pad_to_32(mix.host.as_bytes().to_vec()); + let address_bytes = socket_bytes_from_string(mix.host.clone()); let decoded_key_bytes = base64::decode_config(&mix.pub_key, base64::URL_SAFE).unwrap(); let key_bytes = bytes::zero_pad_to_32(decoded_key_bytes); let key = MontgomeryPoint(key_bytes); - let mut sphinx_node = SphinxNode { + let sphinx_node = SphinxNode { address: address_bytes, pub_key: key, }; - - // temporary to make it work locally: - sphinx_node.pub_key = Default::default(); route.push(sphinx_node); } route } +fn socket_bytes_from_string(address: String) -> [u8; 32] { + let socket: SocketAddrV4 = address.parse().unwrap(); + let host_bytes = socket.ip().octets(); + let port_bytes = socket.port().to_be_bytes(); + let mut address_bytes = [0u8; 32]; + address_bytes.copy_from_slice(&host_bytes); + address_bytes[4] = port_bytes[0]; + address_bytes[5] = port_bytes[1]; + address_bytes +} + // TODO: where do we retrieve this guy from? fn get_destination() -> Destination { Destination { From 4fbe24041949875962d2c3563285e74ceb717a00 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:20:25 +0000 Subject: [PATCH 08/10] rustfmt --- src/commands/run.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/commands/run.rs b/src/commands/run.rs index 2a0939e0ce..052538ca53 100644 --- a/src/commands/run.rs +++ b/src/commands/run.rs @@ -46,7 +46,10 @@ pub fn execute(matches: &ArgMatches) { // send to mixnet let mix_client = MixClient::new(); - let result = mix_client.send(packet, route.first().unwrap()).await; + mix_client + .send(packet, route.first().unwrap()) + .await + .unwrap(); println!("packet sent: {:?}", i); i += 1; From b1f4b22e9f8077cd07f81f3c447ad66c1260b401 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:20:41 +0000 Subject: [PATCH 09/10] run: socket address imports --- src/commands/run.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/commands/run.rs b/src/commands/run.rs index 052538ca53..2ebeea8470 100644 --- a/src/commands/run.rs +++ b/src/commands/run.rs @@ -10,6 +10,7 @@ use clap::ArgMatches; use curve25519_dalek::montgomery::MontgomeryPoint; use sphinx::route::Destination; use sphinx::route::Node as SphinxNode; +use std::net::{Ipv4Addr, SocketAddrV4}; use std::time::Duration; use tokio::runtime::Runtime; use tokio::time::{interval_at, Instant}; From 82cf0502b8cd626b9b55b978ea7cf578d9297a73 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Mon, 16 Dec 2019 16:20:50 +0000 Subject: [PATCH 10/10] rustfmt --- src/identity/mixnet.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/identity/mixnet.rs b/src/identity/mixnet.rs index 83507d7d70..3783dffd97 100644 --- a/src/identity/mixnet.rs +++ b/src/identity/mixnet.rs @@ -17,11 +17,9 @@ impl KeyPair { let mut bytes = [0; 32]; bytes.copy_from_slice(&private_bytes[..]); let private = Scalar::from_canonical_bytes(bytes).unwrap(); - let mut bytes = [0; 32]; bytes.copy_from_slice(&public_bytes[..]); let public = MontgomeryPoint(bytes); - KeyPair { private, public } }