#byte #zlib #header #details #print #rfc #defined

app zlib-header-cli

CLI to print details of the 2 Byte zlib header, as defined in RFC 1950

2 releases

new 0.1.2 Mar 9, 2025
0.1.1 Mar 7, 2025
0.1.0 Mar 7, 2025

#275 in Compression

Download history 154/week @ 2025-03-02

154 downloads per month

MIT license

20KB
239 lines

zlib-header-cli

CLI to print details about the 2 Byte zlib header, as defined in RFC 1950.
This was initially written to reverse-engineer more details about Blizzard's proprietary MPQ archive format, which uses zlib streams to store data.

Usage: zlib-header-cli [OPTIONS] [HEX4CHAR]

Arguments:
[HEX4CHAR]  A four-character hex string representing the ZlibHeader (Big Endian)

Options:
  -e, --explain  Explain the ZlibHeader struct and abbreviations
  -h, --help     Print help
drfrugal@karazhan:~$ zlib-header-cli 789C
CM      8 (DEFLATE)
CINFO   7 (Window: 32768 Bytes)
FCHECK  28 (valid)
FDICT   false (Preset Dictionary not used)
FLEVEL  2 (default)
drfrugal@karazhan:~$ zlib-header-cli --explain
2 Byte zlib header according to https://datatracker.ietf.org/doc/html/rfc1950
1st Byte - CMF (Compression Method and Flags)
  0000_1111  CM      Compression Method   8, _ (DEFLATE, UNDEFINED)
  1111_0000  CINFO   Compression Info     window size is 2.pow(CINFO + 8)
2nd Byte - FLG (Flags)
  0001_1111  FCHECK  Checksum Adjustment  valid if (CMF * 256 + FLG) % 31 == 0
  0010_0000  FDICT   Preset Dictionary    a preset dictionary was used
  1100_0000  FLEVEL  Compression Level    0, 1, 2, 3 (fastest, fast, default, best)

Dependencies

~1–1.7MB
~31K SLoC