streebog: fix bit-length counter carry propagation to 512-bit #759
+37
−1
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.
The update_n() implementation propagated carry only through limbs 1..6, effectively making n a 448-bit counter. According to GOST R 34.11-2012 (RFC 6986), the total processed bit-length must be tracked modulo 2^512. This change extends the loop to include limb 7 so carry ripples through all eight 64-bit words and any further carry is discarded, thus restoring correct modulo 2^512 semantics. Although this bug only manifests for astronomically large inputs, it is a correctness issue and brings the implementation in line with the specification and the behavior of similar counters in this codebase.