Skip to content

Commit 21ffe8b

Browse files
committed
Fix old Python versions and improve device validation logs
1 parent 4a36fc5 commit 21ffe8b

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

mautrix/crypto/device_lists.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# This Source Code Form is subject to the terms of the Mozilla Public
44
# License, v. 2.0. If a copy of the MPL was not distributed with this
55
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
6-
from typing import Dict, List, Optional
6+
from __future__ import annotations
77

88
from mautrix.errors import DeviceValidationError
99
from mautrix.types import (
@@ -28,8 +28,8 @@
2828

2929
class DeviceListMachine(BaseOlmMachine):
3030
async def _fetch_keys(
31-
self, users: List[UserID], since: SyncToken = "", include_untracked: bool = False
32-
) -> Dict[UserID, Dict[DeviceID, DeviceIdentity]]:
31+
self, users: list[UserID], since: SyncToken = "", include_untracked: bool = False
32+
) -> dict[UserID, dict[DeviceID, DeviceIdentity]]:
3333
if not include_untracked:
3434
users = await self.crypto_store.filter_tracked_users(users)
3535
if len(users) == 0:
@@ -211,7 +211,7 @@ async def _store_cross_signing_keys(self, resp: QueryKeysResponse, user_id: User
211211

212212
async def get_or_fetch_device(
213213
self, user_id: UserID, device_id: DeviceID
214-
) -> Optional[DeviceIdentity]:
214+
) -> DeviceIdentity | None:
215215
device = await self.crypto_store.get_device(user_id, device_id)
216216
if device is not None:
217217
return device
@@ -223,7 +223,7 @@ async def get_or_fetch_device(
223223

224224
async def get_or_fetch_device_by_key(
225225
self, user_id: UserID, identity_key: IdentityKey
226-
) -> Optional[DeviceIdentity]:
226+
) -> DeviceIdentity | None:
227227
device = await self.crypto_store.find_device_by_key(user_id, identity_key)
228228
if device is not None:
229229
return device
@@ -245,12 +245,16 @@ async def _validate_device(
245245
user_id: UserID,
246246
device_id: DeviceID,
247247
device_keys: DeviceKeys,
248-
existing: Optional[DeviceIdentity] = None,
248+
existing: DeviceIdentity | None = None,
249249
) -> DeviceIdentity:
250250
if user_id != device_keys.user_id:
251-
raise DeviceValidationError("mismatching user ID in parameter and keys object")
251+
raise DeviceValidationError(
252+
f"mismatching user ID (expected {user_id}, got {device_keys.user_id})"
253+
)
252254
elif device_id != device_keys.device_id:
253-
raise DeviceValidationError("mismatching device ID in parameter and keys object")
255+
raise DeviceValidationError(
256+
f"mismatching device ID (expected {device_id}, got {device_keys.device_id})"
257+
)
254258

255259
signing_key = device_keys.ed25519
256260
if not signing_key:
@@ -260,7 +264,10 @@ async def _validate_device(
260264
raise DeviceValidationError("didn't find curve25519 identity key")
261265

262266
if existing and existing.signing_key != signing_key:
263-
raise DeviceValidationError("received update for device with different signing key")
267+
raise DeviceValidationError(
268+
f"received update for device with different signing key "
269+
f"(expected {existing.signing_key}, got {signing_key})"
270+
)
264271

265272
if not verify_signature_json(device_keys.serialize(), user_id, device_id, signing_key):
266273
raise DeviceValidationError("invalid signature on device keys")

0 commit comments

Comments
 (0)