diff --git a/crypto/keys/ed25519.rs b/crypto/keys/ed25519.rs
index 2ed603663b048770633b8277ba1749993c151705..0446123d96a381193f82b0b897b7e15716ebb720 100644
--- a/crypto/keys/ed25519.rs
+++ b/crypto/keys/ed25519.rs
@@ -20,10 +20,10 @@
 //! [`KeyPairGenerator`]: struct.KeyPairGenerator.html
 
 use std::collections::hash_map::DefaultHasher;
+use std::fmt::Debug;
 use std::fmt::Display;
 use std::fmt::Error;
 use std::fmt::Formatter;
-use std::fmt::Debug;
 use std::hash::{Hash, Hasher};
 
 use base58::{FromBase58, FromBase58Error, ToBase58};
@@ -304,8 +304,8 @@ impl KeyPairFromSaltedPasswordGenerator {
     pub fn generate(&self, password: &[u8], salt: &[u8]) -> KeyPair {
         let mut seed = [0u8; 32];
         crypto::scrypt::scrypt(
-            password,
             salt,
+            password,
             &crypto::scrypt::ScryptParams::new(self.log_n, self.r, self.p),
             &mut seed,
         );
@@ -452,6 +452,19 @@ Timestamp: 0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
         assert!(pubkey.verify(message.as_bytes(), &sig));
     }
 
+    #[test]
+    fn keypair_generate_() {
+        let keypair = KeyPairFromSaltedPasswordGenerator::with_default_parameters().generate(
+            "JhxtHB7UcsDbA9wMSyMKXUzBZUQvqVyB32KwzS9SWoLkjrUhHV".as_bytes(),
+            "JhxtHB7UcsDbA9wMSyMKXUzBZUQvqVyB32KwzS9SWoLkjrUhHV_".as_bytes(),
+        );
+
+        assert_eq!(
+            keypair.pubkey.to_string(),
+            "7iMV3b6j2hSj5WtrfchfvxivS9swN3opDgxudeHq64fb"
+        );
+    }
+
     #[test]
     fn keypair_generate_sign_and_verify() {
         let keypair = KeyPairFromSaltedPasswordGenerator::with_default_parameters()
diff --git a/crypto/keys/mod.rs b/crypto/keys/mod.rs
index 3797503e92903035a90105675e2a47526c7cb97b..d5e93c414ddf5be646de0fbbc2bbb924fddaaa2b 100644
--- a/crypto/keys/mod.rs
+++ b/crypto/keys/mod.rs
@@ -46,8 +46,8 @@
 //! `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`
 //! with `=` as padding character.
 
-use std::fmt::Display;
 use std::fmt::Debug;
+use std::fmt::Display;
 use std::hash::Hash;
 
 use base58::ToBase58;
diff --git a/crypto/lib.rs b/crypto/lib.rs
index fc0ac35e9a25d309d8ea6b10c143202e9cb1294b..2b9b8d18520c0074ef9974bc54fd4d4f6839f224 100644
--- a/crypto/lib.rs
+++ b/crypto/lib.rs
@@ -16,9 +16,11 @@
 //! Provide wrappers for cryptographic building blocks used by Duniter.
 
 #![cfg_attr(feature = "strict", deny(warnings))]
-#![deny(missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
-        trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
-        unused_qualifications)]
+#![deny(
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
+    unused_qualifications
+)]
 
 extern crate base58;
 extern crate base64;
diff --git a/documents/blockchain/mod.rs b/documents/blockchain/mod.rs
index 10b092cbfce7bd8156c7d29d005edea318532572..dee4005a95245c05687b01dc9189c7c10ab5a20d 100644
--- a/documents/blockchain/mod.rs
+++ b/documents/blockchain/mod.rs
@@ -138,7 +138,7 @@ pub trait DocumentParser<S, D, E> {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use duniter_crypto::keys::{Signature, ed25519};
+    use duniter_crypto::keys::{ed25519, Signature};
 
     // simple text document for signature testing
     #[derive(Debug, Clone)]
diff --git a/documents/blockchain/v10/documents/block.rs b/documents/blockchain/v10/documents/block.rs
index 19a01f565779ff414f07ddf72d6f2e926a084948..68fed87fc505acc5c461b1fe44ea79c170113fae 100644
--- a/documents/blockchain/v10/documents/block.rs
+++ b/documents/blockchain/v10/documents/block.rs
@@ -17,16 +17,16 @@
 
 use crypto::digest::Digest;
 use crypto::sha2::Sha256;
-use duniter_crypto::keys::{PrivateKey, ed25519};
+use duniter_crypto::keys::{ed25519, PrivateKey};
 
-use {BlockHash, BlockId, Blockstamp, Hash};
-use blockchain::{BlockchainProtocol, Document, IntoSpecializedDocument};
-use blockchain::v10::documents::{TextDocument, V10Document};
+use blockchain::v10::documents::certification::CertificationDocument;
 use blockchain::v10::documents::identity::IdentityDocument;
 use blockchain::v10::documents::membership::MembershipDocument;
-use blockchain::v10::documents::certification::CertificationDocument;
 use blockchain::v10::documents::revocation::RevocationDocument;
 use blockchain::v10::documents::transaction::TransactionDocument;
+use blockchain::v10::documents::{TextDocument, V10Document};
+use blockchain::{BlockchainProtocol, Document, IntoSpecializedDocument};
+use {BlockHash, BlockId, Blockstamp, Hash};
 
 /// Currency parameters
 #[derive(Debug, Copy, Clone, PartialEq)]
@@ -324,10 +324,10 @@ impl IntoSpecializedDocument<BlockchainProtocol> for BlockDocument {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use std::ops::Deref;
-    use duniter_crypto::keys::{PublicKey, Signature};
-    use blockchain::{Document, DocumentParser, VerificationResult};
     use blockchain::v10::documents::V10DocumentParser;
+    use blockchain::{Document, DocumentParser, VerificationResult};
+    use duniter_crypto::keys::{PublicKey, Signature};
+    use std::ops::Deref;
 
     #[test]
     fn generate_and_verify_empty_block() {
diff --git a/documents/blockchain/v10/documents/certification.rs b/documents/blockchain/v10/documents/certification.rs
index 6c0e3c0fe15c35011ef15bbebfe223464ae5f551..47ee1365b702a9f47ef6ea4b25087e1bdad7ce15 100644
--- a/documents/blockchain/v10/documents/certification.rs
+++ b/documents/blockchain/v10/documents/certification.rs
@@ -15,13 +15,13 @@
 
 //! Wrappers around Certification documents.
 
-use duniter_crypto::keys::{PublicKey, Signature, ed25519};
+use duniter_crypto::keys::{ed25519, PublicKey, Signature};
 use regex::Regex;
 
-use Blockstamp;
-use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
 use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder,
                                  V10Document, V10DocumentParsingError};
+use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
+use Blockstamp;
 
 lazy_static! {
     static ref CERTIFICATION_REGEX: Regex = Regex::new(
@@ -255,8 +255,8 @@ impl StandardTextDocumentParser for CertificationDocumentParser {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
     use blockchain::VerificationResult;
+    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
 
     #[test]
     fn generate_real_document() {
diff --git a/documents/blockchain/v10/documents/identity.rs b/documents/blockchain/v10/documents/identity.rs
index cf40450c53ea1e4971b4c8448f06b62349179892..9eb9417791b6253f6e899807e8ad05e509b57919 100644
--- a/documents/blockchain/v10/documents/identity.rs
+++ b/documents/blockchain/v10/documents/identity.rs
@@ -15,13 +15,13 @@
 
 //! Wrappers around Identity documents.
 
-use duniter_crypto::keys::{PublicKey, ed25519};
+use duniter_crypto::keys::{ed25519, PublicKey};
 use regex::Regex;
 
-use Blockstamp;
-use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
 use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder,
                                  V10Document, V10DocumentParsingError};
+use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
+use Blockstamp;
 
 lazy_static! {
     static ref IDENTITY_REGEX: Regex = Regex::new(
@@ -208,8 +208,8 @@ impl StandardTextDocumentParser for IdentityDocumentParser {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
     use blockchain::{Document, VerificationResult};
+    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
 
     #[test]
     fn generate_real_document() {
diff --git a/documents/blockchain/v10/documents/membership.rs b/documents/blockchain/v10/documents/membership.rs
index b8e5652b45ea912cb35af050a0f8742629bdd677..f56937b2055212295ebae95bcc0d03d66dce4089 100644
--- a/documents/blockchain/v10/documents/membership.rs
+++ b/documents/blockchain/v10/documents/membership.rs
@@ -15,13 +15,13 @@
 
 //! Wrappers around Membership documents.
 
-use duniter_crypto::keys::{PublicKey, ed25519};
+use duniter_crypto::keys::{ed25519, PublicKey};
 use regex::Regex;
 
-use Blockstamp;
-use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
 use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder,
                                  V10Document, V10DocumentParsingError};
+use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
+use Blockstamp;
 
 lazy_static! {
     static ref MEMBERSHIP_REGEX: Regex = Regex::new(
@@ -255,8 +255,8 @@ impl StandardTextDocumentParser for MembershipDocumentParser {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
     use blockchain::VerificationResult;
+    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
 
     #[test]
     fn generate_real_document() {
diff --git a/documents/blockchain/v10/documents/mod.rs b/documents/blockchain/v10/documents/mod.rs
index 90d8fd78a49ffec58a119bc1a01cc45daa7c35d2..bf8658d5d4aa5475934833d96355af5891b9e919 100644
--- a/documents/blockchain/v10/documents/mod.rs
+++ b/documents/blockchain/v10/documents/mod.rs
@@ -19,26 +19,26 @@ extern crate crypto;
 
 use self::crypto::digest::Digest;
 
-use duniter_crypto::keys::{Signature, ed25519};
-use regex::Regex;
-use blockchain::{Document, DocumentBuilder, DocumentParser};
 use blockchain::v10::documents::identity::IdentityDocumentParser;
+use blockchain::{Document, DocumentBuilder, DocumentParser};
+use duniter_crypto::keys::{ed25519, Signature};
+use regex::Regex;
 
+pub mod block;
+pub mod certification;
 pub mod identity;
 pub mod membership;
-pub mod certification;
 pub mod revocation;
 pub mod transaction;
-pub mod block;
 
-pub use blockchain::v10::documents::identity::{IdentityDocument, IdentityDocumentBuilder};
-pub use blockchain::v10::documents::membership::{MembershipDocument, MembershipDocumentParser};
+pub use blockchain::v10::documents::block::BlockDocument;
 pub use blockchain::v10::documents::certification::{CertificationDocument,
                                                     CertificationDocumentParser};
+pub use blockchain::v10::documents::identity::{IdentityDocument, IdentityDocumentBuilder};
+pub use blockchain::v10::documents::membership::{MembershipDocument, MembershipDocumentParser};
 pub use blockchain::v10::documents::revocation::{RevocationDocument, RevocationDocumentParser};
 pub use blockchain::v10::documents::transaction::{TransactionDocument, TransactionDocumentBuilder,
                                                   TransactionDocumentParser};
-pub use blockchain::v10::documents::block::BlockDocument;
 
 // Use of lazy_static so the regex is only compiled at first use.
 lazy_static! {
diff --git a/documents/blockchain/v10/documents/revocation.rs b/documents/blockchain/v10/documents/revocation.rs
index 43b58913a7d9698f0be6f3a6806ee03a1b0e48c8..7568a35560420d73f0b8b6a9573274a3b2dd1ab9 100644
--- a/documents/blockchain/v10/documents/revocation.rs
+++ b/documents/blockchain/v10/documents/revocation.rs
@@ -15,13 +15,13 @@
 
 //! Wrappers around Revocation documents.
 
-use duniter_crypto::keys::{PublicKey, Signature, ed25519};
+use duniter_crypto::keys::{ed25519, PublicKey, Signature};
 use regex::Regex;
 
-use Blockstamp;
-use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
 use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder,
                                  V10Document, V10DocumentParsingError};
+use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
+use Blockstamp;
 
 lazy_static! {
     static ref REVOCATION_REGEX: Regex = Regex::new(
@@ -219,8 +219,8 @@ impl StandardTextDocumentParser for RevocationDocumentParser {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
     use blockchain::VerificationResult;
+    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
 
     #[test]
     fn generate_real_document() {
diff --git a/documents/blockchain/v10/documents/transaction.rs b/documents/blockchain/v10/documents/transaction.rs
index 4ec453d21bdd0a941b2db7e249848dae9a3aee0b..5d579a889c29f52ade2962c4df3a5082e3f4b444 100644
--- a/documents/blockchain/v10/documents/transaction.rs
+++ b/documents/blockchain/v10/documents/transaction.rs
@@ -17,14 +17,14 @@
 
 use std::ops::Deref;
 
-use duniter_crypto::keys::{PublicKey, ed25519};
+use duniter_crypto::keys::{ed25519, PublicKey};
 use regex::Regex;
 use regex::RegexBuilder;
 
-use Blockstamp;
-use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
 use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder,
                                  V10Document, V10DocumentParsingError};
+use blockchain::{BlockchainProtocol, Document, DocumentBuilder, IntoSpecializedDocument};
+use Blockstamp;
 
 lazy_static! {
     static ref TRANSACTION_REGEX_SIZE: &'static usize = &40_000_000;
@@ -658,8 +658,8 @@ impl StandardTextDocumentParser for TransactionDocumentParser {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
     use blockchain::{Document, VerificationResult};
+    use duniter_crypto::keys::{PrivateKey, PublicKey, Signature};
 
     #[test]
     fn generate_real_document() {
diff --git a/documents/lib.rs b/documents/lib.rs
index 702879a4d0b2915cc92bb87e4f198531e7e34ebf..7b360c1bc061797119d80bb00c1d51e1200ab302 100644
--- a/documents/lib.rs
+++ b/documents/lib.rs
@@ -16,9 +16,11 @@
 //! Implements the Duniter Documents Protocol.
 
 #![cfg_attr(feature = "strict", deny(warnings))]
-#![deny(missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
-        trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
-        unused_qualifications)]
+#![deny(
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
+    unused_qualifications
+)]
 
 extern crate base58;
 extern crate base64;
diff --git a/wotb/legacy.rs b/wotb/legacy.rs
index 402288a35ed1420d851fefd76f980b3aefc4773d..47da7fdfa8c28121311109a7c402d37e6e00ae8a 100644
--- a/wotb/legacy.rs
+++ b/wotb/legacy.rs
@@ -16,21 +16,21 @@
 //! Provide a legacy implementation of `WebOfTrust` storage and calculations.
 //! Its mostly translated directly from the original C++ code.
 
-use WotDistance;
-use std::collections::HashSet;
 use std::collections::hash_set::Iter;
-use std::rc::Rc;
+use std::collections::HashSet;
 use std::fs::File;
 use std::io::prelude::*;
+use std::rc::Rc;
+use WotDistance;
 
 use bincode::{deserialize, serialize, Infinite};
 
 use HasLinkResult;
-use WotDistanceParameters;
-use WebOfTrust;
-use RemLinkResult;
 use NewLinkResult;
 use NodeId;
+use RemLinkResult;
+use WebOfTrust;
+use WotDistanceParameters;
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
 struct Node {
diff --git a/wotb/lib.rs b/wotb/lib.rs
index 21767540d87c164dc6de54cdeadbfd35cf174c9d..5a388cf262f94e78228840c26fe360ba17753d9c 100644
--- a/wotb/lib.rs
+++ b/wotb/lib.rs
@@ -27,9 +27,11 @@
 //! [js-tests]: https://github.com/duniter/wotb/blob/master/wotcpp/webOfTrust.cpp
 
 #![cfg_attr(feature = "strict", deny(warnings))]
-#![deny(missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
-        trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
-        unused_qualifications)]
+#![deny(
+    missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts,
+    trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces,
+    unused_qualifications
+)]
 
 extern crate bincode;
 extern crate byteorder;
@@ -45,9 +47,9 @@ pub use legacy::LegacyWebOfTrust;
 
 use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
 
-use std::io::prelude::*;
 use std::fs;
 use std::fs::File;
+use std::io::prelude::*;
 
 /// Wrapper for a node id.
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
diff --git a/wotb/rusty.rs b/wotb/rusty.rs
index be68c8a413a236d47b5a543a96ab940516c8393a..b87ed0e89362fda6b7386b0f13d4db360a0f453b 100644
--- a/wotb/rusty.rs
+++ b/wotb/rusty.rs
@@ -15,15 +15,15 @@
 
 //! Experimental implementation of the Web of Trust in a more "rusty" style.
 
-use std::collections::HashSet;
 use rayon::prelude::*;
+use std::collections::HashSet;
 
+use HasLinkResult;
+use NewLinkResult;
+use RemLinkResult;
 use WebOfTrust;
 use WotDistance;
 use WotDistanceParameters;
-use HasLinkResult;
-use RemLinkResult;
-use NewLinkResult;
 
 use NodeId;