diff --git a/Cargo.toml b/Cargo.toml index ddb508c..2e3ad24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,8 +9,6 @@ crate-type = ["cdylib"] [dependencies] aes-gcm = "0.10.3" -argon2 = "0.5.2" -bcrypt = "0.15.0" blake2 = "0.10.6" napi = "2" napi-derive = "2" @@ -23,6 +21,8 @@ x25519-dalek = {version = "2.0.0", features = ["static_secrets"]} rand_07 = { package = "rand", version = "0.7.0" } ascon-aead = "0.4.2" rayon = "1.10.0" +csbindgen = "1.9.1" +cas-lib = "0.1.3" [profile.dev.package.num-bigint-dig] opt-level = 3 diff --git a/index.node b/index.node index 9ce6f29..d381d0f 100644 Binary files a/index.node and b/index.node differ diff --git a/src/lib.rs b/src/lib.rs index a730ec9..c19cc70 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,6 @@ mod password_hashers { pub mod argon2; pub mod bcrypt; - pub mod cas_password_hasher; pub mod scrypt; } diff --git a/src/password_hashers/argon2.rs b/src/password_hashers/argon2.rs index 670a12f..04bbfdf 100644 --- a/src/password_hashers/argon2.rs +++ b/src/password_hashers/argon2.rs @@ -1,35 +1,7 @@ use napi_derive::napi; - -use argon2::{ - password_hash::{rand_core::OsRng, SaltString}, - Argon2, PasswordHash, PasswordHasher, PasswordVerifier, -}; - -use crate::symmetric::aes::CASAES128; - -use super::cas_password_hasher::CASPasswordHasher; - -pub struct CASArgon; - -impl CASPasswordHasher for CASArgon { - fn hash_password(password_to_hash: String) -> String { - let salt = SaltString::generate(&mut OsRng); - let argon2 = Argon2::default(); - let hashed_password = argon2 - .hash_password(password_to_hash.as_bytes(), &salt) - .unwrap() - .to_string(); - return hashed_password; - } - - fn verify_password(hashed_password: String, password_to_verify: String) -> bool { - let hashed_password = PasswordHash::new(&hashed_password).unwrap(); - return Argon2::default() - .verify_password(password_to_verify.as_bytes(), &hashed_password) - .is_ok(); - } -} +use cas_lib::password_hashers::argon2::CASArgon; +use cas_lib::password_hashers::cas_password_hasher::CASPasswordHasher; #[napi] pub fn argon2_hash(password: String) -> String { @@ -38,13 +10,7 @@ pub fn argon2_hash(password: String) -> String { #[napi] pub fn argon2_hash_thread_pool(password: String) -> String { - let (sender, receiver) = std::sync::mpsc::channel(); - rayon::spawn(move || { - let hash_result = ::hash_password(password); - sender.send(hash_result); - }); - let result = receiver.recv().unwrap(); - result + return ::hash__password_threadpool(password); } #[napi] @@ -54,13 +20,7 @@ pub fn argon2_verify(hashed_password: String, password_to_verify: String) -> boo #[napi] pub fn argon2_verify_threadpool(hashed_password: String, password_to_verify: String) -> bool { - let (sender, receiver) = std::sync::mpsc::channel(); - rayon::spawn(move || { - let verify_result = ::verify_password(hashed_password, password_to_verify); - sender.send(verify_result); - }); - let result = receiver.recv().unwrap(); - result + return ::verify_password_threadpool(hashed_password, password_to_verify); } #[test] diff --git a/src/password_hashers/bcrypt.rs b/src/password_hashers/bcrypt.rs index c51e6d9..1ce120e 100644 --- a/src/password_hashers/bcrypt.rs +++ b/src/password_hashers/bcrypt.rs @@ -1,22 +1,7 @@ -use std::sync::mpsc; - -use bcrypt::{hash, verify, DEFAULT_COST}; +use cas_lib::password_hashers::bcrypt::CASBCrypt; +use cas_lib::password_hashers::cas_password_hasher::CASPasswordHasher; use napi_derive::napi; -use super::cas_password_hasher::CASPasswordHasher; - -pub struct CASBCrypt; - -impl CASPasswordHasher for CASBCrypt { - fn hash_password(password_to_hash: String) -> String { - return hash(password_to_hash, DEFAULT_COST).unwrap(); - } - - fn verify_password(hashed_password: String, password_to_verify: String) -> bool { - return verify(password_to_verify, &hashed_password).unwrap(); - } -} - #[napi] pub fn bcrypt_hash(password_to_hash: String) -> String { return ::hash_password(password_to_hash); @@ -24,13 +9,7 @@ pub fn bcrypt_hash(password_to_hash: String) -> String { #[napi] pub fn bcrypt_hash_threadpool(password_to_hash: String) -> String { - let (sender, receiver) = mpsc::channel(); - rayon::spawn(move || { - let thread_result = ::hash_password(password_to_hash); - sender.send(thread_result); - }); - let result = receiver.recv().unwrap(); - result + return ::hash__password_threadpool(password_to_hash); } #[napi] @@ -40,13 +19,7 @@ pub fn bcrypt_verify(hashed_password: String, password_to_verify: String) -> boo #[napi] pub fn bcrypt_verify_threadpool(password_to_hash: String, password_to_verify: String) -> bool { - let (sender, receiver) = mpsc::channel(); - rayon::spawn(move || { - let thread_result = ::verify_password(password_to_hash, password_to_verify); - sender.send(thread_result); - }); - let result = receiver.recv().unwrap(); - result + return ::verify_password_threadpool(password_to_hash, password_to_verify); } #[test] diff --git a/src/password_hashers/cas_password_hasher.rs b/src/password_hashers/cas_password_hasher.rs deleted file mode 100644 index 5408fcf..0000000 --- a/src/password_hashers/cas_password_hasher.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub trait CASPasswordHasher { - fn hash_password(password_to_hash: String) -> String; - fn verify_password(hashed_password: String, password_to_verify: String) -> bool; -} diff --git a/src/password_hashers/scrypt.rs b/src/password_hashers/scrypt.rs index 72c3314..7eaf347 100644 --- a/src/password_hashers/scrypt.rs +++ b/src/password_hashers/scrypt.rs @@ -1,33 +1,6 @@ -use std::sync::mpsc; - +use cas_lib::password_hashers::{cas_password_hasher::CASPasswordHasher, scrypt::CASScrypt}; use napi_derive::napi; -use scrypt::{ - password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, - Scrypt, -}; - -use super::cas_password_hasher::CASPasswordHasher; - -pub struct CASScrypt; - -impl CASPasswordHasher for CASScrypt { - fn hash_password(password_to_hash: String) -> String { - let salt = SaltString::generate(&mut OsRng); - return Scrypt - .hash_password(password_to_hash.as_bytes(), &salt) - .unwrap() - .to_string(); - } - - fn verify_password(hashed_password: String, password_to_verify: String) -> bool { - let parsed_hash = PasswordHash::new(&hashed_password).unwrap(); - return Scrypt - .verify_password(password_to_verify.as_bytes(), &parsed_hash) - .is_ok(); - } -} - #[napi] pub fn scrypt_hash(password_to_hash: String) -> String { return ::hash_password(password_to_hash); @@ -40,24 +13,12 @@ pub fn scrypt_verify(hashed_password: String, password_to_verify: String) -> boo #[napi] pub fn scrypt_hash_threadpool(password_to_hash: String) -> String { - let (sender, receiver) = mpsc::channel(); - rayon::spawn(move || { - let thread_result = ::hash_password(password_to_hash); - sender.send(thread_result); - }); - let result = receiver.recv().unwrap(); - result + return ::hash__password_threadpool(password_to_hash); } #[napi] pub fn scrypt_verify_threadpool(hashed_password: String, password_to_verify: String) -> bool { - let (sender, receiver) = mpsc::channel(); - rayon::spawn(move || { - let thread_result = ::verify_password(hashed_password, password_to_verify); - sender.send(thread_result); - }); - let result = receiver.recv().unwrap(); - result + return ::verify_password_threadpool(hashed_password, password_to_verify); } #[test]