From 36509a6d796795cf07cccae5bfe548148abe2fa3 Mon Sep 17 00:00:00 2001
From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
Date: Tue, 14 Nov 2023 19:39:32 +0400
Subject: [PATCH] ios, android: new message decryption error - ratchet
synchronization (#3368)
---
.../ios/Shared/Views/Chat/ChatItem/CIRcvDecryptionError.swift | 2 ++
apps/ios/SimpleXChat/ChatTypes.swift | 2 ++
.../commonMain/kotlin/chat/simplex/common/model/ChatModel.kt | 4 +++-
.../simplex/common/views/chat/item/CIRcvDecryptionError.kt | 2 ++
.../common/src/commonMain/resources/MR/base/strings.xml | 2 ++
5 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIRcvDecryptionError.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIRcvDecryptionError.swift
index d8a560640..3ad45d698 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIRcvDecryptionError.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIRcvDecryptionError.swift
@@ -165,6 +165,8 @@ struct CIRcvDecryptionError: View {
message = Text("\(msgCount) messages failed to decrypt.") + Text("\n") + why
case .other:
message = Text("\(msgCount) messages failed to decrypt.") + Text("\n") + why
+ case .ratchetSync:
+ message = Text("Encryption re-negotiation failed.")
}
return message
}
diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift
index f8a6d78a5..551ed2794 100644
--- a/apps/ios/SimpleXChat/ChatTypes.swift
+++ b/apps/ios/SimpleXChat/ChatTypes.swift
@@ -2676,6 +2676,7 @@ public enum MsgDecryptError: String, Decodable {
case tooManySkipped
case ratchetEarlier
case other
+ case ratchetSync
var text: String {
switch self {
@@ -2683,6 +2684,7 @@ public enum MsgDecryptError: String, Decodable {
case .tooManySkipped: return NSLocalizedString("Permanent decryption error", comment: "message decrypt error item")
case .ratchetEarlier: return NSLocalizedString("Decryption error", comment: "message decrypt error item")
case .other: return NSLocalizedString("Decryption error", comment: "message decrypt error item")
+ case .ratchetSync: return NSLocalizedString("Encryption re-negotiation error", comment: "message decrypt error item")
}
}
}
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
index 91b4a8d8f..efd7ced3a 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
@@ -2106,13 +2106,15 @@ enum class MsgDecryptError {
@SerialName("ratchetHeader") RatchetHeader,
@SerialName("tooManySkipped") TooManySkipped,
@SerialName("ratchetEarlier") RatchetEarlier,
- @SerialName("other") Other;
+ @SerialName("other") Other,
+ @SerialName("ratchetSync") RatchetSync;
val text: String get() = when (this) {
RatchetHeader -> generalGetString(MR.strings.decryption_error)
TooManySkipped -> generalGetString(MR.strings.decryption_error)
RatchetEarlier -> generalGetString(MR.strings.decryption_error)
Other -> generalGetString(MR.strings.decryption_error)
+ RatchetSync -> generalGetString(MR.strings.encryption_renegotiation_error)
}
}
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt
index ecf7f10dd..318735d73 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIRcvDecryptionError.kt
@@ -218,5 +218,7 @@ private fun alertMessage(msgDecryptError: MsgDecryptError, msgCount: UInt): Stri
MsgDecryptError.Other -> String.format(generalGetString(MR.strings.alert_text_decryption_error_n_messages_failed_to_decrypt), msgCount.toLong()) + "\n" +
generalGetString(MR.strings.alert_text_fragment_encryption_out_of_sync_old_database)
+
+ MsgDecryptError.RatchetSync -> generalGetString(MR.strings.alert_text_encryption_renegotiation_failed)
}
}
diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
index 170a28f3d..d2f464297 100644
--- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
+++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
@@ -45,6 +45,7 @@
invalid chat
invalid data
Decryption error
+ Encryption re-negotiation error
connection %1$d
@@ -866,6 +867,7 @@
%1$d messages failed to decrypt.
%1$d messages skipped.
It can happen when you or your connection used the old database backup.
+ Encryption re-negotiation failed.
Please report it to the developers.