diff --git a/lib/modules/ws2p/ws2p-messages/v2/connect.rs b/lib/modules/ws2p/ws2p-messages/v2/connect.rs index b316bd38795b3cae40ead1416cada67f360ccebf..2a0c826925027718ac667b8da492f2a93dc6fd71 100644 --- a/lib/modules/ws2p/ws2p-messages/v2/connect.rs +++ b/lib/modules/ws2p/ws2p-messages/v2/connect.rs @@ -69,7 +69,7 @@ impl Default for WS2Pv2ConnectMsg { fn default() -> Self { WS2Pv2ConnectMsg { challenge: Hash::random(), - api_features: WS2PFeatures(vec![]), + api_features: WS2PFeatures([0u8; 4]), connect_type: WS2Pv2ConnectType::OutgoingServer, peer_card: None, chunkstamp: None, @@ -118,7 +118,7 @@ mod tests { "000007722B243094269E548F600BD34D73449F7578C05BD370A6D301D20B5F10", ) .unwrap(), - api_features: WS2PFeatures(vec![7u8]), + api_features: WS2PFeatures([7u8, 0, 0, 0]), connect_type: WS2Pv2ConnectType::OutgoingClient, peer_card: Some(peer), chunkstamp: Some( diff --git a/lib/modules/ws2p/ws2p-messages/v2/ok.rs b/lib/modules/ws2p/ws2p-messages/v2/ok.rs index 063347de8380969b1465cc709aa48afa473ba5cd..6ec077f19d98697b85b49773d03bf2430afedcd0 100644 --- a/lib/modules/ws2p/ws2p-messages/v2/ok.rs +++ b/lib/modules/ws2p/ws2p-messages/v2/ok.rs @@ -33,7 +33,6 @@ mod tests { use super::super::*; use super::*; use crate::tests::*; - use dubp_common_doc::Blockstamp; use std::num::NonZeroU16; #[test] diff --git a/lib/modules/ws2p/ws2p-protocol/src/orchestrator.rs b/lib/modules/ws2p/ws2p-protocol/src/orchestrator.rs index 7d388be9e6022b8b7f5429d5cfe9fd9621654fc6..009649e165316ab59319a27a3ef042b8809b5232 100644 --- a/lib/modules/ws2p/ws2p-protocol/src/orchestrator.rs +++ b/lib/modules/ws2p/ws2p-protocol/src/orchestrator.rs @@ -35,6 +35,7 @@ use crate::MySelfWs2pNode; use dubp_common_doc::BlockHash; use dubp_common_doc::Blockstamp; use dubp_common_doc::CurrencyName; +use dup_crypto::keys::{KeyPair, SignatorEnum}; use durs_common_tools::fatal_error; use durs_message::DursMsg; use durs_module::ModuleMessage; @@ -83,6 +84,8 @@ pub struct WS2POrchestrator { router_sender: mpsc::Sender<RouterThreadMessage<DursMsg>>, /// the channel used to send message to orchestrator itself pub sender: mpsc::Sender<OrchestratorMsg<DursMsg>>, + /// Self signator + self_signator: SignatorEnum, /// the channel used to receive message receiver: mpsc::Receiver<OrchestratorMsg<DursMsg>>, /// channel used to give orders to outgoing orchestrator @@ -99,6 +102,7 @@ impl WS2POrchestrator { module_receiver: mpsc::Receiver<DursMsg>, api_name: ApiName, self_node: MySelfWs2pNode, + self_signator: SignatorEnum, ) -> (WS2POutgoingOrchestrator<WS>, WS2POrchestrator) { // starts proxy thread let (orchestrator_sender, orchestrator_receiver) = start_proxy_thread( @@ -109,12 +113,19 @@ impl WS2POrchestrator { api_name, ); + // Regenerate self_signator for main orchestrator + let self_signator_2 = self_node + .my_key_pair + .generate_signator() + .expect("corrupted keypair"); // TODO handle error + // OUTGOING: initialize the outgoing orchestrator let outgoing_orchestrator = WS2POutgoingOrchestrator::<WS>::new( static_name, // how to find currency before sync ? CurrencyName("mok".to_string()), self_node, + self_signator, router_sender.clone(), orchestrator_sender.clone(), ); @@ -127,6 +138,7 @@ impl WS2POrchestrator { peers: HashMap::new(), router_sender, sender: orchestrator_sender, + self_signator: self_signator_2, receiver: orchestrator_receiver, outgoing_sender: outgoing_orchestrator.sender.clone(), }; diff --git a/lib/modules/ws2p/ws2p-protocol/src/orchestrator/outgoing.rs b/lib/modules/ws2p/ws2p-protocol/src/orchestrator/outgoing.rs index a2fbecc7f5f46242e0658e786bae30212fedb7db..d431a9760f1e51eb5575c346ee53d1e1ff64b22a 100644 --- a/lib/modules/ws2p/ws2p-protocol/src/orchestrator/outgoing.rs +++ b/lib/modules/ws2p/ws2p-protocol/src/orchestrator/outgoing.rs @@ -26,6 +26,7 @@ use crate::MySelfWs2pNode; use core::fmt::Debug; use dubp_common_doc::Blockstamp; use dubp_common_doc::CurrencyName; +use dup_crypto::keys::SignatorEnum; use durs_common_tools::fatal_error; use durs_message::requests::*; use durs_message::*; @@ -94,6 +95,8 @@ pub struct WS2POutgoingOrchestrator<WS: WebsocketTrait> { currency: CurrencyName, /// Local node datas self_node: MySelfWs2pNode, + /// Self signator + self_signator: SignatorEnum, /// Outgoing connections quota quota: usize, /// Index hashmap linking NodeFullId to WS2PControllerId @@ -123,6 +126,7 @@ impl<WS: WebsocketTrait> WS2POutgoingOrchestrator<WS> { static_name: ModuleStaticName, currency: CurrencyName, self_node: MySelfWs2pNode, + self_signator: SignatorEnum, router_sender: mpsc::Sender<RouterThreadMessage<DursMsg>>, orchestrator_sender: mpsc::Sender<OrchestratorMsg<DursMsg>>, ) -> WS2POutgoingOrchestrator<WS> { @@ -147,6 +151,7 @@ impl<WS: WebsocketTrait> WS2POutgoingOrchestrator<WS> { endpoints_in_error: HashMap::new(), never_try_endpoints: Vec::new(), self_node, + self_signator, router_sender, sender, receiver, @@ -248,7 +253,7 @@ impl<WS: WebsocketTrait> WS2POutgoingOrchestrator<WS> { WS2Pv2Message::encapsulate_payload( self.currency.clone(), self.self_node.my_node_id, - self.self_node.my_key_pair, + &self.self_signator, WS2Pv2MessagePayload::SyncInfo(sync_info), ) { diff --git a/lib/modules/ws2p/ws2p/src/lib.rs b/lib/modules/ws2p/ws2p/src/lib.rs index e566ea22d50c75627eaede57ec963a14da9ac65f..b9717929ec97494d1031a11cdde51dbab678095b 100644 --- a/lib/modules/ws2p/ws2p/src/lib.rs +++ b/lib/modules/ws2p/ws2p/src/lib.rs @@ -44,7 +44,7 @@ use crate::errors::WS2PError; use crate::websocket::WebsocketConnector; use dubp_common_doc::BlockNumber; use dubp_currency_params::CurrencyName; -use dup_crypto::keys::KeyPairEnum; +use dup_crypto::keys::{KeyPair, KeyPairEnum}; use durs_common_tools::fatal_error; use durs_common_tools::traits::merge::Merge; use durs_conf::DuRsConf; @@ -276,10 +276,13 @@ fn init( // generate node id let node_id = NodeId(rand::thread_rng().gen::<u32>()); + // generate self signator + let self_signator = key_pair.generate_signator().expect("corrupted keypair"); // TODO handle error + // generate peer card let peer_card = if let Ok(peer_card) = generate_peer::_generate_self_peer( CurrencyName("mok".to_string()), // TODO get currency name - key_pair, + &self_signator, node_id, BlockNumber(0), // yet unknown TODO replace when known vec![], @@ -293,7 +296,7 @@ fn init( let self_node = MySelfWs2pNode::new( node_id, key_pair, - WS2PFeatures(vec![]), + WS2PFeatures([0u8; 4]), PeerCard::V11(peer_card), ); @@ -305,6 +308,7 @@ fn init( module_receiver, ApiName(constants::API_NAME.to_owned()), self_node.clone(), + self_signator, ); debug!("initialized orchestrators"); diff --git a/lib/modules/ws2p/ws2p/src/services/outgoing.rs b/lib/modules/ws2p/ws2p/src/services/outgoing.rs index 3b5546cbbbd29af7a2f8e8041650207e762c15ef..027edd34689de8c7e7072bd01fca518fb5642324 100644 --- a/lib/modules/ws2p/ws2p/src/services/outgoing.rs +++ b/lib/modules/ws2p/ws2p/src/services/outgoing.rs @@ -71,6 +71,7 @@ impl WS2POutgoingOrchestrator { currency: CurrencyName, ws2p_conf: &WS2PConf, self_node: MySelfWs2pNode, + self_signator: SignatorEnum, ) -> WS2POutgoingOrchestrator { // Create service channel let (sender, receiver) = mpsc::channel(); @@ -82,6 +83,7 @@ impl WS2POutgoingOrchestrator { endpoints_in_error: HashMap::new(), never_try_endpoints: Vec::new(), self_node, + self_signator, receiver, sender, } diff --git a/lib/modules/ws2p/ws2p/tests/connection_negociation.rs b/lib/modules/ws2p/ws2p/tests/connection_negociation.rs index 344ad21a7a03e6871dbdbcc6e7d1ad72783d296b..897583d492a20181cebd78d696322fdf3dec4011 100644 --- a/lib/modules/ws2p/ws2p/tests/connection_negociation.rs +++ b/lib/modules/ws2p/ws2p/tests/connection_negociation.rs @@ -62,7 +62,7 @@ fn server_node() -> MySelfWs2pNode { // generate peer card let peer_card = if let Ok(peer_card) = generate_peer::_generate_self_peer( CurrencyName("mok".to_string()), - KeyPairEnum::Ed25519(keypair1()), + &SignatorEnum::Ed25519(keypair1().generate_signator().expect("corrupted keypair")), NodeId(0), BlockNumber(0), vec![], @@ -84,7 +84,7 @@ fn client_node() -> MySelfWs2pNode { // generate peer card let peer_card = if let Ok(peer_card) = generate_peer::_generate_self_peer( CurrencyName("mok".to_string()), - KeyPairEnum::Ed25519(keypair2()), + &SignatorEnum::Ed25519(keypair2().generate_signator().expect("corrupted keypair")), NodeId(0), BlockNumber(0), vec![],