diff --git a/Cargo.lock b/Cargo.lock index 6f6abf4..e481ce4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -466,6 +466,7 @@ dependencies = [ "bitflags 2.3.1", "chacha20poly1305", "entity", + "once_cell", "pbkdf2", "rand", "scrypt", diff --git a/cryptography/Cargo.toml b/cryptography/Cargo.toml index b4f714d..ee4508a 100644 --- a/cryptography/Cargo.toml +++ b/cryptography/Cargo.toml @@ -17,3 +17,4 @@ sea-orm = "0.11.3" bitflags = "2.3.1" arrayvec = "0.7.2" subtle = "2.5.0" +once_cell = "1.18.0" diff --git a/cryptography/src/master_pass.rs b/cryptography/src/master_pass.rs index 01afcf5..5b15bc2 100644 --- a/cryptography/src/master_pass.rs +++ b/cryptography/src/master_pass.rs @@ -1,15 +1,17 @@ use entity::master_pass; +use once_cell::sync::Lazy; use rand::{rngs::OsRng, RngCore}; use scrypt::{scrypt, Params}; use sea_orm::ActiveValue::Set; use subtle::ConstantTimeEq; +static PARAMS: Lazy = Lazy::new(|| Params::new(14, 8, 1, 64).unwrap()); + /// Hashes the password with Scrypt with the given salt #[inline] fn hash_password(password: &[u8], salt: &[u8]) -> [u8; 64] { - let params = Params::new(14, Params::RECOMMENDED_R, Params::RECOMMENDED_P, 64).unwrap(); let mut password_hash = [0; 64]; - scrypt(password, salt, ¶ms, &mut password_hash).unwrap(); + scrypt(password, salt, &PARAMS, &mut password_hash).unwrap(); password_hash }