def decode(self, data): data = self.maple_aes(data, self.receive) self.decodeUpdate() # Maple Custom Decryption for j in range(1, 7): remember = 0 data_length = len(data) & 0xFF next_remember = 0 if j % 2 == 0: for i in xrange(len(data)): cur = data[i] cur -= 0x48 cur = ~cur & 0xFF cur = BitUtils.roll_left(cur, data_length & 0xFF) next_remember = cur cur ^= remember remember = next_remember cur -= data_length cur = BitUtils.roll_right(cur, 3) data[i] = cur data_length -= 1 else: for i in reversed(xrange(len(data))): cur = data[i] cur = BitUtils.roll_left(cur, 3) cur ^= 0x13 next_remember = cur cur ^= remember remember = next_remember cur -= data_length cur = BitUtils.roll_right(cur, 4) data[i] = cur data_length -= 1 return struct.pack("<%sB" % len(data), data)
def encode(self, data): header = self.get_packet_header(len(data)) # Maple custom encryption for j in xrange(0, 6): remember = 0 data_length = len(data) & 0xFF if j % 2 == 0: for i in xrange(len(data)): cur = data[i] cur = BitUtils.roll_left(cur, 3) cur += data_length cur ^= remember remember = cur cur = BitUtils.roll_right(cur, data_length & 0xFF) cur = ~cur & 0xFF cur += 0x48 data_length -= 1 data[i] = cur else: for i in reversed(xrange(len(data))): cur = data[i] cur = BitUtils.roll_left(cur, 4) cur += data_length cur ^= remember remember = cur cur ^= 0x13 cur = BitUtils.roll_right(cur, 3) data_length -= 1 data[i] = cur print "After custom ", data data = self.maple_aes(data, self.send) print "After aes ", data self.encodeUpdate() return header + data