Last Updated: February 22, 2026
This document maps each capability to the specific files required for that functionality, enabling independent auditing of each feature.
Files Required:
meow_decoder/crypto.py- Main encryption/decryption implementationmeow_decoder/crypto_backend.py- Backend selection (Rust/Python)crypto_core/src/lib.rs- Rust crypto backend (PyO3)crypto_core/src/crypto.rs- Rust AES-GCM implementationcrypto_core/src/argon2.rs- Rust Argon2id implementationcrypto_core/src/secure_alloc.rs- Secure memory allocationmeow_decoder/argon2_presets.py- Argon2 parameter presetsmeow_decoder/constant_time.py- Constant-time operations
Key Functions:
encrypt_file_bytes()- Encrypt data with passworddecrypt_to_raw()- Decrypt to raw bytespack_manifest()/unpack_manifest()- Manifest serialization
Tests:
tests/test_crypto.pytests/test_crypto_backend.py
Files Required:
meow_decoder/forward_secrecy.py- X25519 key exchangemeow_decoder/x25519_forward_secrecy.py- Extended X25519 implementationmeow_decoder/crypto.py- Integration with encryptionmeow_decoder/encode.py---receiver-pubkeyflag handling
Key Functions:
generate_keypair()- Generate X25519 keypairderive_shared_secret()- ECDH key exchange with transcript bindingforward_secrecy_encrypt()/forward_secrecy_decrypt()- Encrypt/decrypt with FS
Manifest Version: MEOW3 (mode_byte=0x03)
Tests:
tests/test_forward_secrecy.pytests/test_x25519_forward_secrecy.py
Files Required:
meow_decoder/pq_hybrid.py- PQXDH-style hybrid KEMmeow_decoder/forward_secrecy.py- Classical componentmeow_decoder/crypto.py- Integrationmeow_decoder/encode.py---pqand--pq-paranoidflags
Key Functions:
generate_pq_keypair()- Generate ML-KEM + X25519 keypairspq_encapsulate()- Hybrid encapsulationpq_decapsulate()- Hybrid decapsulation- Two-step HKDF with full transcript binding
Manifest Versions:
- MEOW5 (ML-KEM-768, default) - mode_byte=0x05
- MEOW4 (ML-KEM-1024, paranoid) - mode_byte=0x04
Tests:
tests/test_pq_hybrid.pytests/test_e2e_crypto_fountain.py
Files Required:
meow_decoder/manifest_signing.py- Hybrid signature implementationmeow_decoder/encode.py- Sign manifest during encodingmeow_decoder/decode_gif.py- Verify signature during decodingmeow_decoder/crypto_backend.py- Backend selection
Key Functions:
generate_signing_keypair()- Generate Ed25519 + ML-DSA keypairssign_manifest()- Hybrid signature (Ed25519 || ML-DSA-65)verify_manifest()- Verify both signatures- Backend support: Rust (primary), OQS (secondary), Pure Python (tertiary)
Security Effect: Authenticity and integrity protection
Tests:
tests/test_manifest_signing.pytests/test_security_hardening.py::test_manifest_signing_roundtrip
Files Required:
meow_decoder/encode.py- QR generation (usesqrcodelibrary)meow_decoder/decode_gif.py- QR scanning (usespyzbarlibrary)- External dependencies:
qrcode[pil],pyzbar
Key Functions:
qrcode.QRCode()- Generate QR codespyzbar.decode()- Scan QR codes from images
Parameters:
- Version: Auto-selected based on data size
- Error correction: L (low, 7% recovery)
- Size: 600Γ600 pixels default
Files Required:
meow_decoder/fountain.py- Python LT implementationexamples/fountain-codes.js- JavaScript implementation (web demo)meow_decoder/encode.py- Encoder integrationmeow_decoder/decode_gif.py- Decoder integration
Key Classes:
FountainEncoder- Generate unlimited dropletsFountainDecoder- Reconstruct from any ~1.5Γ k dropletsRobustSolitonDistribution- Optimal degree distribution
Frame Format:
FOUNTAIN:<k_blocks>:<block_size>:<original_length>:<base64_droplet>
Security: Operates on encrypted ciphertext, information-theoretic erasure codes
Tests:
tests/test_fountain.pyexamples/test_fountain.html(browser-based)
Files Required:
meow_decoder/stego_advanced.py- Advanced LSB steganographymeow_decoder/stego_multilayer.py- Multi-layer embeddingmeow_decoder/stego_gif_binary.py- Binary data embeddingmeow_decoder/encode.py---stego-levelflag (0-4)meow_decoder/decode_gif.py- LSB extraction
Key Classes:
AdvancedStegoEncoder- Embed with quality validationAdvancedStegoDecoder- Extract QR codes from stego images
Stealth Levels:
- 0: Visible QR codes (no stego)
- 1: Subtle (2-bit LSB)
- 2: Subtle (2-bit LSB)
- 3: Hidden (1-bit LSB)
- 4: Paranoid (1-bit LSB + obfuscation + adversarial carriers)
Tests:
tests/test_stego_advanced.py
Files Required:
meow_decoder/adversarial_carrier.py- Noise generationmeow_decoder/stego_advanced.py- Integration (paranoid mode)
Key Functions:
adversarial_embed()- Apply noise to carrier imagesgenerate_sensor_noise()- Mimic camera sensor noisegenerate_texture_noise()- Texture-based noiseapply_dct_matching()- DCT coefficient matching- Algorithm rotation: sensor β texture β dct β combined
Security Effect: Defeats statistical steganalysis (ΟΒ² tests, pairs tests)
Activated: Automatically in --stego-level 4 (paranoid mode)
Files Required:
meow_decoder/schrodinger_encode.py- Dual-secret encodermeow_decoder/quantum_mixer.py- Quantum superposition mixingmeow_decoder/decoy_generator.py- Decoy data generationmeow_decoder/duress_mode.py- Duress password handling
Key Concept:
- Two completely separate secrets in one GIF
QuantumNoise = XOR(Hash(Pass_A), Hash(Pass_B))- Merkle tree integrity, entropy tests
Usage:
python -m meow_decoder.schrodinger_encode -i secret.pdf -i2 decoy.txt \
-p1 "real_pass" -p2 "decoy_pass" -o dual.gifTests:
tests/test_schrodinger.py
Files Required:
meow_decoder/duress_mode.py- Duress detection and actionsmeow_decoder/encode.py---duress-passwordflagmeow_decoder/decode_gif.py- Duress trigger detection
Key Features:
- Emergency wipe on duress password
- Triggers forensic cleanup
- Requires forward secrecy (prevents manifest size collision)
Security Effect: Coercion resistance
Tests:
tests/test_duress_mode.py
Files Required:
meow_decoder/ratchet.py- Symmetric hash ratchetmeow_decoder/pq_ratchet_beacon.py- PQ KEM beacons (ML-KEM-1024)meow_decoder/frame_mac.py- Frame authentication
Key Features:
- Signal-inspired symmetric hash ratchet
- HKDF-SHA256 chain with 10 domain separation constants
- Header encryption (frame index XOR masking)
- Key commitment tags (16 bytes, prevents invisible salamanders)
- Rekey beacons (X25519 or ML-KEM-1024)
- Out-of-order support (skip key cache, max 2000)
- Key zeroization after use
Frame Format:
[encrypted_index(4)] [commitment(16)] [beacon?(32)] [AES-GCM ciphertext+tag]
Tests:
tests/test_ratchet.py(145 unit tests)tests/test_e2e_crypto_fountain.py(23 E2E tests)
Files Required:
meow_decoder/shamir_split.py- Shamir split/combinemeow_decoder/encode.py---shamir-splitflag integration
Key Features:
- GF(2^8) arithmetic
- Authenticated share-set metadata (16-byte
set_idv2) - Prevents mix-and-match attacks
- CLI:
meow-shamir split/combine
Usage:
# Split during encoding (2-of-3 threshold)
meow-encode -i secret.pdf -o output.gif --shamir-split 2 3 -p "password"
# Combine shares
meow-shamir combine -i share_*_1of3.meow share_*_2of3.meow -o recovered.gifTests:
tests/test_shamir_split.py
Files Required:
meow_decoder/secure_keyboard.py- MouseGesturePassword classmeow_decoder/encode.py---password-mode mouse-gestureintegrationmeow_decoder/decode_gif.py- Password mode integration
Key Features:
- Grid quantization (16Γ16 default)
- BLAKE2b(person=b"meow_gesture_v1") derivation
- GUI mode (tkinter canvas)
- CLI mode (coordinate input)
Security Effect: Keylogger-resistant password entry
Tests:
tests/test_phase5_modules.pytests/test_security_hardening.py::test_mouse_gesture_deterministic
Files Required:
meow_decoder/tamper_detection.py- Active integrity checksscripts/pyinstaller_runtime_hook.py- Startup tamper checkmeow_decoder/tamper_report.py- Tamper reporting
Key Features:
- SHA-256 file hashing
- Fail-closed decorator (raises RuntimeError immediately)
- Runtime hook exits on detected tampering
- Optional poisoning mode (return fake data)
Security Effect: Prevents execution of tampered code
Tests:
tests/test_tamper_detection.pytests/test_security_hardening.py::test_tamper_detection_fails_closed
Files Required:
meow_decoder/memory_guard.py- Python memory lockingcrypto_core/src/secure_alloc.rs- Rust secure allocationmeow_decoder/constant_time.py- Constant-time operations
Key Features:
- Windows: VirtualLock + VirtualProtect
- Unix: mlock + mprotect
- Fail-closed per-buffer:
require_locked_buffer() - Fail-closed process-wide:
require_memory_guard() - Warn-only process-wide:
activate_memory_guard() - Secure memory wiping
Tests:
tests/test_memory_guard.pytests/test_security_hardening.py::test_memory_lock_helper_fail_closedtests/test_security_hardening.py::test_require_memory_guard_exists_and_fail_closed
Files Required:
meow_decoder/yubikey_integration.py- YubiKey HMAC-SHA1 challenge-responsemeow_decoder/hardware_binding.py- Hardware key derivationmeow_decoder/encode.py---yubikey,--hardware-keyflagsmeow_decoder/decode_gif.py- Hardware key integration
Supported Modes:
- YubiKey Challenge-Response (HMAC-SHA1)
- Pre-derived hardware keys (HSM/TPM)
- Combined with password or standalone
Tests:
tests/test_yubikey.py
Files Required:
meow_decoder/deadmans_switch.py- Core DMS logicmeow_decoder/deadmans_switch_cli.py- CLI state managementmeow_decoder/encode.py---dead-mans-switchflag
Key Features:
- Periodic check-in requirement
- Grace period before deadline
- Auto-release decoy on timeout
- State persistence
Usage:
meow-encode -i secret.pdf -o output.gif --dead-mans-switch 24h
meow-deadmans-switch renew --gif output.gifTests:
tests/test_deadmans_switch.py
Files Required:
meow_decoder/encode.py---keyfileflagmeow_decoder/decode_gif.py- Keyfile integrationmeow_decoder/crypto.py- Keyfile mixing with password
Key Features:
- Binary keyfile (any size)
- HKDF-based mixing with password
- Domain separation: "meow_keyfile_v1"
Usage:
meow-encode -i secret.pdf -o output.gif -p "password" --keyfile key.bin
meow-decode-gif -i output.gif -o output.pdf -p "password" --keyfile key.binFiles Required:
meow_decoder/logo_eyes.py- Logo-eyes carrier generationmeow_decoder/encode.py---logo-eyesflagmeow_decoder/gif_handler.py- GIF generationassets/demo_logo_eyes.gif- Bundled carrier
Key Features:
- Branded animation with data in cat eyes
- Visible QR codes by default
- Hidden mode:
--logo-eyes-hidden(LSB stego in eyes) - Custom brand text:
--brand-text "TEXT"
Security Note: Cosmetic only, does not hide QR presence from steganalysis
Files Required:
meow_decoder/env_safety.py- Environment validationmeow_decoder/__main__.py- Strict isolation gatemeow_decoder/isolation_hardening.py- Isolation enforcement
Key Functions:
check_isolation()- Detect VMs, debuggersrequire_safe_environment()- Fail-closed environment validationMEOW_STRICT_ISOLATION=1- Mandatory isolation checks
Security Effect: Protects against forensic analysis environments
Tests:
tests/test_env_safety.py
Files Required:
meow_decoder/encode.py- Main encoder (1863 lines)meow_decoder/decode_gif.py- Main decoder (1470 lines)meow_decoder/gif_handler.py- GIF file operationsmeow_decoder/config.py- Encoding configuration
Key Parameters:
fps: Frame rate (default 10 FPS)qr_version: Auto-selectedblock_size: Fountain code block size (default 800 bytes)redundancy: Fountain redundancy (default 1.5Γ)
Entry Points:
meow-encodeCLImeow-decode-gifCLI
Files Required:
meow_decoder/air_gap.py- Webcam QR scanningmeow_decoder/decode_gif.py- Frame processing- External dependency:
opencv-python
Key Features:
- Real-time QR code scanning
- Fountain code reconstruction
- Auto-detection of QR codes
Tests:
tests/test_air_gap.py
Files Required:
meow_decoder/size_normalizer.py- Size normalizationmeow_decoder/crypto.py- Length padding
Key Features:
- Pads to nearest power of 2 or fixed size
- Prevents size-based fingerprinting
Files Required:
meow_decoder/expiry.py- Expiry time enforcementmeow_decoder/timelock_duress.py- Time-lock puzzles
Key Features:
- Expiry timestamp in manifest
- Fails to decrypt after expiry
- Optional time-lock cryptography
Tests:
tests/test_expiry.py
Files Required:
meow_decoder/forensic_cleanup.py- Secure file wipingmeow_decoder/source_cleanup.py- Source file cleanupmeow_decoder/high_security.py- High-security mode
Key Features:
- DoD 5220.22-M standard wiping (7-pass)
- Metadata scrubbing
- Temp file cleanup
Files Required:
meow_decoder/config.py- EncodingConfig, MeowConfigmeow_decoder/argon2_presets.py- KDF parameter presets
Key Classes:
EncodingConfig- Encoding parametersMeowConfig- Global configuration
Test Files:
tests/test_crypto.py- Core crypto teststests/test_encode.py- Encoding teststests/test_decode_gif.py- Decoding teststests/test_fountain.py- Fountain code teststests/test_forward_secrecy.py- Forward secrecy teststests/test_pq_hybrid.py- Post-quantum teststests/test_ratchet.py- Ratchet tests (142 tests)tests/test_shamir_split.py- Shamir teststests/test_security_hardening.py- Security regression tests β NEWtests/test_e2e_crypto_fountain.py- End-to-end tests (23 tests)tests/test_adversarial.py- Adversarial tests
Test Commands:
# All tests
pytest tests/ -v
# Security hardening tests
pytest tests/test_security_hardening.py -v
# Coverage
pytest tests/ --cov=meow_decoder --cov-report=htmlFiles Required:
examples/wasm_browser_example.html- Full web demoexamples/fountain-codes.js- JS fountain implementation (414 lines)examples/jsQR.js- JS QR decoderexamples/qrcode.min.js- JS QR encoderexamples/crypto_core.js- WASM crypto bindings
Key Features:
- Webcam QR scanning in browser
- Real-time fountain code decoding
- No server required (offline-capable)
Files Required:
formal/tla/meow_protocol.tla- TLA+ specificationformal/proverif/meow.pv- ProVerif protocol modelformal/tamarin/meow.spthy- Tamarin model
Scope:
- Protocol state machine
- Key exchange properties
- Manifest integrity
Limitations:
- No timing side-channel coverage
- No secure_alloc formal proof
- No expiry protocol proof
Files Required:
meow_decoder.spec- PyInstaller specpyproject.toml- Python package configCargo.toml- Rust workspace configcrypto_core/Cargo.toml- Rust crypto coreMakefile- Build automationDockerfile- Docker builddocker-compose.yml- Integration tests
Entry Points (pyproject.toml):
meow-encodeβmeow_decoder.encode:mainmeow-decode-gifβmeow_decoder.decode_gif:mainmeow-shamirβmeow_decoder.shamir_split:mainβ NEW
meow_decoder/
βββ crypto.py βββββββββββββ
βββ crypto_backend.py βββββ€
βββ encode.py βββββββββββββ€ββ Core Pipeline
βββ decode_gif.py βββββββββ€
βββ config.py βββββββββββββ
crypto_core/ ββββββββββββββββββ Rust Backend (PyO3)
βββ src/crypto.rs # AES-GCM
βββ src/argon2.rs # Argon2id
βββ src/secure_alloc.rs # Memory protection
Forward Secrecy:
βββ forward_secrecy.py
βββ x25519_forward_secrecy.py
Post-Quantum:
βββ pq_hybrid.py
βββ pq_ratchet_beacon.py
Signing:
βββ manifest_signing.py
Fountain Codes:
βββ fountain.py
Steganography:
βββ stego_advanced.py
βββ adversarial_carrier.py β NEW
βββ stego_multilayer.py
Deniability:
βββ schrodinger_encode.py
βββ quantum_mixer.py
βββ duress_mode.py
Ratchet:
βββ ratchet.py
βββ frame_mac.py
βββ pq_ratchet_beacon.py
Shamir:
βββ shamir_split.py β NEW
Authentication:
βββ secure_keyboard.py
Security:
βββ tamper_detection.py
βββ memory_guard.py
βββ env_safety.py
For each capability you want to audit:
- Read Core Files - Start with the main implementation
- Check Tests - Run relevant test suite
- Review Integration - Check how it's wired into encode/decode
- Security Review - Check for insecure fallbacks, fail-open behavior
- Documentation - Verify claims match implementation
Example Audit Flow for Shamir Splitting:
# 1. Read implementation
cat meow_decoder/shamir_split.py
# 2. Run tests
pytest tests/test_shamir_split.py -v
# 3. Check integration
grep -n "shamir" meow_decoder/encode.py
# 4. Test CLI
meow-shamir --help
meow-encode --help | grep shamir
# 5. Verify cryptographic properties
# - GF(2^8) arithmetic correctness
# - Set ID uniqueness
# - Mix-and-match preventionmeow_decoder/manifest_signing.py- Removed insecure stubsmeow_decoder/pq_ratchet_beacon.py- Removed insecure stubsmeow_decoder/tamper_detection.py- Fail-closed decoratormeow_decoder/encode.py- Mandatory signing + Shamir integrationmeow_decoder/secure_keyboard.py- Fixed duplicate methodsmeow_decoder/adversarial_carrier.py- Added adversarial_embed() βmeow_decoder/stego_advanced.py- Adversarial carrier rotation βmeow_decoder/shamir_split.py- Authenticated share-set metadata βtests/test_security_hardening.py- 9 regression tests βpyproject.toml- Added meow-shamir entry point
- β Adversarial carrier generation with algorithm rotation
- β Shamir secret sharing with authenticated metadata
- β Comprehensive security hardening regression tests
- Python Modules: ~60 files in
meow_decoder/ - Rust Crates: 1 workspace with
crypto_core/ - Tests: ~83 test files in
tests/ - Examples: ~10 demo files in
examples/ - Documentation: ~15 docs in
docs/ - Build Files: Makefile, Dockerfile, pyproject.toml, Cargo.toml, etc.
Total Lines of Code: ~45,000+ (Python + Rust + JavaScript)
| File | Primary Capabilities |
|---|---|
crypto.py |
Encryption, Decryption, Manifest handling |
encode.py |
Main encoding pipeline, CLI, all integrations |
decode_gif.py |
Main decoding pipeline, CLI, verification |
fountain.py |
Rateless erasure coding |
forward_secrecy.py |
X25519 key exchange |
pq_hybrid.py |
ML-KEM + X25519 hybrid KEM |
manifest_signing.py |
Ed25519 + ML-DSA signatures |
ratchet.py |
Per-frame forward secrecy |
shamir_split.py |
Shamir secret sharing β |
adversarial_carrier.py |
Steganalysis resistance β |
stego_advanced.py |
LSB steganography |
secure_keyboard.py |
Mouse gesture auth |
tamper_detection.py |
Integrity protection |
memory_guard.py |
Memory locking |
schrodinger_encode.py |
Dual-secret deniability |
merge.py |
Multi-device capture merge CLI |
mobile/ |
Meow Capture iOS/Android companion app |
Files Required:
mobile/src/screens/CaptureScreen.tsxβ Live QR scanning with VisionCameramobile/src/screens/HomeScreen.tsxβ Session management, diagnosticsmobile/src/screens/ExportScreen.tsxβ SHA-256 display, filename copymobile/src/screens/SettingsScreen.tsxβ Strict / Convenience security mode pickermobile/src/components/CaptureCoachPanel.tsxβ Live capture quality hintsmobile/src/components/CalibrationWizard.tsxβ 5-step preflight wizardmobile/src/components/DiagnosticsPanel.tsxβ JS-thread lag + thermal metricsmobile/src/hooks/useSecurityMode.tsβ MMKV-backed security modemobile/src/navigation/AppNavigator.tsxβ React Navigation stackmobile/src/services/jsonExporter.tsβ Capture-to-JSON export with SHA-256meow_decoder/merge.pyβ Multi-device capture merge Python CLI
Key Features:
- Zero network permissions (
android.permission.INTERNETnever granted) - Fountain-code-aware deduplication (tracks
decodeRate/duplicateRate) - FLAG_SECURE, biometric gate, panic-wipe, memory wipe on background
- Exports signed JSON consumable by
meow-decode-giformeow_decoder.merge - Multi-device merge:
python -m meow_decoder.merge --input a.json b.json --output merged.json
Security Effect: Air-gap enforcement β no data path exists between capture device and network
Tests:
mobile/__tests__/(β₯95% coverage)
End of Inventory
For questions or to report missing capabilities, see CONTRIBUTING.md.