3 """ Encrypt a single file
5 low-cost quick-devel badly-documented
7 .. codeauthor:: Intra2net <info@intra2net.com>
11 from deltatar import tarfile
12 from traceback import print_exc
15 def main(do_encrypt, in_file, out_file, password, comptype='gz', enctype='aes',
16 bufsize=tarfile.RECORDSIZE, encoding='UTF-8'):
17 """ Main function, called when running file as script
19 see module doc for more info
22 write_handle = read_handle = None
28 read_handle = open(in_file, 'rt')
30 read_handle = tarfile._Stream(name=in_file, mode='r',
31 comptype=comptype, bufsize=bufsize,
32 fileobj=None, enctype=enctype,
38 write_handle = tarfile._Stream(name=out_file, mode='w',
39 comptype=comptype, bufsize=bufsize,
40 fileobj=None, enctype=enctype,
43 write_handle = open(out_file, 'wt')
48 buf = read_handle.read(bufsize)
51 write_handle.write(buf.encode(encoding, errors='strict'))
53 write_handle.write(buf.decode(encoding, errors='replace'))
54 if len(buf) < bufsize:
56 print('successfully encrypted {} into {}'
57 .format(in_file, out_file))
59 print('successfully decrypted {} into {}'
60 .format(in_file, out_file))
66 print('error encrypting file')
76 print('error closing out file')
84 print('error closing in file')
91 if __name__ == '__main__':
93 print('file_crypt.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
95 elif sys.argv[1] == '-h':
96 print('encrypt_file.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
99 comptype = 'tar' # auto-detect, not sure whether this would work
101 if sys.argv[idx] == '-c':
102 print('assuming gzip compression')
107 if sys.argv[idx] == 'enc':
109 elif sys.argv[idx] == 'dec':
112 print('encrypt_file.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
115 if len(sys.argv) != idx+4:
116 print('encrypt_file.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
119 sys.exit(main(do_encrypt, sys.argv[idx+1], sys.argv[idx+2],
120 sys.argv[idx+3], comptype))