Skip to main content

Pure-Python implementations of every Microsoft ESE record-compression scheme and Windows ntdll RtlCompressBuffer/RtlDecompressBuffer format.

Project description

ntcompress

Pure-Python, standard-library-only implementations of every compression format used by Microsoft's Extensible Storage Engine (ESE/ESENT, the "JET Blue" engine behind NTDS.dit, Exchange stores, Windows.edb, SRUDB.dat, and WebCacheV01.dat) and Windows ntdll.dll compression (RtlCompressBuffer / RtlDecompressBuffer). No runtime dependencies beyond the standard library.

Scope

This library covers two distinct compression layers used by Windows:

ESE record compression (vs esent.dll)

ESE stores a one-byte header on each compressed record cell; the top 5 bits select the scheme (first_byte >> 3) and the low 3 bits carry scheme-specific flags.

ESE ID Format Decompress Compress Byte-Identical to esent.dll Authority
0x0 NONE (uncompressed sentinel) compression.cxx:504
0x1 7-bit ASCII yes yes yes ESE source
0x2 7-bit Unicode yes yes yes ESE source
0x3 XPRESS (Plain LZ77) yes yes yes [MS-XCA] §2.3/2.4
0x4 SCRUB (erase marker) produce recognize n/a ESE source
0x5 XPRESS9 yes yes yes* ESE MIT source (ported)
0x6 XPRESS10 (LZ4 + CRC) yes yes yes** ESE source
0x7 LZ4 (standard block) yes yes yes LZ4 block format

*XPRESS9 encoder matches the MIT ESE C reference byte-for-byte excluding the non-deterministic session signature (CRC32(__rdtsc())), which even esent.dll varies on every call. **XPRESS10 verified byte-identical by component construction (LZ4 block + CRC-32C + CRC-64/NVME each individually proven); not triggerable on commodity hardware (requires Corsica/QAT flight flag).

ntdll compression (vs RtlCompressBuffer)

Windows ntdll.dll exposes a separate set of CompressionFormatAndEngine IDs used by SMB, NTFS, RDP, and other protocols. These use raw bitstreams with no ESE framing.

ntdll ID Name Decompress Compress Byte-Identical to ntdll Builds
0x0002 LZNT1 yes yes yes (ENGINE_MAX) XP SP3 – Server 2025
0x0003 XPRESS (Plain LZ77) yes yes yes Win8.1 – Server 2025
0x0004 XPRESS_HUFF (LZ77+Huffman) yes yes yes (default engine) Win8.1 – Server 2025
0x0005 undocumented Server 2022+
0x0006 XP10 (LZ4 block) yes yes yes Win11 / Server 2025
0x0007 raw DEFLATE yes yes yes (both levels) Win11 / Server 2025
0x0008 ZLIB yes yes yes (both levels) Win11 / Server 2025

ntdll format 0x0005 is an undocumented format (block magic 0xC039E510) unrelated to XPRESS9 despite sharing the slot number. No public specification or source code exists. Format 0x0006 (XP10) is the same LZ4 block codec used by ESE scheme 0x6 and 0x7, without the ESE header.

Design principles

  • Standard library only at runtime. No third-party dependencies. zlib/lz4 are deliberately not used; the CRCs and the LZ4 block codec are implemented directly.
  • Two subpackages, one interface pattern. ntcompress.ese for ESE record-compression, ntcompress.ntdll for ntdll standalone codecs. Both offer Shape A (enum dispatch) and Shape B (direct module import) APIs.
  • Traceable to a spec or a source line. Every wire constant cites [MS-XCA] §x.y or an ESE file:line. Where the shipped C diverges from the spec text, both are documented.
  • Byte-identical verification. Compress output is verified against gold vectors captured from esent.dll and ntdll.dll on 16 Windows builds (XP SP3 through Server 2025).
  • Typed and documented. Python 3.11+, full type hints, Google-style docstrings, ruff-clean under select = ["ALL"], ty-clean.

Installation

uv add ntcompress   # once published

Requires Python >= 3.11.

Usage

ESE record compression

import ntcompress.ese as ese

# Decompress a cell (format is in byte 0)
plaintext = ese.decompress(cell)
size = ese.decompressed_size(cell)

# Compress with a specific format
cell = ese.compress(plaintext, ese.Format.XPRESS)
cell = ese.compress(plaintext, ese.Format.LZ4)
cell = ese.compress(plaintext, ese.Format.XPRESS9)

# Or use Shape B (direct module access)
from ntcompress.ese import xpress
cell = xpress.compress(plaintext)
plaintext = xpress.decompress(cell)

ntdll standalone codecs

import ntcompress.ntdll as ntdll

# Shape A (enum dispatch)
compressed = ntdll.compress(data, ntdll.Format.LZNT1)
plaintext = ntdll.decompress(compressed, ntdll.Format.LZNT1)

# Windows constant aliases
compressed = ntdll.compress(data, ntdll.COMPRESSION_FORMAT_XPRESS_HUFF)

# Shape B (direct module access)
from ntcompress.ntdll import lznt1, xpress_huff, deflate
from ntcompress.ntdll import zlib as ntdll_zlib

plaintext = lznt1.decompress(compressed_stream)
compressed = xpress_huff.compress(data)
compressed = deflate.compress(data)            # matches ntdll 0x0007
compressed = ntdll_zlib.compress(data)         # matches ntdll 0x0008

License and attribution

Apache-2.0 (LICENSE). The XPRESS9 codec is an attributed port of Microsoft's MIT-licensed ESE source; the Plain LZ77, Xpress Huffman, and LZNT1 codecs are derived from the published [MS-XCA] specification; the LZ4 block codec follows the public LZ4 format. Full notices are in THIRD-PARTY-NOTICES.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ntcompress-0.1.0.tar.gz (60.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ntcompress-0.1.0-py3-none-any.whl (73.4 kB view details)

Uploaded Python 3

File details

Details for the file ntcompress-0.1.0.tar.gz.

File metadata

  • Download URL: ntcompress-0.1.0.tar.gz
  • Upload date:
  • Size: 60.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ntcompress-0.1.0.tar.gz
Algorithm Hash digest
SHA256 11438c87f9b1fc6a15572bc7368c30a79e923e5c93fdaa145af9c3e4fa002fca
MD5 ff6ebdc346d4ad3b6d7da902c6f2155c
BLAKE2b-256 9483c07ca13bed878796ee25b5ca1885a5676c9993fd918336dc3d3e4dcc50c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ntcompress-0.1.0.tar.gz:

Publisher: publish.yml on StrongWind1/ntcompress

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ntcompress-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ntcompress-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 73.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ntcompress-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 468ec07b23fb01378f8871fc928da44049f218138392523fba1092b1f3331766
MD5 c5a4ceff78ac6750a7add0e913b361dd
BLAKE2b-256 73e3853eeb77fff3f3f5e6c5abf4529a33a1bcd10d66925b16406aea617c226e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ntcompress-0.1.0-py3-none-any.whl:

Publisher: publish.yml on StrongWind1/ntcompress

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page