Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pdvrdt-rs

This is an experimental Rust port of my C++ steganography tool pdvrdt

pdvrdt-rs is a fast, easy-to-use steganography command-line tool for concealing and extracting any file type via a PNG cover image.

There is also a Web edition, which you can use immediately, as a convenient alternative to downloading and compiling the CLI source code. Web file uploads are limited to 20MB.

Demo Image
Image: "Wolf" / PIN: 7699785107511381336

Unlike the common steganography method of concealing data within the pixels of a cover image (LSB), pdvrdt-rs hides files within various chunks of a PNG image, such as iCCP and IDAT.

You can conceal any file type up to 2GB, although compatible hosting sites (listed below) have their own much smaller size limits and *other requirements.

For increased storage capacity and better security, your embedded data file is compressed with flate2/zlib — unless it's already a compressed file type over 10 MB — and encrypted with XChaCha20-Poly1305 using the libsodium cryptographic library (via the Rust alkali bindings).

Compilation & Usage (Linux)

$ sudo apt update
$ sudo apt install build-essential curl

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ source "$HOME/.cargo/env"

$ cargo build --release --locked

$ sudo cp target/release/pdvrdt-rs /usr/bin
$ pdvrdt-rs

Usage: pdvrdt-rs conceal [-m] <cover_image> <secret_file>
       pdvrdt-rs recover <cover_image>  
       pdvrdt-rs --info

$ pdvrdt-rs conceal your_cover_image.png your_secret_file.doc

Platform compatibility for output image:-

  ✓ X-Twitter
  ✓ ImgPile
  ✓ PostImage
  ✓ ImgBB
  ✓ Flickr
  
Saved "file-embedded" PNG image: prdt_151529.png (143029 bytes).

Recovery PIN: [***2166776980318349924***]

Important: Keep your PIN safe, so that you can extract the hidden file.

Complete!
        
$ pdvrdt-rs recover prdt_151529.png

PIN: *******************

Extracted hidden file: your_secret_file.doc (6165 bytes).

Complete! Please check your file.

Compatible Platforms

Posting size limit measured by the combined size of the cover image + compressed data file:

  • Flickr (200MB), ImgBB (32MB), PostImage (32MB), Mastodon (16MB | -m option),
  • ImgPile (8MB), X-Twitter (5MB + *Dimension limits, see below)

X-Twitter image dimension size limits:

  • *PNG-32/24 (Truecolor) 68x68 Min. - 900x900 Max.
  • PNG-8 (Indexed-color) 68x68 Min. - 4096x4096 Max.
X_Twitter_CLI_PNG_TXT.mp4
Web_PNG_TXT.mp4

pdvrdt-rs mode arguments:

conceal - Compresses, encrypts and embeds your secret data file within a PNG cover image.
recover - Decrypts, uncompresses and extracts the concealed data file from a PNG cover image.

pdvrdt-rs conceal mode platform options:

"-m" - To create compatible "file-embedded" PNG images for posting on the Mastodon platform, you must use the -m option with conceal mode.

$ pdvrdt-rs conceal -m my_image.png hidden.doc

To correctly download images from X-Twitter, click the image in the post to fully expand it, before saving.

Third-Party Software and Assets

This project uses or incorporates:

  • alkali — safe Rust bindings for libsodium.

    • License: MIT OR Apache-2.0
  • libsodium-sys-stable — libsodium FFI and build integration.

    • License: MIT OR Apache-2.0
  • libsodium — cryptographic random generation, Argon2id key derivation, and XChaCha20-Poly1305 secret streams.

    • Bundled version: 1.0.22, compiled and statically linked by libsodium-sys-stable
    • License: ISC License
    • Copyright (c) 2013-2026 Frank Denis
  • png — PNG decoding and encoding.

    • License: MIT OR Apache-2.0
  • flate2 — DEFLATE and zlib-format compression and decompression using its pure-Rust backend.

    • License: MIT OR Apache-2.0
  • crc32fast — CRC-32 calculation.

    • License: MIT OR Apache-2.0
  • zeroize — secure clearing of sensitive values from memory.

    • License: MIT OR Apache-2.0
  • anyhow — application error handling.

    • License: MIT OR Apache-2.0
  • libc — Linux/POSIX system-call and terminal interfaces.

    • License: MIT OR Apache-2.0
  • Compact ICC Profiles — the Mastodon ICC carrier template is derived from sRGB-v2-nano.icc.