diff --git a/lib/bcoin/bloom.js b/lib/bcoin/bloom.js index 4d8fb3db..594a9211 100644 --- a/lib/bcoin/bloom.js +++ b/lib/bcoin/bloom.js @@ -23,7 +23,7 @@ function Bloom(size, n, tweak) { } Bloom.prototype.hash = function hash(val, n) { - return Bloom.hash(val, sum32(mul32(n, 0xfba4c795), this.tweak)) % this.size; + return murmur(val, sum32(mul32(n, 0xfba4c795), this.tweak)) % this.size; }; Bloom.prototype.reset = function reset() { @@ -72,10 +72,11 @@ function mul32(a, b) { var blo = b & 0xffff; var ahi = a >>> 16; var bhi = b >>> 16; - var r; + var r, lo, hi; + + lo = alo * blo; + hi = (ahi * blo + bhi * alo) & 0xffff; - var lo = alo * blo; - var hi = (ahi * blo + bhi * alo) & 0xffff; hi += lo >>> 16; lo &= 0xffff; r = (hi << 16) | lo; @@ -99,20 +100,18 @@ function rotl32(w, b) { return (w << b) | (w >>> (32 - b)); } -function hash(data, seed) { - data = utils.toBuffer(data); - +function murmur(data, seed) { var c1 = 0xcc9e2d51; var c2 = 0x1b873593; var r1 = 15; var r2 = 13; var m = 5; var n = 0xe6546b64; - var hash = seed; - var i, w, r, j; + data = utils.toBuffer(data); + for (i = 0; i + 4 <= data.length; i += 4) { w = data[i] | (data[i + 1] << 8) @@ -156,7 +155,7 @@ function hash(data, seed) { return hash; } -Bloom.hash = hash; +Bloom.hash = murmur; /** * Expose