Files
imphnen-backend-service/imphnen-libs/src/argon/mod.rs
T

30 lines
819 B
Rust
Raw Normal View History

2025-02-07 22:26:32 +07:00
use argon2::{
2025-02-16 01:09:55 +07:00
Argon2,
password_hash::{
Error, PasswordHash, PasswordHasher, PasswordVerifier, SaltString,
rand_core::OsRng,
},
2025-02-07 22:26:32 +07:00
};
pub fn hash_password(password: &str) -> Result<String, Error> {
2025-02-16 01:09:55 +07:00
let salt = SaltString::generate(&mut OsRng);
let argon2 = Argon2::new(
argon2::Algorithm::Argon2id,
argon2::Version::V0x13,
argon2::Params::new(1024, 1, 1, None).unwrap() // 1MB, 1 iteration, 1 thread (faster, less secure)
);
2025-02-16 01:09:55 +07:00
let password_hash = argon2
.hash_password(password.as_bytes(), &salt)?
.to_string();
Ok(password_hash)
2025-02-07 22:26:32 +07:00
}
pub fn verify_password(password: &str, hash: &str) -> Result<bool, Error> {
2025-02-16 01:09:55 +07:00
let parsed_hash = PasswordHash::new(hash)?;
let argon2 = Argon2::default();
match argon2.verify_password(password.as_bytes(), &parsed_hash) {
Ok(_) => Ok(true),
Err(_) => Ok(false),
}
2025-02-07 22:26:32 +07:00
}