diff --git a/lib/src/client.dart b/lib/src/client.dart index 3e817a7..4cfeb84 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1661,7 +1661,7 @@ class Client { if (!oldKeys.containsKey(deviceId) || oldKeys[deviceId].ed25519Key == entry.ed25519Key) { if (oldKeys.containsKey(deviceId)) { // be sure to save the verified status - entry.verified = oldKeys[deviceId].verified; + entry.setDirectVerified(oldKeys[deviceId].directVerified); entry.blocked = oldKeys[deviceId].blocked; entry.validSignatures = oldKeys[deviceId].validSignatures; } @@ -1670,7 +1670,7 @@ class Client { entry.ed25519Key == fingerprintKey) { // Always trust the own device - entry.verified = true; + entry.setDirectVerified(true); } } else { // This shouldn't ever happen. The same device ID has gotten @@ -1729,7 +1729,7 @@ class Client { if (!oldKeys.containsKey(publicKey) || oldKeys[publicKey].ed25519Key == entry.ed25519Key) { if (oldKeys.containsKey(publicKey)) { // be sure to save the verification status - entry.verified = oldKeys[publicKey].verified; + entry.setDirectVerified(oldKeys[publicKey].directVerified); entry.blocked = oldKeys[publicKey].blocked; entry.validSignatures = oldKeys[publicKey].validSignatures; } diff --git a/lib/src/utils/device_keys_list.dart b/lib/src/utils/device_keys_list.dart index 8dbe4f1..baeb2f3 100644 --- a/lib/src/utils/device_keys_list.dart +++ b/lib/src/utils/device_keys_list.dart @@ -76,11 +76,19 @@ abstract class _SignedKey { Map keys; Map signatures; Map validSignatures; - bool verified; + bool _verified; bool blocked; String get ed25519Key => keys['ed25519:$identifier']; + bool get verified => directVerified || crossVerified; + + void setDirectVerified(bool v) { + _verified = v; + } + + bool get directVerified => _verified; + bool get crossVerified { try { return hasValidSignatureChain(); @@ -182,7 +190,7 @@ class CrossSigningKey extends _SignedKey { bool get isValid => userId != null && publicKey != null && keys != null && ed25519Key != null; Future setVerified(bool newVerified) { - verified = newVerified; + _verified = newVerified; return client.database?.setVerifiedUserCrossSigningKey(newVerified, client.id, userId, publicKey); } @@ -207,7 +215,7 @@ class CrossSigningKey extends _SignedKey { validSignatures = validSignaturesContent.cast(); } } - verified = dbEntry.verified; + _verified = dbEntry.verified; blocked = dbEntry.blocked; } @@ -221,7 +229,7 @@ class CrossSigningKey extends _SignedKey { ? Map.from(json['signatures']) : null; validSignatures = null; - verified = json['verified'] ?? false; + _verified = json['verified'] ?? false; blocked = json['blocked'] ?? false; if (keys != null) { identifier = keys.values.first; @@ -238,7 +246,7 @@ class CrossSigningKey extends _SignedKey { if (signatures != null) { data['signatures'] = signatures; } - data['verified'] = verified; + data['verified'] = _verified; data['blocked'] = blocked; return data; } @@ -254,7 +262,7 @@ class DeviceKeys extends _SignedKey { bool get isValid => userId != null && deviceId != null && keys != null && curve25519Key != null && ed25519Key != null; Future setVerified(bool newVerified) { - verified = newVerified; + _verified = newVerified; return client.database?.setVerifiedUserDeviceKey(newVerified, client.id, userId, deviceId); } @@ -290,7 +298,7 @@ class DeviceKeys extends _SignedKey { validSignatures = validSignaturesContent.cast(); } } - verified = dbEntry.verified; + _verified = dbEntry.verified; blocked = dbEntry.blocked; } @@ -307,7 +315,7 @@ class DeviceKeys extends _SignedKey { unsigned = json['unsigned'] != null ? Map.from(json['unsigned']) : null; - verified = json['verified'] ?? false; + _verified = json['verified'] ?? false; blocked = json['blocked'] ?? false; } @@ -325,7 +333,7 @@ class DeviceKeys extends _SignedKey { if (unsigned != null) { data['unsigned'] = unsigned; } - data['verified'] = verified; + data['verified'] = _verified; data['blocked'] = blocked; return data; }