Skip to content

Commit 1443f53

Browse files
committed
Add option to self-sign bridge bot device
1 parent 513e925 commit 1443f53

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

mautrix/bridge/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ def do_update(self, helper: ConfigUpdateHelper) -> None:
144144
copy("bridge.encryption.require")
145145
copy("bridge.encryption.appservice")
146146
copy("bridge.encryption.msc4190")
147+
copy("bridge.encryption.self_sign")
147148
copy("bridge.encryption.delete_keys.delete_outbound_on_ack")
148149
copy("bridge.encryption.delete_keys.dont_store_outbound")
149150
copy("bridge.encryption.delete_keys.ratchet_on_decrypt")

mautrix/bridge/e2ee.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class EncryptionManager:
5858
periodically_delete_expired_keys: bool
5959
delete_outdated_inbound: bool
6060
msc4190: bool
61+
self_sign: bool
6162

6263
bridge: br.Bridge
6364
az: AppService
@@ -110,6 +111,7 @@ def __init__(
110111
self.key_sharing_enabled = bridge.config["bridge.encryption.allow_key_sharing"]
111112
self.appservice_mode = bridge.config["bridge.encryption.appservice"]
112113
self.msc4190 = bridge.config["bridge.encryption.msc4190"]
114+
self.self_sign = bridge.config["bridge.encryption.self_sign"]
113115
if self.appservice_mode:
114116
self.az.otk_handler = self.crypto.handle_as_otk_counts
115117
self.az.device_list_handler = self.crypto.handle_as_device_lists
@@ -288,8 +290,18 @@ async def start(self) -> None:
288290
if not device_id:
289291
await self.crypto_store.put_device_id(self.client.device_id)
290292
self.log.debug(f"Logged in with new device ID {self.client.device_id}")
293+
await self.crypto.share_keys()
291294
elif self.crypto.account.shared:
292295
await self._verify_keys_are_on_server()
296+
else:
297+
await self.crypto.share_keys()
298+
if self.self_sign:
299+
trust_state = await self.crypto.resolve_trust(self.crypto.own_identity)
300+
if trust_state < TrustState.CROSS_SIGNED_UNTRUSTED:
301+
recovery_key = await self.crypto.generate_recovery_key()
302+
self.log.info(f"Generated recovery key and signed own device: {recovery_key}")
303+
else:
304+
self.log.debug(f"Own device is already verified ({trust_state})")
293305
if self.appservice_mode:
294306
self.log.info("End-to-bridge encryption support is enabled (appservice mode)")
295307
else:

0 commit comments

Comments
 (0)