Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80642 views
1
var utils = exports;
2
var inherits = require('inherits');
3
4
function toArray(msg, enc) {
5
if (Array.isArray(msg))
6
return msg.slice();
7
if (!msg)
8
return [];
9
var res = [];
10
if (typeof msg === 'string') {
11
if (!enc) {
12
for (var i = 0; i < msg.length; i++) {
13
var c = msg.charCodeAt(i);
14
var hi = c >> 8;
15
var lo = c & 0xff;
16
if (hi)
17
res.push(hi, lo);
18
else
19
res.push(lo);
20
}
21
} else if (enc === 'hex') {
22
msg = msg.replace(/[^a-z0-9]+/ig, '');
23
if (msg.length % 2 !== 0)
24
msg = '0' + msg;
25
for (var i = 0; i < msg.length; i += 2)
26
res.push(parseInt(msg[i] + msg[i + 1], 16));
27
}
28
} else {
29
for (var i = 0; i < msg.length; i++)
30
res[i] = msg[i] | 0;
31
}
32
return res;
33
}
34
utils.toArray = toArray;
35
36
function toHex(msg) {
37
var res = '';
38
for (var i = 0; i < msg.length; i++)
39
res += zero2(msg[i].toString(16));
40
return res;
41
}
42
utils.toHex = toHex;
43
44
function htonl(w) {
45
var res = (w >>> 24) |
46
((w >>> 8) & 0xff00) |
47
((w << 8) & 0xff0000) |
48
((w & 0xff) << 24);
49
return res >>> 0;
50
}
51
utils.htonl = htonl;
52
53
function toHex32(msg, endian) {
54
var res = '';
55
for (var i = 0; i < msg.length; i++) {
56
var w = msg[i];
57
if (endian === 'little')
58
w = htonl(w);
59
res += zero8(w.toString(16));
60
}
61
return res;
62
}
63
utils.toHex32 = toHex32;
64
65
function zero2(word) {
66
if (word.length === 1)
67
return '0' + word;
68
else
69
return word;
70
}
71
utils.zero2 = zero2;
72
73
function zero8(word) {
74
if (word.length === 7)
75
return '0' + word;
76
else if (word.length === 6)
77
return '00' + word;
78
else if (word.length === 5)
79
return '000' + word;
80
else if (word.length === 4)
81
return '0000' + word;
82
else if (word.length === 3)
83
return '00000' + word;
84
else if (word.length === 2)
85
return '000000' + word;
86
else if (word.length === 1)
87
return '0000000' + word;
88
else
89
return word;
90
}
91
utils.zero8 = zero8;
92
93
function join32(msg, start, end, endian) {
94
var len = end - start;
95
assert(len % 4 === 0);
96
var res = new Array(len / 4);
97
for (var i = 0, k = start; i < res.length; i++, k += 4) {
98
var w;
99
if (endian === 'big')
100
w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
101
else
102
w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
103
res[i] = w >>> 0;
104
}
105
return res;
106
}
107
utils.join32 = join32;
108
109
function split32(msg, endian) {
110
var res = new Array(msg.length * 4);
111
for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
112
var m = msg[i];
113
if (endian === 'big') {
114
res[k] = m >>> 24;
115
res[k + 1] = (m >>> 16) & 0xff;
116
res[k + 2] = (m >>> 8) & 0xff;
117
res[k + 3] = m & 0xff;
118
} else {
119
res[k + 3] = m >>> 24;
120
res[k + 2] = (m >>> 16) & 0xff;
121
res[k + 1] = (m >>> 8) & 0xff;
122
res[k] = m & 0xff;
123
}
124
}
125
return res;
126
}
127
utils.split32 = split32;
128
129
function rotr32(w, b) {
130
return (w >>> b) | (w << (32 - b));
131
}
132
utils.rotr32 = rotr32;
133
134
function rotl32(w, b) {
135
return (w << b) | (w >>> (32 - b));
136
}
137
utils.rotl32 = rotl32;
138
139
function sum32(a, b) {
140
return (a + b) >>> 0;
141
}
142
utils.sum32 = sum32;
143
144
function sum32_3(a, b, c) {
145
return (a + b + c) >>> 0;
146
}
147
utils.sum32_3 = sum32_3;
148
149
function sum32_4(a, b, c, d) {
150
return (a + b + c + d) >>> 0;
151
}
152
utils.sum32_4 = sum32_4;
153
154
function sum32_5(a, b, c, d, e) {
155
return (a + b + c + d + e) >>> 0;
156
}
157
utils.sum32_5 = sum32_5;
158
159
function assert(cond, msg) {
160
if (!cond)
161
throw new Error(msg || 'Assertion failed');
162
}
163
utils.assert = assert;
164
165
utils.inherits = inherits;
166
167
function sum64(buf, pos, ah, al) {
168
var bh = buf[pos];
169
var bl = buf[pos + 1];
170
171
var lo = (al + bl) >>> 0;
172
var hi = (lo < al ? 1 : 0) + ah + bh;
173
buf[pos] = hi >>> 0;
174
buf[pos + 1] = lo;
175
}
176
exports.sum64 = sum64;
177
178
function sum64_hi(ah, al, bh, bl) {
179
var lo = (al + bl) >>> 0;
180
var hi = (lo < al ? 1 : 0) + ah + bh;
181
return hi >>> 0;
182
};
183
exports.sum64_hi = sum64_hi;
184
185
function sum64_lo(ah, al, bh, bl) {
186
var lo = al + bl;
187
return lo >>> 0;
188
};
189
exports.sum64_lo = sum64_lo;
190
191
function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
192
var carry = 0;
193
var lo = al;
194
lo = (lo + bl) >>> 0;
195
carry += lo < al ? 1 : 0;
196
lo = (lo + cl) >>> 0;
197
carry += lo < cl ? 1 : 0;
198
lo = (lo + dl) >>> 0;
199
carry += lo < dl ? 1 : 0;
200
201
var hi = ah + bh + ch + dh + carry;
202
return hi >>> 0;
203
};
204
exports.sum64_4_hi = sum64_4_hi;
205
206
function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
207
var lo = al + bl + cl + dl;
208
return lo >>> 0;
209
};
210
exports.sum64_4_lo = sum64_4_lo;
211
212
function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
213
var carry = 0;
214
var lo = al;
215
lo = (lo + bl) >>> 0;
216
carry += lo < al ? 1 : 0;
217
lo = (lo + cl) >>> 0;
218
carry += lo < cl ? 1 : 0;
219
lo = (lo + dl) >>> 0;
220
carry += lo < dl ? 1 : 0;
221
lo = (lo + el) >>> 0;
222
carry += lo < el ? 1 : 0;
223
224
var hi = ah + bh + ch + dh + eh + carry;
225
return hi >>> 0;
226
};
227
exports.sum64_5_hi = sum64_5_hi;
228
229
function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
230
var lo = al + bl + cl + dl + el;
231
232
return lo >>> 0;
233
};
234
exports.sum64_5_lo = sum64_5_lo;
235
236
function rotr64_hi(ah, al, num) {
237
var r = (al << (32 - num)) | (ah >>> num);
238
return r >>> 0;
239
};
240
exports.rotr64_hi = rotr64_hi;
241
242
function rotr64_lo(ah, al, num) {
243
var r = (ah << (32 - num)) | (al >>> num);
244
return r >>> 0;
245
};
246
exports.rotr64_lo = rotr64_lo;
247
248
function shr64_hi(ah, al, num) {
249
return ah >>> num;
250
};
251
exports.shr64_hi = shr64_hi;
252
253
function shr64_lo(ah, al, num) {
254
var r = (ah << (32 - num)) | (al >>> num);
255
return r >>> 0;
256
};
257
exports.shr64_lo = shr64_lo;
258
259