Added checks for input in mp_sqrtmod_prime that caused infinite loops #487
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.
Bugfix regarding issue #486.
I cannot imagine how that issue might be exploited but because I cannot imagine it doesn't mean there is no way at all.
primeis odd and> 2primeis congruent to 3 mod 4 is done at bit-level now (which makes that check constant time, too)M,s, andichanged to native signed integerint(values cannot exceedINT_MAX)(Z|prime) == 0in the first loop and returnMP_VALin that case. Although ifprime(p) is an odd primeJacobi(Z|p) == 0forZ \cong 0 (mod p)there is at least one non-quadratic residue beforeZ>=pifpis an odd prime, hence no false positives.M < iin the loop searching for smallest0 < i < Mfort^(2^i)The extra checks are cheap and the function itself should even be a little bit faster together with less need for stack and heap with the other changes.
I did not pick any reviewer explicitly because of the current situation and its accompanying mess but I would appreciate it highly if somebody would take a look. Thank's!