diff --git a/lib/utils/olm-utils.js b/lib/utils/olm-utils.js
--- a/lib/utils/olm-utils.js
+++ b/lib/utils/olm-utils.js
@@ -127,6 +127,12 @@
   // Otherwise, it could mean that the receiver chain advance beyond and the key
   // to decrypt that message was discarded.
   messageAlreadyDecrypted: 'OLM_ALREADY_DECRYPTED_OR_KEYS_SKIPPED',
+  // Error thrown when attempting to encrypt/decrypt, indicating that
+  // the session for a given deviceID is not created.
+  // This definition should remain in sync with the value defined in
+  // the corresponding .cpp file
+  // at `native/cpp/CommonCpp/CryptoTools/CryptoModule.cpp`.
+  sessionDoesNotExists: 'SESSION_DOES_NOT_EXISTS',
 });
 
 function hasHigherDeviceID(
diff --git a/native/cpp/CommonCpp/CryptoTools/CryptoModule.cpp b/native/cpp/CommonCpp/CryptoTools/CryptoModule.cpp
--- a/native/cpp/CommonCpp/CryptoTools/CryptoModule.cpp
+++ b/native/cpp/CommonCpp/CryptoTools/CryptoModule.cpp
@@ -12,6 +12,10 @@
 namespace comm {
 namespace crypto {
 
+// This definition should remain in sync with the value defined in
+// the corresponding JavaScript file at `lib/utils/olm-utils.js`.
+const std::string SESSION_DOES_NOT_EXISTS_ERROR{"SESSION_DOES_NOT_EXISTS"};
+
 CryptoModule::CryptoModule(std::string id) : id{id} {
   this->createAccount();
 }
@@ -381,7 +385,7 @@
     const std::string &targetDeviceId,
     const std::string &content) {
   if (!this->hasSessionFor(targetDeviceId)) {
-    throw std::runtime_error{"error encrypt => uninitialized session"};
+    throw std::runtime_error{SESSION_DOES_NOT_EXISTS_ERROR};
   }
   return this->sessions.at(targetDeviceId)->encrypt(content);
 }
@@ -390,7 +394,7 @@
     const std::string &targetDeviceId,
     EncryptedData &encryptedData) {
   if (!this->hasSessionFor(targetDeviceId)) {
-    throw std::runtime_error{"error decrypt => uninitialized session"};
+    throw std::runtime_error{SESSION_DOES_NOT_EXISTS_ERROR};
   }
   return this->sessions.at(targetDeviceId)->decrypt(encryptedData);
 }
diff --git a/web/shared-worker/worker/worker-crypto.js b/web/shared-worker/worker/worker-crypto.js
--- a/web/shared-worker/worker/worker-crypto.js
+++ b/web/shared-worker/worker/worker-crypto.js
@@ -555,7 +555,7 @@
     }
     const olmSession = cryptoStore.contentSessions[deviceID];
     if (!olmSession) {
-      throw new Error(`No session for deviceID: ${deviceID}`);
+      throw new Error(olmSessionErrors.sessionDoesNotExists);
     }
     const encryptedContent = olmSession.session.encrypt(content);
 
@@ -576,7 +576,7 @@
     }
     const olmSession = cryptoStore.contentSessions[deviceID];
     if (!olmSession) {
-      throw new Error(`No session for deviceID: ${deviceID}`);
+      throw new Error(olmSessionErrors.sessionDoesNotExists);
     }
 
     const encryptedContent = olmSession.session.encrypt(content);
@@ -630,7 +630,7 @@
 
     const olmSession = cryptoStore.contentSessions[deviceID];
     if (!olmSession) {
-      throw new Error(`No session for deviceID: ${deviceID}`);
+      throw new Error(olmSessionErrors.sessionDoesNotExists);
     }
 
     const result = olmSession.session.decrypt(
@@ -653,7 +653,7 @@
 
     const olmSession = cryptoStore.contentSessions[deviceID];
     if (!olmSession) {
-      throw new Error(`No session for deviceID: ${deviceID}`);
+      throw new Error(olmSessionErrors.sessionDoesNotExists);
     }
 
     const result = olmSession.session.decrypt(