GitHubTwitterZKHints

⭕ Elliptic Curves for ZK

NameFamilySecurity (bits)Field SizePairingIn-CircuitUsed InCommon Pairings
BN254BN100254ZoKrates, SnarkJS, Ethereum (alt_bn128 precompile)
Baby Jubjub
BLS12-381BLS12128381Ethereum 2.0, Halo2, Arkworks, Zcash
Jubjub
BLS12-377BLS12128377Aleo, Zexe
Jubjub
Pasta (Pallas/Vesta)Cycle128255Halo2, Zcash, Mina
Pasta (Pallas/Vesta)BW6-761
BW6-761BW6180761Mina, Gnark
Pasta (Pallas/Vesta)
CP6-782CP6256782Experimental-
JubjubTwisted Edwards128255Zcash, Zexe, Filecoin
BLS12-381BLS12-377
Baby JubjubTwisted Edwards128254Zcash (Sapling), circomlib, Semaphore
BN254
Koala BearPrime Field3131Plonky3-
Baby BearPrime Field3131Plonky3-
GoldilocksPrime Field32Plonky2, Plonky3-

🔍 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.