Script for checking event hashes
1 files changed, 43 insertions, 0 deletions
diff --git a/scripts/check_event_hash.py b/scripts/check_event_hash.py
new file mode 100644
index 0000000000..9fa4452ee6
--- /dev/null
+++ b/scripts/check_event_hash.py
@@ -0,0 +1,43 @@
+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 main():
+ parser = 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_pdu_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_pdu_event_reference_hash(event_json, algorithm)
+ print "Reference hash %s: %s" % (name, encode_base64(bytes))
+
+if __name__=="__main__":
+ main()
+
|