feat: Attempt to detect already decrypted messages
This commit is contained in:
@@ -40,3 +40,9 @@ class InvalidKeyExchangeException implements Exception {
|
||||
final int actualPn;
|
||||
String errMsg() => 'The pn attribute of the key exchange is invalid. Expected $expectedPn, got $actualPn';
|
||||
}
|
||||
|
||||
/// Triggered by the Session Manager when a message's sequence number is smaller than we
|
||||
/// expect it to be.
|
||||
class MessageAlreadyDecryptedException implements Exception {
|
||||
String errMsg() => 'The message has already been decrypted';
|
||||
}
|
||||
|
||||
@@ -401,6 +401,12 @@ class OmemoSessionManager {
|
||||
final ratchet = (await _getRatchet(ratchetKey))!;
|
||||
oldRatchet ??= ratchet.clone();
|
||||
|
||||
if (!rawKey.kex) {
|
||||
if (message.n! < ratchet.nr - 1) {
|
||||
throw MessageAlreadyDecryptedException();
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
if (rawKey.kex) {
|
||||
keyAndHmac = await ratchet.ratchetDecrypt(message, authMessage.writeToBuffer());
|
||||
|
||||
Reference in New Issue
Block a user