From 49976e7d6fe4816157608313973b4c5bfb68442b Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Mon, 5 Jun 2017 05:18:13 -0700 Subject: [PATCH] crypto: better siphash addition. --- lib/crypto/siphash.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/crypto/siphash.js b/lib/crypto/siphash.js index 66160234..433de697 100644 --- a/lib/crypto/siphash.js +++ b/lib/crypto/siphash.js @@ -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; };