@ -32,15 +32,22 @@ def check_event_content_hash(event, hash_algorithm=hashlib.sha256):
""" Check whether the hash for this PDU matches the contents """
""" Check whether the hash for this PDU matches the contents """
name , expected_hash = compute_content_hash ( event , hash_algorithm )
name , expected_hash = compute_content_hash ( event , hash_algorithm )
logger . debug ( " Expecting hash: %s " , encode_base64 ( expected_hash ) )
logger . debug ( " Expecting hash: %s " , encode_base64 ( expected_hash ) )
if name not in event . hashes :
# some malformed events lack a 'hashes'. Protect against it being missing
# or a weird type by basically treating it the same as an unhashed event.
hashes = event . get ( " hashes " )
if not isinstance ( hashes , dict ) :
raise SynapseError ( 400 , " Malformed ' hashes ' " , Codes . UNAUTHORIZED )
if name not in hashes :
raise SynapseError (
raise SynapseError (
400 ,
400 ,
" Algorithm %s not in hashes %s " % (
" Algorithm %s not in hashes %s " % (
name , list ( event . hashes ) ,
name , list ( hashes ) ,
) ,
) ,
Codes . UNAUTHORIZED ,
Codes . UNAUTHORIZED ,
)
)
message_hash_base64 = event . hashes [ name ]
message_hash_base64 = hashes [ name ]
try :
try :
message_hash_bytes = decode_base64 ( message_hash_base64 )
message_hash_bytes = decode_base64 ( message_hash_base64 )
except Exception :
except Exception :