crypto: better siphash addition.
This commit is contained in:
parent
f0b43764b1
commit
49976e7d6f
@ -153,14 +153,21 @@ function U64(hi, lo) {
|
||||
|
||||
U64.prototype.iadd = function iadd(b) {
|
||||
var a = this;
|
||||
var sum, c;
|
||||
var hi, lo, as, bs, s, c;
|
||||
|
||||
// Credit to @indutny for this method.
|
||||
sum = (a.lo >>> 0) + (b.lo >>> 0);
|
||||
c = (sum >= 0x100000000) | 0;
|
||||
lo = (a.lo + b.lo) | 0;
|
||||
|
||||
a.hi = (((a.hi + b.hi) | 0) + c) | 0;
|
||||
a.lo = sum | 0;
|
||||
s = lo >> 31;
|
||||
as = a.lo >> 31;
|
||||
bs = b.lo >> 31;
|
||||
|
||||
c = ((as & bs) | (~s & (as ^ bs))) & 1;
|
||||
|
||||
hi = ((a.hi + b.hi) | 0) + c;
|
||||
|
||||
a.hi = hi | 0;
|
||||
a.lo = lo;
|
||||
|
||||
return a;
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user