diff options
author | Bert Belder <bertbelder@gmail.com> | 2018-08-29 04:53:33 +0200 |
---|---|---|
committer | Bert Belder <bertbelder@gmail.com> | 2018-08-29 12:28:11 +0200 |
commit | 542eb542544b89ce5c870c63b7bdbb563f007184 (patch) | |
tree | cc103837679b081787c12376514a121dc86122e6 /tools/sha256sum.py | |
parent | 131a44f559ed833de374cba1942b1c4436d80b95 (diff) |
tools: make sha256sum.py more generic and move it to 'tools'
Diffstat (limited to 'tools/sha256sum.py')
-rw-r--r-- | tools/sha256sum.py | 70 |
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()) |