Keep room key with earliest index

This commit is contained in:
Bruno Windels 2020-09-14 14:19:35 +02:00
parent 9fad5b3b29
commit a2f8731a23

View file

@ -138,12 +138,23 @@ export class Decryption {
return; return;
} }
// TODO: compare first_known_index to see which session to keep const session = new this._olm.InboundGroupSession();
const hasSession = await txn.inboundGroupSessions.has(roomId, senderKey, sessionId); try {
if (!hasSession) { session.create(sessionKey);
const session = new this._olm.InboundGroupSession();
try { let incomingSessionIsBetter = true;
session.create(sessionKey); const existingSessionEntry = await txn.inboundGroupSessions.get(roomId, senderKey, sessionId);
if (existingSessionEntry) {
const existingSession = new this._olm.InboundGroupSession();
try {
existingSession.unpickle(this._pickleKey, existingSessionEntry.session);
incomingSessionIsBetter = session.first_known_index() < existingSession.first_known_index();
} finally {
existingSession.free();
}
}
if (incomingSessionIsBetter) {
const sessionEntry = { const sessionEntry = {
roomId, roomId,
senderKey, senderKey,
@ -153,9 +164,9 @@ export class Decryption {
}; };
txn.inboundGroupSessions.set(sessionEntry); txn.inboundGroupSessions.set(sessionEntry);
newSessions.push(sessionEntry); newSessions.push(sessionEntry);
} finally {
session.free();
} }
} finally {
session.free();
} }
} }