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 key_length=128, 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,
33 key_length=key_length,
39 write_handle = tarfile._Stream(name=out_file, mode='w',
40 comptype=comptype, bufsize=bufsize,
41 fileobj=None, enctype=enctype,
42 key_length=key_length,
45 write_handle = open(out_file, 'wt')
50 buf = read_handle.read(bufsize)
53 write_handle.write(buf.encode(encoding, errors='strict'))
55 write_handle.write(buf.decode(encoding, errors='replace'))
56 if len(buf) < bufsize:
58 print('successfully encrypted {} into {}'
59 .format(in_file, out_file))
61 print('successfully decrypted {} into {}'
62 .format(in_file, out_file))
68 print('error encrypting file')
78 print('error closing out file')
86 print('error closing in file')
93 if __name__ == '__main__':
95 print('file_crypt.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
97 elif sys.argv[1] == '-h':
98 print('encrypt_file.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
101 comptype = 'tar' # auto-detect, not sure whether this would work
103 if sys.argv[idx] == '-c':
104 print('assuming gzip compression')
109 if sys.argv[idx] == 'enc':
111 elif sys.argv[idx] == 'dec':
114 print('encrypt_file.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
117 if len(sys.argv) != idx+4:
118 print('encrypt_file.py {enc|dec} [-c] INFILE OUTFILE PASSWORD')
121 sys.exit(main(do_encrypt, sys.argv[idx+1], sys.argv[idx+2],
122 sys.argv[idx+3], comptype))