X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=backend%2Fsrc%2Fhash.rs;h=8002ac735ed13429a25f9a5d7e774a5704e17db9;hb=8a3fef096d720666dc8a54789aee02250642d8a1;hp=3dd45a9f43527cfc61fed80ae41cba1cfbcf052e;hpb=5e4e0862477f46a6ea477a56f01fd84e720a9546;p=recipes.git diff --git a/backend/src/hash.rs b/backend/src/hash.rs index 3dd45a9..8002ac7 100644 --- a/backend/src/hash.rs +++ b/backend/src/hash.rs @@ -1,8 +1,7 @@ -use std::{string::String, env::consts::OS}; +use std::{string::String}; use argon2::{ password_hash::{ - Error, rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString }, @@ -13,4 +12,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