Skip to content

LockHTML v1.3.0

Choose a tag to compare

@drsamonline drsamonline released this 20 Oct 14:04
· 39 commits to main since this release

LockHTML v1.3.0

Lock a file to a person, not a password. X25519 recipient mode.

Highlights

  • πŸ”‘ Recipient mode (X25519) β€” lock a file to someone's public key so only the holder of the matching private key can open it. No shared secret is ever exchanged.
  • 🧬 Hybrid encryption, done properly: a fresh ephemeral keypair per file, the ECDH shared secret fed through HKDF-SHA256, then AES-256-GCM. Because the secret is already 256 bits of entropy, no slow KDF is applied on top.
  • βž• Two factors if you want them β€” layer a PIN (and a keyfile pepper) on top of the recipient key.
  • πŸ—‚οΈ Works with the streaming container too, so a multi-gigabyte file can be sent to one specific person.
  • πŸ–₯️ GUI support β€” a recipient public-key field on the lock tab, and a private-key prompt on unlock.
  • πŸ”’ The decoy PIN is rejected in recipient mode rather than silently ignored.

Usage

lockhtml keygen --type x25519 -o alice.pem   # writes alice.pem (keep) + alice.pub (hand out)
lockhtml lock report.html --to alice.pub
lockhtml unlock report.locked.html --key alice.pem

# two factors, and for large files
lockhtml lock big.mp4 --to alice.pub --pin 4821 --stream

Live GUI

πŸ‘‰ https://drsamonline.github.io/lockhtml/

Verification

58 unit tests, plus a real headless-Chrome end-to-end run of 25 checks covering the embedded container, the streaming container and recipient mode β€” including wrong key, missing key, PIN-required, tampered sidecar and truncated container. Files locked by the browser are decrypted by the Python core and vice versa (6 cross-implementation checks). All of it runs in CI.

Security note

Recipient mode moves the secret, not the trust: whoever holds the private key can open every file locked to it, and a leaked private key cannot be revoked β€” rotate it. See SECURITY.md and the self-audit in docs/AUDIT.md.