Skip to content

feat: packed-consumer verification lane and MaxPlaintextBytes - #85

Merged
systemslibrarian merged 1 commit into
mainfrom
features/packed-consumers-and-plaintext-limit
Sep 5, 2026
Merged

systemslibrarian merged 1 commit into
mainfrom
features/packed-consumers-and-plaintext-limit

Conversation

@systemslibrarian

Copy link
Copy Markdown
Owner

Two remaining top-tier backlog items, both freeze-safe:

Packed-consumer verification — test the product as consumers receive it

scripts/verify-packed-consumers.sh (locally runnable) + a CI lane: all nine packages → hermetic local feed (prerelease-suffixed + isolated NUGET_PACKAGES, so a cached published version can never silently shadow the fresh pack — a trap the script itself caught during development), clean net8.0+net10.0 consumer built from packages only, packed-analyzer proof (asserts PQFE101 fires), full API journey on both TFMs, and the packed pqfe tool driven end to end (round trips, recipient flow, fingerprint output, wrong-passphrase → exit 65 with no output file). Verified green locally end to end. OSS-Fuzz build.sh now builds + seeds both fuzz targets.

PqDecryptionLimits.MaxPlaintextBytes

Total-plaintext ceiling enforced before any KDF/decryption work for known-length inputs — the exact plaintext total derives from the container length (safe upper bound even for lenient short-frame containers) and over-limit containers reject as PqFormatException. Closes the buffered-upload size-amplification hole (external review Medium 2). Default unlimited → zero acceptance change; one shared gate serves the core and Hybrid decryptors; exact-boundary tests added.

Verification

323×2 tests green · build clean · docs guard green · packed-consumer script PASS on this machine (both TFMs + tool journey).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Sym7RJ7ehNhbMXytE5rMmS

Packed-consumer verification (scripts/verify-packed-consumers.sh + workflow):
packs all nine lockstep packages into a hermetic local feed (prerelease-suffixed
version + isolated NUGET_PACKAGES, so the published version in any cache can
never shadow the fresh pack), builds a clean net8.0+net10.0 consumer from the
packages alone, asserts the packed analyzer loads and fires (PQFE101), runs the
full API journey on both frameworks (passphrase/hybrid/PQKF/fingerprint/
sign+tamper-reject/DI), and installs + drives the packed pqfe tool end to end
including recipient flow and the documented exit-code contract. Verified green
locally on both TFMs. OSS-Fuzz build.sh now builds and seeds decrypt_hybrid.

PqDecryptionLimits.MaxPlaintextBytes: total-plaintext ceiling enforced BEFORE
any key derivation for every known-length input — the exact plaintext total is
derived from the container length (a safe upper bound even for short-frame
leniency containers) and over-limit containers reject with PqFormatException.
Closes the size-amplification hole for services buffering untrusted containers
(external review Medium). Default unlimited: zero acceptance change; the shared
gate serves core and Hybrid decryptors alike. Tests: exact-boundary
accept/reject + configuration validation. 323x2 suite green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sym7RJ7ehNhbMXytE5rMmS
@systemslibrarian
systemslibrarian merged commit 9b2f13b into main Sep 5, 2026
@systemslibrarian
systemslibrarian deleted the features/packed-consumers-and-plaintext-limit branch September 5, 2026 12:42
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