use argon2::{ password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, Argon2, }; pub fn hash_password(password: &str) -> anyhow::Result { let salt = SaltString::generate(&mut OsRng); let argon2 = Argon2::default(); let hashed = argon2 .hash_password(password.as_bytes(), &salt) .map_err(|e| anyhow::anyhow!("Failed to hash password: {}", e))? .to_string(); Ok(hashed) } pub fn verify_password(password: &str, hashed_password: &str) -> anyhow::Result { let parsed_hash = PasswordHash::new(hashed_password) .map_err(|e| anyhow::anyhow!("Invalid password hash format: {}", e))?; let argon2 = Argon2::default(); Ok(argon2 .verify_password(password.as_bytes(), &parsed_hash) .is_ok()) }