23 lines
645 B
Rust
23 lines
645 B
Rust
use anyhow::Result;
|
|
use argon2::{
|
|
password_hash::{rand_core::OsRng, SaltString},
|
|
Argon2, PasswordHash, PasswordHasher, PasswordVerifier,
|
|
};
|
|
|
|
pub fn random() -> String {
|
|
SaltString::generate(&mut OsRng).to_string()
|
|
}
|
|
|
|
pub fn hash(plaintext: &str) -> Result<String> {
|
|
let salt = SaltString::generate(&mut OsRng);
|
|
Ok(Argon2::default()
|
|
.hash_password(plaintext.as_bytes(), &salt)?
|
|
.to_string())
|
|
}
|
|
|
|
pub fn verify(plaintext: &str, hash: &str) -> Result<bool> {
|
|
let parsed_hash = PasswordHash::new(hash)?;
|
|
Ok(Argon2::default()
|
|
.verify_password(plaintext.as_bytes(), &parsed_hash)
|
|
.is_ok())
|
|
}
|