def swapnibbleinbytes(data): r""" Performs a bit-reversal within a byte-string. Example: >>> swapbits(b'\xf0') b'\x0f' """ return b"".join(SWAPBITSINBYTES_CACHE[b] for b in iterateints(data))
def transform_int_high(self, data): # special case for re-encoding high part of offsets # LiveMaker always only outputs 0 or 0xffffffff depending on if high # bit ends up set key = next(self.keystream) data = [(b ^ ((key >> (8 * i)) & 0xff)) for i, b in enumerate(construct.iterateints(data))] if data[3] & 0x80: data = [0xff, 0xff, 0xff, 0xff] else: data = [0, 0, 0, 0] return construct.integers2bytes(data)
def transform_int(self, data): key = next(self.keystream) data = [(b ^ ((key >> (8 * i)) & 0xff)) for i, b in enumerate(construct.iterateints(data))] return construct.integers2bytes(data)
def transform_bytes(self, data): return construct.integers2bytes((b ^ (next(self.keystream) & 0xff)) for b in construct.iterateints(data))