From 556eaa133e9cfe7f4c8e542708119fdfd311357e Mon Sep 17 00:00:00 2001 From: Doan Luu Duc Tai Date: Fri, 30 Oct 2026 21:39:57 -0500 Subject: Implement experimental file-based encrypted private chat Add fixed-suite Rust/WASI identity files, signed challenge authentication, ciphertext-only SQLite storage, a minimal LibreJS-compatible interface, and consistent backup snapshots. Keep production unchanged and document the local workflow, limits, source distribution, and browser recovery tests. --- crates/chat-crypto/README.txt | 56 +++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 29 deletions(-) (limited to 'crates/chat-crypto/README.txt') diff --git a/crates/chat-crypto/README.txt b/crates/chat-crypto/README.txt index d09ff82..e04246c 100644 --- a/crates/chat-crypto/README.txt +++ b/crates/chat-crypto/README.txt @@ -14,26 +14,33 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -CHAT CRYPTOGRAPHY COMPATIBILITY PROBE - - Experimental, local-only work on feature/private-chat. This is a - cryptographic compatibility test, not a messaging application. Do not use - it for private conversations or real identities. It creates temporary - identities in memory and discards them; it does not create user chat files. +PRIVATE CHAT CRYPTOGRAPHY Fixed encryption: RFC 9980 ML-KEM-1024 + X448, OpenPGP v6. - Tested signing: ML-DSA-87 + Ed448, OpenPGP v6. + Signing: ML-DSA-87 + Ed448, OpenPGP v6. Backend: Sequoia 2.4.2 with OpenSSL 3.6.5. No algorithm substitution or - vulnerability-advisory exception was used. The first checkpoint's Rust - backend is historical and no longer selected. + vulnerability-advisory exception was used. The original RustCrypto backend + is historical and no longer selected. + + This crate implements purpose-specific identity creation, Argon2id/AES-256-GCM + protected files, detached authentication proofs, signed two-recipient messages, + bounded verified history batches, and the original compatibility probe. + Native Rust and browser WASI share the implementation. The standalone command + accepts one JSON request on stdin; empty input runs the compatibility probe. + Its browser WASI host grants no filesystem or network access. Private request + data must remain in local memory and must never be submitted to the server. + + See ../../docs/CHAT-APPLICATION.txt for implemented formats, local setup, + tests, backups, and limitations. Work remains experimental and local on + feature/private-chat. Production remains unchanged. Do not mistake the + compatibility probe for an application security audit. - See ../../docs/CHAT-OPENSSL-MIGRATION.txt for the complete decision record, - pinned source hashes, build flags, capability boundaries, dependency-policy - exceptions, observed results, limitations, and reproduction commands. - ../../docs/CHAT-SECURITY-REVIEW.txt records the original dependency findings. - ../../docs/CHAT-DESIGN.txt describes the planned application. + ../../docs/CHAT-OPENSSL-MIGRATION.txt records the complete backend decision, + pinned source hashes, build flags, FFI/capability limitations, and reviewed + dependency-policy exceptions. ../../docs/CHAT-SECURITY-REVIEW.txt records + the superseded RustCrypto findings without advisory ignores. -QUICK CHECKS FROM THE STACK ROOT +CHECKS FROM THE WORKSPACE ROOT cargo test --locked -p stack-chat-crypto cargo run --locked -p stack-chat-crypto @@ -41,17 +48,8 @@ QUICK CHECKS FROM THE STACK ROOT PLAYWRIGHT_BROWSERS_PATH="$PWD/.tools/browsers" node crates/chat-crypto/tests/browser.mjs cargo stack check - Native checks require OpenSSL >=3.5 development files and libclang. - The cross-build script currently supports Linux x86_64 development hosts. - Browser tooling installation is documented in the migration record. - - The harness serves only a blank document, a readable AGPL JavaScript WASI - bridge, and the new WASI binary on an ephemeral loopback port. It verifies - the actual OpenSSL backend, cryptographic round trips, tampering and invalid - credential rejection, repeated fresh instances, and failure without CSPRNG. - It checks for external requests and persistent browser application state. - - The application itself, private chat-file envelope, and session workflow - remain unimplemented. LibreJS acceptance has not been tested; there is no - public chat page or compliance badge. The fixture password is public test - data, not a configured secret. No .env file or user private key is needed. + Native builds require OpenSSL >=3.5 development files and libclang. + The cross-build script supports an x86_64 GNU/Linux development host. + Browser tooling is excluded from the public source tree and releases. + The probe uses public fixture credentials and creates temporary identities + in memory. It does not open the root .env or use the canonical RSA key. -- cgit v1.2.3