예제 #1
0
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