bitwarden_core/auth/password/
mod.rs1use bitwarden_crypto::{CryptoError, HashPurpose, Kdf, MasterKey};
2
3mod policy;
4pub(crate) use policy::satisfies_policy;
5pub use policy::MasterPasswordPolicyOptions;
6mod validate;
7pub(crate) use validate::{validate_password, validate_password_user_key};
8mod strength;
9pub(crate) use strength::password_strength;
10
11pub(crate) fn determine_password_hash(
12 email: &str,
13 kdf: &Kdf,
14 password: &str,
15 purpose: HashPurpose,
16) -> Result<String, CryptoError> {
17 let master_key = MasterKey::derive(password, email, kdf)?;
18 master_key.derive_master_key_hash(password.as_bytes(), purpose)
19}
20
21#[cfg(test)]
22mod tests {
23 use std::num::NonZeroU32;
24
25 use super::*;
26
27 #[test]
28 fn test_determine_password_hash() {
29 use super::determine_password_hash;
30
31 let password = "password123";
32 let email = "[email protected]";
33 let kdf = Kdf::PBKDF2 {
34 iterations: NonZeroU32::new(100_000).unwrap(),
35 };
36 let purpose = HashPurpose::LocalAuthorization;
37
38 let result = determine_password_hash(email, &kdf, password, purpose).unwrap();
39
40 assert_eq!(result, "7kTqkF1pY/3JeOu73N9kR99fDDe9O1JOZaVc7KH3lsU=");
41 }
42}