This repository has been archived by the owner on Sep 19, 2022. It is now read-only.
Updated constantTimeIsEqual to use binary addition to address a possible issue of summing up negative and positive sub-results of XOR operations to 0
.
#21
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.
Related to #1
I think the current implementation of
constantTimeIsEqual
might have an issue:The
r + (ab._1 ^ ab._2)
part is not exactly the same asresult |= a[i] ^ b[i]
from the article, as it uses addition of signed bytes as opposed to binary addition (OR), where sign does not matter.So it is possible to get say a
1
and a-1
via XORing and then add them up to a0
.Array(-3,-2,4,1).sum
is also 0, butArray(-3,-2,4,1).foldLeft(0){ (r,n) => r | n }
is not. Hope this illustrates the point.PS. Just noticed deprecation warning. Keeping PR open for anyone who wants to use/fork the library.