Some simplifications of vartime division (second attempt) #661
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.
This is a fix of reverted #646
div3by2()
saturating_sub
withwrapping_sub
in several places. While logically it is the same thing (the wrapping/saturation only happens for values that are later selected out), I think there are readability advantages. First, elsewhere in the code we use wrapping ops for selected out values (meaning "perform the subtraction without any checks, since we already have a constant-time condition for that"), sosaturating_sub
indicates that the algorithm actually uses the saturation mechanic. Second, in case of a bug, it will be easier to spot the consequences of a "0xffff..." value than a 0.Update:
div2by1
instead ofdiv3by2
with zero lower limbs. That's why I was wondering ifdiv3by2
should be moved out ofdiv_limb.rs
— when it's there it's perceived as a general-purpose method analogous todiv2by1
, but it's not - it may return the quotient or the quotient plus 1. It is only supposed to be used in a specific place in the division algorithm. It returns aWideWord
as a remainder, which was truncated toWord
by the caller without any checks or explanations why it's supposed to be correct.