use argon2::{password_hash::SaltString, Argon2, PasswordHash, PasswordHasher, PasswordVerifier}; use rand::rngs::OsRng; use crate::error::AppError; pub fn hash_password(password: &str) -> Result { let salt = SaltString::generate(&mut OsRng); let argon2 = Argon2::default(); let password_hash = argon2 .hash_password(password.as_bytes(), &salt) .map_err(|e| AppError::PasswordHashError(e.to_string()))?; Ok(password_hash.to_string()) } pub fn verify_password(password: &str, password_hash: &str) -> Result { let parsed_hash = PasswordHash::new(password_hash) .map_err(|e| AppError::PasswordHashError(e.to_string()))?; let result = Argon2::default().verify_password(password.as_bytes(), &parsed_hash); Ok(result.is_ok()) }