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) {
|
U64.prototype.iadd = function iadd(b) {
|
||||||
var a = this;
|
var a = this;
|
||||||
var sum, c;
|
var hi, lo, as, bs, s, c;
|
||||||
|
|
||||||
// Credit to @indutny for this method.
|
// Credit to @indutny for this method.
|
||||||
sum = (a.lo >>> 0) + (b.lo >>> 0);
|
lo = (a.lo + b.lo) | 0;
|
||||||
c = (sum >= 0x100000000) | 0;
|
|
||||||
|
|
||||||
a.hi = (((a.hi + b.hi) | 0) + c) | 0;
|
s = lo >> 31;
|
||||||
a.lo = sum | 0;
|
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;
|
return a;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user