helpers.js 974 B

1234567891011121314151617181920212223242526272829303132333435
  1. var Buffer = require('buffer').Buffer;
  2. var intSize = 4;
  3. var zeroBuffer = Buffer.alloc(intSize); zeroBuffer.fill(0);
  4. var chrsz = 8;
  5. function toArray(buf, bigEndian) {
  6. if ((buf.length % intSize) !== 0) {
  7. var len = buf.length + (intSize - (buf.length % intSize));
  8. buf = Buffer.concat([buf, zeroBuffer], len);
  9. }
  10. var arr = [];
  11. var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
  12. for (var i = 0; i < buf.length; i += intSize) {
  13. arr.push(fn.call(buf, i));
  14. }
  15. return arr;
  16. }
  17. function toBuffer(arr, size, bigEndian) {
  18. var buf = Buffer.alloc(size);
  19. var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
  20. for (var i = 0; i < arr.length; i++) {
  21. fn.call(buf, arr[i], i * 4, true);
  22. }
  23. return buf;
  24. }
  25. function hash(buf, fn, hashSize, bigEndian) {
  26. if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);
  27. var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
  28. return toBuffer(arr, hashSize, bigEndian);
  29. }
  30. module.exports = { hash: hash };