MCPcopy Create free account
hub / github.com/CommE2E/comm / decryptAndPersist

Method decryptAndPersist

native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp:1912–1991  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1910}
1911
1912jsi::Value CommCoreModule::decryptAndPersist(
1913 jsi::Runtime &rt,
1914 jsi::Object encryptedDataJSI,
1915 jsi::String deviceID,
1916 jsi::String userID,
1917 jsi::String messageID) {
1918 size_t messageType =
1919 std::lround(encryptedDataJSI.getProperty(rt, "messageType").asNumber());
1920 std::string message =
1921 encryptedDataJSI.getProperty(rt, "message").asString(rt).utf8(rt);
1922
1923 std::optional<int> sessionVersion;
1924 if (encryptedDataJSI.hasProperty(rt, "sessionVersion")) {
1925 sessionVersion = std::lround(
1926 encryptedDataJSI.getProperty(rt, "sessionVersion").asNumber());
1927 }
1928
1929 auto deviceIDCpp{deviceID.utf8(rt)};
1930 auto messageIDCpp{messageID.utf8(rt)};
1931 auto userIDCpp{userID.utf8(rt)};
1932 return createPromiseAsJSIValue(
1933 rt, [=](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
1934 taskType job = [=, &innerRt]() {
1935 std::string error;
1936 std::string decryptedMessage;
1937 try {
1938 crypto::EncryptedData encryptedData{
1939 message, messageType, sessionVersion};
1940 decryptedMessage =
1941 this->contentCryptoModule->decrypt(deviceIDCpp, encryptedData);
1942
1943 std::string storedSecretKey =
1944 getAccountDataKey(secureStoreAccountDataKey);
1945 crypto::Persist newContentPersist =
1946 this->contentCryptoModule->storeAsB64(storedSecretKey);
1947
1948 std::promise<void> persistencePromise;
1949 std::future<void> persistenceFuture =
1950 persistencePromise.get_future();
1951 GlobalDBSingleton::instance.scheduleOrRunCancellable(
1952 [=, &persistencePromise]() {
1953 try {
1954 InboundP2PMessage message{
1955 messageIDCpp,
1956 deviceIDCpp,
1957 decryptedMessage,
1958 "decrypted",
1959 userIDCpp};
1960
1961 DatabaseManager::getQueryExecutor().beginTransaction();
1962 DatabaseManager::getQueryExecutor().addInboundP2PMessage(
1963 message);
1964 DatabaseManager::getQueryExecutor().storeOlmPersistData(
1965 DatabaseManager::getQueryExecutor()
1966 .getContentAccountID(),
1967 newContentPersist);
1968 DatabaseManager::getQueryExecutor().commitTransaction();
1969 persistencePromise.set_value();

Callers

nothing calls this directly

Calls 14

getAccountDataKeyFunction · 0.85
storeOlmPersistDataMethod · 0.80
rejectMethod · 0.80
resolveMethod · 0.80
scheduleTaskMethod · 0.80
decryptMethod · 0.65
getMethod · 0.65
storeAsB64Method · 0.45
beginTransactionMethod · 0.45
addInboundP2PMessageMethod · 0.45
getContentAccountIDMethod · 0.45

Tested by

no test coverage detected