summaryrefslogtreecommitdiff
path: root/tools/sha256sum.py
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2018-08-29 04:53:33 +0200
committerBert Belder <bertbelder@gmail.com>2018-08-29 12:28:11 +0200
commit542eb542544b89ce5c870c63b7bdbb563f007184 (patch)
treecc103837679b081787c12376514a121dc86122e6 /tools/sha256sum.py
parent131a44f559ed833de374cba1942b1c4436d80b95 (diff)
tools: make sha256sum.py more generic and move it to 'tools'
Diffstat (limited to 'tools/sha256sum.py')
-rw-r--r--tools/sha256sum.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/tools/sha256sum.py b/tools/sha256sum.py
new file mode 100644
index 000000000..d3273d5ba
--- /dev/null
+++ b/tools/sha256sum.py
@@ -0,0 +1,70 @@
+# Copyright 2018 the Deno authors. All rights reserved. MIT license.
+"""
+Computes the SHA256 hash and formats the result.
+"""
+
+import argparse
+from hashlib import sha256
+import os
+import sys
+
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+
+ # Arguments specifying where input comes from.
+ # If multiple sources are specified, they are all concatenated together.
+ parser.add_argument(
+ "--input",
+ action="append",
+ dest="input",
+ type=str,
+ metavar="TEXT",
+ help="Hash literal text specified on the command line.")
+ parser.add_argument(
+ "--infile",
+ action="append",
+ dest="input",
+ type=read_file,
+ metavar="FILE",
+ help="Hash the contents of a file.")
+
+ # Arguments dealing with output.
+ parser.add_argument(
+ "--format",
+ type=str,
+ dest="format",
+ default="%s",
+ metavar="TEMPLATE",
+ help="Format output using Python template (default = '%%s').")
+ parser.add_argument(
+ "--outfile",
+ dest="outfile",
+ type=argparse.FileType("wb"),
+ default=sys.stdout,
+ metavar="FILE",
+ help="Write the formatted hash to a file (default = stdout).")
+
+ # Parse arguments. Print usage and exit if given no input.
+ args = parser.parse_args()
+ if (not args.input):
+ parser.print_usage()
+ return 1
+
+ # Compute the hash of all inputs concatenated together.
+ hasher = sha256()
+ for data in args.input:
+ hasher.update(data)
+ hash = hasher.hexdigest()
+
+ # Format and write to specified out file (or the default, stdout).
+ args.outfile.write(args.format % hash)
+
+
+def read_file(filename):
+ with open(filename, "rb") as file:
+ return file.read()
+
+
+if __name__ == '__main__':
+ sys.exit(main())