diff --git a/lib/encryption/utils/key_verification.dart b/lib/encryption/utils/key_verification.dart index 1a125524..9aba6999 100644 --- a/lib/encryption/utils/key_verification.dart +++ b/lib/encryption/utils/key_verification.dart @@ -159,21 +159,20 @@ class KeyVerification { return methods; } - Future sendStart({List? verifiedDevices}) async { + Future sendStart() async { await send( EventTypes.KeyVerificationRequest, { 'methods': knownVerificationMethods, if (room == null) 'timestamp': DateTime.now().millisecondsSinceEpoch, }, - verifiedDevices: verifiedDevices, ); startedVerification = true; setState(KeyVerificationState.waitingAccept); lastActivity = DateTime.now(); } - Future start({List? verifiedDevices}) async { + Future start() async { if (room == null) { transactionId = client.generateUniqueTransactionId(); } @@ -183,9 +182,7 @@ class KeyVerification { setState(KeyVerificationState.askSSSS); _nextAction = 'request'; } else { - await sendStart( - verifiedDevices: verifiedDevices, - ); + await sendStart(); } } @@ -610,8 +607,11 @@ class KeyVerification { } } - Future send(String type, Map payload, - {List? verifiedDevices}) async { + Future send( + String type, + Map payload, + ) async { + Logs().e('payload is ', payload); makePayload(payload); Logs().i('[Key Verification] Sending type $type: $payload'); if (room != null) { @@ -635,21 +635,16 @@ class KeyVerification { EventTypes.KeyVerificationRequest, EventTypes.KeyVerificationCancel, }.contains(type)) { - if (verifiedDevices == null || verifiedDevices.isEmpty) { - await client.sendToDevicesOfUserIds({userId}, type, payload); - } else { - final deviceKeys = client.userDeviceKeys[userId]?.deviceKeys; - deviceKeys?.removeWhere((key, _) => !verifiedDevices - .map((device) => device.deviceId) - .toList() - .contains(key)); - if (deviceKeys != null && deviceKeys.isNotEmpty) { - await client.sendToDeviceEncrypted( - deviceKeys.values.toList(), - type, - payload, - ); - } + final deviceKeys = client.userDeviceKeys[userId]?.deviceKeys; + deviceKeys?.removeWhere((_, value) => + value.hasValidSignatureChain(verifiedByTheirMasterKey: true) == + false); + if (deviceKeys != null) { + await client.sendToDeviceEncrypted( + deviceKeys.values.toList(), + type, + payload, + ); } } else { Logs().e( diff --git a/lib/src/utils/device_keys_list.dart b/lib/src/utils/device_keys_list.dart index 1e0ec099..6362db30 100644 --- a/lib/src/utils/device_keys_list.dart +++ b/lib/src/utils/device_keys_list.dart @@ -70,7 +70,6 @@ class DeviceKeysList { Future startVerification({ bool? newDirectChatEnableEncryption, List? newDirectChatInitialState, - List? verifiedDevices, }) async { final encryption = client.encryption; if (encryption == null) { @@ -97,9 +96,7 @@ class DeviceKeysList { // start verification with verified devices final request = KeyVerification( encryption: encryption, userId: userId, deviceId: '*'); - await request.start( - verifiedDevices: verifiedDevices, - ); + await request.start(); encryption.keyVerificationManager.addRequest(request); return request; }