Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Python implementation for bn254 (alt_bn128) pairing (matter-labs#16)
* ecadd tests * ecmul tests * Add test utils * Add test suit generator * Remove old tests * Update tests * Fix ecadd * Fix ecmul * Handle modexp tests * Add modexp tests * Update call helper function * Fix helper function * Fix test utils * Improve ecmul precompile * Add test helper * Add python script to test double and add algorithm (matter-labs#13) * Add montgomery reduction algorithm * Add Rust playground crate * Update montgomery reduction script * Add Montgomery reduction precompile * ecAdd refactor * Montgomery fix * Add montgomery inv & modexp * Fix N' * Fix REDC * Fix Montgomery modular inverse * Remove comments * Fix prints * Change to bytes comparison instead of decoded output * Patch tests with extra check for errors in ecadd and ecmul * Add EOL * Update modexp precompile * Finish optimizing ecAdd & ecMul * Implement optimized montgomery invmod * modexpGasCost * Cleanup * Last version of ecAdd, ecMul & modexp * Fix modexp tests calldata * Fix modexp tests to pass with actual vm state * Update Montgomery precompile * Rename montgomery lib * Add alt_bn128 projective point lib * Add quadratic extension field arithmetic lib * Add alt_bn128 pairing script * Finish quadratic extension field arithmetics Co-authored-by: Nacho Avecilla <nachoavecilla@gmail.com> * Fix Montgomery lib Co-authored-by: Nacho Avecilla <nachoavecilla@gmail.com> * Implement double and addition steps Co-authored-by: Nacho Avecilla <nachoavecilla@gmail.com> * Arithmetics over Fp2 in Python (matter-labs#14) * Finish fp2 arithmetic * Add more precomputed values * Fix fp2 inv * Add EOF * Rename module * Fix point at infinity * Rename lib * Arithmetics over Fp6 in Python (matter-labs#15) * Finish fp2 arithmetic * Add more precomputed values * Add arithmetic operations for fp6 * Update constant name Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Replace epsilon for XI * Change script name * Add multiplication by xi in fp2 and fp6 * Add alternative inverse method * Fix inverse operation --------- Co-authored-by: Iván Litteri <ilitteri@fi.uba.ar> Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Fp12 arithmetic (matter-labs#21) * WIP * add fp12 arithmetics * fix typo * add addition tests * add sub test * rename gamma function * add mul tests * fix function call * fix typo * mul fixes * fix mul by 1 * fix square * fix fp12 inverse * add multiply by 2 asserts * add EOF --------- Co-authored-by: Iván Litteri <ilitteri@fi.uba.ar> * Add jacobian coordinates in Python (matter-labs#22) * Rename file * Add implementation for jacobian projective coordinates * Fix fp12 merge error * Fix addition * Rename function to check inifinity and add extra comments * Fp2, Fp6 and Fp12 arithmetics in Yul (matter-labs#23) * Add fp2 arithmetics * Add fp6 arithmetics * Rename funcs * Fix compilation errors in fp6 operations * Add tests for inverse and sub for fp2 * Fix square and multiplication for fp6 * Add tests for add, mul, sub and square in fp6 * add fp12 arithmetic * Fix inverse in fp6 * Add tests for inverse in fp6 * add fp12 tests * add inverse test for fp12 * changes mul for sub --------- Co-authored-by: Iván Litteri <ilitteri@fi.uba.ar> Co-authored-by: Joaquin Carletti <joaquin.carletti@lambdaclass.com> * Add point addition and line evaluation algorithm (matter-labs#24) * Point doubling and line evaluation (matter-labs#25) * Refactor for line evaluation functions (matter-labs#29) * Move point doubling and line evaluation to pairing file * Change return type in point adding and line evaluation to match with doubling * Remove incorrect parameter * Change name to match with other pairing function * add mul by gamma functions (matter-labs#31) * Improve fp6 and fp12 arithmetics return type (matter-labs#35) * Change fp6 return type to single tuple * change return to single tuple --------- Co-authored-by: Joaquin Carletti <joaquin.carletti@lambdaclass.com> * add millers loop (matter-labs#30) * add millers loop basics * add PI functions to loop * add neg of a G2 point * add loop counter * fix return of negate funciton * fix loop_counter values * rename utils file * fix imports * change constants to fp6 file * fix miller loop set up * add comment * fix comment * fix typo * Add Final exponentiation (matter-labs#32) * Add ten in montgomery form as constant * Add frobenius operations * Add negate operation for fp6 * Add conjugate operation for fp2 * Add operations in fp2 used in final exponentiation * Add final exponentiation function * Fix return types to match with new changes * Add corrections to n_square function * Use montgomery for gamma factors and add frobenius tests * Add test for cyclotomic square * Add another final exponentiation implementation and test * fix fp6 arithmetic (matter-labs#42) * Precompute Frobenius constants (matter-labs#44) * Add pairing tests for python implementation (matter-labs#36) * Add function utils to check elements in curve and twisted curve * Add conditional for g2 from affine * Add tests for conjugate in fp12 and fp2 * Fix miller loop errors * Add pair function * Add pairing test from eth tests * Correct NAF representation * Change exponentiation impl to be able to test it correctly * Correct point doubling and miller loop * Add test for point doubling and line evaluation * add addition tests * Add tests for frobenius * Add line evaluation test after point addition * Add point doubling and adding functions for projective coordinates * Fix in miller loop function * Add test refactors with new functions * Fix constant for fp12 * Add functions for g2 in projective and affine * Fix NAF representation * add eth tests * add tests names * add expt * change final_exp * fix fp6 square * Delete test generator for pairing in python * Delete unnecesary comments * Delete unused exponentiation function * Delete unused import and old todo * Improve naming of doubling and addition steps in miller loop --------- Co-authored-by: Joaquin Carletti <joaquin.carletti@lambdaclass.com> * Frobenius Operator in Yul (matter-labs#43) * Implement Frobenius operator in Yul * Fix Frobenius functions returns * Fix Frobenius functions returns * Add tests * Update comment * add mix addition in yul (matter-labs#45) * Add function utils to check elements in curve and twisted curve * Add conditional for g2 from affine * Add tests for conjugate in fp12 and fp2 * Fix miller loop errors * Add pair function * Add pairing test from eth tests * Correct NAF representation * Change exponentiation impl to be able to test it correctly * Correct point doubling and miller loop * Add test for point doubling and line evaluation * add addition tests * Add tests for frobenius * Add line evaluation test after point addition * Add point doubling and adding functions for projective coordinates * Fix in miller loop function * Add test refactors with new functions * Fix constant for fp12 * Add functions for g2 in projective and affine * Fix NAF representation * add eth tests * add tests names * add expt * change final_exp * fix fp6 square * Delete test generator for pairing in python * Delete unnecesary comments * Delete unused exponentiation function * Delete unused import and old todo * Improve naming of doubling and addition steps in miller loop * add mix addition in yul * fix function * Update precompiles/Playground.yul Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> --------- Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Iván Litteri <ilitteri@fi.uba.ar> Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Add cyclotomicSquare and nSquare (matter-labs#47) * Add function utils to check elements in curve and twisted curve * Add conditional for g2 from affine * Add tests for conjugate in fp12 and fp2 * Fix miller loop errors * Add pair function * Add pairing test from eth tests * Correct NAF representation * Change exponentiation impl to be able to test it correctly * Correct point doubling and miller loop * Add test for point doubling and line evaluation * add addition tests * Add tests for frobenius * Add line evaluation test after point addition * Add point doubling and adding functions for projective coordinates * Fix in miller loop function * Add test refactors with new functions * Fix constant for fp12 * Add functions for g2 in projective and affine * Fix NAF representation * add eth tests * add tests names * add expt * change final_exp * fix fp6 square * Delete test generator for pairing in python * Delete unnecesary comments * Delete unused exponentiation function * Delete unused import and old todo * Improve naming of doubling and addition steps in miller loop * add cyclotomic square * fix assignments * add nSquare --------- Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Iván Litteri <ilitteri@fi.uba.ar> * Add `t` exponentiation for fp12 in Yul (matter-labs#48) * Add function utils to check elements in curve and twisted curve * Add conditional for g2 from affine * Add tests for conjugate in fp12 and fp2 * Fix miller loop errors * Add pair function * Add pairing test from eth tests * Correct NAF representation * Change exponentiation impl to be able to test it correctly * Correct point doubling and miller loop * Add test for point doubling and line evaluation * add addition tests * Add tests for frobenius * Add line evaluation test after point addition * Add point doubling and adding functions for projective coordinates * Fix in miller loop function * Add test refactors with new functions * Fix constant for fp12 * Add functions for g2 in projective and affine * Fix NAF representation * add eth tests * add tests names * add expt * change final_exp * fix fp6 square * Delete test generator for pairing in python * Delete unnecesary comments * Delete unused exponentiation function * Delete unused import and old todo * Improve naming of doubling and addition steps in miller loop * Add implementation for exponentiation by t for fp12 --------- Co-authored-by: Joaquin Carletti <joaquin.carletti@lambdaclass.com> Co-authored-by: Iván Litteri <ilitteri@fi.uba.ar> * Add final exp in yul (matter-labs#49) * Add function utils to check elements in curve and twisted curve * Add conditional for g2 from affine * Add tests for conjugate in fp12 and fp2 * Fix miller loop errors * Add pair function * Add pairing test from eth tests * Correct NAF representation * Change exponentiation impl to be able to test it correctly * Correct point doubling and miller loop * Add test for point doubling and line evaluation * add addition tests * Add tests for frobenius * Add line evaluation test after point addition * Add point doubling and adding functions for projective coordinates * Fix in miller loop function * Add test refactors with new functions * Fix constant for fp12 * Add functions for g2 in projective and affine * Fix NAF representation * add eth tests * add tests names * add expt * change final_exp * fix fp6 square * Delete test generator for pairing in python * Delete unnecesary comments * Delete unused exponentiation function * Delete unused import and old todo * Improve naming of doubling and addition steps in miller loop * add final exponentiation * Update precompiles/Playground.yul Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> --------- Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Point doubling step of the miller loop in Yul (matter-labs#46) * Add function utils to check elements in curve and twisted curve * Add conditional for g2 from affine * Add tests for conjugate in fp12 and fp2 * Fix miller loop errors * Add pair function * Add pairing test from eth tests * Correct NAF representation * Change exponentiation impl to be able to test it correctly * Correct point doubling and miller loop * Add test for point doubling and line evaluation * add addition tests * Add tests for frobenius * Add line evaluation test after point addition * Add point doubling and adding functions for projective coordinates * Fix in miller loop function * Add test refactors with new functions * Fix constant for fp12 * Add functions for g2 in projective and affine * Fix NAF representation * add eth tests * add tests names * add expt * change final_exp * fix fp6 square * Delete test generator for pairing in python * Delete unnecesary comments * Delete unused exponentiation function * Delete unused import and old todo * Improve naming of doubling and addition steps in miller loop * Add implementation for point doubling step of the miller loop * Fix fp2 neg function parameters * Fix typo in parameters to return * Add precomputation for inverse of two --------- Co-authored-by: Joaquin Carletti <joaquin.carletti@lambdaclass.com> * G2 Twist in Yul (matter-labs#50) * Add basic functionality for G2 Twist * Rename neg to g2Neg * Rename functions and fix compilation errors * Miller loop in yul (matter-labs#52) * Clean playground code for pairing migration * ecPairing common tests for all Ethereum implementations (matter-labs#51) * Add ecpairing official tests * Change tests path for test generator script --------- Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Joaquin Carletti <56092489+ColoCarletti@users.noreply.github.com> Co-authored-by: Joaquin Carletti <joaquin.carletti@lambdaclass.com>
- Loading branch information