From 1527feccadf77170444fe3a64cb43a1dac3c8c86 Mon Sep 17 00:00:00 2001 From: Wolmin Date: Wed, 7 Dec 2022 13:33:54 +0100 Subject: [PATCH 1/2] Remove loop and delete psk file --- client/network/src/service.rs | 76 +++++++---------------------------- 1 file changed, 15 insertions(+), 61 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index cf6c525c822d1..d50587ca1f7cf 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -80,7 +80,8 @@ use std::{ borrow::Cow, cmp, collections::{HashMap, HashSet}, - fs, iter, + fs, fs::remove_file, + iter, marker::PhantomData, num::NonZeroUsize, pin::Pin, @@ -153,7 +154,7 @@ pub struct QkdResponse { async fn get_pre_shared_key_rpc(rpc_addr: &AddrWithPeerId, qkd_addr: &AddrWithPeerId, local_peer_id: PeerId) -> Result { let mut rpc_url = "http://".to_string(); - rpc_url.push_str(&rpc_addr.host.to_string()); + rpc_url.push_str(&rpc_addr.host.to_string()); let client = match HttpClientBuilder::default().build(rpc_url.clone()) { Ok(client) => client, @@ -180,7 +181,7 @@ async fn get_pre_shared_key_rpc(rpc_addr: &AddrWithPeerId, qkd_addr: &AddrWithPe qkd_url.push_str(&path); qkd_url.push_str("/dec_keys?key_ID="); qkd_url.push_str(&response.key_ID); - + let qkd_response = match reqwest::get(qkd_url).await { Ok(qkd_response) => qkd_response, Err(err) => { @@ -229,7 +230,7 @@ async fn get_pre_shared_key_rpc(rpc_addr: &AddrWithPeerId, qkd_addr: &AddrWithPe for i in 0..32 { psk_bytes[i] = qkd_key_bytes[i] ^ psk_bytes[i]; } - + let psk_string = hex::encode(psk_bytes.clone()); Ok(psk_string) @@ -246,7 +247,7 @@ where + Send + Sync + 'static, -{ +{ /// Creates the network service. /// /// Returns a `NetworkWorker` that implements `Future` and must be regularly polled in order @@ -257,61 +258,6 @@ where let local_identity = params.network_config.node_key.clone().into_keypair()?; let local_public = local_identity.public(); let local_peer_id = local_public.to_peer_id(); - - loop { - match params.network_config.pre_shared_key.clone().into_pre_share_key() { - Ok(_) => { - log::info!("Found file with pre-shared key."); - break; - }, - Err(err) => { - log::info!("File with pre-shared key not found."); - log::info!("Error: {:?}", err); - let addresses = params.network_config.external_nodes_rpc.clone(); - if addresses.is_empty() { - return Err(Error::NotFoundRpcAddresses) - } - - let qkd_addrs = params.network_config.qkd_addr.clone(); - - 'mainFor: for addr in &addresses { - for qkd_addr in &qkd_addrs { - if addr.peer_id == qkd_addr.peer_id { - match get_pre_shared_key_rpc(addr, qkd_addr, local_peer_id).await { - Ok(psk) => { - if !psk.is_empty() { - - log::info!( - "Request for a pre-shared key to a node with peer id: {:?}", - addr.peer_id.to_string(), - ); - - params.network_config.pre_shared_key.clone().write_psk_to_file(psk.as_bytes()); - - log::info!( - "The pre-shared key was sucessfully redone and writen to the file from the node with peer id: {:?}", - addr.peer_id.to_string(), - ); - - break 'mainFor; - } - }, - Err(err) => { - log::info!( - "Failed to get a common key from a node with a peer id: {:?}. Error: {:?}", - addr.peer_id.to_string(), - err - ); - continue 'mainFor; - } - } - } - } - log::info!("No QKD address is configured for the node with peer id {:?}", addr.peer_id.to_string()); - } - } - } - } params.network_config.pre_shared_key.clone().into_pre_share_key()?; @@ -646,6 +592,14 @@ where )?; (params.transactions_handler_executor)(tx_handler.run().boxed()); + // after loading psk we can delete it + let _result = match remove_file("psk") { + Err(err) => { + error!("Couldn't remove psk file: {:?}", err) + }, + _ => {} + }; + Ok(NetworkWorker { external_addresses, num_connected, @@ -661,7 +615,7 @@ where boot_node_ids, }) } - + //TODO doc /// doc pub fn new_for_test(mut params: Params) -> Result { From 74a1dae0382d3bdffa2a98480001608c031c8cd0 Mon Sep 17 00:00:00 2001 From: Wolmin Date: Thu, 8 Dec 2022 17:00:57 +0100 Subject: [PATCH 2/2] Remove unused imports, funcs and structs --- client/network/src/service.rs | 105 +--------------------------------- 1 file changed, 1 insertion(+), 104 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index d50587ca1f7cf..801c2ea024c28 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -30,7 +30,7 @@ use crate::{ behaviour::{self, Behaviour, BehaviourOut}, bitswap::Bitswap, - config::{parse_str_addr, Params, TransportConfig, AddrWithPeerId}, + config::{parse_str_addr, Params, TransportConfig}, discovery::DiscoveryConfig, error::Error, network_state::{ @@ -102,13 +102,6 @@ mod tests; pub use libp2p::identity::{error::DecodingError, Keypair, PublicKey}; use sc_network_common::service::{NetworkBlock, NetworkRequest, NetworkTransaction}; -use jsonrpsee::{ - core::client::{ClientT, self}, - http_client::HttpClientBuilder, - rpc_params, -}; -use serde::{Deserialize, Serialize}; -use base64::decode; /// Substrate network service. Handles network IO and manages connectivity. pub struct NetworkService { @@ -140,102 +133,6 @@ pub struct NetworkService { _marker: PhantomData, } -#[allow(non_snake_case)] -#[derive(Serialize, Deserialize)] -pub struct QkdKey { - pub key_ID: String, - pub key: String, -} - -#[derive(Deserialize)] -pub struct QkdResponse { - pub keys: Vec, -} - -async fn get_pre_shared_key_rpc(rpc_addr: &AddrWithPeerId, qkd_addr: &AddrWithPeerId, local_peer_id: PeerId) -> Result { - let mut rpc_url = "http://".to_string(); - rpc_url.push_str(&rpc_addr.host.to_string()); - - let client = match HttpClientBuilder::default().build(rpc_url.clone()) { - Ok(client) => client, - Err(_) => { - return Err(Error::BuildHttpClientForRpcError{url: rpc_url}) - } - }; - - let params_rpc = rpc_params![local_peer_id.to_string()]; - - let response = match client.request::("psk_getKey", params_rpc).await { - Ok(response) => response, - Err(err) => { - return Err(Error::GetPreSharedKeyError { - err: err.to_string() - }) - } - }; - - let mut qkd_url = String::new(); - qkd_url.push_str("http://"); - qkd_url.push_str(&qkd_addr.host.to_string()); - let path: String = qkd_addr.path.clone().unwrap(); - qkd_url.push_str(&path); - qkd_url.push_str("/dec_keys?key_ID="); - qkd_url.push_str(&response.key_ID); - - let qkd_response = match reqwest::get(qkd_url).await { - Ok(qkd_response) => qkd_response, - Err(err) => { - return Err(Error::GetPreSharedKeyError { - err: err.to_string() - }) - } - }; - - let body = match qkd_response.text().await { - Ok(b) => b, - Err(_) => { - return Err(Error::GetPreSharedKeyError{ - err: "Convert QKD response to string failed.".to_string()} - ) - } - }; - - let psk_key = match serde_json::from_str::(&body) { - Ok(psk_key) => psk_key, - Err(_) => { - return Err(Error::GetPreSharedKeyError { - err: "Parsing QKD response failed.".to_string() - }) - } - }; - - let qkd_key_bytes = match decode(psk_key.keys[0].key.clone()) { - Ok(qkd_key_bytes) => qkd_key_bytes, - Err(_) => { - return Err(Error::GetPreSharedKeyError { - err: "Decode QKD key failed.".to_string() - }) - } - }; - - let mut psk_bytes = match hex::decode(response.key.clone()) { - Ok(psk_bytes) => psk_bytes, - Err(_) => { - return Err(Error::GetPreSharedKeyError { - err: "Decode pre-shared key failed.".to_string() - }) - } - }; - - for i in 0..32 { - psk_bytes[i] = qkd_key_bytes[i] ^ psk_bytes[i]; - } - - let psk_string = hex::encode(psk_bytes.clone()); - - Ok(psk_string) -} - impl NetworkWorker where B: BlockT + 'static,