diff --git a/native/native_rust_library/Cargo.toml b/native/native_rust_library/Cargo.toml --- a/native/native_rust_library/Cargo.toml +++ b/native/native_rust_library/Cargo.toml @@ -12,12 +12,12 @@ tonic = "0.9.1" lazy_static = "1.4" tracing = "0.1" -comm-opaque2 = {path = "../../shared/comm-opaque2"} +comm-opaque2 = { path = "../../shared/comm-opaque2" } derive_more = "0.99" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -argon2 = "0.5.1" -grpc_clients = {path = "../../shared/grpc_clients"} +argon2 = { version = "0.5.1", features = ["std"] } +grpc_clients = { path = "../../shared/grpc_clients" } [build-dependencies] cxx-build = "1.0" diff --git a/native/native_rust_library/src/argon2_tools.rs b/native/native_rust_library/src/argon2_tools.rs --- a/native/native_rust_library/src/argon2_tools.rs +++ b/native/native_rust_library/src/argon2_tools.rs @@ -2,9 +2,16 @@ pub const BACKUP_KEY_LENGTH: usize = 32; //256-bit digest -pub fn compute_backup_key( +pub fn compute_backup_key_str( password: &str, backup_id: &str, +) -> Result<[u8; BACKUP_KEY_LENGTH], argon2::Error> { + compute_backup_key(password.as_bytes(), backup_id.as_bytes()) +} + +pub fn compute_backup_key( + backup_secret: &[u8], + backup_id: &[u8], ) -> Result<[u8; BACKUP_KEY_LENGTH], argon2::Error> { let mut backup_key = [0u8; BACKUP_KEY_LENGTH]; let argon_params = Params::new( @@ -15,11 +22,7 @@ )?; Argon2::new(Algorithm::Argon2i, Version::V0x13, argon_params) - .hash_password_into( - password.as_bytes(), - backup_id.as_bytes(), - &mut backup_key, - )?; + .hash_password_into(backup_secret, backup_id, &mut backup_key)?; Ok(backup_key) } @@ -33,7 +36,7 @@ let password = "password123"; let backup_id = "backup_123"; - let result = compute_backup_key(password, backup_id); + let result = compute_backup_key_str(password, backup_id); assert!(result.is_ok()); let key = result.unwrap(); @@ -45,7 +48,7 @@ let password = "password123"; let backup_id = ""; - let result = compute_backup_key(password, backup_id); + let result = compute_backup_key_str(password, backup_id); assert!(result.is_err()); } @@ -54,8 +57,8 @@ let password = "password123"; let backup_id = "backup_123"; - let result1 = compute_backup_key(password, backup_id); - let result2 = compute_backup_key(password, backup_id); + let result1 = compute_backup_key_str(password, backup_id); + let result2 = compute_backup_key_str(password, backup_id); assert!(result1.is_ok()); assert!(result2.is_ok()); let key1 = result1.unwrap(); diff --git a/native/native_rust_library/src/lib.rs b/native/native_rust_library/src/lib.rs --- a/native/native_rust_library/src/lib.rs +++ b/native/native_rust_library/src/lib.rs @@ -20,7 +20,7 @@ mod argon2_tools; mod constants; -use argon2_tools::compute_backup_key; +use argon2_tools::compute_backup_key_str; mod generated { // We get the CODE_VERSION from this generated file @@ -127,7 +127,11 @@ fn version_supported(promise_id: u32); // Argon2 - fn compute_backup_key(password: &str, backup_id: &str) -> Result<[u8; 32]>; + #[cxx_name = "compute_backup_key"] + fn compute_backup_key_str( + password: &str, + backup_id: &str, + ) -> Result<[u8; 32]>; } unsafe extern "C++" {