actix_jwt_session/
hashing.rs1use argon2::password_hash::rand_core::OsRng;
7use argon2::password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString};
8use argon2::Argon2;
9
10pub struct Hashing;
12
13impl Hashing {
14 pub fn encrypt(password: &str) -> argon2::password_hash::Result<String> {
16 let salt = SaltString::generate(&mut OsRng);
17 let argon2 = Argon2::default();
18 argon2
19 .hash_password(password.as_bytes(), &salt)
20 .map(|hash| hash.to_string())
21 }
22
23 pub fn verify(password_hash: &str, password: &str) -> argon2::password_hash::Result<()> {
25 let parsed_hash = PasswordHash::new(password_hash)?;
26 Argon2::default().verify_password(password.as_bytes(), &parsed_hash)
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn check_always_random_salt() {
36 let pass = "ahs9dya8tsd7fa8tsa86tT&^R%^DS^%ARS&A";
37 let hash = Hashing::encrypt(pass).unwrap();
38 assert!(Hashing::verify(hash.as_str(), pass).is_ok());
39 }
40}