diff --git a/changelog.d/11541.misc b/changelog.d/11541.misc
new file mode 100644
index 0000000000..31c72c2a20
--- /dev/null
+++ b/changelog.d/11541.misc
@@ -0,0 +1 @@
+Support unprefixed versions of fallback key property names.
diff --git a/synapse/handlers/e2e_keys.py b/synapse/handlers/e2e_keys.py
index b2554bda04..14360b4e40 100644
--- a/synapse/handlers/e2e_keys.py
+++ b/synapse/handlers/e2e_keys.py
@@ -580,7 +580,9 @@ class E2eKeysHandler:
log_kv(
{"message": "Did not update one_time_keys", "reason": "no keys given"}
)
- fallback_keys = keys.get("org.matrix.msc2732.fallback_keys", None)
+ fallback_keys = keys.get("fallback_keys") or keys.get(
+ "org.matrix.msc2732.fallback_keys"
+ )
if fallback_keys and isinstance(fallback_keys, dict):
log_kv(
{
diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py
index 88e4f5e063..dd90ffa123 100644
--- a/synapse/rest/client/sync.py
+++ b/synapse/rest/client/sync.py
@@ -293,6 +293,9 @@ class SyncRestServlet(RestServlet):
response[
"org.matrix.msc2732.device_unused_fallback_key_types"
] = sync_result.device_unused_fallback_key_types
+ response[
+ "device_unused_fallback_key_types"
+ ] = sync_result.device_unused_fallback_key_types
if joined:
response["rooms"][Membership.JOIN] = joined
diff --git a/tests/handlers/test_e2e_keys.py b/tests/handlers/test_e2e_keys.py
index f0723892e4..ddcf3ee348 100644
--- a/tests/handlers/test_e2e_keys.py
+++ b/tests/handlers/test_e2e_keys.py
@@ -161,8 +161,9 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
def test_fallback_key(self):
local_user = "@boris:" + self.hs.hostname
device_id = "xyz"
- fallback_key = {"alg1:k1": "key1"}
- fallback_key2 = {"alg1:k2": "key2"}
+ fallback_key = {"alg1:k1": "fallback_key1"}
+ fallback_key2 = {"alg1:k2": "fallback_key2"}
+ fallback_key3 = {"alg1:k2": "fallback_key3"}
otk = {"alg1:k2": "key2"}
# we shouldn't have any unused fallback keys yet
@@ -175,7 +176,7 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
self.handler.upload_keys_for_user(
local_user,
device_id,
- {"org.matrix.msc2732.fallback_keys": fallback_key},
+ {"fallback_keys": fallback_key},
)
)
@@ -220,7 +221,7 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
self.handler.upload_keys_for_user(
local_user,
device_id,
- {"org.matrix.msc2732.fallback_keys": fallback_key},
+ {"fallback_keys": fallback_key},
)
)
@@ -234,7 +235,7 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
self.handler.upload_keys_for_user(
local_user,
device_id,
- {"org.matrix.msc2732.fallback_keys": fallback_key2},
+ {"fallback_keys": fallback_key2},
)
)
@@ -271,6 +272,25 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
{"failures": {}, "one_time_keys": {local_user: {device_id: fallback_key2}}},
)
+ # using the unstable prefix should also set the fallback key
+ self.get_success(
+ self.handler.upload_keys_for_user(
+ local_user,
+ device_id,
+ {"org.matrix.msc2732.fallback_keys": fallback_key3},
+ )
+ )
+
+ res = self.get_success(
+ self.handler.claim_one_time_keys(
+ {"one_time_keys": {local_user: {device_id: "alg1"}}}, timeout=None
+ )
+ )
+ self.assertEqual(
+ res,
+ {"failures": {}, "one_time_keys": {local_user: {device_id: fallback_key3}}},
+ )
+
def test_replace_master_key(self):
"""uploading a new signing key should make the old signing key unavailable"""
local_user = "@boris:" + self.hs.hostname
|