| var Buffer = require('buffer').Buffer; | |
| var intSize = 4; | |
| var zeroBuffer = Buffer.alloc(intSize); | |
| zeroBuffer.fill(0); | |
| var chrsz = 8; | |
| 
 | |
| function toArray(buf, bigEndian) { | |
|   if (buf.length % intSize !== 0) { | |
|     var len = buf.length + (intSize - (buf.length % intSize)); | |
|     buf = Buffer.concat([buf, zeroBuffer], len); | |
|   } | |
| 
 | |
|   var arr = []; | |
|   var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE; | |
|   for (var i = 0; i < buf.length; i += intSize) { | |
|     arr.push(fn.call(buf, i)); | |
|   } | |
|   return arr; | |
| } | |
| 
 | |
| function toBuffer(arr, size, bigEndian) { | |
|   var buf = Buffer.alloc(size); | |
|   var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE; | |
|   for (var i = 0; i < arr.length; i++) { | |
|     fn.call(buf, arr[i], i * 4, true); | |
|   } | |
|   return buf; | |
| } | |
| 
 | |
| function hash(buf, fn, hashSize, bigEndian) { | |
|   if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf); | |
|   var arr = fn(toArray(buf, bigEndian), buf.length * chrsz); | |
|   return toBuffer(arr, hashSize, bigEndian); | |
| } | |
| 
 | |
| module.exports = { hash: hash };
 |