eth_pairings 0.2.0

EIP1962 reference implementation
Documentation

Purpose

Rust library for EC arithmetics and pairing calculations over various curves with parameters defined at runtime.

Features (WIP):

  • Fields implementation
  • Weierstrass curves implementation
    • a = 0
    • generic case (a != 0, b != 0)
    • b = 0 (most likely will not be implemented to avoid point (0,0) being on curve)
    • a = -3 (not a priority, can be covered by generic case w/o much performance hit and with simpler gas cost schedule)
  • Extension towers
    • Fp2
    • Fp3
    • Fp4 as 2 over 2
    • Fp6 as 2 over 3
    • Fp6 as 3 over 2
    • Fp12 as 2 over 3 over 2
  • Pairings
    • BLS12 curves family
    • BN family
    • MNT6 family
    • MNT4 family
    • Cocks-Pinch method generated curves in Weierstrass form (Ate pairing)
      • Test over a single k=6 curve from Zexe

ABI interface

See ABI.md.

Performance testing

  • Find a way to save on precomputations
    • Implement windowed exponentiation and don't create elements that are neven used
  • Find more test vectors to fit quadratic gas schedules
  • Benchmark Peppinger

Contributors

Resources to consult and use

So I do not forget it