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 hasSession = await txn.inboundGroupSessions.has(roomId, senderKey, sessionId);
if (!hasSession) {
const session = new this._olm.InboundGroupSession(); const session = new this._olm.InboundGroupSession();
try { try {
session.create(sessionKey); session.create(sessionKey);
let incomingSessionIsBetter = true;
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,10 +164,10 @@ export class Decryption {
}; };
txn.inboundGroupSessions.set(sessionEntry); txn.inboundGroupSessions.set(sessionEntry);
newSessions.push(sessionEntry); newSessions.push(sessionEntry);
}
} finally { } finally {
session.free(); session.free();
} }
}
} }
// this will be passed to the Room in notifyRoomKeys // this will be passed to the Room in notifyRoomKeys