summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/meshbay-hub/tests/test_spa_ordering.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/packages/meshbay-hub/tests/test_spa_ordering.py b/packages/meshbay-hub/tests/test_spa_ordering.py
index 839698a..0ef34fc 100644
--- a/packages/meshbay-hub/tests/test_spa_ordering.py
+++ b/packages/meshbay-hub/tests/test_spa_ordering.py
@@ -74,6 +74,22 @@ def test_join_happens_before_the_gek_proof():
"key to prove with")
+def test_keys_are_recovered_before_the_join_is_attempted():
+ """
+ A second browser holds nothing but a password. It recovers its identity keys
+ from the node's encrypted keypair bundle, and only then can it sign a join —
+ so the recovery has to come first. Getting this order wrong is invisible on
+ the browser that registered, and breaks every other one.
+ """
+ recover, join_call = _positions(
+ "type: 'keypair_bundle_fetch'",
+ "await this.joinGroup(",
+ )
+ assert recover < join_call, (
+ "the keypair bundle must be fetched before joinGroup() — otherwise a "
+ "browser that did not register has no key to sign the join with")
+
+
def test_the_ack_still_verifies_the_announced_node_key():
"""
Taking node_pk from the challenge is only safe because the ack proves it and