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
88from mautrix .errors import DeviceValidationError
99from mautrix .types import (
2828
2929class 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