Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
modexp
big integers arithmetics (matter-labs#124)
* Initial new implementation * Fix compilation error * Implementation of add operation for big integers (matter-labs#136) * Implement Big UInt Left Shift (matter-labs#139) * Add `bigUIntShl` implementation * Add constants * Fix compilation * Implement Big UInt Right Shift (matter-labs#137) * Add `bigUIntShr` implementation * Add constants * Implement Big UInt Bitwise Or for modexp (matter-labs#135) * Implement bigUIntBitOr * Fix bigUIntBitOr * Fix bigUIntBitOr Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Fix missing closing brackets --------- Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Implement big uint conditional select for modexp (matter-labs#148) * Implement bigUIntCondSelect * Fix missing curly braces Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Implement Big UInt Right Shift (matter-labs#137) * Add `bigUIntShr` implementation * Add constants * Implement Big UInt Bitwise Or for modexp (matter-labs#135) * Implement bigUIntBitOr * Fix bigUIntBitOr * Fix bigUIntBitOr Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Fix missing closing brackets --------- Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> --------- Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Implement mul operation for big UInts (matter-labs#151) * First implementation of mul operation for bigints * Fix multiplication for big integers * Fix some merge issues * Improve comments and function docs * Delete whitespaces * Substraction with borrow (matter-labs#149) * First substraction draft * Fix compile problems * Working implementation * Updated code * Updated code * Update subtract implementation * Remove console_log * Add docs for function * Update function docs * Remove tests from from ModExp.yul * Fix typo * Restore horrible whitespaces to avoid an ugly merge conflict * Update precompiles/Modexp.yul Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Revert "Update precompiles/Modexp.yul" This reverts commit 582bc41a0bb7fb02a1a68717fdf83c6fe432d422. --------- Co-authored-by: Joaquín P. Centeno <jpcenteno@users.noreply.github.com> Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Refactor `modexp` reimplementation (matter-labs#156) * Make Big UInt API functions naming consistent * Refactor `bigUIntAdd` variable names * Refactor `bigUIntMul` variable names * Refactor `subLimbsWithBorrow` * Refactor `bigUintSubtractionWithBorrow` * Refactor `bigUIntAdd` * Fix `bigUIntSubWithBorrow` * Format `storeLimbValueAtOffset` * Refactor `bigUIntBitOr` Made it consistent with the rest of the code convention and naming * Refactor `bigUIntCondSelect` Made it consistent with the rest of the code convention and naming * Reorder `overflowingSubWithBorrow` * Move comment to modexp API Docs section * Biguint division (matter-labs#159) * Division draft * Non working draft * Fix compile errors * Use proper pointers for quotient and remainder * Add fix note, some more changes * Add comment * Implement `big_uint_bit_size` * Increase pointer to prevent it from steping over console_log * WIP divrem * Fix loop and zero initializer * Push test cases * Add other test case * Add docs and tests for `big_uint_inplace_or_1` * Fix bug related to bit shifting * Fix borrow return in big uint sub function * Delete playground file used for debugging * Fix sub with borrow function * Add playground again to check more big integer division tests * Remove playground used for testing * Write documentation for new shift functions * Improve naming and documentation for new helper functions * Rename bigUIntOrWith1 to bigUintInPlaceOrWith1 * Add tmp buffer parameters to bigUIntDivRem. Improve docs. * Simplify subLimbsWithBorrow Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Remove `mul` call from `bigUIntInPlaceOrWith1` Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Remove multiplications from copyBigUint Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Optimize bigUIntBitSize loop Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Simplify zeroWithLimbSizeAt --------- Co-authored-by: Francisco Krause Arnim <fkrausear@gmail.com> Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Implement mul mod operation for big UInts (matter-labs#161) * Division draft * Non working draft * Fix compile errors * Use proper pointers for quotient and remainder * Add fix note, some more changes * Add comment * Implement `big_uint_bit_size` * Increase pointer to prevent it from steping over console_log * WIP divrem * Fix loop and zero initializer * Push test cases * Add other test case * Add docs and tests for `big_uint_inplace_or_1` * Fix bug related to bit shifting * Fix borrow return in big uint sub function * Delete playground file used for debugging * Fix sub with borrow function * Add playground again to check more big integer division tests * Remove playground used for testing * Write documentation for new shift functions * Improve naming and documentation for new helper functions * Rename bigUIntOrWith1 to bigUintInPlaceOrWith1 * Add tmp buffer parameters to bigUIntDivRem. Improve docs. * Add big uint mul mod skeleton * Remove wrong comment * Update algorithm comment * Add limb size doubling and divide by two for mul mod operation * Functions to duplicate and halve limb size work in place * Use camelCase * Remove console_log * Add docs * Update doc --------- Co-authored-by: Francisco Krause Arnim <fkrausear@gmail.com> Co-authored-by: Joaquín P. Centeno <jpcenteno@users.noreply.github.com> * Add parseCallData function * Add function to left-pad big uints * Remove console log function * Change left padding functions for big uints to not work in place * Add `parseCalldata` function (matter-labs#168) * Remove redundant parse call data declaration * Free memory pointer (matter-labs#169) * Add free memory pointer function * Update precompiles/Modexp.yul Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Update precompiles/Modexp.yul Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> --------- Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> * Start parsing the input calldata * Correctly parse call data * Add left pad steps for modexp inputs * Add pad if needed function * Modexp for big UInts skeleton (matter-labs#164) * WIP: modexp skeleton * Use of mul mod function for big integers * imlement aux function to check if big uint is larger than 1 * minor fix * Restore modexp from target branch * Fix mul mod * Finish modexp implementation * Remove playground used for debugging * Update modexp with final state of modular exponentiation function * Fix merge issue * Change all names to camel case * fix typo Co-authored-by: Francisco Krause Arnim <56402156+fkrause98@users.noreply.github.com> --------- Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> Co-authored-by: Francisco Krause Arnim <56402156+fkrause98@users.noreply.github.com> * Add simple integration * Fix calldata buffer in zero check * Uncomment checks for base cases * Fix result length to match with mod length * Fix condition in parse call data * Update test assertions with new test node updates * Add comment for tests with a temp patch * Fix modexp result length * Fix limb amount for modexp operands * Clean sratch buffers in each iteration * Clean sratch buffers for every operation * Remove unused functions * Delete free memory pointer usage and calculate pointers manually * Replace all mul operations for shifts to improve gas usage * Include basic optimizations * Add optimizations for reminder calculations * Add small improvement for main loop in modular exp * Add temporary fix for modexp test * Add modex reference script * Remove unnecesary memory stores * Reduce iterations in rem function * Compilation fix * Print gas used on tests * Add build script to create gas reports * Save gas used for each test of the precompiles * Add aux functions to write lines in each report * Merge main * Fix tests lint * Fix lint in test utils * Change L1 url --------- Co-authored-by: Nacho Avecilla <nachoavecilla@gmail.com> Co-authored-by: Joaquín Centeno <jpcenteno@users.noreply.github.com> Co-authored-by: Francisco Krause Arnim <56402156+fkrause98@users.noreply.github.com> Co-authored-by: Francisco Krause Arnim <fkrausear@gmail.com> Co-authored-by: IAvecilla <iavecilla@fi.uba.ar> Co-authored-by: Javier Chatruc <jrchatruc@gmail.com>
- Loading branch information