Back to projects
Case Study 01

Veritas
Protocol

Client Veritas
Type Cryptographic identity verification
Stack React Native · FastAPI · ZKP/Groth16 · WASM
Brief

Veritas needed a system to verify user age and identity — without storing personal data. No passport databases, no document copies, no GDPR nightmares.

The requirement was clear: user taps their passport on the phone, the system cryptographically verifies they are over 18, and stores the result as a mathematical proof — not as personal data.

Demo
NFC PROOF ZKP
Problem

Regulation requires age verification. Standard KYC requires a passport copy.

Every iGaming operator, online betting platform, or age-restricted service must verify user identity. Standard solution: upload a passport photo, send a selfie, wait 24 hours.

The result? Databases full of passport scans. GDPR vulnerability. Data breach = catastrophe. And the user drops off halfway through because nobody explained why they should photograph their passport.

Solution

NFC passport scan + zero-knowledge proof. Nothing is stored.

User taps their passport on the phone. The NFC chip contains cryptographically signed data — directly from the government. The app reads the chip, locally generates a zero-knowledge proof, and sends only the mathematical proof to the server.

The server verifies the proof and confirms: "This person is over 18." No name. No date of birth. No photo. Just cryptographic certainty.

How it works
01
NFC Scan
User taps their biometric passport on the phone. The NFC chip responds with cryptographically signed data (SOD).
02
On-device processing
Data is processed directly on the device. Age extraction, government signature validation. Nothing leaves the phone in raw form.
03
ZKP generation
Groth16 proof circuit in WASM. Proof that age ≥ 18 without revealing date of birth. 11MB WebAssembly bundle, client-side.
04
Verification
Server receives only the proof + passport hash. Verifies the mathematical proof. Returns JWT token. Done in <3 seconds.
Tech Stack
Mobile
React Native + Expo
Mobile app with NFC reading, camera, and file-based persistence via expo-file-system.
Cryptography
Noir + Groth16
Zero-knowledge proof circuit. Aztec BarretenbergSync engine. WASM bundle compiled via custom esbuild.
Runtime
WebAssembly (WASM)
11MB WASM asset bundled locally. Proof generation runs client-side in React Native WebView.
Backend
FastAPI + Python
REST API for proof verification, JWT generation, passport_hash deduplication (SHA256 SOD).
Frontend
Next.js 15 + React 19
Web profile page. Tailwind CSS 4. Server-side rendering. Public anonymous user profile.
Infrastructure
Railway
Backend + web deploy. SSL, DNS, environment variables. Zero-config CI/CD from GitHub.
Numbers
0
personal data stored
Zero data retention
<3s
full verification flow
NFC → Proof → Verified
3
system components
Mobile · API · Web
100%
client-side proof
Nothing sensitive leaves the phone
"We didn't need a team of 15. We needed one dev who understands cryptography and can build a mobile app. Layers delivered."
— Veritas, Founder

Have a project that needs this level? Let's talk.

Book a call