Skip to content

+ Now Compress archives: read-only - #511

Open
Hawkynt wants to merge 4 commits into
mainfrom
feat/now-compress
Open

Hawkynt wants to merge 4 commits into
mainfrom
feat/now-compress

Conversation

@Hawkynt

@Hawkynt Hawkynt commented Oct 23, 2026

Copy link
Copy Markdown
Owner

Now Compress (Now Software, Macintosh) had no descriptor. Reads the 110-byte directory records (nested folders), each file's checksummed block table (with XADMaster's shifted-offset recovery), and all four block codings (stored, LZSS, Huffman, Huffman+LZSS, new Huffman-coded LZSS); resource forks list as <name>.rsrc. Read-only: no writer exists to verify against.

Evidence: the format has no data checksum. On the only real samples found (commercial installers from the dexvert set, not redistributable; tests run via CWB_NOWCOMPRESS_SAMPLES) every decoded resource fork satisfies its own header invariants and the data forks decode to readable text. unar 1.10 fails on those samples ("read more data than was available"); the test compares with unar wherever it succeeds. Rung 1: converted from XADMaster (LGPL-2.1+), notice included.

Hawkynt and others added 4 commits October 23, 2026 14:59
Now Compress (Now Software, Macintosh) had no descriptor. Its archives are a
directory of 110-byte records (folders nest by child count) followed by one
stream per file - a checksummed table of blocks, each stored, 32 KiB LZSS,
static Huffman, Huffman+LZSS or the later Huffman-coded LZSS - carrying the
resource fork then the data fork. Folders are listed; resource forks appear
as "<name>.rsrc". The recorded block offsets are sometimes shifted; as in
XADMaster the shift is recovered from the stream-header checksum.

Read-only: no Now Compress writer exists to check our output against.

Evidence: the format has no data checksum, so on the only real samples found
(commercial installers from the dexvert set, not redistributable; checked via
CWB_NOWCOMPRESS_SAMPLES) every decoded resource fork satisfies its own header
(data offset + length = map offset, map end = fork size) and the data forks
decode to their readable text (e.g. "About In Re Macintosh, Vol. 1/No. 5 -
May 1994"). unar 1.10 stops on those samples with "read more data than was
available"; the test compares with it wherever it succeeds.

Sourcing: rung 1 - converted from XADMaster (LGPL-2.1-or-later), notice in
THIRD-PARTY-NOTICE.XADMaster.txt; the new-LZSS tables copied verbatim.
Retain the merged PackIt capability findings, record the existing pinned XADMaster conversion notice, keep main artwork and regenerate Archives API documentation.

Verified: Release solution build, 43 focused format/documentation/provenance tests passed. Two real-sample tests skipped because the private commercial sample directory and external oracle inputs are unavailable here. Documentation generation completed without errors.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant