Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F2831332
D8886.id30134.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D8886.id30134.diff
View Options
diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.h b/native/cpp/CommonCpp/NativeModules/CommCoreModule.h
--- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.h
+++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.h
@@ -85,6 +85,10 @@
virtual jsi::Value clearSensitiveData(jsi::Runtime &rt) override;
virtual bool checkIfDatabaseNeedsDeletion(jsi::Runtime &rt) override;
virtual void reportDBOperationsFailure(jsi::Runtime &rt) override;
+ virtual jsi::Value computeBackupKey(
+ jsi::Runtime &rt,
+ jsi::String password,
+ jsi::String backupID) override;
public:
CommCoreModule(std::shared_ptr<facebook::react::CallInvoker> jsInvoker);
diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp
--- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp
+++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp
@@ -12,6 +12,9 @@
#include <folly/json.h>
#include <future>
+#include "lib.rs.h"
+#include <string>
+
namespace comm {
using namespace facebook::react;
@@ -804,4 +807,42 @@
DatabaseManager::reportDBOperationsFailure();
}
+jsi::Value CommCoreModule::computeBackupKey(
+ jsi::Runtime &rt,
+ jsi::String password,
+ jsi::String backupID) {
+ std::string passwordStr = password.utf8(rt);
+ std::string backupIDStr = backupID.utf8(rt);
+ return createPromiseAsJSIValue(
+ rt, [=](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
+ taskType job = [=, &innerRt]() {
+ std::string error;
+ std::array<::std::uint8_t, 32> backupKey;
+ try {
+ backupKey = compute_backup_key(passwordStr, backupIDStr);
+ } catch (const std::exception &e) {
+ error = std::string{"Failed to compute backup key: "} + e.what();
+ }
+
+ this->jsInvoker_->invokeAsync([=, &innerRt]() {
+ if (error.size()) {
+ promise->reject(error);
+ return;
+ }
+ auto size = backupKey.size();
+ auto arrayBuffer =
+ innerRt.global()
+ .getPropertyAsFunction(innerRt, "ArrayBuffer")
+ .callAsConstructor(innerRt, {static_cast<double>(size)})
+ .asObject(innerRt)
+ .getArrayBuffer(innerRt);
+ auto bufferPtr = arrayBuffer.data(innerRt);
+ memcpy(bufferPtr, backupKey.data(), size);
+ promise->resolve(std::move(arrayBuffer));
+ });
+ };
+ this->cryptoThread->scheduleTask(job);
+ });
+}
+
} // namespace comm
diff --git a/native/cpp/CommonCpp/_generated/commJSI-generated.cpp b/native/cpp/CommonCpp/_generated/commJSI-generated.cpp
--- a/native/cpp/CommonCpp/_generated/commJSI-generated.cpp
+++ b/native/cpp/CommonCpp/_generated/commJSI-generated.cpp
@@ -107,6 +107,9 @@
static_cast<CommCoreModuleSchemaCxxSpecJSI *>(&turboModule)->reportDBOperationsFailure(rt);
return jsi::Value::undefined();
}
+static jsi::Value __hostFunction_CommCoreModuleSchemaCxxSpecJSI_computeBackupKey(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
+ return static_cast<CommCoreModuleSchemaCxxSpecJSI *>(&turboModule)->computeBackupKey(rt, args[0].asString(rt), args[1].asString(rt));
+}
CommCoreModuleSchemaCxxSpecJSI::CommCoreModuleSchemaCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule("CommTurboModule", jsInvoker) {
@@ -140,6 +143,7 @@
methodMap_["clearSensitiveData"] = MethodMetadata {0, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_clearSensitiveData};
methodMap_["checkIfDatabaseNeedsDeletion"] = MethodMetadata {0, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_checkIfDatabaseNeedsDeletion};
methodMap_["reportDBOperationsFailure"] = MethodMetadata {0, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_reportDBOperationsFailure};
+ methodMap_["computeBackupKey"] = MethodMetadata {2, __hostFunction_CommCoreModuleSchemaCxxSpecJSI_computeBackupKey};
}
diff --git a/native/cpp/CommonCpp/_generated/commJSI.h b/native/cpp/CommonCpp/_generated/commJSI.h
--- a/native/cpp/CommonCpp/_generated/commJSI.h
+++ b/native/cpp/CommonCpp/_generated/commJSI.h
@@ -50,6 +50,7 @@
virtual jsi::Value clearSensitiveData(jsi::Runtime &rt) = 0;
virtual bool checkIfDatabaseNeedsDeletion(jsi::Runtime &rt) = 0;
virtual void reportDBOperationsFailure(jsi::Runtime &rt) = 0;
+ virtual jsi::Value computeBackupKey(jsi::Runtime &rt, jsi::String password, jsi::String backupID) = 0;
};
@@ -311,6 +312,14 @@
return bridging::callFromJs<void>(
rt, &T::reportDBOperationsFailure, jsInvoker_, instance_);
}
+ jsi::Value computeBackupKey(jsi::Runtime &rt, jsi::String password, jsi::String backupID) override {
+ static_assert(
+ bridging::getParameterCount(&T::computeBackupKey) == 3,
+ "Expected computeBackupKey(...) to have 3 parameters");
+
+ return bridging::callFromJs<jsi::Value>(
+ rt, &T::computeBackupKey, jsInvoker_, instance_, std::move(password), std::move(backupID));
+ }
private:
T *instance_;
diff --git a/native/native-modules.js b/native/native-modules.js
--- a/native/native-modules.js
+++ b/native/native-modules.js
@@ -1,6 +1,6 @@
// @flow
-import type { Spec as CoreModuleSpec } from './schema/CommCoreModuleSchema.js';
+import type { CoreModuleSpec } from './schema/CommCoreModuleSchema.js';
import type { Spec as RustModuleSpec } from './schema/CommRustModuleSchema.js';
import type { UtilsModuleSpec } from './schema/CommUtilsModuleSchema.js';
diff --git a/native/schema/CommCoreModuleSchema.js b/native/schema/CommCoreModuleSchema.js
--- a/native/schema/CommCoreModuleSchema.js
+++ b/native/schema/CommCoreModuleSchema.js
@@ -27,7 +27,7 @@
+signature: string,
};
-export interface Spec extends TurboModule {
+interface Spec extends TurboModule {
+getDraft: (key: string) => Promise<string>;
+updateDraft: (key: string, text: string) => Promise<boolean>;
+moveDraft: (oldKey: string, newKey: string) => Promise<boolean>;
@@ -79,6 +79,14 @@
+clearSensitiveData: () => Promise<void>;
+checkIfDatabaseNeedsDeletion: () => boolean;
+reportDBOperationsFailure: () => void;
+ +computeBackupKey: (password: string, backupID: string) => Promise<Object>;
+}
+
+export interface CoreModuleSpec extends Spec {
+ +computeBackupKey: (
+ password: string,
+ backupID: string,
+ ) => Promise<ArrayBuffer>;
}
export default (TurboModuleRegistry.getEnforcing<Spec>(
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Sep 28, 11:26 PM (17 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2198283
Default Alt Text
D8886.id30134.diff (6 KB)
Attached To
Mode
D8886: [client-backup] implement C++ function for computing `BackupKey`
Attached
Detach File
Event Timeline
Log In to Comment