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()
 |