def multiblock_encryption(c, key_id, versus, data, block_size, working_key_mode, working_key = ''): """ TODO. """ start = False chaining_data = '' result = '' while data != '': if len(data) <= block_size and not start: buff = data data = '' flag = 0x03 start = True else: if len(data) > block_size: buff = data[:block_size] data = data[block_size:] flag = 0x00 # body else: buff = data data = '' flag = 0x02 # end if not start: flag = 0x01 # start start = True Protocol.send_multiblock_encryption(c, key_id, flag, versus, buff, chaining_data, working_key_mode, working_key) ack = Protocol.recv_multiblock_encryption(c, 4) if ack['ack_code'] == 0x00: chaining_data = ack['chaining_data'] result += ack['data'] else: break return ack['ack_code'], result