diff --git a/Cargo.toml b/Cargo.toml index 9661964..36fbb60 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cas_core_lib" -version = "0.2.6" +version = "0.2.7" edition = "2021" description = "This is a Rust library providing external facing functions to performant and trusted encryption in Rust" license = "Apache-2.0" @@ -14,5 +14,5 @@ crate-type = ["dylib"] [dependencies] libc = "0.2.146" -cas-lib = "0.2.67" +cas-lib = "0.2.68" zeroizing-alloc = "0.1.0" diff --git a/src/password_hashers/argon2.rs b/src/password_hashers/argon2.rs index f0e7395..da3c764 100644 --- a/src/password_hashers/argon2.rs +++ b/src/password_hashers/argon2.rs @@ -3,6 +3,35 @@ use cas_lib::password_hashers::argon2::CASArgon; use super::types::Argon2KDFAes128; + +#[no_mangle] +pub extern "C" fn argon2_hash_password_parameters(memory_cost: u32, iterations: u32, parallelism: u32, password_to_hash: *const c_char) -> *mut c_char { + let password = unsafe { + assert!(!password_to_hash.is_null()); + CStr::from_ptr(password_to_hash) + } + .to_str() + .unwrap() + .to_string(); + + let hash = CASArgon::hash_password_parameters(memory_cost, iterations, parallelism, password); + let hash_cstr = CString::new(hash).unwrap().into_raw(); + return hash_cstr; +} + +#[test] +fn argon2_hash_password_parameters_test() { + let password = "TestPassword123!"; + let password_cstr = CString::new(password).unwrap(); + let password_bytes = password_cstr.as_bytes_with_nul(); + + let hash = argon2_hash_password_parameters(1024, 2, 1, password_bytes.as_ptr() as *const i8); + let hash_cstr = unsafe { CString::from_raw(hash) }; + let hash_str = hash_cstr.to_str().unwrap(); + assert!(!hash_str.is_empty()); + assert_ne!(hash_str, password); +} + #[no_mangle] pub extern "C" fn argon2_derive_aes_128_key(hashed_password: *const c_char) -> Argon2KDFAes128 { let hashed_password_bytes = unsafe {