X-Git-Url: http://git.euphorik.ch/?p=recipes.git;a=blobdiff_plain;f=backend%2Fsrc%2Fhash.rs;fp=backend%2Fsrc%2Fhash.rs;h=ecdaf4555fbe45794e19ef9fb8a02fc3a4610421;hp=3dd45a9f43527cfc61fed80ae41cba1cfbcf052e;hb=aedfae1d17d2fd39b3b1f4889723d627fcc79218;hpb=5e4e0862477f46a6ea477a56f01fd84e720a9546 diff --git a/backend/src/hash.rs b/backend/src/hash.rs index 3dd45a9..ecdaf45 100644 --- a/backend/src/hash.rs +++ b/backend/src/hash.rs @@ -13,4 +13,34 @@ pub fn hash(password: &str) -> Result> { let salt = SaltString::generate(&mut OsRng); let argon2 = Argon2::default(); argon2.hash_password(password.as_bytes(), &salt).map(|h| h.to_string()).map_err(|e| e.into()) +} + +pub fn verify_password(password: &str, hashed_password: &str) -> Result> { + let argon2 = Argon2::default(); + let parsed_hash = PasswordHash::new(hashed_password)?; + Ok(argon2.verify_password(password.as_bytes(), &parsed_hash).is_ok()) +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn simple_case() -> Result<(), Box> { + let password = "12345"; + let hash = hash(password)?; + println!("hash: {}", &hash); + assert!(verify_password(password, &hash)?); + assert!(!verify_password("54321", &hash)?); + Ok(()) + } + + #[test] + fn password_with_special_characters() -> Result<(), Box> { + let password = "éà ä_\\😺🎮🇨🇭"; + let hash = hash(password)?; + println!("hash: {}", &hash); + assert!(verify_password(password, &hash)?); + Ok(()) + } } \ No newline at end of file