msrtc-rans-core
Deterministic, no_std-capable rANS primitives for the msrtc_rans entropy coder.
This crate implements the raw rANS encoding and decoding primitives used by Microsoft MLVC's msrtc_rans package. The arithmetic (reciprocal preparation, Mul64Hi, fast division) is structurally faithful to the C++ implementation.
Status
| Court | Status |
|---|---|
| Raw encoder differential | ✅ Sealed (8/8 cases) |
| Raw decoder differential | ✅ Sealed (16/16 cases) |
Both RansByteEncoder / RansByteDecoder (u32 state, u8 unit) and Rans64Encoder / Rans64Decoder (u64 state, u32 unit) have been verified byte-for-byte against the pinned Microsoft C++ oracle.
Features
#![no_std]— suitable for embedded and WASM targets#![forbid(unsafe_code)]— pure safe Rust- Macro-generated variants from a single
generate_rans_impl!macro VecSink(reverse-order, matching C++ResizableBufferSinkbehavior)SliceSource(zero-copy span-like source)- Checked API:
try_new(),try_put_raw(),try_get(),try_advance() - Transactional decoder — state not committed on failed advance
Usage
use ;
use VecSink;
use SliceSource;
let sink = new;
let mut encoder = new;
encoder.put_raw;
encoder.flush;
let encoded = encoder.into_sink.encoded.to_vec;
let source = new;
let mut decoder = new;
assert!;
assert!;
assert!;
Repository
Full project: github.com/infinityabundance/msrtc-rans-rs