diff --git a/lib/crypto/siphash.js b/lib/crypto/siphash.js index 433de697..35afe6ce 100644 --- a/lib/crypto/siphash.js +++ b/lib/crypto/siphash.js @@ -83,7 +83,7 @@ function siphash24(data, key, shift) { v0.ixor(v2); v0.ixor(v3); - return v0.toRaw(); + return v0; } function sipround(v0, v1, v2, v3) { @@ -215,8 +215,8 @@ U64.prototype.irotl = function irotl(bits) { U64.prototype.toRaw = function toRaw() { var data = Buffer.allocUnsafe(8); - data.writeUInt32LE(this.hi >>> 0, 4, true); data.writeUInt32LE(this.lo >>> 0, 0, true); + data.writeUInt32LE(this.hi >>> 0, 4, true); return data; }; @@ -226,8 +226,8 @@ U64.fromRaw = function fromRaw(data, off) { if (!off) off = 0; - hi = data.readUInt32LE(off + 4, true); lo = data.readUInt32LE(off, true); + hi = data.readUInt32LE(off + 4, true); return new U64(hi, lo); }; @@ -236,7 +236,7 @@ U64.fromRaw = function fromRaw(data, off) { * Expose */ -exports = siphash256; +exports = siphash; exports.siphash = siphash; exports.siphash256 = siphash256; exports.U64 = U64; diff --git a/lib/net/bip152.js b/lib/net/bip152.js index e95cba05..b9a8de27 100644 --- a/lib/net/bip152.js +++ b/lib/net/bip152.js @@ -18,7 +18,7 @@ var StaticWriter = require('../utils/staticwriter'); var encoding = require('../utils/encoding'); var consensus = require('../protocol/consensus'); var crypto = require('../crypto/crypto'); -var siphash = require('../crypto/siphash'); +var siphash256 = require('../crypto/siphash').siphash256; var AbstractBlock = require('../primitives/abstractblock'); var TX = require('../primitives/tx'); var Headers = require('../primitives/headers'); @@ -387,10 +387,10 @@ CompactBlock.prototype.sid = function sid(hash) { if (typeof hash === 'string') hash = Buffer.from(hash, 'hex'); - hash = siphash(hash, this.sipKey); + hash = siphash256(hash, this.sipKey); - lo = hash.readUInt32LE(0, true); - hi = hash.readUInt16LE(4, true); + lo = hash.lo >>> 0; + hi = hash.hi & 0xffff; return hi * 0x100000000 + lo; }; diff --git a/package.json b/package.json index 6f21a376..8b0c7604 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "hmac-drbg": "^1.0.0" }, "optionalDependencies": { - "bcoin-native": "0.0.17", + "bcoin-native": "0.0.18", "leveldown": "1.7.0-0", "secp256k1": "3.2.5", "socket.io": "2.0.1", diff --git a/test/siphash-test.js b/test/siphash-test.js index c0640128..f7ce660f 100644 --- a/test/siphash-test.js +++ b/test/siphash-test.js @@ -2,14 +2,22 @@ var assert = require('assert'); var siphash = require('../lib/crypto/siphash'); +var siphash256 = siphash.siphash256; var U64 = siphash.U64; +function toRaw(num) { + var data = Buffer.allocUnsafe(8); + data.writeUInt32LE(num.lo >>> 0, 0, true); + data.writeUInt32LE(num.hi >>> 0, 4, true); + return data; +}; + describe('SipHash', function() { it('should perform siphash with no data', function() { var k0 = U64(0x07060504, 0x03020100).toRaw(); var k1 = U64(0x0f0e0d0c, 0x0b0a0908).toRaw(); var key = Buffer.concat([k0, k1]); - assert.equal(siphash(Buffer.alloc(0), key).toString('hex'), '310e0edd47db6f72'); + assert.equal(toRaw(siphash256(Buffer.alloc(0), key)).toString('hex'), '310e0edd47db6f72'); }); it('should perform siphash with data', function() { @@ -17,7 +25,7 @@ describe('SipHash', function() { var k1 = U64(0x0f0e0d0c, 0x0b0a0908).toRaw(); var data = U64(0x07060504, 0x03020100).toRaw(); var key = Buffer.concat([k0, k1]); - assert.equal(siphash(data, key).toString('hex'), '6224939a79f5f593'); + assert.equal(toRaw(siphash256(data, key)).toString('hex'), '6224939a79f5f593'); }); it('should perform siphash with uint256', function() { @@ -25,6 +33,6 @@ describe('SipHash', function() { var k1 = U64(0x0f0e0d0c, 0x0b0a0908).toRaw(); var hash = Buffer.from('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'); var key = Buffer.concat([k0, k1]); - assert.equal(siphash(hash, key).toString('hex'), 'ce7cf2722f512771'); + assert.equal(toRaw(siphash256(hash, key)).toString('hex'), 'ce7cf2722f512771'); }); });