diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h --- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h +++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h @@ -37,11 +37,6 @@ static void initializeSQLiteQueryExecutorProperties(std::string &databasePath); - // Generate and persist a backup key used as a database encryption key. - static std::string generateBackupDataKey(); - // Generate and persist key used for encrypt backup logs. - static std::string generateBackupLogDataKey(); - static void setDatabaseStatusAsWorkable(); // Clearing the main database should recreate a new database from scratch and @@ -77,6 +72,11 @@ std::string mainCompactionEncryptionKey, std::string maxVersion); static void copyContentFromBackupDatabase(); + + // Generate and persist a backup key used as a database encryption key. + static std::string generateBackupDataKey(bool updateSecureStore = true); + // Generate and persist key used for encrypt backup logs. + static std::string generateBackupLogDataKey(bool updateSecureStore = true); }; } // namespace comm diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp --- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp +++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp @@ -166,17 +166,21 @@ } } -std::string DatabaseManager::generateBackupDataKey() { +std::string DatabaseManager::generateBackupDataKey(bool updateSecureStore) { std::string backupDataKey = comm::crypto::Tools::generateRandomHexString( DatabaseManager::backupDataKeySize); - CommSecureStore::set(CommSecureStore::backupDataKey, backupDataKey); + if (updateSecureStore) { + CommSecureStore::set(CommSecureStore::backupDataKey, backupDataKey); + } return backupDataKey; } -std::string DatabaseManager::generateBackupLogDataKey() { +std::string DatabaseManager::generateBackupLogDataKey(bool updateSecureStore) { std::string backupLogDataKey = comm::crypto::Tools::generateRandomHexString( DatabaseManager::backupLogDataKeySize); - CommSecureStore::set(CommSecureStore::backupLogDataKey, backupLogDataKey); + if (updateSecureStore) { + CommSecureStore::set(CommSecureStore::backupLogDataKey, backupLogDataKey); + } return backupLogDataKey; } diff --git a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.h b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.h --- a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.h +++ b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.h @@ -16,5 +16,7 @@ const std::vector &backupLog, size_t futureID); static void setBackupID(std::string backupID, size_t futureID); + static std::string generateBackupDataKey(); + static std::string generateBackupLogDataKey(); }; } // namespace comm diff --git a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.cpp b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.cpp --- a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.cpp +++ b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/BackupOperationsUtilities/BackupOperationsExecutor.cpp @@ -77,4 +77,12 @@ }; GlobalDBSingleton::instance.scheduleOrRunCancellable(job); } + +std::string BackupOperationsExecutor::generateBackupDataKey() { + return DatabaseManager::generateBackupDataKey(false); +} + +std::string BackupOperationsExecutor::generateBackupLogDataKey() { + return DatabaseManager::generateBackupLogDataKey(false); +} } // namespace comm diff --git a/native/native_rust_library/RustBackupExecutor.h b/native/native_rust_library/RustBackupExecutor.h --- a/native/native_rust_library/RustBackupExecutor.h +++ b/native/native_rust_library/RustBackupExecutor.h @@ -18,5 +18,7 @@ size_t futureID); void restoreFromBackupLog(rust::Vec backupLog, size_t futureID); void setBackupID(rust::Str backupID, size_t futureID); +rust::String generateBackupDataKey(); +rust::String generateBackupLogDataKey(); } // namespace comm diff --git a/native/native_rust_library/RustBackupExecutor.cpp b/native/native_rust_library/RustBackupExecutor.cpp --- a/native/native_rust_library/RustBackupExecutor.cpp +++ b/native/native_rust_library/RustBackupExecutor.cpp @@ -57,4 +57,12 @@ std::move(std::vector(backupLog.begin(), backupLog.end())), futureID); } + +rust::String generateBackupDataKey() { + return rust::String(BackupOperationsExecutor::generateBackupDataKey()); +} + +rust::String generateBackupLogDataKey() { + return rust::String(BackupOperationsExecutor::generateBackupLogDataKey()); +} } // namespace comm 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 @@ -13,9 +13,7 @@ mod utils; use crate::argon2_tools::compute_backup_key_str; -use crate::utils::jsi_callbacks::{ - handle_string_result_as_callback, handle_void_result_as_callback, -}; +use crate::utils::jsi_callbacks::handle_string_result_as_callback; mod generated { // We get the CODE_VERSION from this generated file @@ -531,6 +529,12 @@ #[cxx_name = "setBackupID"] fn set_backup_id(backup_id: &str, future_id: usize); + + #[cxx_name = "generateBackupDataKey"] + fn generate_backup_data_key() -> Result; + + #[cxx_name = "generateBackupLogDataKey"] + fn generate_backup_log_data_key() -> Result; } // Future handling from C++ @@ -575,6 +579,7 @@ } #[test] + #[allow(clippy::const_is_empty)] fn test_identity_socket_addr_exists() { assert!(!IDENTITY_SOCKET_ADDR.is_empty()); assert!(!BACKUP_SOCKET_ADDR.is_empty());