Package bootlegger :: Module cryptfile
[hide private]
[frames] | no frames]

Source Code for Module bootlegger.cryptfile

 1  from Crypto.Cipher import AES 
 2  import struct 
 3   
 4  CHUNK_SIZE = 32768 
 5   
6 -def encrypt_chunk(f, aes):
7 chunk = f.read(CHUNK_SIZE) 8 realn = len(chunk) 9 10 if realn == 0: 11 return '' 12 13 if realn % 16 != 0: 14 padding = 16 - (realn % 16) 15 chunk += ' ' * padding 16 17 head = struct.pack('!H', realn) 18 19 return head + aes.encrypt(chunk)
20
21 -def decrypt_chunk(f, aes):
22 headn = struct.calcsize('!H') 23 head = f.read(headn) 24 25 if len(head) == 0: 26 return '' 27 28 realn, = struct.unpack('!H', head) 29 30 if realn % 16 != 0: 31 n = realn + (16 - (realn % 16)) 32 else: 33 n = realn 34 35 chunk = f.read(n) 36 plain = aes.decrypt(chunk) 37 38 return plain[:realn]
39
40 -def transform_file(infname, outfname, key, chunk_func):
41 inf = open(infname, 'rb') 42 outf = open(outfname, 'wb') 43 44 aes = AES.new(key) 45 chunk = chunk_func(inf, aes) 46 47 while chunk: 48 outf.write(chunk) 49 chunk = chunk_func(inf, aes) 50 51 inf.close() 52 outf.close()
53
54 -def encrypt_file(infname, outfname, key):
55 transform_file(infname, outfname, key, encrypt_chunk)
56
57 -def decrypt_file(infname, outfname, key):
58 transform_file(infname, outfname, key, decrypt_chunk)
59