import struct import lzma def lzma_compress(data): # https://svn.python.org/projects/external/xz-5.0.3/doc/lzma-file-format.txt compressed_data = lzma.compress(data, format=lzma.FORMAT_ALONE, filters=[{ "id": lzma.FILTER_LZMA1, "preset": 6, "dict_size": 16 * 1024, }]) compressed_data = compressed_data[:5] + struct.pack('> 2) & 0x03) pattern_len = opcode >> 4 if direct_len == 0: direct_len = data[index] + 3 index += 1 assert direct_len > 0 direct_len -= 1 if pattern_len == 0xF: pattern_len += data[index] # pattern_len (not including the +2) can be in range [0, 270] index += 1 # Direct Copy for _ in range(direct_len): out.append(data[index]) index += 1 # Pattern if pattern_len > 0: offset_add = data[index] index += 1 if offset_256 == 0x03: offset_256 = data[index] index += 1 offset = offset_add + offset_256 * 256 # offset can be in range [0, 0xffff] # +2 because anything shorter wouldn't be a pattern. for _ in range(pattern_len + 2): out.append(out[-offset]) return out