Make add_hashes_and_signatures operate on dicts
parent
073f6c2e5e
commit
554ca58ea1
|
@ -131,12 +131,12 @@ def compute_event_signature(event_dict, signature_name, signing_key):
|
||||||
return redact_json["signatures"]
|
return redact_json["signatures"]
|
||||||
|
|
||||||
|
|
||||||
def add_hashes_and_signatures(event, signature_name, signing_key,
|
def add_hashes_and_signatures(event_dict, signature_name, signing_key,
|
||||||
hash_algorithm=hashlib.sha256):
|
hash_algorithm=hashlib.sha256):
|
||||||
"""Add content hash and sign the event
|
"""Add content hash and sign the event
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
event_dict (EventBuilder): The event to add hashes to and sign
|
event_dict (dict): The event to add hashes to and sign
|
||||||
signature_name (str): The name of the entity signing the event
|
signature_name (str): The name of the entity signing the event
|
||||||
(typically the server's hostname).
|
(typically the server's hostname).
|
||||||
signing_key (syutil.crypto.SigningKey): The key to sign with
|
signing_key (syutil.crypto.SigningKey): The key to sign with
|
||||||
|
@ -144,16 +144,12 @@ def add_hashes_and_signatures(event, signature_name, signing_key,
|
||||||
to hash the event
|
to hash the event
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name, digest = compute_content_hash(
|
name, digest = compute_content_hash(event_dict, hash_algorithm=hash_algorithm)
|
||||||
event.get_pdu_json(), hash_algorithm=hash_algorithm,
|
|
||||||
)
|
|
||||||
|
|
||||||
if not hasattr(event, "hashes"):
|
event_dict.setdefault("hashes", {})[name] = encode_base64(digest)
|
||||||
event.hashes = {}
|
|
||||||
event.hashes[name] = encode_base64(digest)
|
|
||||||
|
|
||||||
event.signatures = compute_event_signature(
|
event_dict["signatures"] = compute_event_signature(
|
||||||
event.get_pdu_json(),
|
event_dict,
|
||||||
signature_name=signature_name,
|
signature_name=signature_name,
|
||||||
signing_key=signing_key,
|
signing_key=signing_key,
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,7 +18,7 @@ import nacl.signing
|
||||||
from unpaddedbase64 import decode_base64
|
from unpaddedbase64 import decode_base64
|
||||||
|
|
||||||
from synapse.crypto.event_signing import add_hashes_and_signatures
|
from synapse.crypto.event_signing import add_hashes_and_signatures
|
||||||
from synapse.events.builder import EventBuilder
|
from synapse.events import FrozenEvent
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest
|
||||||
|
|
||||||
|
@ -40,20 +40,18 @@ class EventSigningTestCase(unittest.TestCase):
|
||||||
self.signing_key.version = KEY_VER
|
self.signing_key.version = KEY_VER
|
||||||
|
|
||||||
def test_sign_minimal(self):
|
def test_sign_minimal(self):
|
||||||
builder = EventBuilder(
|
event_dict = {
|
||||||
{
|
'event_id': "$0:domain",
|
||||||
'event_id': "$0:domain",
|
'origin': "domain",
|
||||||
'origin': "domain",
|
'origin_server_ts': 1000000,
|
||||||
'origin_server_ts': 1000000,
|
'signatures': {},
|
||||||
'signatures': {},
|
'type': "X",
|
||||||
'type': "X",
|
'unsigned': {'age_ts': 1000000},
|
||||||
'unsigned': {'age_ts': 1000000},
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_hashes_and_signatures(builder, HOSTNAME, self.signing_key)
|
add_hashes_and_signatures(event_dict, HOSTNAME, self.signing_key)
|
||||||
|
|
||||||
event = builder.build()
|
event = FrozenEvent(event_dict)
|
||||||
|
|
||||||
self.assertTrue(hasattr(event, 'hashes'))
|
self.assertTrue(hasattr(event, 'hashes'))
|
||||||
self.assertIn('sha256', event.hashes)
|
self.assertIn('sha256', event.hashes)
|
||||||
|
@ -71,23 +69,21 @@ class EventSigningTestCase(unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_sign_message(self):
|
def test_sign_message(self):
|
||||||
builder = EventBuilder(
|
event_dict = {
|
||||||
{
|
'content': {'body': "Here is the message content"},
|
||||||
'content': {'body': "Here is the message content"},
|
'event_id': "$0:domain",
|
||||||
'event_id': "$0:domain",
|
'origin': "domain",
|
||||||
'origin': "domain",
|
'origin_server_ts': 1000000,
|
||||||
'origin_server_ts': 1000000,
|
'type': "m.room.message",
|
||||||
'type': "m.room.message",
|
'room_id': "!r:domain",
|
||||||
'room_id': "!r:domain",
|
'sender': "@u:domain",
|
||||||
'sender': "@u:domain",
|
'signatures': {},
|
||||||
'signatures': {},
|
'unsigned': {'age_ts': 1000000},
|
||||||
'unsigned': {'age_ts': 1000000},
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_hashes_and_signatures(builder, HOSTNAME, self.signing_key)
|
add_hashes_and_signatures(event_dict, HOSTNAME, self.signing_key)
|
||||||
|
|
||||||
event = builder.build()
|
event = FrozenEvent(event_dict)
|
||||||
|
|
||||||
self.assertTrue(hasattr(event, 'hashes'))
|
self.assertTrue(hasattr(event, 'hashes'))
|
||||||
self.assertIn('sha256', event.hashes)
|
self.assertIn('sha256', event.hashes)
|
||||||
|
|
Loading…
Reference in New Issue