use argon2::{ password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, Argon2, }; use rand::Rng; pub fn hash(password: String) -> String { let password = password.as_bytes(); // Hash password to PHC string ($argon2id$v=19$...) Argon2::default() .hash_password(password, &SaltString::generate(&mut OsRng)) .unwrap() .to_string() } pub fn compare(password: &str, password_hash: &str) -> bool { let hash = PasswordHash::new(&password_hash).unwrap(); Argon2::default() .verify_password(password.as_bytes(), &hash) .is_ok() } pub fn new_id() -> String { let bytes = rand::thread_rng().gen::<[u8; 16]>(); base_62::encode(&bytes) }