From 50abef29e390a7cd0315a413ab07831d0427d1ed Mon Sep 17 00:00:00 2001 From: EETagent Date: Mon, 24 Oct 2022 19:54:36 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20nov=C3=BD=20argon2,=20vracen=C3=AD=20re?= =?UTF-8?q?sult?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/Cargo.toml | 2 +- core/src/crypto.rs | 35 +++++++++++++++++++++++------------ core/src/mutation.rs | 3 ++- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/core/Cargo.toml b/core/Cargo.toml index 098a79a..4b41cec 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] portfolio-entity = { path = "../entity" } rand = "0.8.5" -rust-argon2 = "1.0.0" +argon2 = "0.4.1" chrono = "0.4.22" [dependencies.sea-orm] diff --git a/core/src/crypto.rs b/core/src/crypto.rs index 31eb606..fb6c4c6 100644 --- a/core/src/crypto.rs +++ b/core/src/crypto.rs @@ -1,4 +1,6 @@ -use argon2::{self, Config}; +use argon2::{ + Argon2, PasswordHasher as ArgonPasswordHasher, PasswordVerifier as ArgonPasswordVerifier, +}; use rand::Rng; pub fn random_8_char_string() -> String { @@ -9,17 +11,26 @@ pub fn random_8_char_string() -> String { .collect::() } -pub fn hash_password(password_plaint_text: &str) -> String { - let hash = argon2::hash_encoded( - password_plaint_text.as_bytes(), - b"secretlytestingeverything", - &Config::default() - ) - .unwrap(); +pub fn hash_password(password_plaint_text: &str) -> Result { + let password = password_plaint_text.as_bytes(); + let salt = "c2VjcmV0bHl0ZXN0aW5nZXZlcnl0aGluZw"; - hash + let argon_config = Argon2::default(); + + let hash = argon_config.hash_password(password, salt)?; + + return Ok(hash.to_string()); } -pub fn verify_password(password_plaint_text: &str, hash: &str) -> bool { - argon2::verify_encoded(hash, password_plaint_text.as_bytes()).unwrap() -} \ No newline at end of file +pub fn verify_password( + password_plaint_text: &str, + hash: &str, +) -> Result { + let argon_config = Argon2::default(); + + let parsed_hash = argon2::PasswordHash::new(&hash)?; + + return Ok(argon_config + .verify_password(password_plaint_text.as_bytes(), &parsed_hash) + .is_ok()); +} diff --git a/core/src/mutation.rs b/core/src/mutation.rs index 30d7c04..d5ae79b 100644 --- a/core/src/mutation.rs +++ b/core/src/mutation.rs @@ -10,7 +10,8 @@ impl Mutation { form_data: candidate::Model, plain_text_password: &String, ) -> Result { - let hashed_password = hash_password(plain_text_password); + // TODO: unwrap pro testing.. + let hashed_password = hash_password(plain_text_password).unwrap(); candidate::ActiveModel { application: Set(form_data.application), // TODO NEFUNGUJE code: Set(hashed_password),