|
|
|
@ -16,11 +16,12 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from synapse.federation.units import Pdu |
|
|
|
|
from synapse.api.events.utils import prune_pdu |
|
|
|
|
from synapse.api.events.utils import prune_pdu, prune_event |
|
|
|
|
from syutil.jsonutil import encode_canonical_json |
|
|
|
|
from syutil.base64util import encode_base64, decode_base64 |
|
|
|
|
from syutil.crypto.jsonsign import sign_json, verify_signed_json |
|
|
|
|
|
|
|
|
|
import copy |
|
|
|
|
import hashlib |
|
|
|
|
import logging |
|
|
|
|
|
|
|
|
@ -69,6 +70,16 @@ def compute_pdu_event_reference_hash(pdu, hash_algorithm=hashlib.sha256): |
|
|
|
|
return (hashed.name, hashed.digest()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compute_event_reference_hash(event, hash_algorithm=hashlib.sha256): |
|
|
|
|
tmp_event = copy.deepcopy(event) |
|
|
|
|
tmp_event = prune_event(tmp_event) |
|
|
|
|
event_json = tmp_event.get_dict() |
|
|
|
|
event_json.pop("signatures", None) |
|
|
|
|
event_json_bytes = encode_canonical_json(event_json) |
|
|
|
|
hashed = hash_algorithm(event_json_bytes) |
|
|
|
|
return (hashed.name, hashed.digest()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def sign_event_pdu(pdu, signature_name, signing_key): |
|
|
|
|
tmp_pdu = Pdu(**pdu.get_dict()) |
|
|
|
|
tmp_pdu = prune_pdu(tmp_pdu) |
|
|
|
|