Add room v3+ event ID calculator

This commit is contained in:
2025-10-24 20:34:20 -04:00
parent 1fce4d5ba1
commit b71096663c

View File

@@ -169,7 +169,10 @@ def make_auth_header(
return authorization_headers[0].decode("utf-8")
def redact_event(event):
def redact_event(
event: dict,
for_event_id: bool = False,
):
# Returns a redacted event as per
# the algorithm for v1/v2 rooms.
@@ -181,7 +184,6 @@ def redact_event(event):
"state_key",
"content",
"hashes",
"signatures",
"depth",
"prev_events",
"prev_state",
@@ -191,6 +193,9 @@ def redact_event(event):
"membership",
]
if not for_event_id:
allowed_keys.append("signatures")
redacted_event = {k: v for k, v in event.items() if k in allowed_keys}
if "type" in redacted_event and "content" in redacted_event:
@@ -236,6 +241,26 @@ def hash_and_sign_event(event_object):
return event_object
def make_ref_hash(
event: dict,
room_ver: int = 3,
):
stripped = redact_event(event, True)
evt_bytes = canonical_json(stripped)
evt_hash = base64.b64encode(
hashlib.sha256(evt_bytes).digest()
).decode("utf-8").rstrip("=")
if room_ver > 3:
while "+" in evt_hash:
evt_hash = evt_hash.replace("+", "-")
while "/" in evt_hash:
evt_hash = evt_hash.replace("/", "_")
return "$" + evt_hash
def room_version_from_id(room):
room_id_no_sigil = room.replace("!", "")
@@ -345,7 +370,7 @@ class http_client:
)
def strip_state(l) -> dict:
def strip_state(l) -> list:
if not isinstance(l, list):
return l