use argon2::{ password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, Argon2, }; use std::time::SystemTime; fn main() { let password = b"hunter42"; // Bad password; don't actually use! let start = SystemTime::now(); let salt: SaltString = SaltString::generate(&mut OsRng); println!("salt: {}", salt); // Argon2 with default params (Argon2id v19) let argon2 = Argon2::default(); // Hash password to PHC string ($argon2id$v=19$...) let password_hash = argon2.hash_password(password, &salt).unwrap().to_string(); println!("password_hash: {}", password_hash); println!("Elapsed time: {:?}", start.elapsed()); // Verify password against PHC string. // // NOTE: hash params from `parsed_hash` are used instead of what is configured in the // `Argon2` instance. let parsed_hash = PasswordHash::new(&password_hash).unwrap(); assert!(Argon2::default() .verify_password(password, &parsed_hash) .is_ok()); println!("Elapsed time: {:?}", start.elapsed()); }