51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
from synapse.crypto.event_signing import *
 | 
						|
from unpaddedbase64 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()
 | 
						|
 |