make sure keys are valid

This commit is contained in:
Sorunome 2020-05-20 09:37:32 +02:00
parent 11d788b68f
commit 0fabed9cc3
No known key found for this signature in database
GPG key ID: B19471D07FC9BE9C
2 changed files with 28 additions and 19 deletions

View file

@ -1648,16 +1648,15 @@ class Client {
// Set the new device key for this device // Set the new device key for this device
if (!oldKeys.containsKey(deviceId)) { if (!oldKeys.containsKey(deviceId)) {
_userDeviceKeys[userId].deviceKeys[deviceId] = final entry = DeviceKeys.fromJson(rawDeviceKeyEntry.value);
DeviceKeys.fromJson(rawDeviceKeyEntry.value); if (entry.isValid) {
_userDeviceKeys[userId].deviceKeys[deviceId] = entry;
if (deviceId == deviceID && if (deviceId == deviceID &&
_userDeviceKeys[userId].deviceKeys[deviceId].ed25519Key == entry.ed25519Key ==
fingerprintKey) { fingerprintKey) {
// Always trust the own device // Always trust the own device
_userDeviceKeys[userId].deviceKeys[deviceId].verified = true; entry.verified = true;
} }
} else {
_userDeviceKeys[userId].deviceKeys[deviceId] = oldKeys[deviceId];
} }
if (database != null) { if (database != null) {
dbActions.add(() => database.storeUserDeviceKey( dbActions.add(() => database.storeUserDeviceKey(
@ -1670,6 +1669,9 @@ class Client {
_userDeviceKeys[userId].deviceKeys[deviceId].blocked, _userDeviceKeys[userId].deviceKeys[deviceId].blocked,
)); ));
} }
} else {
_userDeviceKeys[userId].deviceKeys[deviceId] = oldKeys[deviceId];
}
} }
if (database != null) { if (database != null) {
for (final oldDeviceKeyEntry in oldKeys.entries) { for (final oldDeviceKeyEntry in oldKeys.entries) {

View file

@ -15,7 +15,12 @@ class DeviceKeysList {
outdated = dbEntry.outdated; outdated = dbEntry.outdated;
deviceKeys = {}; deviceKeys = {};
for (final childEntry in childEntries) { for (final childEntry in childEntries) {
deviceKeys[childEntry.deviceId] = DeviceKeys.fromDb(childEntry); final entry = DeviceKeys.fromDb(childEntry);
if (entry.isValid) {
deviceKeys[childEntry.deviceId] = entry;
} else {
outdated = true;
}
} }
} }
@ -62,6 +67,8 @@ class DeviceKeys {
String get curve25519Key => keys['curve25519:$deviceId']; String get curve25519Key => keys['curve25519:$deviceId'];
String get ed25519Key => keys['ed25519:$deviceId']; String get ed25519Key => keys['ed25519:$deviceId'];
bool get isValid => userId != null && deviceId != null && curve25519Key != null && ed25519Key != null;
Future<void> setVerified(bool newVerified, Client client) { Future<void> setVerified(bool newVerified, Client client) {
verified = newVerified; verified = newVerified;
return client.database?.setVerifiedUserDeviceKey(newVerified, client.id, userId, deviceId); return client.database?.setVerifiedUserDeviceKey(newVerified, client.id, userId, deviceId);