| 1867 | } |
| 1868 | |
| 1869 | jsi::Value CommCoreModule::decrypt( |
| 1870 | jsi::Runtime &rt, |
| 1871 | jsi::Object encryptedDataJSI, |
| 1872 | jsi::String deviceID) { |
| 1873 | size_t messageType = |
| 1874 | std::lround(encryptedDataJSI.getProperty(rt, "messageType").asNumber()); |
| 1875 | std::string message = |
| 1876 | encryptedDataJSI.getProperty(rt, "message").asString(rt).utf8(rt); |
| 1877 | auto deviceIDCpp{deviceID.utf8(rt)}; |
| 1878 | |
| 1879 | std::optional<int> sessionVersion; |
| 1880 | if (encryptedDataJSI.hasProperty(rt, "sessionVersion")) { |
| 1881 | sessionVersion = std::lround( |
| 1882 | encryptedDataJSI.getProperty(rt, "sessionVersion").asNumber()); |
| 1883 | } |
| 1884 | |
| 1885 | return createPromiseAsJSIValue( |
| 1886 | rt, [=](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) { |
| 1887 | taskType job = [=, &innerRt]() { |
| 1888 | std::string error; |
| 1889 | std::string decryptedMessage; |
| 1890 | try { |
| 1891 | crypto::EncryptedData encryptedData{ |
| 1892 | message, messageType, sessionVersion}; |
| 1893 | decryptedMessage = |
| 1894 | this->contentCryptoModule->decrypt(deviceIDCpp, encryptedData); |
| 1895 | this->persistCryptoModules(true, std::nullopt); |
| 1896 | } catch (const std::exception &e) { |
| 1897 | error = e.what(); |
| 1898 | } |
| 1899 | this->jsInvoker_->invokeAsync([=, &innerRt]() { |
| 1900 | if (error.size()) { |
| 1901 | promise->reject(error); |
| 1902 | return; |
| 1903 | } |
| 1904 | promise->resolve( |
| 1905 | jsi::String::createFromUtf8(innerRt, decryptedMessage)); |
| 1906 | }); |
| 1907 | }; |
| 1908 | this->cryptoThread->scheduleTask(job); |
| 1909 | }); |
| 1910 | } |
| 1911 | |
| 1912 | jsi::Value CommCoreModule::decryptAndPersist( |
| 1913 | jsi::Runtime &rt, |
nothing calls this directly
no test coverage detected