#elliptic-curve #finite-fields

no-std ark-bls12-381

The BLS12-381 pairing-friendly elliptic curve

5 unstable releases

0.4.0 Jan 17, 2023
0.4.0-alpha.2 Dec 28, 2022
0.4.0-alpha.1 Nov 29, 2022
0.3.0 Jun 6, 2021
0.2.0 Mar 25, 2021

#35 in Cryptography

Download history 45917/week @ 2023-12-05 42121/week @ 2023-12-12 32804/week @ 2023-12-19 15084/week @ 2023-12-26 34208/week @ 2024-01-02 43606/week @ 2024-01-09 51581/week @ 2024-01-16 52803/week @ 2024-01-23 57226/week @ 2024-01-30 52516/week @ 2024-02-06 54933/week @ 2024-02-13 57399/week @ 2024-02-20 53288/week @ 2024-02-27 48735/week @ 2024-03-05 52140/week @ 2024-03-12 45305/week @ 2024-03-19

211,067 downloads per month
Used in 400 crates (61 directly)

MIT/Apache

480KB
3K SLoC

Notice

This repository is no longer maintained, and PRs to add or modify curves should instead be made against arkworks-rs/algebra; all the curves implemented here have moved to the curves folder of that repository.

Curve implementations

This repository contains implementations of some popular elliptic curves. The curve API implemented here matches the curve traits defined here in the arkworks-rs/algebra repository.

BLS12-381 and embedded curves

  • ark-bls12-377: Implements the BLS12-377 pairing-friendly curve

  • ark-ed-on-bls12-377: Implements a Twisted Edwards curve atop the scalar field of BLS12-377

  • ark-bw6-761: Implements the BW6-761 pairing-friendly curve, which is a curve whose scalar field equals the base field of BLS12-377

  • ark-ed-on-bw6-761: Implements a Twisted Edwards curve atop the scalar field of BW6-761

  • ark-cp6-782: Implements the CP6-782 pairing-friendly curve, which is a curve whose scalar field equals the base field of BLS12-377

  • ark-ed-on-cp6-782: Implements a Twisted Edwards curve atop the scalar field of CP6-782. This is the same curve as in ark-ed-on-bw6-761

  • ark-bn254: Implements the BN254 pairing-friendly curve
  • ark-ed-on-bn254: Implements a Twisted Edwards curve atop the scalar field of BN254
  • ark-grumpkin: Implements the Grumpkin curve. A curve that forms a cycle with bn254.
  • ark-mnt4-298: Implements the MNT4-298 pairing-friendly curve. This curve forms a pairing-friendly cycle with MNT6-298
  • ark-mnt6-298: Implements the MNT6-298 pairing-friendly curve. This curve forms a pairing-friendly cycle with MNT4-298
  • ark-ed-on-mnt4-298: Implements a Twisted Edwards curve atop the scalar field of MNT4-298
  • ark-mnt4-753: Implements the MNT4-753 pairing-friendly curve. This curve forms a pairing-friendly cycle with MNT6-753
  • ark-mnt6-753: Implements the MNT6-753 pairing-friendly curve. This curve forms a pairing-friendly cycle with MNT4-753
  • ark-ed-on-mnt4-753: Implements a Twisted Edwards curve atop the scalar field of MNT4-753

Pasta cycle of curves

  • ark-pallas: Implements Pallas, a prime-order curve that forms an amicable pair with Vesta
  • ark-vesta: Implements Vesta, a prime-order curve that forms an amicable pair with Pallas

lib.rs:

This library implements the BLS12_381 curve generated by Sean Bowe. The name denotes that it is a Barreto--Lynn--Scott curve of embedding degree 12, defined over a 381-bit (prime) field. This curve was intended to replace the BN254 curve to provide a higher security level without incurring a large performance overhead.

Curve information:

  • Base field: q = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787
  • Scalar field: r = 52435875175126190479447740508185965837690552500527637822603658699938581184513
  • valuation(q - 1, 2) = 1
  • valuation(r - 1, 2) = 32
  • G1 curve equation: y^2 = x^3 + 4
  • G2 curve equation: y^2 = x^3 + Fq2(4, 4)

Dependencies

~5.5MB
~107K SLoC