Skip to content

[Fix]: BigIntegerExtension.ModInverse returns a wrong result if value < 0#3840

Merged
shargon merged 2 commits intoneo-project:masterfrom
Wi1l-B0t:fix.biginteger-modinverse
Mar 20, 2025
Merged

[Fix]: BigIntegerExtension.ModInverse returns a wrong result if value < 0#3840
shargon merged 2 commits intoneo-project:masterfrom
Wi1l-B0t:fix.biginteger-modinverse

Conversation

@Wi1l-B0t
Copy link
Contributor

@Wi1l-B0t Wi1l-B0t commented Mar 19, 2025

Description

There are two BigIntegerExtension.ModInverse implementations.
One in Neo.Extensions.BigIntegerExtension, and another in Neo.Vm.Utility.

BigIntegerExtension.ModInverse returns a wrong result if value < 0(always return 0), but it's only used when get public key from private key, so no negative case.

Negative value is not allowed in Neo.Vm.Utility.ModInverse.

This PR removes duplicated implementation and keeps the Neo.Vm.Utility.ModInverse one(and move it to BigIntegerExtension)

Type of change

  • Optimization (the change is only an optimization)
  • Style (the change is only a code style for better maintenance or standard purpose)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Copy link
Member

@vncoelho vncoelho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very good to merge this and unify the behavior

@shargon shargon merged commit c889e0a into neo-project:master Mar 20, 2025
6 checks passed
@Wi1l-B0t Wi1l-B0t deleted the fix.biginteger-modinverse branch March 22, 2025 02:59
Jim8y added a commit that referenced this pull request Mar 24, 2025
* master: (52 commits)
  Add SHA512 (#3845)
  Clean crypto (#3844)
  Review of #3782 (#3843)
  [`Fix`] References in `StorageKey` (#3782)
  Ensure `IInteroperable.Clone` (#3829)
  Ensure the interop types are serializable before commit (#3802)
  fix: ModInverse extension in BigIntegerExtensions (#3840)
  Style: avoid allocating emtpy array (#3841)
  Style: format json in tests/ (#3839)
  Reduce mem arguments (#3838)
  Avoid returning the entire mempool when only `maxTransactionsPerBlock` is required (#3823)
  style: use proper Assert methods (#3834)
  Nullable and fix `lock` in `SQLiteWallet` (#3816)
  [`Add`]: `Witness.Empty` for simplifing somethings (#3836)
  Style: format too-long literal strings (#3835)
  Add: NotNullWhen(true) for some out parameters (#3833)
  Update SQLiteWallet.cs (#3830)
  Revert "Optimize DeleteAccount"
  Revert "add lock to Version"
  Revert "Optimize LoadAccounts"
  ...

# Conflicts:
#	neo.sln
cschuchardt88 pushed a commit to cschuchardt88/neo that referenced this pull request Jun 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants