A benchmark of different proof systems for browser-based proving of ECDSA signatures on the secp256r1 (P256) curve. This repository contains implementations and performance comparisons of various zero-knowledge proving systems.
P256 (secp256r1) is a NIST standard curve used in:
- Passkeys/WebAuthn signatures
- National identity cards
- Passport signatures
- Digital document signing systems
The following systems were tested on :
- Desktop: Chrome on Macbook M1
- Mobile: Safari on iPhone (16 and Pro), Chrome on Samsung Galaxy A23
| System | Time | Status |
|---|---|---|
| Noir (UltraHonk, multi-thread) - M1 Macbook | 2.06s | Working |
| Noir (UltraHonk, multi-thread) - Android | ~6s | Working |
| Noir (UltraHonk) - iPhone | N/A | Out of memory error |
| Circom | N/A | Too heavy for browser |
| SP1 | N/A | Too heavy for browser |
| Risc0 | N/A | Too heavy for browser |
| Halo2 | N/A | Runtime error |
| Cairo | N/A | Functionality not available |
To run the benchmark, you need to have a rust toolchain installed.
Then you can run:
npm installto install the dependencies.npm run wasmto build the wasm file.npm run devto run the dev server.
Contributions are very welcome! We'd love your help with:
- Testing additional proof systems
- Keeping the document up-to-date with new releases for existing systems
- Adding support for alternative proving backends
- Exploring the use of folding schemes
This project is supported by Hyli, the new proof-powered L1 to build the next generation of apps, as part of the Hyli grant program.
