diff --git a/CHANGELOG.md b/CHANGELOG.md index 1aa9c9de451c1db35aad4626c9d0ebdab75d8e5e..f9b6c995b854a6cd11dc7e856484b5575fd81475 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - ReleaseDate +### Added + +- Scrypt KDF can be optional + ## [0.14.0] - 2020-04-02 ### Fixed diff --git a/Cargo.toml b/Cargo.toml index 9d7135cc78e0f83360911b0ece0f8242e461241d..4e0cb0f5dd974d0bdab4efedf8b95b9c58a2de84 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ bs58 = "0.3.0" byteorder = "1.3.2" curve25519-dalek = "2.0.0" ring = "0.16.9" -scrypt = { version = "0.2", default-features = false } +scrypt = { version = "0.2", default-features = false, optional = true } serde = { version = "1.0.*", features = ["derive"], optional = true } thiserror = "1.0.11" unwrap = "1.2.1" @@ -42,8 +42,9 @@ required-features = ["criterion"] default = ["dewif", "private_message", "rand", "ser"] aes256 = ["aes"] -dewif = ["aes256", "arrayvec"] +dewif = ["aes256", "arrayvec", "scrypt_feature"] x25519 = [] private_message = ["arrayvec", "x25519", "rand"] rand = [] +scrypt_feature = ["scrypt"] ser = ["serde"] diff --git a/src/keys/ed25519.rs b/src/keys/ed25519.rs index 455aa4a24f4c4c2e8b5410d2acca4cb8ca0b3d73..86df55bad10d0020c49f55506c04c8475af4f820 100644 --- a/src/keys/ed25519.rs +++ b/src/keys/ed25519.rs @@ -42,6 +42,7 @@ use std::hash::{Hash, Hasher}; #[cfg(feature = "ser")] use std::marker::PhantomData; use unwrap::unwrap; +#[cfg(feature = "scrypt_feature")] use zeroize::Zeroize; /// Size of a public key in bytes @@ -361,6 +362,7 @@ impl KeyPairFromSeed32Generator { } } +#[cfg(feature = "scrypt_feature")] #[derive(Zeroize)] #[zeroize(drop)] /// Salted password @@ -369,19 +371,21 @@ pub struct SaltedPassword { password: String, } +#[cfg(feature = "scrypt_feature")] impl SaltedPassword { /// Create new salted password pub fn new(salt: String, password: String) -> SaltedPassword { SaltedPassword { salt, password } } } - +#[cfg(feature = "scrypt_feature")] /// Keypair generator with given parameters for `scrypt` keypair function. #[derive(Copy, Clone)] pub struct KeyPairFromSaltedPasswordGenerator { scrypt_params: scrypt::ScryptParams, } +#[cfg(feature = "scrypt_feature")] impl KeyPairFromSaltedPasswordGenerator { /// Create a `KeyPairGenerator` with default arguments `(log_n: 12, r: 16, p: 1)` pub fn with_default_parameters() -> KeyPairFromSaltedPasswordGenerator { @@ -688,6 +692,7 @@ Timestamp: 0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 } #[test] + #[cfg(feature = "scrypt_feature")] fn keypair_generate() { let key_pair1 = KeyPairFromSaltedPasswordGenerator::with_default_parameters().generate( SaltedPassword::new( @@ -723,6 +728,7 @@ Timestamp: 0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 #[test] #[cfg(feature = "ser")] + #[cfg(feature = "scrypt_feature")] fn keypair_generate_sign_and_verify() { let keypair = KeyPairFromSaltedPasswordGenerator::with_default_parameters().generate( SaltedPassword::new("password".to_owned(), "salt".to_owned()),