Skip to content
Snippets Groups Projects
check_event_hash.py 1.22 KiB
Newer Older
  • Learn to ignore specific revisions
  • from synapse.crypto.event_signing import *
    from syutil.base64util import encode_base64
    
    import argparse
    import hashlib
    import sys
    import json
    
    
    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()