This branch adds a reusable fuzzy extractor for deterministic biometric commitments and deploys the web demo to Cloudflare Pages + Fly.io.
Reusable Fuzzy Extractor
- Core crypto modules: GF(256) finite field arithmetic, Reed-Solomon error correction, and a Juels-Wattenberg fuzzy commitment scheme
(core/src/crypto/{gf256.rs, reed_solomon.rs, fuzzy_commitment.rs}) - Construction: Code-offset sketch + RS over GF(256) + SHA-256, with default params of t=40 per block (~75 correctable positions out of 512,
2800-bit entropy) - Performance (release, Apple Silicon): Gen ~21us, Rep ~93us
- Demo endpoints: POST /api/fuzzy/{enroll,verify,check-unique} with FuzzyCommitment enrollment mode opt-in
Web Demo Deployment
- Backend on Fly.io: Hardened Dockerfile (nightly Rust, non-root user, multi-stage build), environment-based config (PORT, BIND_ADDRESS,
ALLOWED_ORIGINS), health check at /api/health - Frontend on Cloudflare Pages: Static SPA deploy with VITE_API_URL pointing to Fly.io backend, wrangler.toml config
- Custom domain: sable.anuna.io via Cloudflare CNAME
Other Improvements
- Relaxed spatial liveness thresholds for 4-quadrant mode
- Show flash pattern used during liveness on authentication screen
- Architecture diagram (ABSM + fuzzy commitment)
- Fixed webcam race condition where stopWebcam() could null the overlay canvas while async face detection was in-flight
Commits
3a8292b fix: relax spatial liveness thresholds for 4-quadrant mode
be12b3a feat: show flash pattern used during liveness on authentication screen
df548b2 feat: add deterministic fuzzy commitment and ABSM architecture diagram
d21629f feat: add fuzzy commitment mode to web demo enrollment UI
23e70c5 feat: add reusable fuzzy extractor for deterministic biometric commitments
e21d509 feat: deploy web demo to Cloudflare Pages + Fly.io
29 files changed, +4731 / -926