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()),