def parse(cls, data):
if len(data) < (cls.header_size + 4):
raise BasebinaryError("not enough data to parse")
header_data = data[:cls.header_size]
inner_data = data[cls.header_size:-4]
#XXX: and here??
stored_checksum, = struct.unpack(">I", data[-4:])
(byte_0x0F, model, version, byte_0x18, byte_0x19, byte_0x1A, flags, unk_0x1C) = cls.parse_header(header_data)
if flags & 2:
inner_data = cls.decrypt(inner_data, model, byte_0x0F)
#XXX: why is Python so shitty about this comparison <.<
checksum = cast_u32(zlib.adler32(header_data+inner_data))
logging.debug("stored checksum {0:#x}".format(stored_checksum))
logging.debug("calculated checksum {0:#x}".format(checksum))
logging.debug("data length {0:#x}".format(len(header_data+inner_data)))
if stored_checksum != checksum:
raise BasebinaryError("bad checksum")
return inner_data
评论列表
文章目录