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++" {