#!/usr/bin/env python from pathlib import Path from argparse import ArgumentParser from io import BytesIO from Crypto.Cipher import AES import config as cfg if __name__ == '__main__': parser = ArgumentParser(description='encrypt or decrypt files') parser.add_argument('infile', type=str, help='input file') parser.add_argument('outfile', type=str, help='output file') pgroup = parser.add_mutually_exclusive_group(required=True) pgroup.add_argument('--encrypt', '-e', action='store_true', help='encrypt file') pgroup.add_argument('--decrypt', '-d', action='store_true', help='decrypt file') args = parser.parse_args() args.infile = Path(args.infile) args.outfile = Path(args.outfile) # for a real application, use a better nonce cipher = AES.new( cfg.CRYPT_KEY.encode(), AES.MODE_EAX, nonce=cfg.CRYPT_KEY.encode() # @todo HERE BE DRAGONS! ) cryptfunc = None if args.encrypt: cryptfunc = cipher.encrypt else: cryptfunc = cipher.decrypt args.outfile.write_bytes( cryptfunc( args.infile.read_bytes() ) )