Benchmarks

Median of 11 iterations after 3 warmups, wall-clock via std::process::Command, on macOS aarch64 (Apple Silicon, 28 cores). Methodology and full per-case tables in bench/README.md.

Headline results

Op / carrier / payloadrstegsteghidesteganospeedup (vs next best)
BMP 128×128 embed 1 KB1.6 ms20.6 ms13×
BMP 128×128 extract 1 KB1.5 ms6.5 ms4.4×
BMP 512×512 embed 1 KB3.8 ms41.2 ms11×
BMP 512×512 embed 10 KB3.5 ms440.1 ms125×
BMP 512×512 extract 10 KB2.7 ms28.1 ms10×
WAV 5 s stereo embed 1 KB2.4 mscrash¹69 ms29× (vs stegano)
WAV 5 s stereo embed 20 KB3.5 mscrash¹71 ms20× (vs stegano)
WAV 5 s stereo extract 20 KB2.9 mscrash¹68 ms23× (vs stegano)
PNG 256×256 embed 1 KB6.1 ms67 ms11×
PNG 256×256 extract 10 KB2.6 ms66 ms25×

¹ Native arm64 steghide 0.6.0 reliably SIGSEGVs when embedding payloads ≥ 1 KB into the synthetic wav-short cover. Raising ulimit -s to 64 MB did not help, so this is not a stack-size issue. Payloads ≤ 512 B embed successfully. rsteg is the only tool with complete wav-short coverage on this platform.

rsteg is faster than both reference tools on every case it shares with them. The gap versus steghide is 4–125× depending on carrier size and payload; against stegano-cli on PNG/WAV it's 10–25×.

Tool provenance

ToolVersionBuild
rsteg0.1.0this repo — cargo build --release
steghide0.6.0built from source, native arm64 (autotools + Homebrew libs)
stegano0.6.1cargo install stegano-cli

Homebrew dropped the steghide package in 2024, and upstream ships no arm64 binary, so the comparison baseline is a native arm64 build of steghide 0.6.0 (build steps in the full report).

Caveats

rsteg is faster than both reference tools on every case it shares with them. The gap versus steghide is 4–125× depending on carrier size and payload; against stegano-cli on PNG/WAV it's 10–25×.