55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
import argparse
 | 
						|
import hashlib
 | 
						|
import json
 | 
						|
import logging
 | 
						|
import sys
 | 
						|
 | 
						|
from unpaddedbase64 import encode_base64
 | 
						|
 | 
						|
from synapse.crypto.event_signing import (
 | 
						|
    check_event_content_hash,
 | 
						|
    compute_event_reference_hash,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
class dictobj(dict):
 | 
						|
    def __init__(self, *args, **kargs):
 | 
						|
        dict.__init__(self, *args, **kargs)
 | 
						|
        self.__dict__ = self
 | 
						|
 | 
						|
    def get_dict(self):
 | 
						|
        return dict(self)
 | 
						|
 | 
						|
    def get_full_dict(self):
 | 
						|
        return dict(self)
 | 
						|
 | 
						|
    def get_pdu_json(self):
 | 
						|
        return dict(self)
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    parser = argparse.ArgumentParser()
 | 
						|
    parser.add_argument(
 | 
						|
        "input_json", nargs="?", type=argparse.FileType('r'), default=sys.stdin
 | 
						|
    )
 | 
						|
    args = parser.parse_args()
 | 
						|
    logging.basicConfig()
 | 
						|
 | 
						|
    event_json = dictobj(json.load(args.input_json))
 | 
						|
 | 
						|
    algorithms = {"sha256": hashlib.sha256}
 | 
						|
 | 
						|
    for alg_name in event_json.hashes:
 | 
						|
        if check_event_content_hash(event_json, algorithms[alg_name]):
 | 
						|
            print("PASS content hash %s" % (alg_name,))
 | 
						|
        else:
 | 
						|
            print("FAIL content hash %s" % (alg_name,))
 | 
						|
 | 
						|
    for algorithm in algorithms.values():
 | 
						|
        name, h_bytes = compute_event_reference_hash(event_json, algorithm)
 | 
						|
        print("Reference hash %s: %s" % (name, encode_base64(h_bytes)))
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |