Interoperability
What interop.sh verifies against unzip, tar, xz and 7-Zip.
Last updated
An archiver is only useful if other tools can open what it writes. interop.sh
round-trips contents and compares hashes; it also checks rejection and cleanup.
Its final summary reports the count for the selected build and available tools.
What interop.sh checks
- What Arca writes is read by
unzip,tarand 7-Zip, at all four levels. - What
zip,tarand 7-Zip write is read by Arca without losing a byte. - An archive Arca encrypted with AES-256 opens in 7-Zip, and the other way round.
- Adding and removing the password of an existing ZIP archive, Arca’s own or 7-Zip’s.
- An altered ZIP byte is caught by the CRC, or by the AE-2 HMAC when encrypted.
- 7z Copy/LZMA2 at all levels, passwords and hidden headers in both directions.
- External solid LZMA/LZMA2 inputs, Unicode names, empty entries and conflict handling.
- Wrong-password 7z extraction leaves the destination absent or unchanged.
- An entry with
../../is rejected instead of writing outside the destination. - The RAR/CBR reader fixtures, also through official UnRAR when
UNRARpoints at it (ARCA_TEST_RAR=0skips them). .tar.xzat all four levels and with one or four threads opens inxz -tandtar -J, and Arca reads whattar -cJfwrites, also named.txz.- A standalone
.xzround-trips withxz, including every--checktype and concatenated streams. Two inputs are refused. - A TAR inside a file named
.xzis listed as TAR.XZ; a corrupt.xzfails and publishes nothing, and a truncated.tar.xzfails.
bash interop.shRAR archives Arca creates are checked by a separate seeded harness: it builds trees at every level, hashes the source and the trees extracted by Arca, official UnRAR and 7-Zip, and records the result as JSON. Without the two decoders it reports explicit skips; CI downloads pinned copies and fails if they are missing.
cargo build --release -p arca-cliUNRAR=/path/to/unrar SEVENZIP=/path/to/7zz python3 arca-rar/tests/create-stress.py --require-toolsZstandard in ZIP
Zstandard is ZIP method 93: registered in the specification, but not yet read by classic unzip. That’s why -c auto uses Deflate in a .zip, so that anything can open it. Zstandard is asked for by hand, and will be the default once there is a native format.
Encryption
ZIP AES-256 uses WinZip AE-2. Legacy ZipCrypto archives open with their password
and can be upgraded with arca password. 7z uses AES-256-CBC/SHA-256 with CRC,
not authenticated encryption; encrypted CRC failure can also mean corruption.
7z t -p"a password" secret.zip # 7-Zip reads what Arca encryptedParser regression checks
cargo test -p arca-7zcargo test -p arca-cli --test sevenzcargo test -p arca-xzcargo test -p arca-cli --test xzcargo test -p arca-7z --test interop -- --ignoredcargo test -p arca-gui -- --ignoredThe ignored tests require 7z. The automated suites test every truncated prefix
of representative plain, solid, encrypted and hidden-header fixtures and require
errors, not panics. They also exercise malformed headers and resource limits.
This is regression coverage, not a claim that every malicious archive is covered.
No new 7z performance numbers are claimed. Platform/UI validation must be run
separately from these shell checks.