· 7 years ago · May 10, 2018, 06:24 AM
1extern crate a2;
2extern crate dotenv;
3extern crate failure;
4#[macro_use]
5extern crate lazy_static;
6
7use std::env;
8
9use a2::data::SecretKey;
10
11lazy_static! {
12 static ref BASE64_ENCODED_SECRET_KEY: String = {
13 let dotenv_path = env::current_dir()
14 .expect("failed to get current directory")
15 .join("examples")
16 .join("example.env");
17 dotenv::from_path(&dotenv_path).expect("failed to load dotenv file");
18 env::var("SECRET_KEY").expect("missing SECRET_KEY environment variable")
19 };
20}
21
22fn main() {
23 run().unwrap();
24}
25
26fn run() -> Result<(), failure::Error> {
27 let password = "P@ssw0rd";
28 let secret_key = SecretKey::from_base64_encoded_str(&*BASE64_ENCODED_SECRET_KEY)?;
29
30 let mut hasher = a2::Hasher::default()?;
31 let hash = hasher
32 .with_password(password)
33 .with_salt("somesalt")
34 .with_secret_key(&secret_key)
35 .opt_out_of_random_salt()
36 .hash()?;
37 println!("{}", &hash);
38 // $argon2id$v=19$m=4096,t=128,p=2$c29tZXNhbHQ$xvTts+9gwqPjltC0MmCrSBCo6YPGigSQjRTD+sPoTKk
39
40 let mut verifier = a2::Verifier::new();
41 let is_valid = verifier
42 .with_hash(&hash)
43 .with_password(password)
44 .with_secret_key(&secret_key)
45 .verify()?;
46
47 assert!(is_valid);
48 Ok(())
49}