⭕ Elliptic Curves for ZK

Name Family Security (bits) Field Size Pairing In-Circuit Used In Common Pairings
BN254 BN 100 254 ZoKrates, SnarkJS, Ethereum (alt_bn128 precompile)
Baby Jubjub
BLS12-381 BLS12 128 381 Ethereum 2.0, Halo2, Arkworks, Zcash
Jubjub
BLS12-377 BLS12 128 377 Aleo, Zexe
Jubjub
Pasta (Pallas/Vesta) Cycle 128 255 Halo2, Zcash, Mina
Pasta (Pallas/Vesta) BW6-761
BW6-761 BW6 180 761 Mina, Gnark
Pasta (Pallas/Vesta)
CP6-782 CP6 256 782 Experimental -
Jubjub Twisted Edwards 128 255 Zcash, Zexe, Filecoin
BLS12-381 BLS12-377
Baby Jubjub Twisted Edwards 128 254 Zcash (Sapling), circomlib, Semaphore
BN254

🔍 Select Your Use Case

Note: Click on a use case below to see recommendations.

I want to use the curve on Ethereum

I want to use the curve on Ethereum

Only curves supported by Ethereum precompiles are allowed (e.g., alt_bn128).

I want to use Groth16

I want to use Groth16

You need pairing-friendly curves with good Groth16 support and tooling.

I care about long-term cryptographic security

I care about long-term cryptographic security

Prefer curves with at least 128-bit or higher security margin.

I want a non-pairing curve

I want a non-pairing curve

Pairing-free curves are used in systems like Halo2, STARK-like designs, or recursive circuits.

I want to use a curve inside the circuit (e.g., for recursive proof)

I want to use a curve inside the circuit (e.g., for recursive proof)

You need a curve with efficient in-circuit arithmetic, often non-pairing and cycle-friendly.

I want to use a curve as the outer wrapper for recursion

I want to use a curve as the outer wrapper for recursion

You need a pairing-friendly curve capable of verifying inner SNARK proofs.