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 { 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 { let parsed_hash = PasswordHash::new(hash)?; Ok(Argon2::default() .verify_password(plaintext.as_bytes(), &parsed_hash) .is_ok()) }