From 5e000bc0f6eec55ea5351b684d45ad8e82c2af2c Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 1 Apr 2025 12:00:55 +0200 Subject: [PATCH] refact: Call key transport, pass the target recipients to sendKey --- src/matrixrtc/EncryptionManager.ts | 2 +- src/matrixrtc/IKeyTransport.ts | 6 ++++-- src/matrixrtc/RoomKeyTransport.ts | 5 ++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/matrixrtc/EncryptionManager.ts b/src/matrixrtc/EncryptionManager.ts index 6b32d305d..6ae857a2d 100644 --- a/src/matrixrtc/EncryptionManager.ts +++ b/src/matrixrtc/EncryptionManager.ts @@ -287,7 +287,7 @@ export class EncryptionManager implements IEncryptionManager { try { this.statistics.counters.roomEventEncryptionKeysSent += 1; - await this.transport.sendKey(encodeUnpaddedBase64(keyToSend), keyIndexToSend); + await this.transport.sendKey(encodeUnpaddedBase64(keyToSend), keyIndexToSend, this.getMemberships()); logger.debug( `Embedded-E2EE-LOG updateEncryptionKeyEvent participantId=${this.userId}:${this.deviceId} numKeys=${myKeys.length} currentKeyIndex=${this.currentEncryptionKeyIndex} keyIndexToSend=${keyIndexToSend}`, this.encryptionKeys, diff --git a/src/matrixrtc/IKeyTransport.ts b/src/matrixrtc/IKeyTransport.ts index cc1b0883e..43a7f8603 100644 --- a/src/matrixrtc/IKeyTransport.ts +++ b/src/matrixrtc/IKeyTransport.ts @@ -16,6 +16,7 @@ limitations under the License. import { type MatrixEvent } from "../models/event.ts"; import { type Statistics } from "./EncryptionManager.ts"; +import { type CallMembership } from "./CallMembership.ts"; /** * Generic interface for the transport used to share room keys. @@ -23,11 +24,12 @@ import { type Statistics } from "./EncryptionManager.ts"; */ export interface IKeyTransport { /** - * Sends the current user media key. + * Sends the current user media key to the given members. * @param keyBase64Encoded * @param index + * @param members - The participants that should get they key */ - sendKey(keyBase64Encoded: string, index: number): Promise; + sendKey(keyBase64Encoded: string, index: number, members: CallMembership[]): Promise; /** * Takes an incoming event from the transport and extracts the key information. diff --git a/src/matrixrtc/RoomKeyTransport.ts b/src/matrixrtc/RoomKeyTransport.ts index d4bf50b0a..f176fab9b 100644 --- a/src/matrixrtc/RoomKeyTransport.ts +++ b/src/matrixrtc/RoomKeyTransport.ts @@ -22,6 +22,7 @@ import { logger, type Logger } from "../logger.ts"; import { type IKeyTransport } from "./IKeyTransport.ts"; import { type MatrixEvent } from "../models/event.ts"; import { type Statistics } from "./EncryptionManager.ts"; +import { type CallMembership } from "./CallMembership.ts"; export class RoomKeyTransport implements IKeyTransport { private readonly prefixedLogger: Logger; @@ -33,7 +34,9 @@ export class RoomKeyTransport implements IKeyTransport { this.prefixedLogger = logger.getChild(`[RTC: ${roomId} RoomKeyTransport]`); } - public async sendKey(keyBase64Encoded: string, index: number): Promise { + /** implements {@link IKeyTransport#sendKey} */ + public async sendKey(keyBase64Encoded: string, index: number, members: CallMembership[]): Promise { + // members not used in room transports as the keys are sent to all room members const content: EncryptionKeysEventContent = { keys: [ {