auth.rs (805B)
1 use argon2::{ 2 password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, 3 Argon2, 4 }; 5 6 use crate::error::AppError; 7 8 pub fn hash_password(password: &str) -> Result<String, AppError> { 9 let salt = SaltString::generate(&mut OsRng); 10 let argon2 = Argon2::default(); 11 let hash = argon2 12 .hash_password(password.as_bytes(), &salt) 13 .map_err(|e| AppError::Database(format!("Password hash error: {}", e)))?; 14 Ok(hash.to_string()) 15 } 16 17 pub fn verify_password(password: &str, hash: &str) -> Result<bool, AppError> { 18 let parsed_hash = PasswordHash::new(hash) 19 .map_err(|e| AppError::Database(format!("Invalid hash format: {}", e)))?; 20 Ok(Argon2::default() 21 .verify_password(password.as_bytes(), &parsed_hash) 22 .is_ok()) 23 }