diff --git a/cryptography/src/master_pass.rs b/cryptography/src/master_pass.rs index 5b15bc2..4d5f5f1 100644 --- a/cryptography/src/master_pass.rs +++ b/cryptography/src/master_pass.rs @@ -5,12 +5,15 @@ use scrypt::{scrypt, Params}; use sea_orm::ActiveValue::Set; use subtle::ConstantTimeEq; -static PARAMS: Lazy = Lazy::new(|| Params::new(14, 8, 1, 64).unwrap()); +const HASH_LENGTH: usize = 64; +const SALT_LENGTH: usize = 64; + +static PARAMS: Lazy = Lazy::new(|| Params::new(14, 8, 1, HASH_LENGTH).unwrap()); /// Hashes the password with Scrypt with the given salt #[inline] -fn hash_password(password: &[u8], salt: &[u8]) -> [u8; 64] { - let mut password_hash = [0; 64]; +fn hash_password(password: &[u8], salt: &[u8]) -> [u8; HASH_LENGTH] { + let mut password_hash = [0; HASH_LENGTH]; scrypt(password, salt, &PARAMS, &mut password_hash).unwrap(); password_hash } @@ -36,13 +39,13 @@ impl MasterPassFromUnencryptedExt for master_pass::ActiveModel { /// Hashes the password and creates an ActiveModel with all fields set to Set variant #[inline] fn from_unencrypted(user_id: u64, password: &str) -> Self { - let mut salt = vec![0; 64]; + let mut salt = [0; SALT_LENGTH]; OsRng.fill_bytes(&mut salt); - let password_hash = Set(hash_password(password.as_bytes(), &salt).to_vec()); + let password_hash = hash_password(password.as_bytes(), &salt); Self { user_id: Set(user_id), - salt: Set(salt), - password_hash, + salt: Set(salt.into()), + password_hash: Set(password_hash.into()), } } }