Adds a vanilla ES-module crypto layer for the browser:
- Argon2id (t=2, m=16 MiB, p=1) derives a 256-bit session key from the
passphrase; the passphrase never leaves the client.
- Records are encrypted with XChaCha20-Poly1305, fresh 24-byte nonce
per record, per-record salt bound into the AEAD associated data
together with the uuid (tamper/swap detection).
- Vendored audited @noble/hashes + @noble/ciphers ES modules; verified
end-to-end in node (encrypt/decrypt roundtrip, wrong key, tampered
salt, swapped uuid all rejected).
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
Exposes a ciphertext-only REST API: list/get/create/update/delete of
records as opaque base64 blobs. Enforces base64/size validation,
rejects duplicates, and uses patch-version checks server-side so
replayed or stale updates are refused. Includes run.py entry point
that enables TLS when certs/ are present. Verified via test client.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
Adds the base project setup (requirements, README, gitignore entries)
and a SQLite storage layer that persists only encrypted records:
uuid, ciphertext, nonce, salt, plus a monotonic version counter used
later for tamper/replay detection. Includes a smoke test run.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>