COOLJAPAN
← All posts

OxiArc 0.4.1 Released — A Predictable ZIP Salt, a Wrong CRC Lane, and a Decompression Bomb, All Closed

OxiArc 0.4.1 is a security-hardening release: ZIP AES/ZipCrypto salts and headers now always come from a real OS CSPRNG (no more silent low-entropy fallback), WinZip-AES is now constant-time, a silently-wrong x86_64 CRC-32 SIMD path is fixed and enabled, and 7z folder coder chains are bounded against decompression-bomb amplification. Plus Zstandard FSE_Compressed_Mode sequence tables and Brotli literal/command/distance block splitting close two long-standing encoder-ratio gaps. 2,658 tests passing, Pure Rust.

release oxiarc security zip csprng crc32 zstandard brotli pure-rust archiving

A predictable salt is not a salt. If the only thing keeping two AES-encrypted ZIP archives from sharing keystream is a value an attacker can guess, you don’t have encryption — you have an inconvenience.

Today we released OxiArc 0.4.1 — a security-hardening release, with two long-standing encoder-ratio limitations closed as a bonus. No archive or stream wire format changed, and no public API was removed from any read/decode path. There is exactly one intentional breaking change: the ZIP write-side salt/header generation API moved from infallible to fallible, because a CSPRNG that can fail must be allowed to say so.

No C, no Fortran, no zlib, no libarchive, no external shared libraries. Just clean, memory-safe archiving and compression that compiles to a single static binary, targets WASM, and runs everywhere. OxiArc is the Pure Rust replacement for the zip, tar, gzip, zstd, and 7-zip tools — and for the Rust crates zip, flate2, zstd, bzip2, lz4, tar, snap, brotli, and miniz_oxide.

Why OxiArc 0.4.1 is a game changer

Four separate defects, each independently serious, all fixed in one pass:

OxiArc 0.4.1 ends all of that:

Technical Deep Dive: the security pass, layer by layer

  1. Randomness. zip::csprng is the single, unconditional source of cryptographic randomness for ZIP writes — no cfg-gated software fallback exists anywhere downstream of it anymore.
  2. Constant-time crypto. zip::aes_ct replaces every secret-dependent table lookup and branch in the AES core with a bitsliced circuit, verified bit-for-bit against FIPS 197 and NIST SP 800-38A ECB test vectors on an unstructured key.
  3. Verified SIMD. crc_simd’s x86_64 and aarch64 paths now share one reflected_constants module and are cross-checked against the scalar slicing-by-8 reference across a 0–4096-byte length sweep plus 100 randomized-input vectors.
  4. Bounded decompression. decode_coder_chain in the 7z folder walker enforces per-coder single-decode and a cumulative byte budget, so a crafted bind-pair graph can no longer turn a small input into unbounded memory growth.

Every layer ships with new regression coverage: zip_encryption_e2e.rs for full AES-256/ZipCrypto write→read round-trips including wrong-password rejection, dispatched_crc32_matches_software_reference for the corrected SIMD path, and iso_sevenz_mutation.rs for a deterministic bit-flip/byte-mutation fuzz-adjacent regression suite against the two least-covered untrusted-input parsers.

Getting Started

cargo add [email protected]
use oxiarc_archive::zip::{crypto::ZipCrypto, encryption};

// Salt/header generation is now fallible -- it reports an error instead of
// silently degrading to a weak seed if the OS CSPRNG can't be reached.
let salt = encryption::generate_salt(16)?;
let header_random = ZipCrypto::generate_header_random()?;

What’s New in 0.4.1

Tips

This is the foundation

Correct, non-leaking encryption and a decompression path that can’t be turned into a bomb matter most for whatever handles untrusted archives at the edge. NumRS2, SciRS2, ToRSh, RusMES, FVRS, TrustFormers, SkLearS, OxiGeo, VoiRS, and OxiMedia all pin oxiarc-* crates for archive and compression I/O.

Repository: https://github.com/cool-japan/oxiarc

Star the repo if a ZIP library correctly failing instead of silently handing you a weak salt is the bar it should always have cleared.

The era of “close enough” cryptographic randomness is over. Pure Rust archiving that’s fast, safe, and sovereign — is here.

KitaSan at COOLJAPAN OÜ August 6, 2026

↑ Back to all posts