blte
BLTE (Block Table Encoded) decompression library for Blizzard's NGDP/CASC system.
Installation
Add this to your Cargo.toml:
[]
= "0.3"
= "0.3" # Required for encrypted content
Overview
This crate provides complete support for decompressing BLTE-encoded files used in Blizzard's content distribution system. BLTE is a container format that supports multiple compression algorithms and encryption.
Features
- All compression modes supported:
- None (N) - Uncompressed data
- ZLib (Z) - Standard deflate compression
- LZ4 (4) - Fast compression
- Frame (F) - Nested BLTE frames
- Encrypted (E) - Salsa20/ARC4 encrypted blocks
- Multi-chunk file handling
- Checksum verification
- Streaming decompression for large files
- Zero-copy where possible
Usage
use decompress_blte;
use KeyService;
// For unencrypted content
let data = read?;
let decompressed = decompress_blte?;
// For encrypted content
let key_service = new;
let decompressed = decompress_blte?;
// Streaming decompression for large files
use ;
use Read;
let mut stream = create_streaming_reader?;
let mut buffer = ;
let mut decompressed = Vecnew;
loop
Compression Modes
Mode 'N' (None)
Raw uncompressed data. The first byte is the mode indicator, followed by the raw data.
Mode 'Z' (ZLib)
Standard deflate compression using the flate2 crate.
Mode '4' (LZ4)
LZ4 compression for fast decompression of large files.
Mode 'F' (Frame)
Recursive BLTE frame - the payload is another complete BLTE file.
Mode 'E' (Encrypted)
Encrypted blocks that must be decrypted before decompression. Supports:
- Salsa20 stream cipher (type 'S')
- ARC4/RC4 cipher (type 'A')
Multi-Chunk Files
Large files are split into multiple chunks for efficient streaming and parallel processing:
use BLTEFile;
let blte_file = parse?;
if blte_file.is_multi_chunk
Dependencies
flate2- ZLib decompressionlz4_flex- LZ4 decompressionngdp-crypto- Encryption supportmd5- Checksum verification
License
MIT OR Apache-2.0