diff options
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py')
| -rw-r--r-- | packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py index 15309cf..717a27a 100644 --- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py +++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py @@ -868,14 +868,20 @@ class WebRTCPeerSession: self._send({"type": "error", "detail": "No pending handshake"}) return - bundle_enc = await bundle_store.fetch_keypair(user_id) - if bundle_enc: - self._send({ + kp = await bundle_store.fetch_keypair(user_id) + if kp and kp.get("bundle_enc"): + resp = { "type": MNP.KEYPAIR_BUNDLE_RESP, "v": MNP_VERSION, "found": True, - "bundle_enc": bundle_enc, - }) + "bundle_enc": kp["bundle_enc"], + } + # The recovery-wrapped copy (MNP 0.14) rides along when present, so a + # client holding the recovery key can re-wrap it under a new + # passphrase โ docs/auth-confirm.md ยง4.5. + if kp.get("bundle_enc_recovery"): + resp["bundle_enc_recovery"] = kp["bundle_enc_recovery"] + self._send(resp) else: self._send({"type": MNP.KEYPAIR_BUNDLE_RESP, "v": MNP_VERSION, "found": False}) @@ -891,8 +897,14 @@ class WebRTCPeerSession: self._send({"type": "error", "detail": "Missing bundle_enc"}) return - await bundle_store.store_keypair(self._user_id, bundle_enc) - log.info("Keypair bundle stored for user=%s", self._user_id[:8]) + # Optional second copy wrapped under the recovery key (MNP 0.14). Omitted + # by an older client and by a plain re-backup; the store keeps any + # existing recovery copy when this is absent. + recovery = msg.get("bundle_enc_recovery") or None + + await bundle_store.store_keypair(self._user_id, bundle_enc, recovery) + log.info("Keypair bundle stored for user=%s (recovery=%s)", + self._user_id[:8], bool(recovery)) self._audit("keypair_bundle_store") self._send({ "type": "ack", "v": MNP_VERSION, |