use argon2::{Argon2, PasswordHash, PasswordVerifier, password_hash::{ Error, PasswordHasher, SaltString, rand_core::OsRng }}; pub fn hash_password(password: &str) -> Result { let argon2 = Argon2::default(); let salt = SaltString::generate(&mut OsRng); Ok(argon2.hash_password(password.as_bytes(), &salt)?.to_string()) } pub fn check_password(password: &str, password_hash: &str) -> Result { let argon2 = Argon2::default(); let hash = PasswordHash::new(password_hash)?; Ok(argon2.verify_password(password.as_bytes(), &hash).is_ok()) } #[cfg(test)] mod tests { use super::*; #[test] fn test_password_hashing() { let passwords = vec!["password", "test1", "random"]; for password in &passwords { let hash = hash_password(password).unwrap(); assert!(check_password(password, &hash).unwrap()); } } }