# Purpose Rust library for EC arithmetics and pairing calculations over various curves with parameters defined at runtime. Features (WIP): - [x] Fields implementation - [x] Weierstrass curves implementation - [x] a = 0 - [x] 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) - [x] Extension towers - [x] Fp2 - [x] Fp3 - [x] Fp4 as 2 over 2 - [x] Fp6 as 2 over 3 - [x] Fp6 as 3 over 2 - [x] Fp12 as 2 over 3 over 2 - [ ] Pairings - [x] BLS12 curves family - [x] BN family - [x] MNT6 family - [x] MNT4 family - [ ] Cocks-Pinch method generated curves in Weierstrass form (Ate pairing) - [x] Test over a single k=6 curve from Zexe # ABI interface See [ABI.md](ABI.md). # Performance testing - [ ] Find a way to save on precomputations - [x] Implement windowed exponentiation and don't create elements that are neven used - [ ] Find more test vectors to fit quadratic gas schedules - [ ] Benchmark Peppinger # Contributors - Kobi Gurkan, [kobigurk@gmail.com](mailto://kobigurk@gmail.com) # Resources to consult and use So I do not forget it - https://eprint.iacr.org/2012/072.pdf - https://eprint.iacr.org/2013/722.pdf - https://eprint.iacr.org/2016/130.pdf