def test_zstd_compressor_1(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" compressor = py7zr.compressor.ZstdCompressor() outdata = compressor.compress(plain_data) outdata = compressor.compress(plain_data) outdata += compressor.flush() compressed = b"\x28\xb5\x2f\xfd" \ b"\x00XE\x01\x00\x04\x02\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4" \ b"\xe4\x97BB\xd2\x01\x00\x18\xb8z\x02" assert outdata == compressed
def test_sevenzipcompressor_aes_lzma2(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data + plain_data filters = [{ "id": py7zr.FILTER_LZMA2, "preset": py7zr.PRESET_DEFAULT }, { "id": py7zr.FILTER_CRYPTO_AES256_SHA256 }] indata = io.BytesIO(plain_data) outdata = io.BytesIO() compressor = py7zr.compressor.SevenZipCompressor(filters=filters, password='******') insize, outsize, crc = compressor.compress(indata, outdata) outsize += compressor.flush(outdata) outdata.seek(0, 0) coders = compressor.coders unpacksizes = compressor.unpacksizes decompressor = py7zr.compressor.SevenZipDecompressor( coders=coders, packsize=outsize, unpacksizes=unpacksizes, crc=None, password='******') revert_data = decompressor.decompress(outdata) assert revert_data == plain_data
def test_aes_encrypt_data(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB" plain_data += plain_data + plain_data compressor = py7zr.compressor.AESCompressor('secret') outdata = compressor.compress(plain_data) outdata += compressor.flush() assert len(outdata) == 96 # 96 = 16 * 6 = len(plain_data) + 3
def test_compressor_lzma2bcj(tmp_path): my_filters = [{ "id": py7zr.FILTER_X86 }, { "id": py7zr.FILTER_LZMA2, "preset": 7 }] plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data indata = io.BytesIO(plain_data) outdata = io.BytesIO() compressor = py7zr.compressor.SevenZipCompressor(filters=my_filters) _, _, _ = compressor.compress(indata, outdata) _ = compressor.flush(outdata) unpacksizes = compressor.unpacksizes outdata.seek(0, 0) coders = [{ 'method': b'!', 'properties': b'\x18', 'numinstreams': 1, 'numoutstreams': 1 }, { 'method': b'\x03\x03\x01\x03', 'numinstreams': 1, 'numoutstreams': 1 }] decompressor = py7zr.compressor.SevenZipDecompressor( coders=coders, packsize=len(plain_data), unpacksizes=unpacksizes, crc=None) revert_data = decompressor.decompress(outdata, max_length=len(plain_data)) assert revert_data == plain_data
def test_deflate_compressor_flushed(): with pytest.raises(zlib.error): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data compressor = py7zr.compressor.DeflateCompressor() outdata = compressor.compress(plain_data) outdata += compressor.flush() outdata += compressor.flush()
def test_deflate_compressor(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data compressor = py7zr.compressor.DeflateCompressor() outdata = compressor.compress(plain_data) outdata += compressor.flush() expected = b'c\xd0\x92\xe2TO\x91\xdc`Q|\xaa[Xa\xbd\x95t\xef\xf4\x1f5\xca\xbe/\x1f\x86_y2\xdd\xc9\xe9\x12\x03\x01y\x00' assert outdata == expected
def test_sevenzipcompressor_default(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data indata = io.BytesIO(plain_data) outdata = io.BytesIO() compressor = py7zr.compressor.SevenZipCompressor(filters=None) _, _, _ = compressor.compress(indata, outdata) _ = compressor.flush(outdata) assert len(outdata.getvalue()) > 1
def test_zstd_compressor(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data compressor = py7zr.compressor.ZstdCompressor() outdata = compressor.compress(plain_data) outdata += compressor.flush() expected = b"(\xb5/\xfd @E\x01\x00\x04\x02\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4" \ b"\xe4\x97BB\xd2\x01\x00\x18\xb8z\x02" assert outdata == expected
def test_sevenzipcompressor_aes_only(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" plain_data += plain_data filters = [{"id": py7zr.FILTER_CRYPTO_AES256_SHA256}] compressor = py7zr.compressor.SevenZipCompressor(filters=filters, password='******') indata = io.BytesIO(plain_data) outdata = io.BytesIO() _, _, _ = compressor.compress(indata, outdata) _ = compressor.flush(outdata) result = outdata.getvalue() assert len(result) == 64 assert result != plain_data
def test_zstd_compressor_decompressor(): compressor = py7zr.compressor.ZstdCompressor() compressed = b'' for i in range(255): compressed += compressor.compress(struct.Struct(">B").pack(i) * 16384) compressed += compressor.flush() assert len(compressed) == 999 assert compressed[0:4] == b"\x28\xb5\x2f\xfd" property = b'\x01\x04\x04\x00\x00' decompressor = py7zr.compressor.ZstdDecompressor(property) extracted = b'' extracted += decompressor.decompress(compressed) assert len(extracted) == 16384 * 255 assert extracted[:10] == b'\0\0\0\0\0\0\0\0\0\0'
def test_lzmadecompressor_lzmabcj(): indata = b'This file is located in the root.' compressor = lzma.LZMACompressor(format=lzma.FORMAT_RAW, filters=[{ 'id': lzma.FILTER_X86 }, { 'id': lzma.FILTER_LZMA1 }]) compressed = compressor.compress(indata) compressed += compressor.flush() decompressor = lzma.LZMADecompressor(format=lzma.FORMAT_RAW, filters=[{ 'id': lzma.FILTER_X86 }, { 'id': lzma.FILTER_LZMA1 }]) outdata = decompressor.decompress(data=compressed) assert outdata == indata
def test_copy_compressor(): plain_data = b"\x00*\x1a\t'd\x19\xb08s\xca\x8b\x13 \xaf:\x1b\x8d\x97\xf8|#M\xe9\xe1W\xd4\xe4\x97BB\xd2" compressor = py7zr.compressor.CopyCompressor() outdata = compressor.compress(plain_data) outdata += compressor.flush() assert outdata == plain_data