diff --git a/Cargo.lock b/Cargo.lock index 12bb427b40b397ab78a6d33ba0ea18743bbe783c..dd1f3de45ae6800100ae7e5786f33ce738e69147 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -376,7 +376,6 @@ dependencies = [ "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "shrinkwraprs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/lib/core/conf/src/keys.rs b/lib/core/conf/src/keys.rs index 84bb05790b4b6d42cdbb31c73a14d495e3323ef4..1fd36b91371071cd35cf3d05886c889fbc4898ef 100644 --- a/lib/core/conf/src/keys.rs +++ b/lib/core/conf/src/keys.rs @@ -201,20 +201,29 @@ mod tests { ) ); assert_eq!( - result_key_pairs.network_keypair.seed(), + result_key_pairs.network_keypair.seed().clone(), Seed::from_base58(BASE58_SEED_INIT).expect("Wrong data in BASE58_SEED_INIT"), ); // We expect member key to update as intended assert_eq!( - result_key_pairs.member_keypair.unwrap().public_key(), + result_key_pairs + .member_keypair + .clone() + .unwrap() + .public_key(), PubKey::Ed25519( ed25519::PublicKey::from_base58(BASE58_PUB_TEST) .expect("Wrong data in BASE58_PUB_TEST") ) ); assert_eq!( - result_key_pairs.member_keypair.unwrap().seed(), + result_key_pairs + .member_keypair + .clone() + .unwrap() + .seed() + .clone(), Seed::from_base58(BASE58_SEED_TEST).expect("Wrong data in BASE58_SEED_TEST"), ); } @@ -240,7 +249,7 @@ mod tests { ) ); assert_eq!( - result_key_pairs.network_keypair.seed(), + result_key_pairs.network_keypair.seed().clone(), Seed::from_base58(BASE58_SEED_TEST).expect("Wrong data in BASE58_SEED_TEST") ); // We expect member key not to change @@ -273,20 +282,29 @@ mod tests { ) ); assert_ne!( - result_key_pairs.network_keypair.seed(), + result_key_pairs.network_keypair.seed().clone(), Seed::from_base58(BASE58_SEED_INIT).expect("Wrong data in BASE58_SEED_TEST") ); // We expect member key not to change assert_eq!( - result_key_pairs.member_keypair.unwrap().public_key(), + result_key_pairs + .member_keypair + .clone() + .unwrap() + .public_key(), PubKey::Ed25519( ed25519::PublicKey::from_base58(BASE58_PUB_INIT) .expect("Wrong data in BASE58_PUB_TEST") ) ); assert_eq!( - result_key_pairs.member_keypair.unwrap().seed(), + result_key_pairs + .member_keypair + .clone() + .unwrap() + .seed() + .clone(), Seed::from_base58(BASE58_SEED_INIT).expect("Wrong data in BASE58_SEED_TEST") ); } @@ -317,7 +335,7 @@ mod tests { ) ); assert_eq!( - result_key_pairs.network_keypair.seed(), + result_key_pairs.network_keypair.seed().clone(), Seed::from_base58(BASE58_SEED_INIT).expect("Wrong data in BASE58_SEED_TEST") ); diff --git a/lib/core/conf/src/lib.rs b/lib/core/conf/src/lib.rs index 03bd0fb03e8bba1f20b3d427da9ca2c72d980a10..4a41a3a9c78e61130399c8012f533737d7001925 100644 --- a/lib/core/conf/src/lib.rs +++ b/lib/core/conf/src/lib.rs @@ -355,7 +355,7 @@ impl DursConfTrait for DuRsConf { } } -#[derive(Debug, Copy, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq)] /// Keypairs filled in by the user (via a file or by direct entry in the terminal). pub struct DuniterKeyPairs { /// Keypair used by the node to sign its communications with other nodes. This keypair is mandatory, if it's not filled in, a random keypair is generated. @@ -369,12 +369,12 @@ impl Serialize for DuniterKeyPairs { where S: Serializer, { - let member_seed = if let Some(member_keypair) = self.member_keypair { + let member_seed = if let Some(ref member_keypair) = self.member_keypair { member_keypair.seed().to_string() } else { String::from("") }; - let member_pub = if let Some(member_keypair) = self.member_keypair { + let member_pub = if let Some(ref member_keypair) = self.member_keypair { member_keypair.public_key().to_string() } else { String::from("") diff --git a/lib/core/core/src/lib.rs b/lib/core/core/src/lib.rs index b17037a92025891b34a6da629064e93d2d71822b..8c0ad96623400cd27bd9eb539d07ac8284b999a4 100644 --- a/lib/core/core/src/lib.rs +++ b/lib/core/core/src/lib.rs @@ -405,14 +405,13 @@ impl DursCore<DuRsConf> { .modules() .get(&NM::name().to_string().as_str()) .cloned(); - let keypairs = self.keypairs; // Load module conf and keys let ((module_conf, _), required_keys) = get_module_conf_and_keys::<NM>( self.currency_name.as_ref(), &soft_meta_datas.conf.get_global_conf(), module_conf_json, - keypairs, + self.keypairs.clone(), )?; let sync_params = network_sync.clone(); @@ -491,13 +490,12 @@ impl DursCore<DuRsConf> { .modules() .get(&M::name().to_string().as_str()) .cloned(); - let keypairs = self.keypairs; // Load module conf and keys let ((module_conf, _), required_keys) = get_module_conf_and_keys::<M>( self.currency_name.as_ref(), &soft_meta_datas.conf.get_global_conf(), module_conf_json, - keypairs, + self.keypairs.clone(), )?; let thread_builder = thread::Builder::new().name(M::name().0.into()); diff --git a/lib/core/module/src/lib.rs b/lib/core/module/src/lib.rs index 2f6a682456b2a43948fb5c22ed07311aec1b8114..71400044fe953298a07a1c463e80dec43cce924c 100644 --- a/lib/core/module/src/lib.rs +++ b/lib/core/module/src/lib.rs @@ -264,7 +264,7 @@ pub enum RequiredKeys { None(), } -#[derive(Debug, Copy, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq)] /// Contains the keys the module needs pub enum RequiredKeysContent { /// Contains the member keypair (private key included). diff --git a/lib/crypto/src/bases/b58.rs b/lib/crypto/src/bases/b58.rs index 8c28ba8888a46fb0cc8cac5672a43ff955c88541..53686c245d28914adc20486480e47c3c3b144507 100644 --- a/lib/crypto/src/bases/b58.rs +++ b/lib/crypto/src/bases/b58.rs @@ -46,7 +46,7 @@ pub fn str_base58_to_32bytes(base58_data: &str) -> Result<[u8; 32], BaseConverti } } -/// Create an array of 64bytes from a Base58 string. +/*/// Create an array of 64bytes from a Base58 string. pub fn str_base58_to_64bytes(base58_data: &str) -> Result<[u8; 64], BaseConvertionError> { match base58_data.from_base58() { Ok(result) => { @@ -70,4 +70,4 @@ pub fn str_base58_to_64bytes(base58_data: &str) -> Result<[u8; 64], BaseConverti Err(BaseConvertionError::InvalidBaseConverterLength) } } -} +}*/ diff --git a/lib/crypto/src/keys/bin_signable.rs b/lib/crypto/src/keys/bin_signable.rs index b0a89418215668fc04248ce2d15058279fd3162d..23ed48f15b38b472b700f797fbc2a39dcb1868dc 100644 --- a/lib/crypto/src/keys/bin_signable.rs +++ b/lib/crypto/src/keys/bin_signable.rs @@ -116,7 +116,7 @@ mod tests { #[test] fn test_bin_signable() { - let key_pair = ed25519::KeyPairFromSeedGenerator::generate(&Seed::new([ + let key_pair = ed25519::KeyPairFromSeedGenerator::generate(Seed::new([ 0u8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ])); diff --git a/lib/crypto/src/keys/ed25519.rs b/lib/crypto/src/keys/ed25519.rs index db072b99b1de8331e7db54f2e979dd5c55063f2a..1803fdac244312af6d7f0f236873723ed2adfe72 100644 --- a/lib/crypto/src/keys/ed25519.rs +++ b/lib/crypto/src/keys/ed25519.rs @@ -24,7 +24,7 @@ use super::PublicKey as PublicKeyMethods; use crate::bases::*; use base58::ToBase58; use base64; -use clear_on_drop::ClearOnDrop; +use clear_on_drop::clear::Clear; use ring::signature::{Ed25519KeyPair as RingKeyPair, KeyPair, UnparsedPublicKey, ED25519}; use serde::de::{Deserialize, Deserializer, Error, SeqAccess, Visitor}; use serde::ser::{Serialize, SerializeTuple, Serializer}; @@ -213,7 +213,7 @@ impl super::Signator for Signator { } /// Store a ed25519 cryptographic key pair (`PublicKey` + `PrivateKey`) -#[derive(Debug, Copy, Clone, Eq)] +#[derive(Debug, Clone, Eq)] pub struct Ed25519KeyPair { /// Store a Ed25519 public key. pub pubkey: PublicKey, @@ -221,6 +221,13 @@ pub struct Ed25519KeyPair { pub seed: Seed, } +impl Drop for Ed25519KeyPair { + #[inline] + fn drop(&mut self) { + self.seed.clear(); + } +} + impl Display for Ed25519KeyPair { fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { write!(f, "({}, hidden)", self.pubkey.to_base58()) @@ -247,8 +254,8 @@ impl super::KeyPair for Ed25519KeyPair { self.pubkey } - fn seed(&self) -> Seed { - self.seed + fn seed(&self) -> &Seed { + &self.seed } fn verify( @@ -263,12 +270,7 @@ impl super::KeyPair for Ed25519KeyPair { impl Ed25519KeyPair { /// Generate random keypair pub fn generate_random() -> Self { - // generate random seed - let mut random_seed = Seed::random(); - // For security, clear automatically random_seed when it's droped - let random_seed = ClearOnDrop::new(&mut random_seed); - // Generate and return keypair from seed - KeyPairFromSeedGenerator::generate(&random_seed) + KeyPairFromSeedGenerator::generate(Seed::random()) } } @@ -281,13 +283,12 @@ impl KeyPairFromSeedGenerator { /// /// The [`PublicKey`](struct.PublicKey.html) will be able to verify messaged signed with /// the [`PrivateKey`](struct.PrivateKey.html). - pub fn generate(seed: &Seed) -> Ed25519KeyPair { + pub fn generate(seed: Seed) -> Ed25519KeyPair { let ring_key_pair = RingKeyPair::from_seed_unchecked(seed.as_ref()) .expect("dev error: fail to generate ed25519 keypair."); - Ed25519KeyPair { pubkey: get_ring_ed25519_pubkey(&ring_key_pair), - seed: *seed, + seed, } } } @@ -340,11 +341,9 @@ impl KeyPairFromSaltedPasswordGenerator { /// the [`PrivateKey`](struct.PrivateKey.html). pub fn generate(&self, password: &[u8], salt: &[u8]) -> Ed25519KeyPair { // Generate seed from tuple (password + salt) - let mut seed = self.generate_seed(password, salt); - // For security, clear automatically seed when it's droped - let seed = ClearOnDrop::new(&mut seed); + let seed = self.generate_seed(password, salt); // Generate keypair from seed - KeyPairFromSeedGenerator::generate(&seed) + KeyPairFromSeedGenerator::generate(seed) } } @@ -577,7 +576,7 @@ UniqueID: tic Timestamp: 0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 "; - let signator = KeyPairFromSeedGenerator::generate(&seed) + let signator = KeyPairFromSeedGenerator::generate(seed) .generate_signator() .expect("fail to generate signator !"); let pubkey = signator.public_key(); @@ -620,7 +619,7 @@ Timestamp: 0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 // Test key_pair equality let same_key_pair = key_pair2.clone(); - let other_key_pair = KeyPairFromSeedGenerator::generate(&Seed::new([ + let other_key_pair = KeyPairFromSeedGenerator::generate(Seed::new([ 0u8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ])); diff --git a/lib/crypto/src/keys/mod.rs b/lib/crypto/src/keys/mod.rs index 090d5f00d56cc656aefaa79393cc4c04401d842c..c4ab3fd63aeca427aec9858db7f57ae2c9465ca6 100644 --- a/lib/crypto/src/keys/mod.rs +++ b/lib/crypto/src/keys/mod.rs @@ -326,7 +326,7 @@ pub trait KeyPair: Clone + Display + Debug + PartialEq + Eq { fn public_key(&self) -> <Self::Signator as Signator>::PublicKey; /// Get `Seed` - fn seed(&self) -> Seed; + fn seed(&self) -> &Seed; /// Verify a signature with public key. fn verify( @@ -351,7 +351,7 @@ pub trait Signator: Debug { } /// Store a cryptographic key pair. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq)] pub enum KeyPairEnum { /// Store a ed25519 key pair. Ed25519(ed25519::Ed25519KeyPair), @@ -370,8 +370,8 @@ impl GetKeysAlgo for KeyPairEnum { impl Display for KeyPairEnum { fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { - match *self { - KeyPairEnum::Ed25519(ed25519_keypair) => { + match self { + KeyPairEnum::Ed25519(ref ed25519_keypair) => { write!(f, "({}, hidden)", ed25519_keypair.pubkey.to_base58()) } KeyPairEnum::Schnorr() => fatal_error!("Schnorr algo not yet supported !"), @@ -383,28 +383,30 @@ impl KeyPair for KeyPairEnum { type Signator = SignatorEnum; fn generate_signator(&self) -> Result<Self::Signator, SignError> { - match *self { - KeyPairEnum::Ed25519(ed25519_keypair) => { + match self { + KeyPairEnum::Ed25519(ref ed25519_keypair) => { Ok(SignatorEnum::Ed25519(ed25519_keypair.generate_signator()?)) } KeyPairEnum::Schnorr() => fatal_error!("Schnorr algo not yet supported !"), } } fn public_key(&self) -> <Self::Signator as Signator>::PublicKey { - match *self { - KeyPairEnum::Ed25519(ed25519_keypair) => PubKey::Ed25519(ed25519_keypair.public_key()), + match self { + KeyPairEnum::Ed25519(ref ed25519_keypair) => { + PubKey::Ed25519(ed25519_keypair.public_key()) + } KeyPairEnum::Schnorr() => fatal_error!("Schnorr algo not yet supported !"), } } - fn seed(&self) -> Seed { + fn seed(&self) -> &Seed { match *self { - KeyPairEnum::Ed25519(ed25519_keypair) => ed25519_keypair.seed(), + KeyPairEnum::Ed25519(ref ed25519_keypair) => &ed25519_keypair.seed(), KeyPairEnum::Schnorr() => fatal_error!("Schnorr algo not yet supported !"), } } fn verify(&self, message: &[u8], signature: &Sig) -> Result<(), SigError> { - match *self { - KeyPairEnum::Ed25519(ed25519_keypair) => { + match self { + KeyPairEnum::Ed25519(ref ed25519_keypair) => { if let Sig::Ed25519(ed25519_sig) = signature { ed25519_keypair.verify(message, ed25519_sig) } else { @@ -456,7 +458,7 @@ mod tests { use ring::{agreement, rand}; pub fn valid_key_pair_1() -> KeyPairEnum { - KeyPairEnum::Ed25519(ed25519::KeyPairFromSeedGenerator::generate(&Seed::new([ + KeyPairEnum::Ed25519(ed25519::KeyPairFromSeedGenerator::generate(Seed::new([ 59u8, 106, 39, 188, 206, 182, 164, 45, 98, 163, 168, 208, 42, 111, 13, 115, 101, 50, 21, 119, 29, 226, 67, 166, 58, 192, 72, 161, 139, 89, 218, 41, ]))) @@ -544,7 +546,7 @@ mod tests { } fn false_key_pair_ed25519() -> ed25519::Ed25519KeyPair { - ed25519::KeyPairFromSeedGenerator::generate(&Seed::new([ + ed25519::KeyPairFromSeedGenerator::generate(Seed::new([ 0u8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ])) @@ -553,7 +555,7 @@ mod tests { #[test] fn key_pair() { let false_key_pair_ed25519 = false_key_pair_ed25519(); - let false_key_pair = KeyPairEnum::Ed25519(false_key_pair_ed25519); + let false_key_pair = KeyPairEnum::Ed25519(false_key_pair_ed25519.clone()); assert_eq!(KeysAlgo::Ed25519, false_key_pair.algo()); assert_eq!(KeysAlgo::Schnorr, KeyPairEnum::Schnorr().algo()); @@ -565,7 +567,7 @@ mod tests { PubKey::Ed25519(false_key_pair_ed25519.pubkey), false_key_pair.public_key() ); - assert_eq!(false_key_pair_ed25519.seed, false_key_pair.seed()); + assert_eq!(false_key_pair_ed25519.seed, false_key_pair.seed().clone()); assert_eq!( Err(SigError::InvalidSig), false_key_pair.verify( diff --git a/lib/crypto/src/keys/seed.rs b/lib/crypto/src/keys/seed.rs index 34facb3b3d7e1bb4c1f513cf172e771ce20c2bdf..bb56fc05092bf4fe64181c289b185cac8be22bc3 100644 --- a/lib/crypto/src/keys/seed.rs +++ b/lib/crypto/src/keys/seed.rs @@ -23,7 +23,7 @@ use ring::rand; use std::fmt::{self, Debug, Display, Formatter}; /// Store a 32 bytes seed used to generate keys. -#[derive(Copy, Clone, Default, Deserialize, PartialEq, Eq, Hash, Serialize)] +#[derive(Clone, Copy, Default, Deserialize, PartialEq, Eq, Hash, Serialize)] pub struct Seed([u8; 32]); impl AsRef<[u8]> for Seed { @@ -60,15 +60,26 @@ impl Seed { #[inline] /// Create seed from base58 str pub fn from_base58(base58_str: &str) -> Result<Self, BaseConvertionError> { - Ok(Seed(b58::str_base58_to_32bytes(base58_str)?)) + Ok(Seed::new(b58::str_base58_to_32bytes(base58_str)?)) } #[inline] /// Generate random seed pub fn random() -> Seed { if let Ok(random_bytes) = rand::generate::<[u8; 32]>(&rand::SystemRandom::new()) { - Seed(random_bytes.expose()) + Seed::new(random_bytes.expose()) } else { fatal_error!("System error: fail to generate random seed !") } } } + +#[cfg(test)] +mod tests { + + use super::*; + + #[test] + fn test_gen_random_seed() { + assert_ne!(Seed::random(), Seed::random()); + } +} diff --git a/lib/crypto/src/lib.rs b/lib/crypto/src/lib.rs index 33ac9c5c86fae352b1fef32143d3e10b6792a512..3a02fca5b94eebb3660f1613be02584fae5f09fc 100644 --- a/lib/crypto/src/lib.rs +++ b/lib/crypto/src/lib.rs @@ -40,39 +40,3 @@ pub mod bases; pub mod hashs; pub mod keys; pub mod rand; - -#[cfg(test)] -mod tests { - - use super::*; - use crate::keys::Seed; - use ring::signature::Ed25519KeyPair; - use ring::signature::KeyPair; - - #[test] - fn test_ring_gen_keypair() { - let seed = Seed::new([ - 61u8, 245, 136, 162, 155, 50, 205, 43, 116, 15, 45, 84, 138, 54, 114, 214, 71, 213, 11, - 251, 135, 182, 202, 131, 48, 91, 166, 226, 40, 255, 251, 172, - ]); - - let legacy_key_pair = keys::ed25519::KeyPairFromSeedGenerator::generate(&seed); - - let ring_key_pair: Ed25519KeyPair = - Ed25519KeyPair::from_seed_and_public_key(seed.as_ref(), &legacy_key_pair.pubkey.0) - .expect("fail to generate ring key pair !"); - - let ring_pubkey: <Ed25519KeyPair as KeyPair>::PublicKey = *ring_key_pair.public_key(); - let mut ring_pubkey_bytes: [u8; 32] = [0u8; 32]; - ring_pubkey_bytes.copy_from_slice(ring_pubkey.as_ref()); - - assert_eq!(legacy_key_pair.pubkey.0, ring_pubkey_bytes); - - println!( - "ring pubkey={}", - keys::ed25519::PublicKey(ring_pubkey_bytes) - ); - - //panic!() - } -} diff --git a/lib/dubp/common-doc/Cargo.toml b/lib/dubp/common-doc/Cargo.toml index 77106f7d5d1d05be1d36b85537472e508809ab6c..bd8df1a59ec01d0be314012a7400a3020d2c7c50 100644 --- a/lib/dubp/common-doc/Cargo.toml +++ b/lib/dubp/common-doc/Cargo.toml @@ -19,8 +19,7 @@ failure = "0.1.5" json-pest-parser = { path = "../../tools/json-pest-parser", version = "0.2.0" } pest = "2.1.0" pest_derive = "2.1.0" -serde = "1.0.*" -serde_derive = "1.0.*" +serde = { version = "1.0.*", features = ["derive"] } serde_json = "1.0.*" shrinkwraprs = "0.2.*" log = "0.4.*" diff --git a/lib/dubp/user-docs/src/documents/certification/v10.rs b/lib/dubp/user-docs/src/documents/certification/v10.rs index d21a823c3623e72bc2a19d3b8b288367881db554..797f20d7c4278b10032c027cdf1e3cf0020e4cf2 100644 --- a/lib/dubp/user-docs/src/documents/certification/v10.rs +++ b/lib/dubp/user-docs/src/documents/certification/v10.rs @@ -338,10 +338,9 @@ mod tests { use dup_crypto::keys::{PublicKey, Signature}; #[test] - fn generate_real_document() { - let keypair = ed25519::KeyPairFromSeedGenerator::generate( - &Seed::from_base58("4tNQ7d9pj2Da5wUVoW9mFn7JjuPoowF977au8DdhEjVR").unwrap(), - ); + fn generate_real_certification_document() { + let seed = Seed::from_base58("4tNQ7d9pj2Da5wUVoW9mFn7JjuPoowF977au8DdhEjVR").unwrap(); + let keypair = ed25519::KeyPairFromSeedGenerator::generate(seed); let pubkey = PubKey::Ed25519(keypair.public_key()); let signator = SignatorEnum::Ed25519(keypair.generate_signator().expect("fail to gen signator")); diff --git a/lib/dubp/user-docs/src/documents/identity/v10.rs b/lib/dubp/user-docs/src/documents/identity/v10.rs index 82741e9bde8231213da73fb935c99c4eae2d4e13..e0b3b73443dd0eac8c3cea6c3ac40d25bd048270 100644 --- a/lib/dubp/user-docs/src/documents/identity/v10.rs +++ b/lib/dubp/user-docs/src/documents/identity/v10.rs @@ -273,7 +273,7 @@ mod tests { #[test] fn generate_real_document() { let keypair = ed25519::KeyPairFromSeedGenerator::generate( - &Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), + Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), ); let pubkey = PubKey::Ed25519(keypair.public_key()); let signator = diff --git a/lib/dubp/user-docs/src/documents/membership/v10.rs b/lib/dubp/user-docs/src/documents/membership/v10.rs index 966c9f6698029b51c15a2b60c1586524bc764595..da31a8b39a69212e53b56afd037b9fbff8db6724 100644 --- a/lib/dubp/user-docs/src/documents/membership/v10.rs +++ b/lib/dubp/user-docs/src/documents/membership/v10.rs @@ -336,7 +336,7 @@ mod tests { #[test] fn generate_real_document() { let keypair = ed25519::KeyPairFromSeedGenerator::generate( - &Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), + Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), ); let pubkey = PubKey::Ed25519(keypair.public_key()); let signator = diff --git a/lib/dubp/user-docs/src/documents/revocation/v10.rs b/lib/dubp/user-docs/src/documents/revocation/v10.rs index daf0539e97a853b52751cddc0e1d8b61b80ea535..f222c982dd44e2407811c673d18783d7535cafcc 100644 --- a/lib/dubp/user-docs/src/documents/revocation/v10.rs +++ b/lib/dubp/user-docs/src/documents/revocation/v10.rs @@ -304,7 +304,7 @@ mod tests { #[test] fn generate_real_document() { let keypair = ed25519::KeyPairFromSeedGenerator::generate( - &Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), + Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), ); let pubkey = PubKey::Ed25519(keypair.public_key()); let signator = @@ -331,14 +331,14 @@ mod tests { identity_sig: &identity_sig, }; - /*println!( + println!( "Signatures = {:?}", builder .build_and_sign(vec![SignatorEnum::Ed25519( keypair.generate_signator().expect("fail to gen signator") )]) .signatures() - );*/ + ); assert!(builder .build_with_signature(vec![sig]) diff --git a/lib/dubp/user-docs/src/documents/transaction.rs b/lib/dubp/user-docs/src/documents/transaction.rs index 38bf5a7eafefad8cf12d0d60a8a8a1b318491b32..23d579b31de2bdb17819a3a7bf021f6df403f720 100644 --- a/lib/dubp/user-docs/src/documents/transaction.rs +++ b/lib/dubp/user-docs/src/documents/transaction.rs @@ -952,7 +952,7 @@ mod tests { #[test] fn generate_real_document() { let keypair = ed25519::KeyPairFromSeedGenerator::generate( - &Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), + Seed::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(), ); let pubkey = PubKey::Ed25519(keypair.public_key()); let signator = diff --git a/lib/dunp/network-documents/src/lib.rs b/lib/dunp/network-documents/src/lib.rs index 573c1acf6e092f9514f5fc60a183a7f537f2426d..2cd0d00f91bf70c4130d8e82dcf0ec9f572c842d 100644 --- a/lib/dunp/network-documents/src/lib.rs +++ b/lib/dunp/network-documents/src/lib.rs @@ -164,7 +164,7 @@ mod tests { 61u8, 245, 136, 162, 155, 50, 205, 43, 116, 15, 45, 84, 138, 54, 114, 214, 71, 213, 11, 251, 135, 182, 202, 131, 48, 91, 166, 226, 40, 255, 251, 172, ]); - ed25519::KeyPairFromSeedGenerator::generate(&seed) + ed25519::KeyPairFromSeedGenerator::generate(seed) } #[test] diff --git a/lib/modules/ws2p-v1-legacy/src/lib.rs b/lib/modules/ws2p-v1-legacy/src/lib.rs index 2463631b01b12d63c4ce42b5b3650e5b571153c2..d2e5ee1eb45e87acc75ab31e8409e13f4804c116 100644 --- a/lib/modules/ws2p-v1-legacy/src/lib.rs +++ b/lib/modules/ws2p-v1-legacy/src/lib.rs @@ -280,6 +280,12 @@ impl WS2Pv1Module { key_pair: KeyPairEnum, router_sender: mpsc::Sender<RouterThreadMessage<DursMsg>>, ) -> WS2Pv1Module { + let my_signator = if let Ok(signator) = key_pair.generate_signator() { + signator + } else { + fatal_error!("Your key pair is corrupted, please recreate it !"); + }; + WS2Pv1Module { router_sender, key_pair, @@ -298,11 +304,7 @@ impl WS2Pv1Module { requests_awaiting_response: HashMap::new(), heads_cache: HashMap::new(), my_head: None, - my_signator: if let Ok(signator) = key_pair.generate_signator() { - signator - } else { - fatal_error!("Your key pair is corrupted, please recreate it !"); - }, + my_signator, uids_cache: HashMap::new(), count_dal_requests: 0, } diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs index 3be33dda2114c6d40bda5c51d01167691ba32238..1306847329e2b59099455dfbdaef77d42370195c 100644 --- a/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs +++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs @@ -134,7 +134,7 @@ pub fn connect_to_without_checking_quotas( let endpoint_copy = endpoint.ep.clone(); let conductor_sender_copy = ws2p_module.main_thread_channel.0.clone(); let currency_copy = ws2p_module.conf.currency.clone(); - let key_pair_copy = ws2p_module.key_pair; + let key_pair_copy = ws2p_module.key_pair.clone(); thread::spawn(move || { let _result = crate::ws_connections::handler::connect_to_ws2p_endpoint( &endpoint_copy, diff --git a/lib/modules/ws2p/ws2p-messages/lib.rs b/lib/modules/ws2p/ws2p-messages/lib.rs index 8b5d399a4508ec1c65328e3f0fdb979e12e0682a..76669500d92b38b0e261120dbcbb0b8500999bac 100644 --- a/lib/modules/ws2p/ws2p-messages/lib.rs +++ b/lib/modules/ws2p/ws2p-messages/lib.rs @@ -179,7 +179,7 @@ mod tests { 228, 125, 124, 120, 57, 212, 246, 250, 139, 246, 62, 26, 56, 241, 175, 123, 151, 209, 5, 106, 2, 148, 43, 101, 118, 160, 233, 7, 112, 222, 0, 169, ]); - ed25519::KeyPairFromSeedGenerator::generate(&seed) + ed25519::KeyPairFromSeedGenerator::generate(seed) } pub fn create_endpoint_v11() -> EndpointV2 { diff --git a/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs b/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs index 0164d0a68dc4cd35c5b11fd7e99a39db5ccd4ac2..34f9b2671e99615b225c8cf41de9199fc2d340b2 100644 --- a/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs +++ b/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs @@ -70,6 +70,12 @@ impl WS2PControllerMetaDatas { currency: CurrencyName, local_node: MySelfWs2pNode, ) -> Self { + let signator = if let Ok(signator) = local_node.my_key_pair.generate_signator() { + signator + } else { + fatal_error!("Your keypair is corrupted, please recreate it !"); + }; + WS2PControllerMetaDatas { challenge, connect_type, @@ -81,11 +87,7 @@ impl WS2PControllerMetaDatas { local_node, remote_connect_type: None, remote_node: None, - signator: if let Ok(signator) = local_node.my_key_pair.generate_signator() { - signator - } else { - fatal_error!("Your keypair is corrupted, please recreate it !"); - }, + signator, spam_interval: false, spam_counter: 0, state: WS2PConnectionState::TryToOpenWS, diff --git a/lib/modules/ws2p/ws2p-protocol/src/lib.rs b/lib/modules/ws2p/ws2p-protocol/src/lib.rs index 2e79c20617160984e054e9990fb43d635a76ae38..2f0a93997480e358fabb57d270ea3a3d9b83a3bc 100644 --- a/lib/modules/ws2p/ws2p-protocol/src/lib.rs +++ b/lib/modules/ws2p/ws2p-protocol/src/lib.rs @@ -39,7 +39,7 @@ use durs_network_documents::{NodeFullId, NodeId}; use durs_ws2p_messages::v2::api_features::WS2PFeatures; /// Store self WS2P properties -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct MySelfWs2pNode { /// Local node id pub my_node_id: NodeId, diff --git a/lib/modules/ws2p/ws2p/src/controllers/incoming_connections.rs b/lib/modules/ws2p/ws2p/src/controllers/incoming_connections.rs index 041af7403059ca89feef3a6b5efeb22fd9e6cac0..d3e306d1cc82e071105fe281edf9a09a893f04c8 100644 --- a/lib/modules/ws2p/ws2p/src/controllers/incoming_connections.rs +++ b/lib/modules/ws2p/ws2p/src/controllers/incoming_connections.rs @@ -46,7 +46,7 @@ pub fn listen_on_ws2p_v2_endpoint<A: ToSocketAddrs + Debug>( Hash::random(), WS2Pv2ConnectType::Incoming, currency.clone(), - *self_node, + self_node.clone(), ), orchestrator_sender.clone(), ) { diff --git a/lib/modules/ws2p/ws2p/src/controllers/outgoing_connections.rs b/lib/modules/ws2p/ws2p/src/controllers/outgoing_connections.rs index 3c492f0752dd84ac8337b86ee97367aaf6775e8b..dcabd55e52affd675e19ed91e847518f3e0ab21c 100644 --- a/lib/modules/ws2p/ws2p/src/controllers/outgoing_connections.rs +++ b/lib/modules/ws2p/ws2p/src/controllers/outgoing_connections.rs @@ -56,7 +56,7 @@ pub fn connect_to_ws2p_v2_endpoint( Hash::random(), WS2Pv2ConnectType::OutgoingServer, currency.clone(), - *self_node, + self_node.clone(), ), orchestrator_sender.clone(), ) { diff --git a/lib/modules/ws2p/ws2p/src/services/mod.rs b/lib/modules/ws2p/ws2p/src/services/mod.rs index 34ac134ab378e6f3c7042e94b28639e5ded302fe..cbd379be523f0b6cdabeb1b0bf58e9335648d979 100644 --- a/lib/modules/ws2p/ws2p/src/services/mod.rs +++ b/lib/modules/ws2p/ws2p/src/services/mod.rs @@ -29,7 +29,7 @@ pub enum WsError { } /// Store self WS2P properties -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct MySelfWs2pNode { /// Local node id pub my_node_id: NodeId, diff --git a/lib/modules/ws2p/ws2p/tests/connection_negociation.rs b/lib/modules/ws2p/ws2p/tests/connection_negociation.rs index ae944334f4a71e8c92e454594e09ef9f27e73f36..0d7f5d7439aff45eb72b7775123ba8f4d80341de 100644 --- a/lib/modules/ws2p/ws2p/tests/connection_negociation.rs +++ b/lib/modules/ws2p/ws2p/tests/connection_negociation.rs @@ -44,7 +44,7 @@ pub fn keypair1() -> ed25519::Ed25519KeyPair { 61u8, 245, 136, 162, 155, 50, 205, 43, 116, 15, 45, 84, 138, 54, 114, 214, 71, 213, 11, 251, 135, 182, 202, 131, 48, 91, 166, 226, 40, 255, 251, 172, ]); - ed25519::KeyPairFromSeedGenerator::generate(&seed) + ed25519::KeyPairFromSeedGenerator::generate(seed) } pub fn keypair2() -> ed25519::Ed25519KeyPair { @@ -52,7 +52,7 @@ pub fn keypair2() -> ed25519::Ed25519KeyPair { 228, 125, 124, 120, 57, 212, 246, 250, 139, 246, 62, 26, 56, 241, 175, 123, 151, 209, 5, 106, 2, 148, 43, 101, 118, 160, 233, 7, 112, 222, 0, 169, ]); - ed25519::KeyPairFromSeedGenerator::generate(&seed) + ed25519::KeyPairFromSeedGenerator::generate(seed) } fn server_node() -> MySelfWs2pNode {