24 lines
813 B
Rust
24 lines
813 B
Rust
use argon2::{password_hash::SaltString, Argon2, PasswordHash, PasswordHasher, PasswordVerifier};
|
|
use rand::rngs::OsRng;
|
|
|
|
use crate::error::AppError;
|
|
|
|
pub fn hash_password(password: &str) -> Result<String, AppError> {
|
|
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<bool, AppError> {
|
|
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())
|
|
} |