Skip to content

feat(steganography-multi-tool): scaffold + zero-width text technique#266

Draft
sntyuri wants to merge 1 commit into
CarterPerez-dev:mainfrom
sntyuri:feat/steganography-multi-tool
Draft

feat(steganography-multi-tool): scaffold + zero-width text technique#266
sntyuri wants to merge 1 commit into
CarterPerez-dev:mainfrom
sntyuri:feat/steganography-multi-tool

Conversation

@sntyuri
Copy link
Copy Markdown

@sntyuri sntyuri commented Jun 3, 2026

First PR of the phased Steganography Multi-Tool, following the plan from discussion #258 (#258).

This slice sets up the project (src layout, pyproject, justfile, yapf style, matching the repo conventions) and implements the first technique end to end: zero-width text.

The zero-width module hides arbitrary bytes inside a visible carrier using invisible Unicode characters (U+200B / U+200C), with a 32-bit length prefix so extraction is unambiguous. It's a pure module with no CLI or I/O coupling, so it stays testable and reusable. The Typer CLI exposes hide and reveal, with UTF-8-safe output to a file or stdout (the file path also sidesteps a Windows stdout-redirect encoding issue with the invisible characters).

Tests are property-based round-trips with hypothesis, plus empty-payload and no-payload edge cases. ruff and mypy (strict) are clean.

I deliberately didn't add a base protocol for the techniques yet, with only one technique it would be guessing the shared interface. I'll extract it once the second technique (image LSB) lands and the common shape is clear.

Opening as draft since this is part 1 of 3. Audio + QR come next, then PDF + git metadata. If you'd like any changes to the structure, better to catch them now before I build the other techniques on top.

First slice of the Steganography Multi-Tool. Sets up the project structure (src layout, pyproject, justfile) following the repo conventions and implements the first technique: zero-width text, which hides bytes inside a visible carrier using invisible Unicode characters with a 32-bit length prefix.

Includes a Typer CLI with hide/reveal subcommands, UTF-8-safe file and stdout I/O, and property-based round-trip tests with hypothesis. ruff and mypy strict are clean.

Part of the phased approach agreed in the issue; audio/QR and PDF/git techniques follow in later PRs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant