crypto: Use dynamic spans in modexp_odd and mul_amm#1462
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #1462 +/- ##
==========================================
- Coverage 96.83% 96.82% -0.01%
==========================================
Files 152 152
Lines 14062 14035 -27
Branches 3249 3243 -6
==========================================
- Hits 13617 13590 -27
Misses 306 306
Partials 139 139
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR refactors the modular exponentiation implementation to remove fixed-size template dispatch and instead operate on runtime-sized std::spans, simplifying the Montgomery multiplication/exponentiation path and reducing per-size instantiations.
Changes:
- Replaced templated
mul_amm<N>with a dynamic-spanmul_amm(std::span<...>). - Merged fixed-size odd-modulus exponentiation into
modexp_odd()using dynamic spans and shared scratch storage. - Added a regression test vector covering correct zeroing of trailing words for certain even-modulus cases.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
lib/evmone_precompiles/modexp.cpp |
Refactors Montgomery multiplication and odd-modulus modexp to use dynamic spans and shared scratch buffers. |
test/unittests/precompiles_expmod_test.cpp |
Adds a regression test vector and updates a comment describing odd-modulus size coverage. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Replace fixed-size template dispatch with runtime-sized std::span parameters. This merges modexp_odd_fixed_size() into modexp_odd() and simplifies mul_amm() to work with dynamic spans, eliminating the per-size template instantiations.
2e36672 to
092bf46
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replace fixed-size template dispatch with runtime-sized std::span parameters. This merges modexp_odd_fixed_size() into modexp_odd() and simplifies mul_amm() to work with dynamic spans, eliminating the per-size template instantiations.