feat(steganography-multi-tool): scaffold + zero-width text technique#266
Draft
sntyuri wants to merge 1 commit into
Draft
feat(steganography-multi-tool): scaffold + zero-width text technique#266sntyuri wants to merge 1 commit into
sntyuri wants to merge 1 commit into
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.