Skip to content

Commit 6c58b51

Browse files
committed
Add option to not rotate keys when devices change
1 parent afa904e commit 6c58b51

File tree

5 files changed

+8
-0
lines changed

5 files changed

+8
-0
lines changed

mautrix/bridge/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ def do_update(self, helper: ConfigUpdateHelper) -> None:
166166
copy("bridge.encryption.rotation.enable_custom")
167167
copy("bridge.encryption.rotation.milliseconds")
168168
copy("bridge.encryption.rotation.messages")
169+
copy("bridge.encryption.rotation.disable_device_change_key_rotation")
169170

170171
copy("bridge.relay.enabled")
171172
copy_dict("bridge.relay.message_formats", override_existing_map=False)

mautrix/bridge/e2ee.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ def __init__(
123123
self.crypto.delete_fully_used_keys_on_decrypt = del_cfg["delete_fully_used_on_decrypt"]
124124
self.crypto.delete_keys_on_device_delete = del_cfg["delete_on_device_delete"]
125125
self.periodically_delete_expired_keys = del_cfg["periodically_delete_expired"]
126+
self.crypto.disable_device_change_key_rotation = bridge.config[
127+
"bridge.encryption.rotation.disable_device_change_key_rotation"
128+
]
126129

127130
async def _exit_on_sync_fail(self, data) -> None:
128131
if data["error"]:

mautrix/crypto/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class BaseOlmMachine:
5656
ratchet_keys_on_decrypt: bool
5757
delete_fully_used_keys_on_decrypt: bool
5858
delete_keys_on_device_delete: bool
59+
disable_device_change_key_rotation: bool
5960

6061
# Futures that wait for responses to a key request
6162
_key_request_waiters: dict[SessionID, asyncio.Future]

mautrix/crypto/device_lists.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ async def get_or_fetch_device_by_key(
244244
return None
245245

246246
async def on_devices_changed(self, user_id: UserID) -> None:
247+
if self.disable_device_change_key_rotation:
248+
return
247249
shared_rooms = await self.state_store.find_shared_rooms(user_id)
248250
self.log.debug(
249251
f"Devices of {user_id} changed, invalidating group session in {shared_rooms}"

mautrix/crypto/machine.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def __init__(
8383
self.ratchet_keys_on_decrypt = False
8484
self.delete_fully_used_keys_on_decrypt = False
8585
self.delete_keys_on_device_delete = False
86+
self.disable_device_change_key_rotation = False
8687

8788
self._fetch_keys_lock = asyncio.Lock()
8889
self._megolm_decrypt_lock = asyncio.Lock()

0 commit comments

Comments
 (0)