Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80540 views
1
'use strict';
2
var intSize = 4;
3
var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
4
var chrsz = 8;
5
6
function toArray(buf, bigEndian) {
7
if ((buf.length % intSize) !== 0) {
8
var len = buf.length + (intSize - (buf.length % intSize));
9
buf = Buffer.concat([buf, zeroBuffer], len);
10
}
11
12
var arr = [];
13
var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
14
for (var i = 0; i < buf.length; i += intSize) {
15
arr.push(fn.call(buf, i));
16
}
17
return arr;
18
}
19
20
function toBuffer(arr, size, bigEndian) {
21
var buf = new Buffer(size);
22
var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
23
for (var i = 0; i < arr.length; i++) {
24
fn.call(buf, arr[i], i * 4, true);
25
}
26
return buf;
27
}
28
29
function hash(buf, fn, hashSize, bigEndian) {
30
if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
31
var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
32
return toBuffer(arr, hashSize, bigEndian);
33
}
34
exports.hash = hash;
35