nxtgauge-backend-rust/crates/auth/src/crypto.rs

24 lines
821 B
Rust
Raw Normal View History

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())
}