23 lines
821 B
Rust
23 lines
821 B
Rust
use argon2::{
|
|
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
|
Argon2,
|
|
};
|
|
|
|
pub fn hash_password(password: &str) -> anyhow::Result<String> {
|
|
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<bool> {
|
|
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())
|
|
}
|