cas_lib/password_hashers/
scrypt.rs

1
2
3
4
5use scrypt::{
6    password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
7    Scrypt,
8};
9
10use super::cas_password_hasher::CASPasswordHasher;
11
12pub struct CASScrypt;
13
14impl CASPasswordHasher for CASScrypt {
15    /// Hashes a password using Scrypt.
16    /// Returns the hashed password as a string.
17    fn hash_password(password_to_hash: String) -> String {
18        let salt = SaltString::generate(&mut OsRng);
19        return Scrypt
20            .hash_password(password_to_hash.as_bytes(), &salt)
21            .unwrap()
22            .to_string();
23    }
24
25    /// Verifies a password against a hashed password using Scrypt.
26    /// Returns true if the password matches the hashed password, false otherwise.
27    fn verify_password(hashed_password: String, password_to_verify: String) -> bool {
28        let parsed_hash = PasswordHash::new(&hashed_password).unwrap();
29        return Scrypt
30            .verify_password(password_to_verify.as_bytes(), &parsed_hash)
31            .is_ok();
32    }
33}