31 lines
682 B
JavaScript
31 lines
682 B
JavaScript
|
'use strict'
|
||
|
var intSize = 4
|
||
|
var zeroBuffer = new Buffer(intSize)
|
||
|
zeroBuffer.fill(0)
|
||
|
|
||
|
var charSize = 8
|
||
|
var hashSize = 16
|
||
|
|
||
|
function toArray (buf) {
|
||
|
if ((buf.length % intSize) !== 0) {
|
||
|
var len = buf.length + (intSize - (buf.length % intSize))
|
||
|
buf = Buffer.concat([buf, zeroBuffer], len)
|
||
|
}
|
||
|
|
||
|
var arr = new Array(buf.length >>> 2)
|
||
|
for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
|
||
|
arr[j] = buf.readInt32LE(i)
|
||
|
}
|
||
|
|
||
|
return arr
|
||
|
}
|
||
|
|
||
|
module.exports = function hash (buf, fn) {
|
||
|
var arr = fn(toArray(buf), buf.length * charSize)
|
||
|
buf = new Buffer(hashSize)
|
||
|
for (var i = 0; i < arr.length; i++) {
|
||
|
buf.writeInt32LE(arr[i], i << 2, true)
|
||
|
}
|
||
|
return buf
|
||
|
}
|