def chunk_descramble( self, length ): chunk = [] bits = 1 for i in range( length ): chunk.append( ROR( uint8_t( self.f.read(1) ), bits, 8 ) ) bits = ( bits + 2 ) & 7 from helper import uint8_list_to_raw_str return uint8_list_to_raw_str( chunk )
def chunk_decompress( self, length ): rle = self.chunk_rle_decode( length ) #return None chunk = r'' chunklen = 0 rleofs = 0 while rleofs < len( rle ): code = uint8_t( rle[ rleofs ] ) rleofs += 1 if code == 0xff: chunk += rle[rleofs] chunklen += 1 rleofs += 1 else: length = (code & 7) + 1 ofs = 32 - ( code >> 3 ) for i in range( length ): chunk += chunk[ chunklen - ofs + i ] chunklen += length return chunk