dwh-fetch 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +114 -0
- package/dist/dwh-fetch.d.ts +1 -0
- package/dist/dwh-fetch.js +15 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +18 -0
- package/dist/lib/DwhErrorCodes.d.ts +93 -0
- package/dist/lib/DwhErrorCodes.js +103 -0
- package/dist/lib/backup/dwh-backup.d.ts +38 -0
- package/dist/lib/backup/dwh-backup.js +143 -0
- package/dist/lib/dwh-fetch.d.ts +149 -0
- package/dist/lib/dwh-fetch.js +606 -0
- package/dist/lib/fetch-indexed.d.ts +26 -0
- package/dist/lib/fetch-indexed.js +124 -0
- package/dist/lib/rsa.d.ts +2 -0
- package/dist/lib/rsa.js +902 -0
- package/dist/lib/update/dwh-update.d.ts +114 -0
- package/dist/lib/update/dwh-update.js +289 -0
- package/package.json +104 -0
- package/test-resources/backup/.gitkeep +0 -0
package/dist/lib/rsa.js
ADDED
|
@@ -0,0 +1,902 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/* istanbul ignore file */
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
/* The following functions are (c) 2000 by John M Hanna and are
|
|
6
|
+
* released under the terms of the Gnu Public License.
|
|
7
|
+
* You must freely redistribute them with their source -- see the
|
|
8
|
+
* GPL for details.
|
|
9
|
+
* -- Latest version found at http://sourceforge.net/projects/shop-js
|
|
10
|
+
*/
|
|
11
|
+
// ---------------------- Arbitrary Precision Math
|
|
12
|
+
// badd(a,b), bsub(a,b), bmul(a,b), bdiv(a,b), bmod(a,b),
|
|
13
|
+
// brshift(a), beq(a,b)
|
|
14
|
+
// set the base... 32bit cpu -> bs=16, 64bit -> bs=32
|
|
15
|
+
// bm is the mask, bs is the shift
|
|
16
|
+
// bm=0xf; bs=4; // low base useful for testing if digits handled ok
|
|
17
|
+
// take multible of 8
|
|
18
|
+
var rndSeed = new Array();
|
|
19
|
+
var bs = 16;
|
|
20
|
+
var bx2 = 1 << bs;
|
|
21
|
+
var bm = bx2 - 1;
|
|
22
|
+
var bx = bx2 >> 1;
|
|
23
|
+
var bd = bs >> 1;
|
|
24
|
+
var bdm = (1 << bd) - 1;
|
|
25
|
+
var log2 = Math.log(2);
|
|
26
|
+
var StringUtils = function () {
|
|
27
|
+
return {
|
|
28
|
+
stringToUtf8ByteArray: function (str) {
|
|
29
|
+
// TODO(user): Use native implementations if/when available
|
|
30
|
+
var out = [], p = 0;
|
|
31
|
+
for (var i = 0; i < str.length; i++) {
|
|
32
|
+
var c = str.charCodeAt(i);
|
|
33
|
+
if (c < 128) {
|
|
34
|
+
out[p++] = c;
|
|
35
|
+
}
|
|
36
|
+
else if (c < 2048) {
|
|
37
|
+
out[p++] = (c >> 6) | 192;
|
|
38
|
+
out[p++] = (c & 63) | 128;
|
|
39
|
+
}
|
|
40
|
+
else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length &&
|
|
41
|
+
((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) {
|
|
42
|
+
// Surrogate Pair
|
|
43
|
+
c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);
|
|
44
|
+
out[p++] = (c >> 18) | 240;
|
|
45
|
+
out[p++] = ((c >> 12) & 63) | 128;
|
|
46
|
+
out[p++] = ((c >> 6) & 63) | 128;
|
|
47
|
+
out[p++] = (c & 63) | 128;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
out[p++] = (c >> 12) | 224;
|
|
51
|
+
out[p++] = ((c >> 6) & 63) | 128;
|
|
52
|
+
out[p++] = (c & 63) | 128;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
},
|
|
57
|
+
utf8ByteArrayToString(bytes) {
|
|
58
|
+
// TODO(user): Use native implementations if/when available
|
|
59
|
+
var out = [], pos = 0, c = 0;
|
|
60
|
+
while (pos < bytes.length) {
|
|
61
|
+
var c1 = bytes[pos++];
|
|
62
|
+
if (c1 < 128) {
|
|
63
|
+
out[c++] = String.fromCharCode(c1);
|
|
64
|
+
}
|
|
65
|
+
else if (c1 > 191 && c1 < 224) {
|
|
66
|
+
var c2 = bytes[pos++];
|
|
67
|
+
out[c++] = String.fromCharCode((c1 & 31) << 6 | c2 & 63);
|
|
68
|
+
}
|
|
69
|
+
else if (c1 > 239 && c1 < 365) {
|
|
70
|
+
// Surrogate Pair
|
|
71
|
+
var c2 = bytes[pos++];
|
|
72
|
+
var c3 = bytes[pos++];
|
|
73
|
+
var c4 = bytes[pos++];
|
|
74
|
+
var u = ((c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63) -
|
|
75
|
+
0x10000;
|
|
76
|
+
out[c++] = String.fromCharCode(0xD800 + (u >> 10));
|
|
77
|
+
out[c++] = String.fromCharCode(0xDC00 + (u & 1023));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
var c2 = bytes[pos++];
|
|
81
|
+
var c3 = bytes[pos++];
|
|
82
|
+
out[c++] =
|
|
83
|
+
String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return out.join('');
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}();
|
|
90
|
+
function cBase64() {
|
|
91
|
+
this.b64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789*.";
|
|
92
|
+
this.fromText = function (t) {
|
|
93
|
+
var r = "";
|
|
94
|
+
var m = 2;
|
|
95
|
+
var a = 0;
|
|
96
|
+
var tl = t.length - 1;
|
|
97
|
+
var c;
|
|
98
|
+
for (let n = 0; n <= tl; n++) {
|
|
99
|
+
c = t.charCodeAt(n);
|
|
100
|
+
r += this.b64s.charAt((c >> m | a) & 63);
|
|
101
|
+
a = c << (6 - m);
|
|
102
|
+
m += 2;
|
|
103
|
+
if (m == 8 || n == tl) {
|
|
104
|
+
r += this.b64s.charAt(a & 63);
|
|
105
|
+
m = 2;
|
|
106
|
+
a = 0;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
while (r.length % 4 != 0)
|
|
110
|
+
r += "-";
|
|
111
|
+
return r;
|
|
112
|
+
};
|
|
113
|
+
this.toText = function (t) {
|
|
114
|
+
var r = "";
|
|
115
|
+
var m = 0;
|
|
116
|
+
var a = 0;
|
|
117
|
+
var c;
|
|
118
|
+
for (let n = 0; n < t.length; n++) {
|
|
119
|
+
c = this.b64s.indexOf(t.charAt(n));
|
|
120
|
+
if (c < 0) {
|
|
121
|
+
if (t.charAt(n) == "+")
|
|
122
|
+
c = 62;
|
|
123
|
+
else if (t.charAt(n) == ".")
|
|
124
|
+
c = 63;
|
|
125
|
+
}
|
|
126
|
+
if (c >= 0) {
|
|
127
|
+
if (m)
|
|
128
|
+
r += String.fromCharCode((c >> (6 - m)) | a);
|
|
129
|
+
m = (m + 2) & 7;
|
|
130
|
+
a = m ? (c << m) & 255 : 0;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return r;
|
|
134
|
+
};
|
|
135
|
+
// conversion functions text to binary and binary to text,
|
|
136
|
+
this.t2b = function (s) {
|
|
137
|
+
var bits = s.length * 8, bn = 1, r = [0], rn = 0, sn = 0, sb = 1;
|
|
138
|
+
var c = s.charCodeAt(0);
|
|
139
|
+
for (var n = 0; n < bits; n++) {
|
|
140
|
+
if (bn > bm) {
|
|
141
|
+
bn = 1;
|
|
142
|
+
r[++rn] = 0;
|
|
143
|
+
}
|
|
144
|
+
if (c & sb)
|
|
145
|
+
r[rn] |= bn;
|
|
146
|
+
bn <<= 1;
|
|
147
|
+
if ((sb <<= 1) > 255) {
|
|
148
|
+
sb = 1;
|
|
149
|
+
c = s.charCodeAt(++sn);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return r;
|
|
153
|
+
};
|
|
154
|
+
this.b2t = function (b) {
|
|
155
|
+
var bits = b.length * bs, bn = 1, bc = 0, r = [0], rb = 1, rn = 0;
|
|
156
|
+
for (var n = 0; n < bits; n++) {
|
|
157
|
+
if (b[bc] & bn)
|
|
158
|
+
r[rn] |= rb;
|
|
159
|
+
if ((rb <<= 1) > 255) {
|
|
160
|
+
rb = 1;
|
|
161
|
+
r[++rn] = 0;
|
|
162
|
+
}
|
|
163
|
+
if ((bn <<= 1) > bm) {
|
|
164
|
+
bn = 1;
|
|
165
|
+
bc++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
while (r[rn] == 0)
|
|
169
|
+
rn--;
|
|
170
|
+
var rr = '';
|
|
171
|
+
for (var n = 0; n <= rn; n++)
|
|
172
|
+
rr += String.fromCharCode(r[n]);
|
|
173
|
+
return rr;
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const RSA = function () {
|
|
177
|
+
this.Base64 = new cBase64();
|
|
178
|
+
this.p = 0;
|
|
179
|
+
this.q = 0;
|
|
180
|
+
this.d = 0;
|
|
181
|
+
this.e = 0;
|
|
182
|
+
this.pq = 0;
|
|
183
|
+
this.badd = function (a, b) {
|
|
184
|
+
var al = a.length, bl = b.length;
|
|
185
|
+
if (al < bl)
|
|
186
|
+
return this.badd(b, a);
|
|
187
|
+
var c = 0, r = [], n = 0;
|
|
188
|
+
for (; n < bl; n++) {
|
|
189
|
+
c += a[n] + b[n];
|
|
190
|
+
r[n] = c & bm;
|
|
191
|
+
c >>>= bs;
|
|
192
|
+
}
|
|
193
|
+
for (; n < al; n++) {
|
|
194
|
+
c += a[n];
|
|
195
|
+
r[n] = c & bm;
|
|
196
|
+
c >>>= bs;
|
|
197
|
+
}
|
|
198
|
+
if (c)
|
|
199
|
+
r[n] = c;
|
|
200
|
+
return r;
|
|
201
|
+
};
|
|
202
|
+
this.beq = function (a, b) {
|
|
203
|
+
if (a.length != b.length)
|
|
204
|
+
return 0;
|
|
205
|
+
for (var n = a.length - 1; n >= 0; n--) {
|
|
206
|
+
if (a[n] != b[n])
|
|
207
|
+
return 0;
|
|
208
|
+
}
|
|
209
|
+
return 1;
|
|
210
|
+
};
|
|
211
|
+
this.bsub = function (a, b) {
|
|
212
|
+
var al = a.length, bl = b.length, c = 0, r = [];
|
|
213
|
+
if (bl > al)
|
|
214
|
+
return [];
|
|
215
|
+
if (bl == al) {
|
|
216
|
+
if (b[bl - 1] > a[bl - 1])
|
|
217
|
+
return [];
|
|
218
|
+
if (bl == 1)
|
|
219
|
+
return [a[0] - b[0]];
|
|
220
|
+
}
|
|
221
|
+
for (var n = 0; n < bl; n++) {
|
|
222
|
+
c += a[n] - b[n];
|
|
223
|
+
r[n] = c & bm;
|
|
224
|
+
c >>= bs;
|
|
225
|
+
}
|
|
226
|
+
for (; n < al; n++) {
|
|
227
|
+
c += a[n];
|
|
228
|
+
r[n] = c & bm;
|
|
229
|
+
c >>= bs;
|
|
230
|
+
}
|
|
231
|
+
if (c)
|
|
232
|
+
return [];
|
|
233
|
+
if (r[n - 1])
|
|
234
|
+
return r;
|
|
235
|
+
while (n > 1 && r[n - 1] == 0)
|
|
236
|
+
n--;
|
|
237
|
+
return r.slice(0, n);
|
|
238
|
+
};
|
|
239
|
+
this.bmul = function (a, b) {
|
|
240
|
+
b = b.concat([0]);
|
|
241
|
+
var al = a.length, bl = b.length, r = [], n, nn, aa, c, m;
|
|
242
|
+
var g, gg, h, hh, ghhb, ghh;
|
|
243
|
+
for (n = al + bl; n >= 0; n--)
|
|
244
|
+
r[n] = 0;
|
|
245
|
+
for (n = 0; n < al; n++) {
|
|
246
|
+
if (aa = a[n]) {
|
|
247
|
+
c = 0;
|
|
248
|
+
hh = aa >> bd;
|
|
249
|
+
h = aa & bdm;
|
|
250
|
+
m = n;
|
|
251
|
+
for (nn = 0; nn < bl; nn++, m++) {
|
|
252
|
+
g = b[nn];
|
|
253
|
+
gg = g >> bd;
|
|
254
|
+
g = g & bdm;
|
|
255
|
+
//(gg*2^15 + g) * (hh*2^15 + h) = (gghh*2^30 + (ghh+hgg)*2^15 +hg)
|
|
256
|
+
ghh = g * hh + h * gg;
|
|
257
|
+
ghhb = ghh >> bd;
|
|
258
|
+
ghh &= bdm;
|
|
259
|
+
c += r[m] + h * g + (ghh << bd);
|
|
260
|
+
r[m] = c & bm;
|
|
261
|
+
c = (c >> bs) + gg * hh + ghhb;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
n = r.length;
|
|
266
|
+
if (r[n - 1])
|
|
267
|
+
return r;
|
|
268
|
+
while (n > 1 && r[n - 1] == 0)
|
|
269
|
+
n--;
|
|
270
|
+
return r.slice(0, n);
|
|
271
|
+
};
|
|
272
|
+
this.zeros = function (n) {
|
|
273
|
+
var r = [];
|
|
274
|
+
while (n-- > 0)
|
|
275
|
+
r[n] = 0;
|
|
276
|
+
return r;
|
|
277
|
+
};
|
|
278
|
+
this.toppart = function (x, start, len) {
|
|
279
|
+
var n = 0;
|
|
280
|
+
while (start >= 0 && len-- > 0)
|
|
281
|
+
n = n * bx2 + x[start--];
|
|
282
|
+
return n;
|
|
283
|
+
};
|
|
284
|
+
//14.20 Algorithm Multiple-precision division from HAC
|
|
285
|
+
this.bdiv = function (x, y) {
|
|
286
|
+
var hlp = new Object();
|
|
287
|
+
var n = x.length - 1, t = y.length - 1, nmt = n - t;
|
|
288
|
+
//trivial cases; x < y
|
|
289
|
+
if (n < t || n == t && (x[n] < y[n] || n > 0 && x[n] == y[n] && x[n - 1] < y[n - 1])) {
|
|
290
|
+
hlp.q = [0];
|
|
291
|
+
hlp.mod = x;
|
|
292
|
+
return hlp;
|
|
293
|
+
}
|
|
294
|
+
//trivial cases; q < 4
|
|
295
|
+
if (n == t && this.toppart(x, t, 2) / this.toppart(y, t, 2) < 4) {
|
|
296
|
+
var q = 0, xx;
|
|
297
|
+
for (;;) {
|
|
298
|
+
xx = this.bsub(x, y);
|
|
299
|
+
if (xx.length == 0)
|
|
300
|
+
break;
|
|
301
|
+
x = xx;
|
|
302
|
+
q++;
|
|
303
|
+
}
|
|
304
|
+
hlp.q = [q];
|
|
305
|
+
hlp.mod = x;
|
|
306
|
+
return hlp;
|
|
307
|
+
}
|
|
308
|
+
var shift, shift2;
|
|
309
|
+
//normalize
|
|
310
|
+
shift2 = Math.floor(Math.log(y[t]) / log2) + 1;
|
|
311
|
+
shift = bs - shift2;
|
|
312
|
+
if (shift) {
|
|
313
|
+
x = x.concat();
|
|
314
|
+
y = y.concat();
|
|
315
|
+
for (i = t; i > 0; i--)
|
|
316
|
+
y[i] = ((y[i] << shift) & bm) | (y[i - 1] >> shift2);
|
|
317
|
+
y[0] = (y[0] << shift) & bm;
|
|
318
|
+
if (x[n] & ((bm << shift2) & bm)) {
|
|
319
|
+
x[++n] = 0;
|
|
320
|
+
nmt++;
|
|
321
|
+
}
|
|
322
|
+
for (i = n; i > 0; i--)
|
|
323
|
+
x[i] = ((x[i] << shift) & bm) | (x[i - 1] >> shift2);
|
|
324
|
+
x[0] = (x[0] << shift) & bm;
|
|
325
|
+
}
|
|
326
|
+
var i, j, x2, y2, q = this.zeros(nmt + 1);
|
|
327
|
+
y2 = this.zeros(nmt).concat(y);
|
|
328
|
+
for (;;) {
|
|
329
|
+
x2 = this.bsub(x, y2);
|
|
330
|
+
if (x2.length == 0)
|
|
331
|
+
break;
|
|
332
|
+
q[nmt]++;
|
|
333
|
+
x = x2;
|
|
334
|
+
}
|
|
335
|
+
var yt = y[t], top = this.toppart(y, t, 2);
|
|
336
|
+
for (i = n; i > t; i--) {
|
|
337
|
+
let m = i - t - 1;
|
|
338
|
+
if (i >= x.length)
|
|
339
|
+
q[m] = 1;
|
|
340
|
+
else {
|
|
341
|
+
if (x[i] == yt)
|
|
342
|
+
q[m] = bm;
|
|
343
|
+
else
|
|
344
|
+
q[m] = Math.floor(this.toppart(x, i, 2) / yt);
|
|
345
|
+
}
|
|
346
|
+
let topx = this.toppart(x, i, 3);
|
|
347
|
+
while (q[m] * top > topx)
|
|
348
|
+
q[m]--;
|
|
349
|
+
//x-=q[m]*y*b^m
|
|
350
|
+
y2 = y2.slice(1);
|
|
351
|
+
x2 = this.bsub(x, this.bmul([q[m]], y2));
|
|
352
|
+
if (x2.length == 0) {
|
|
353
|
+
q[m]--;
|
|
354
|
+
x2 = this.bsub(x, this.bmul([q[m]], y2));
|
|
355
|
+
}
|
|
356
|
+
x = x2;
|
|
357
|
+
}
|
|
358
|
+
//de-normalize
|
|
359
|
+
if (shift) {
|
|
360
|
+
for (i = 0; i < x.length - 1; i++)
|
|
361
|
+
x[i] = (x[i] >> shift) | ((x[i + 1] << shift2) & bm);
|
|
362
|
+
x[x.length - 1] >>= shift;
|
|
363
|
+
}
|
|
364
|
+
while (q.length > 1 && q[q.length - 1] == 0)
|
|
365
|
+
q = q.slice(0, q.length - 1);
|
|
366
|
+
while (x.length > 1 && x[x.length - 1] == 0)
|
|
367
|
+
x = x.slice(0, x.length - 1);
|
|
368
|
+
hlp.mod = x;
|
|
369
|
+
hlp.q = q;
|
|
370
|
+
return hlp;
|
|
371
|
+
};
|
|
372
|
+
this.simplemod = function (i, m) {
|
|
373
|
+
if (m > bdm) {
|
|
374
|
+
//ms return mod(i,[m]);
|
|
375
|
+
//ms return modinverse(i,[m]);
|
|
376
|
+
return this.bmod(i, [m]);
|
|
377
|
+
}
|
|
378
|
+
var c = 0, v;
|
|
379
|
+
for (var n = i.length - 1; n >= 0; n--) {
|
|
380
|
+
v = i[n];
|
|
381
|
+
c = ((v >> bd) + (c << bd)) % m;
|
|
382
|
+
c = ((v & bdm) + (c << bd)) % m;
|
|
383
|
+
}
|
|
384
|
+
return c;
|
|
385
|
+
};
|
|
386
|
+
this.bmod = function (p, m) {
|
|
387
|
+
if (m.length == 1) {
|
|
388
|
+
if (p.length == 1)
|
|
389
|
+
return [p[0] % m[0]];
|
|
390
|
+
if (m[0] < bdm)
|
|
391
|
+
return [this.simplemod(p, m[0])];
|
|
392
|
+
}
|
|
393
|
+
var r = this.bdiv(p, m);
|
|
394
|
+
return r.mod;
|
|
395
|
+
};
|
|
396
|
+
this.bmod2 = function (x, m, mu) {
|
|
397
|
+
var xl = x.length - (m.length << 1);
|
|
398
|
+
if (xl > 0)
|
|
399
|
+
return this.bmod2(x.slice(0, xl).concat(this.bmod2(x.slice(xl), m, mu)), m, mu);
|
|
400
|
+
var ml1 = m.length + 1, ml2 = m.length - 1, rr;
|
|
401
|
+
//var q1=x.slice(ml2)
|
|
402
|
+
//var q2=this.bmul(q1,mu)
|
|
403
|
+
var q3 = this.bmul(x.slice(ml2), mu).slice(ml1);
|
|
404
|
+
var r1 = x.slice(0, ml1);
|
|
405
|
+
var r2 = this.bmul(q3, m).slice(0, ml1);
|
|
406
|
+
var r = this.bsub(r1, r2);
|
|
407
|
+
//var s=('x='+x+'\nm='+m+'\nmu='+mu+'\nq1='+q1+'\nq2='+q2+'\nq3='+q3+'\nr1='+r1+'\nr2='+r2+'\nr='+r);
|
|
408
|
+
if (r.length == 0) {
|
|
409
|
+
r1[ml1] = 1;
|
|
410
|
+
r = this.bsub(r1, r2);
|
|
411
|
+
}
|
|
412
|
+
for (var n = 0; 1; n++) {
|
|
413
|
+
rr = this.bsub(r, m);
|
|
414
|
+
if (rr.length == 0)
|
|
415
|
+
break;
|
|
416
|
+
r = rr;
|
|
417
|
+
if (n >= 3)
|
|
418
|
+
return this.bmod2(r, m, mu);
|
|
419
|
+
}
|
|
420
|
+
return r;
|
|
421
|
+
};
|
|
422
|
+
this.bmodexp = function (xx, y, m) {
|
|
423
|
+
var r = [1], n, an, a, x = xx.concat();
|
|
424
|
+
var mu = [];
|
|
425
|
+
n = m.length * 2;
|
|
426
|
+
mu[n--] = 1;
|
|
427
|
+
for (; n >= 0; n--)
|
|
428
|
+
mu[n] = 0;
|
|
429
|
+
mu = this.bdiv(mu, m).q;
|
|
430
|
+
for (n = 0; n < y.length; n++) {
|
|
431
|
+
for (a = 1, an = 0; an < bs; an++, a <<= 1) {
|
|
432
|
+
if (y[n] & a)
|
|
433
|
+
r = this.bmod2(this.bmul(r, x), m, mu);
|
|
434
|
+
x = this.bmod2(this.bmul(x, x), m, mu);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return r;
|
|
438
|
+
};
|
|
439
|
+
this.sub2 = function (a, b) {
|
|
440
|
+
var hlp = new Object();
|
|
441
|
+
var r = this.bsub(a, b);
|
|
442
|
+
if (r.length == 0) {
|
|
443
|
+
hlp.a = this.bsub(b, a);
|
|
444
|
+
hlp.sign = 1;
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
hlp.a = r;
|
|
448
|
+
hlp.sign = 0;
|
|
449
|
+
}
|
|
450
|
+
return hlp;
|
|
451
|
+
};
|
|
452
|
+
this.signedsub = function (a, b) {
|
|
453
|
+
var hlp = new Object();
|
|
454
|
+
if (a.sign) {
|
|
455
|
+
if (b.sign)
|
|
456
|
+
return this.sub2(b, a);
|
|
457
|
+
else {
|
|
458
|
+
hlp.a = this.badd(a, b);
|
|
459
|
+
hlp.sign = 1;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
if (b.sign) {
|
|
464
|
+
hlp.a = this.badd(a, b);
|
|
465
|
+
hlp.sign = 0;
|
|
466
|
+
}
|
|
467
|
+
else
|
|
468
|
+
return this.sub2(a, b);
|
|
469
|
+
}
|
|
470
|
+
return hlp;
|
|
471
|
+
};
|
|
472
|
+
this.modinverse = function (x, n) {
|
|
473
|
+
var y = n.concat(), t, r, bq, a = [1], b = [0], ts;
|
|
474
|
+
a.sign = 0;
|
|
475
|
+
b.sign = 0;
|
|
476
|
+
while (y.length > 1 || y[0]) {
|
|
477
|
+
t = y.concat();
|
|
478
|
+
r = this.bdiv(x, y);
|
|
479
|
+
y = r.mod;
|
|
480
|
+
q = r.q;
|
|
481
|
+
x = t;
|
|
482
|
+
t = b.concat();
|
|
483
|
+
ts = b.sign;
|
|
484
|
+
bq = this.bmul(b, q);
|
|
485
|
+
bq.sign = b.sign;
|
|
486
|
+
r = this.signedsub(a, bq);
|
|
487
|
+
b = r.a;
|
|
488
|
+
b.sign = r.sign;
|
|
489
|
+
a = t;
|
|
490
|
+
a.sign = ts;
|
|
491
|
+
}
|
|
492
|
+
if (this.beq(x, [1]) == 0)
|
|
493
|
+
return [0]; // No inverse; GCD is x
|
|
494
|
+
if (a.sign)
|
|
495
|
+
a = this.bsub(n, a);
|
|
496
|
+
return a;
|
|
497
|
+
};
|
|
498
|
+
this.ror = function (a, n) {
|
|
499
|
+
n &= 7;
|
|
500
|
+
return n ? ((a >> n) | ((a << (8 - n)) & 255)) : a;
|
|
501
|
+
};
|
|
502
|
+
this.hash = function (s, l) {
|
|
503
|
+
var sl = s.length, r = [], rr = '', v = 1, lr = 4;
|
|
504
|
+
for (var n = 0; n < l; n++)
|
|
505
|
+
r[n] = (v = ((v * v * 5081 + n) & 255));
|
|
506
|
+
while (sl--)
|
|
507
|
+
lr = r[sl % l] ^= this.ror(s.charCodeAt(sl), lr) ^ r[r[(sl * 5081) % l] % l];
|
|
508
|
+
for (var n = 0; n < l; n++)
|
|
509
|
+
rr += String.fromCharCode(r[n] ^ this.ror(r[r[(n * 171) % l] % l], r[n]));
|
|
510
|
+
return rr;
|
|
511
|
+
};
|
|
512
|
+
this.crt_RSA = function (m, d, p, q) {
|
|
513
|
+
var xp = this.bmodexp(this.bmod(m, p), this.bmod(d, this.bsub(p, [1])), p);
|
|
514
|
+
var xq = this.bmodexp(this.bmod(m, q), this.bmod(d, this.bsub(q, [1])), q);
|
|
515
|
+
var t = this.bsub(xq, xp);
|
|
516
|
+
if (t.length == 0) {
|
|
517
|
+
t = this.bsub(xp, xq);
|
|
518
|
+
t = this.bmod(this.bmul(t, this.modinverse(p, q)), q);
|
|
519
|
+
t = this.bsub(q, t);
|
|
520
|
+
}
|
|
521
|
+
else
|
|
522
|
+
t = this.bmod(this.bmul(t, this.modinverse(p, q)), q);
|
|
523
|
+
return this.badd(this.bmul(t, p), xp);
|
|
524
|
+
};
|
|
525
|
+
this.rc4Tab = 0;
|
|
526
|
+
this.genNewRc4Tab = function (key) {
|
|
527
|
+
var s = [];
|
|
528
|
+
var kl = key.length;
|
|
529
|
+
for (var i = 0; i < 256; i++)
|
|
530
|
+
s[i] = i;
|
|
531
|
+
this.y = 0;
|
|
532
|
+
for (var j = 0; j < 2; j++) {
|
|
533
|
+
for (var x = 0; x < 256; x++) {
|
|
534
|
+
this.y = (key.charCodeAt(x % kl) + s[x] + this.y) % 256;
|
|
535
|
+
let t = s[x];
|
|
536
|
+
s[x] = s[this.y];
|
|
537
|
+
s[this.y] = t;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
this.x = 0;
|
|
541
|
+
return s;
|
|
542
|
+
};
|
|
543
|
+
this.rc4 = function (key, text, genNewTab) {
|
|
544
|
+
var len = text.length;
|
|
545
|
+
var off = 0;
|
|
546
|
+
if (!genNewTab) {
|
|
547
|
+
off = this.x;
|
|
548
|
+
len += off;
|
|
549
|
+
}
|
|
550
|
+
else
|
|
551
|
+
this.rc4Tab = this.genNewRc4Tab(key);
|
|
552
|
+
var z = "";
|
|
553
|
+
for (; this.x < len; this.x++) {
|
|
554
|
+
var x2 = this.x & 255;
|
|
555
|
+
this.y = (this.rc4Tab[x2] + this.y) & 255;
|
|
556
|
+
var t = this.rc4Tab[x2];
|
|
557
|
+
this.rc4Tab[x2] = this.rc4Tab[this.y];
|
|
558
|
+
this.rc4Tab[this.y] = t;
|
|
559
|
+
z += String.fromCharCode((text.charCodeAt(this.x - off) ^ this.rc4Tab[(this.rc4Tab[x2] + this.rc4Tab[this.y]) % 256]));
|
|
560
|
+
}
|
|
561
|
+
return z;
|
|
562
|
+
};
|
|
563
|
+
//f.text.value=rsa.Encode(rsa.e,rsa.pq,f.text.value);
|
|
564
|
+
this.genSessionKey = function (text) {
|
|
565
|
+
var keylen = Math.floor((this.pq.length + 1) * bs / 8); // create a good random session key
|
|
566
|
+
var sessionkey = this.hash(text + Date() + Math.random(), keylen);
|
|
567
|
+
sessionkey = this.Base64.t2b(sessionkey);
|
|
568
|
+
while (sessionkey.length >= this.pq.length)
|
|
569
|
+
sessionkey.pop();
|
|
570
|
+
this.sk = this.bmod(sessionkey, this.pq); // sessionkey must be less than modulo
|
|
571
|
+
while (this.sk.length % 2)
|
|
572
|
+
this.sk.push(0);
|
|
573
|
+
/* this.sk=new Array();
|
|
574
|
+
for(var i=0;i<this.pq.length;i++)
|
|
575
|
+
this.sk.push(i+1);*/
|
|
576
|
+
};
|
|
577
|
+
this.encryptSk = function () {
|
|
578
|
+
return this.bmodexp(this.sk, this.e, this.pq); // rsa encrypt the key
|
|
579
|
+
};
|
|
580
|
+
this.createBinaryStrfromNumber = function (k) {
|
|
581
|
+
let str = "";
|
|
582
|
+
for (var i = 0; i < k.length; i++)
|
|
583
|
+
for (var j = 0; j < parseInt(bs / 8); j++)
|
|
584
|
+
str += String.fromCharCode((k[i] >> j * 8) & 0xff);
|
|
585
|
+
return str;
|
|
586
|
+
};
|
|
587
|
+
this.createStrBase64 = function (k) {
|
|
588
|
+
return this.Base64.fromText(this.createBinaryStrfromNumber(k));
|
|
589
|
+
};
|
|
590
|
+
this.skText = function () {
|
|
591
|
+
var sk = this.Base64.b2t(this.sk);
|
|
592
|
+
while (sk.length % 4)
|
|
593
|
+
sk += String.fromCharCode(0);
|
|
594
|
+
return sk;
|
|
595
|
+
};
|
|
596
|
+
this.Encode = function (text, newRc4Tab) {
|
|
597
|
+
var utf8 = StringUtils.stringToUtf8ByteArray(text);
|
|
598
|
+
var binaryString = "";
|
|
599
|
+
for (var i = 0; i < utf8.length; i++) {
|
|
600
|
+
binaryString += String.fromCharCode(utf8[i]);
|
|
601
|
+
}
|
|
602
|
+
this.enc = this.rc4(this.skText(), binaryString, newRc4Tab);
|
|
603
|
+
return this.Base64.fromText(this.enc);
|
|
604
|
+
};
|
|
605
|
+
this.Decode = function (text, newRc4Tab) {
|
|
606
|
+
var binText = this.rc4(this.skText(), this.Base64.toText(text), newRc4Tab);
|
|
607
|
+
var binary = [];
|
|
608
|
+
for (var i = 0; i < binText.length; i++) {
|
|
609
|
+
binary.push(binText.charCodeAt(i));
|
|
610
|
+
}
|
|
611
|
+
return StringUtils.utf8ByteArrayToString(binary);
|
|
612
|
+
};
|
|
613
|
+
this.encryptRequest = function (req) {
|
|
614
|
+
this.genSessionKey(req); //neuen session key generieren text wird mitgegeben f�r random
|
|
615
|
+
var cryptSk = "K=" + this.createStrBase64(this.encryptSk()) + "&"; //sessionkey in bytestream verwandeln und base64 encoden
|
|
616
|
+
var encReq = this.Encode(req, 1); //text mit rc4 kodieren
|
|
617
|
+
this.Decode(encReq, 1); //wieder decodieren um die RC4 tabelle mit digiweb zu syncronisieren
|
|
618
|
+
return cryptSk + encReq;
|
|
619
|
+
};
|
|
620
|
+
this.convertBase64Key = function (str) {
|
|
621
|
+
var ar = new Array();
|
|
622
|
+
for (var i = 0; i < str.length; i++) {
|
|
623
|
+
var mod = i % parseInt(bs / 8);
|
|
624
|
+
if (mod == 0)
|
|
625
|
+
ar.push(str.charCodeAt(i));
|
|
626
|
+
else
|
|
627
|
+
ar[ar.length - 1] += str.charCodeAt(i) << mod * 8;
|
|
628
|
+
}
|
|
629
|
+
while (ar[ar.length - 1] == 0)
|
|
630
|
+
ar.pop();
|
|
631
|
+
return ar;
|
|
632
|
+
};
|
|
633
|
+
this.decodeDwKeyStr = function (keys) {
|
|
634
|
+
if (keys.indexOf("01(\"") == 0) {
|
|
635
|
+
keys = keys.substring(keys.indexOf("\"") + 1);
|
|
636
|
+
keys = keys.substring(0, keys.indexOf("\""));
|
|
637
|
+
}
|
|
638
|
+
if (!keys || keys == "0")
|
|
639
|
+
return -1;
|
|
640
|
+
keys = keys.split(";");
|
|
641
|
+
this.pq = this.convertBase64Key(this.Base64.toText(keys[0]));
|
|
642
|
+
this.e = this.convertBase64Key(this.Base64.toText(keys[1]));
|
|
643
|
+
return 0;
|
|
644
|
+
};
|
|
645
|
+
this.blshift = function (a, b) {
|
|
646
|
+
var n, c = 0, r = [];
|
|
647
|
+
for (n = 0; n < a.length; n++) {
|
|
648
|
+
c |= (a[n] << b);
|
|
649
|
+
r[n] = c & bm;
|
|
650
|
+
c >>= bs;
|
|
651
|
+
}
|
|
652
|
+
if (c)
|
|
653
|
+
r[n] = c;
|
|
654
|
+
return r;
|
|
655
|
+
};
|
|
656
|
+
this.brshift = function (a) {
|
|
657
|
+
var c = 0, n, cc, r = [];
|
|
658
|
+
for (n = a.length - 1; n >= 0; n--) {
|
|
659
|
+
cc = a[n];
|
|
660
|
+
c <<= bs;
|
|
661
|
+
r[n] = (cc | c) >> 1;
|
|
662
|
+
c = cc & 1;
|
|
663
|
+
}
|
|
664
|
+
while (r.length > 1 && r[r.length - 1] == 0)
|
|
665
|
+
r = r.slice(0, -1);
|
|
666
|
+
var hlp = new Object();
|
|
667
|
+
hlp.a = r;
|
|
668
|
+
hlp.c = c;
|
|
669
|
+
return hlp;
|
|
670
|
+
};
|
|
671
|
+
this.seed = function () {
|
|
672
|
+
this.rSeed = rndSeed;
|
|
673
|
+
this.Rs = [];
|
|
674
|
+
this.Rx = 0;
|
|
675
|
+
this.Ry = 0;
|
|
676
|
+
this.Rbits = 0;
|
|
677
|
+
this.Rbits2 = 0;
|
|
678
|
+
var x, y, t;
|
|
679
|
+
this.Rsl = this.rSeed.length;
|
|
680
|
+
this.Sr = this.r(256);
|
|
681
|
+
if (this.Rs.lengh == 0) {
|
|
682
|
+
for (x = 0; x < 256; x++)
|
|
683
|
+
this.Rs[x] = x;
|
|
684
|
+
}
|
|
685
|
+
y = 0;
|
|
686
|
+
};
|
|
687
|
+
this.rc = function () {
|
|
688
|
+
this.Rx = ++this.Rx & 255;
|
|
689
|
+
this.Ry = (this.Rs[this.Rx] + this.Ry) & 255;
|
|
690
|
+
var t = this.Rs[this.Rx];
|
|
691
|
+
this.Rs[this.Rx] = this.Rs[this.Ry];
|
|
692
|
+
this.Rs[this.Ry] = t;
|
|
693
|
+
this.Sr ^= this.Rs[(this.Rs[this.Rx] + this.Rs[this.Ry]) & 255];
|
|
694
|
+
// xor with javascripts rand, just in case there's good entropy there
|
|
695
|
+
this.Sr ^= this.r(256);
|
|
696
|
+
this.Sr ^= this.ror(this.rSeed[this.r(this.Rsl)], this.r(8));
|
|
697
|
+
this.Sr ^= this.ror(this.rSeed[this.r(this.Rsl)], this.r(8));
|
|
698
|
+
return this.Sr;
|
|
699
|
+
};
|
|
700
|
+
this.r = function (n) {
|
|
701
|
+
return Math.floor(Math.random() * n);
|
|
702
|
+
};
|
|
703
|
+
// rotate right
|
|
704
|
+
//function ror(a,b) {return b?((a<<b)|(a>>(8-b))&255):a;}
|
|
705
|
+
// random number between 0 .. n -- based on repeated calls to rc
|
|
706
|
+
this.rand = function (n) {
|
|
707
|
+
if (n == 2) {
|
|
708
|
+
if (!this.Rbits) {
|
|
709
|
+
this.Rbits = 8;
|
|
710
|
+
this.Rbits2 = this.rc(256);
|
|
711
|
+
}
|
|
712
|
+
this.Rbits--;
|
|
713
|
+
var r = this.Rbits2 & 1;
|
|
714
|
+
this.Rbits2 >>= 1;
|
|
715
|
+
return r;
|
|
716
|
+
}
|
|
717
|
+
var m = 1, r = 0;
|
|
718
|
+
while (n > m && m > 0) {
|
|
719
|
+
m <<= 8;
|
|
720
|
+
r = (r << 8) | this.rc();
|
|
721
|
+
}
|
|
722
|
+
if (r < 0)
|
|
723
|
+
r ^= 0x80000000;
|
|
724
|
+
return r % n;
|
|
725
|
+
};
|
|
726
|
+
this.bgcd = function (uu, vv) {
|
|
727
|
+
var d, t, v = vv.concat(), u = uu.concat();
|
|
728
|
+
for (;;) {
|
|
729
|
+
d = this.bsub(v, u);
|
|
730
|
+
if (this.beq(d, [0]))
|
|
731
|
+
return u;
|
|
732
|
+
if (d.length) {
|
|
733
|
+
while ((d[0] & 1) == 0)
|
|
734
|
+
d = this.brshift(d).a; //v=(v-u)/2^val2(v-u)
|
|
735
|
+
v = d;
|
|
736
|
+
}
|
|
737
|
+
else {
|
|
738
|
+
t = v;
|
|
739
|
+
v = u;
|
|
740
|
+
u = t; // swap u and v
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
};
|
|
744
|
+
this.rnum = function (bits) {
|
|
745
|
+
var n, b = 1, c = 0;
|
|
746
|
+
var a = [];
|
|
747
|
+
if (bits == 0)
|
|
748
|
+
bits = 1;
|
|
749
|
+
for (n = bits; n > 0; n--) {
|
|
750
|
+
if (this.rand(2))
|
|
751
|
+
a[c] |= b;
|
|
752
|
+
b <<= 1;
|
|
753
|
+
if (b == bx2) {
|
|
754
|
+
b = 1;
|
|
755
|
+
c++;
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
return a;
|
|
759
|
+
};
|
|
760
|
+
this.Primes = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179,
|
|
761
|
+
181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389,
|
|
762
|
+
397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617,
|
|
763
|
+
619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859,
|
|
764
|
+
863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021];
|
|
765
|
+
this.sieveSize = 4000;
|
|
766
|
+
this.sieve0 = -1 * this.sieveSize;
|
|
767
|
+
this.sieve = [];
|
|
768
|
+
this.lastPrime = 0;
|
|
769
|
+
this.nextPrime = function (p) {
|
|
770
|
+
var n;
|
|
771
|
+
var pp, m;
|
|
772
|
+
var prim = [];
|
|
773
|
+
if (p == this.Primes[this.lastPrime] && this.lastPrime < this.Primes.length - 1)
|
|
774
|
+
return this.Primes[++this.lastPrime];
|
|
775
|
+
if (p < this.Primes[this.Primes.length - 1]) {
|
|
776
|
+
for (n = this.Primes.length - 2; n > 0; n--) {
|
|
777
|
+
if (this.Primes[n] <= p) {
|
|
778
|
+
this.lastPrime = n + 1;
|
|
779
|
+
return this.Primes[n + 1];
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
// use sieve and find the next one
|
|
784
|
+
// start with p
|
|
785
|
+
p++;
|
|
786
|
+
if ((p & 1) == 0)
|
|
787
|
+
p++;
|
|
788
|
+
for (;;) { // new sieve if p is outside of this sieve's range
|
|
789
|
+
if (p - this.sieve0 > this.sieveSize || p < this.sieve0) { // start new sieve
|
|
790
|
+
for (n = this.sieveSize - 1; n >= 0; n--)
|
|
791
|
+
this.sieve[n] = 0;
|
|
792
|
+
this.sieve0 = p;
|
|
793
|
+
prim = this.Primes.concat();
|
|
794
|
+
}
|
|
795
|
+
// next p if sieve hit
|
|
796
|
+
if (this.sieve[p - this.sieve0] == 0) //sieve miss
|
|
797
|
+
{ // update sieve if p divisable find a prime divisor
|
|
798
|
+
for (n = 0; n < prim.length; n++) {
|
|
799
|
+
if ((pp = prim[n]) && p % pp == 0) {
|
|
800
|
+
for (m = p - this.sieve0; m < this.sieveSize; m += pp)
|
|
801
|
+
this.sieve[m] = pp;
|
|
802
|
+
p += 2;
|
|
803
|
+
prim[n] = 0;
|
|
804
|
+
break;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
if (n >= prim.length) // possible prime
|
|
808
|
+
return p;
|
|
809
|
+
}
|
|
810
|
+
else
|
|
811
|
+
p += 2;
|
|
812
|
+
}
|
|
813
|
+
};
|
|
814
|
+
this.divisable = function (n, max) {
|
|
815
|
+
if ((n[0] & 1) == 0)
|
|
816
|
+
return 2;
|
|
817
|
+
for (c = 0; c < this.Primes.length; c++) {
|
|
818
|
+
if (this.Primes[c] >= max)
|
|
819
|
+
return 0;
|
|
820
|
+
if (this.simplemod(n, this.Primes[c]) == 0)
|
|
821
|
+
return this.Primes[c];
|
|
822
|
+
}
|
|
823
|
+
c = this.Primes[this.Primes.length - 1];
|
|
824
|
+
for (;;) {
|
|
825
|
+
c = this.nextPrime(c);
|
|
826
|
+
if (c >= max)
|
|
827
|
+
return 0;
|
|
828
|
+
if (this.simplemod(n, c) == 0)
|
|
829
|
+
return c;
|
|
830
|
+
}
|
|
831
|
+
};
|
|
832
|
+
this.bPowOf2 = function (pow) {
|
|
833
|
+
var r = [], n, m = Math.floor(pow / bs);
|
|
834
|
+
for (n = m - 1; n >= 0; n--)
|
|
835
|
+
r[n] = 0;
|
|
836
|
+
r[m] = 1 << (pow % bs);
|
|
837
|
+
return r;
|
|
838
|
+
};
|
|
839
|
+
this.mpp = function (bits) {
|
|
840
|
+
if (bits < 10)
|
|
841
|
+
return [this.Primes[this.rand(this.Primes.length)]];
|
|
842
|
+
if (bits <= 20)
|
|
843
|
+
return [this.nextPrime(this.rand(1 << bits))];
|
|
844
|
+
var c = 10, m = 20, B = bits * bits / c, r, q, I, R, n, a, b, d, R2, nMinus1;
|
|
845
|
+
if (bits > m * 2) {
|
|
846
|
+
for (;;) {
|
|
847
|
+
r = Math.pow(2, Math.random() - 1);
|
|
848
|
+
if (bits - r * bits > m)
|
|
849
|
+
break;
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
else
|
|
853
|
+
r = 0.5;
|
|
854
|
+
q = this.mpp(Math.floor(r * bits) + 1);
|
|
855
|
+
I = this.bPowOf2(bits - 2);
|
|
856
|
+
I = this.bdiv(I, q).q;
|
|
857
|
+
var Il = I.length;
|
|
858
|
+
for (;;) { //generate R => I < R < 2I
|
|
859
|
+
R = [];
|
|
860
|
+
for (n = 0; n < Il; n++)
|
|
861
|
+
R[n] = this.rand(bx2);
|
|
862
|
+
R[Il - 1] %= I[Il - 1];
|
|
863
|
+
R = this.bmod(R, I);
|
|
864
|
+
if (!R[0])
|
|
865
|
+
R[0] |= 1; //must be greater or equal to 1
|
|
866
|
+
R = this.badd(R, I);
|
|
867
|
+
n = this.blshift(this.bmul(R, q), 1); //2Rq+1
|
|
868
|
+
n[0] |= 1;
|
|
869
|
+
if (!this.divisable(n, B)) {
|
|
870
|
+
a = this.rnum(bits - 1);
|
|
871
|
+
a[0] |= 2; //must be greater than 2
|
|
872
|
+
nMinus1 = this.bsub(n, [1]);
|
|
873
|
+
var x = this.bmodexp(a, nMinus1, n);
|
|
874
|
+
if (this.beq(x, [1])) {
|
|
875
|
+
R2 = this.blshift(R, 1);
|
|
876
|
+
b = this.bsub(this.bmodexp(a, R2, n), [1]);
|
|
877
|
+
d = this.bgcd(b, n);
|
|
878
|
+
if (this.beq(d, [1]))
|
|
879
|
+
return n;
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
};
|
|
884
|
+
this.genkey = function (bits) {
|
|
885
|
+
this.seed();
|
|
886
|
+
bits = parseInt(bits) * 8 / bs;
|
|
887
|
+
this.q = this.mpp(bits);
|
|
888
|
+
this.p = this.mpp(bits);
|
|
889
|
+
var p1q1 = this.bmul(this.bsub(this.p, [1]), this.bsub(this.q, [1]));
|
|
890
|
+
for (var c = 5; c < this.Primes.length; c++) {
|
|
891
|
+
this.e = [this.Primes[c]];
|
|
892
|
+
this.d = this.modinverse(this.e, p1q1);
|
|
893
|
+
if (this.d.length != 1 || this.d[0] != 0)
|
|
894
|
+
break;
|
|
895
|
+
}
|
|
896
|
+
this.pq = this.bmul(this.p, this.q);
|
|
897
|
+
return;
|
|
898
|
+
};
|
|
899
|
+
//this.genkey();
|
|
900
|
+
};
|
|
901
|
+
exports.default = RSA;
|
|
902
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9yc2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGNBQWM7QUFDZCwwQkFBMEI7O0FBRzFCOzs7OztHQUtHO0FBRUgsa0RBQWtEO0FBQ2xELHlEQUF5RDtBQUN6RCx1QkFBdUI7QUFFdkIscURBQXFEO0FBQ3JELGtDQUFrQztBQUNsQyxxRUFBcUU7QUFDckUscUJBQXFCO0FBR3JCLElBQUksT0FBTyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFHMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQixJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2QixJQUFJLFdBQVcsR0FBRztJQUNkLE9BQU87UUFDSCxxQkFBcUIsRUFBRSxVQUFVLEdBQUc7WUFDaEMsMkRBQTJEO1lBQzNELElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7b0JBQ1QsR0FBRyxDQUFDLENBQUMsRUFB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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO1FBQ3ZDLElBQUksQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUE7SUFHRCxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDckIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUMsT0FBTyxFQUFFLEVBQUU7WUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QixFQUFFLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUM7SUFHRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMvQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElB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QUM7WUFDdEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUMxQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFIO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUM7SUFFRixxREFBcUQ7SUFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLElBQUk7UUFDL0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBLG1DQUFtQztRQUMxRixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FB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Q0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoRSxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFD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QUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDUixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1YsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDTixDQUFDLEVBQUUsQ0FBQzthQUNQO1NBQ0o7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ3RMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEwsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFFeEIsSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDM0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDekMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDN0I7YUFDSjtTQUNKO1FBQ0Qsa0NBQWtDO1FBQ2xDLGVBQWU7UUFDZixDQUFDLEVBQUUsQ0FBQztRQUNKLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNaLENBQUMsRUFBRSxDQUFDO1FBQ1IsU0FBVSxFQUFDLGtEQUFrRDtZQUN6RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxrQkFBa0I7Z0JBQ3hFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQy9CO1lBQ0Qsc0JBQXNCO1lBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxZQUFZO2FBQ2pELEVBQUMsbURBQW1EO2dCQUNoRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFOzRCQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDdkIsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNaLE1BQU07cUJBQ1Q7aUJBQ0o7Z0JBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBQyxpQkFBaUI7b0JBQ2xDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hCOztnQkFFRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2Q7SUFDTCxDQUFDLENBQUM7SUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUc7UUFFN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2YsT0FBTyxDQUFDLENBQUM7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHO2dCQUNyQixPQUFPLENBQUMsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QjtRQUNELENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFNBQVU7WUFDTixDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHO2dCQUNSLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QixPQUFPLENBQUMsQ0FBQztTQUNoQjtJQUNMLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHO1FBRXhCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUM7SUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsSUFBSTtRQUVyQixJQUFJLElBQUksR0FBRyxFQUFFO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUM7UUFDN0UsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNkLFNBQVU7Z0JBQ04sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO29CQUNuQixNQUFNO2FBQ2I7U0FDSjs7WUFFRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ1osQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNsQixTQUFVLEVBQUMsMEJBQTBCO1lBQ2pDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDUCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLCtCQUErQjtZQUM3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxPQUFPO1lBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLHdCQUF3QjtnQkFDbEMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbEIsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsT0FBTyxDQUFDLENBQUM7aUJBQ2hCO2FBQ0o7U0FDSjtJQUNMLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxJQUFJO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNwQyxNQUFNO1NBQ2I7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsT0FBTztJQUNYLENBQUMsQ0FBQztJQUNGLGdCQUFnQjtBQUVwQixDQUFDLENBQUE7QUFFRCxrQkFBZSxHQUFHLENBQUMifQ==
|