@mjhls/mjh-framework 1.0.791-auth-test → 1.0.791-auth-test-v2
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/dist/cjs/ArticleProgramLandingPage.js +1 -2
- package/dist/cjs/Auth.js +4 -321
- package/dist/cjs/ExternalResources.js +1 -2
- package/dist/cjs/HorizontalArticleListing.js +1 -2
- package/dist/cjs/MediaSeriesLanding.js +1 -2
- package/dist/cjs/PartnerDetailListing.js +1 -2
- package/dist/cjs/TaxonomyDescription.js +1 -2
- package/dist/cjs/VideoProgramLandingPage.js +1 -2
- package/dist/cjs/View.js +1 -2
- package/dist/cjs/faundadb.js +12 -1443
- package/dist/cjs/getSerializers.js +1 -2
- package/dist/cjs/{index-d9eab30b.js → index-70cfabd2.js} +4 -3
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/md5-e1ca5797.js +323 -0
- package/dist/esm/ArticleProgramLandingPage.js +1 -2
- package/dist/esm/Auth.js +1 -318
- package/dist/esm/ExternalResources.js +1 -2
- package/dist/esm/HorizontalArticleListing.js +1 -2
- package/dist/esm/MediaSeriesLanding.js +1 -2
- package/dist/esm/PartnerDetailListing.js +1 -2
- package/dist/esm/TaxonomyDescription.js +1 -2
- package/dist/esm/VideoProgramLandingPage.js +1 -2
- package/dist/esm/View.js +1 -2
- package/dist/esm/faundadb.js +12 -1443
- package/dist/esm/getSerializers.js +1 -2
- package/dist/esm/{index-20026f92.js → index-613fdebe.js} +4 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/md5-4e42248e.js +321 -0
- package/package.json +1 -1
- package/dist/cjs/empty-7d04c64b.js +0 -5
- package/dist/esm/empty-81a1dbdc.js +0 -3
package/dist/cjs/faundadb.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var asyncToGenerator = require('./asyncToGenerator-58c289d9.js');
|
|
6
|
-
var
|
|
7
|
-
|
|
6
|
+
var md5 = require('./md5-e1ca5797.js');
|
|
7
|
+
require('./_commonjsHelpers-06173234.js');
|
|
8
8
|
require('./es6.string.iterator-c2573ffd.js');
|
|
9
9
|
require('./_to-object-6de10e57.js');
|
|
10
10
|
require('./web.dom.iterable-46657b5c.js');
|
|
@@ -12,1434 +12,17 @@ require('./_library-dd23b178.js');
|
|
|
12
12
|
require('./core.get-iterator-method-f474eacc.js');
|
|
13
13
|
require('./_iter-detect-55a5657a.js');
|
|
14
14
|
|
|
15
|
-
var bcrypt = _commonjsHelpers.createCommonjsModule(function (module) {
|
|
16
|
-
/*
|
|
17
|
-
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
|
|
18
|
-
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
|
|
19
|
-
Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
|
20
|
-
|
|
21
|
-
Redistribution and use in source and binary forms, with or without
|
|
22
|
-
modification, are permitted provided that the following conditions
|
|
23
|
-
are met:
|
|
24
|
-
1. Redistributions of source code must retain the above copyright
|
|
25
|
-
notice, this list of conditions and the following disclaimer.
|
|
26
|
-
2. Redistributions in binary form must reproduce the above copyright
|
|
27
|
-
notice, this list of conditions and the following disclaimer in the
|
|
28
|
-
documentation and/or other materials provided with the distribution.
|
|
29
|
-
3. The name of the author may not be used to endorse or promote products
|
|
30
|
-
derived from this software without specific prior written permission.
|
|
31
|
-
|
|
32
|
-
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
33
|
-
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
34
|
-
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
35
|
-
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
36
|
-
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
37
|
-
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
38
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
39
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
40
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
41
|
-
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
42
|
-
*/
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
|
46
|
-
* Released under the Apache License, Version 2.0
|
|
47
|
-
* see: https://github.com/dcodeIO/bcrypt.js for details
|
|
48
|
-
*/
|
|
49
|
-
(function(global, factory) {
|
|
50
|
-
|
|
51
|
-
/* AMD */ if (typeof _commonjsHelpers.commonjsRequire === 'function' && 'object' === "object" && module && module["exports"])
|
|
52
|
-
module["exports"] = factory();
|
|
53
|
-
/* Global */ else
|
|
54
|
-
(global["dcodeIO"] = global["dcodeIO"] || {})["bcrypt"] = factory();
|
|
55
|
-
|
|
56
|
-
}(_commonjsHelpers.commonjsGlobal, function() {
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* bcrypt namespace.
|
|
60
|
-
* @type {Object.<string,*>}
|
|
61
|
-
*/
|
|
62
|
-
var bcrypt = {};
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* The random implementation to use as a fallback.
|
|
66
|
-
* @type {?function(number):!Array.<number>}
|
|
67
|
-
* @inner
|
|
68
|
-
*/
|
|
69
|
-
var randomFallback = null;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Generates cryptographically secure random bytes.
|
|
73
|
-
* @function
|
|
74
|
-
* @param {number} len Bytes length
|
|
75
|
-
* @returns {!Array.<number>} Random bytes
|
|
76
|
-
* @throws {Error} If no random implementation is available
|
|
77
|
-
* @inner
|
|
78
|
-
*/
|
|
79
|
-
function random(len) {
|
|
80
|
-
/* node */ if (module && module['exports'])
|
|
81
|
-
try {
|
|
82
|
-
return empty.require$$0['randomBytes'](len);
|
|
83
|
-
} catch (e) {}
|
|
84
|
-
/* WCA */ try {
|
|
85
|
-
var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));
|
|
86
|
-
return Array.prototype.slice.call(a);
|
|
87
|
-
} catch (e) {}
|
|
88
|
-
/* fallback */ if (!randomFallback)
|
|
89
|
-
throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
|
|
90
|
-
return randomFallback(len);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Test if any secure randomness source is available
|
|
94
|
-
var randomAvailable = false;
|
|
95
|
-
try {
|
|
96
|
-
random(1);
|
|
97
|
-
randomAvailable = true;
|
|
98
|
-
} catch (e) {}
|
|
99
|
-
|
|
100
|
-
// Default fallback, if any
|
|
101
|
-
randomFallback = null;
|
|
102
|
-
/**
|
|
103
|
-
* Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
|
|
104
|
-
* API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it
|
|
105
|
-
* is seeded properly!
|
|
106
|
-
* @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its
|
|
107
|
-
* sole argument, returning the corresponding array of cryptographically secure random byte values.
|
|
108
|
-
* @see http://nodejs.org/api/crypto.html
|
|
109
|
-
* @see http://www.w3.org/TR/WebCryptoAPI/
|
|
110
|
-
*/
|
|
111
|
-
bcrypt.setRandomFallback = function(random) {
|
|
112
|
-
randomFallback = random;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Synchronously generates a salt.
|
|
117
|
-
* @param {number=} rounds Number of rounds to use, defaults to 10 if omitted
|
|
118
|
-
* @param {number=} seed_length Not supported.
|
|
119
|
-
* @returns {string} Resulting salt
|
|
120
|
-
* @throws {Error} If a random fallback is required but not set
|
|
121
|
-
* @expose
|
|
122
|
-
*/
|
|
123
|
-
bcrypt.genSaltSync = function(rounds, seed_length) {
|
|
124
|
-
rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;
|
|
125
|
-
if (typeof rounds !== 'number')
|
|
126
|
-
throw Error("Illegal arguments: "+(typeof rounds)+", "+(typeof seed_length));
|
|
127
|
-
if (rounds < 4)
|
|
128
|
-
rounds = 4;
|
|
129
|
-
else if (rounds > 31)
|
|
130
|
-
rounds = 31;
|
|
131
|
-
var salt = [];
|
|
132
|
-
salt.push("$2a$");
|
|
133
|
-
if (rounds < 10)
|
|
134
|
-
salt.push("0");
|
|
135
|
-
salt.push(rounds.toString());
|
|
136
|
-
salt.push('$');
|
|
137
|
-
salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw
|
|
138
|
-
return salt.join('');
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Asynchronously generates a salt.
|
|
143
|
-
* @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted
|
|
144
|
-
* @param {(number|function(Error, string=))=} seed_length Not supported.
|
|
145
|
-
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt
|
|
146
|
-
* @returns {!Promise} If `callback` has been omitted
|
|
147
|
-
* @throws {Error} If `callback` is present but not a function
|
|
148
|
-
* @expose
|
|
149
|
-
*/
|
|
150
|
-
bcrypt.genSalt = function(rounds, seed_length, callback) {
|
|
151
|
-
if (typeof seed_length === 'function')
|
|
152
|
-
callback = seed_length,
|
|
153
|
-
seed_length = undefined; // Not supported.
|
|
154
|
-
if (typeof rounds === 'function')
|
|
155
|
-
callback = rounds,
|
|
156
|
-
rounds = undefined;
|
|
157
|
-
if (typeof rounds === 'undefined')
|
|
158
|
-
rounds = GENSALT_DEFAULT_LOG2_ROUNDS;
|
|
159
|
-
else if (typeof rounds !== 'number')
|
|
160
|
-
throw Error("illegal arguments: "+(typeof rounds));
|
|
161
|
-
|
|
162
|
-
function _async(callback) {
|
|
163
|
-
nextTick(function() { // Pretty thin, but salting is fast enough
|
|
164
|
-
try {
|
|
165
|
-
callback(null, bcrypt.genSaltSync(rounds));
|
|
166
|
-
} catch (err) {
|
|
167
|
-
callback(err);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (callback) {
|
|
173
|
-
if (typeof callback !== 'function')
|
|
174
|
-
throw Error("Illegal callback: "+typeof(callback));
|
|
175
|
-
_async(callback);
|
|
176
|
-
} else
|
|
177
|
-
return new Promise(function(resolve, reject) {
|
|
178
|
-
_async(function(err, res) {
|
|
179
|
-
if (err) {
|
|
180
|
-
reject(err);
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
resolve(res);
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Synchronously generates a hash for the given string.
|
|
190
|
-
* @param {string} s String to hash
|
|
191
|
-
* @param {(number|string)=} salt Salt length to generate or salt to use, default to 10
|
|
192
|
-
* @returns {string} Resulting hash
|
|
193
|
-
* @expose
|
|
194
|
-
*/
|
|
195
|
-
bcrypt.hashSync = function(s, salt) {
|
|
196
|
-
if (typeof salt === 'undefined')
|
|
197
|
-
salt = GENSALT_DEFAULT_LOG2_ROUNDS;
|
|
198
|
-
if (typeof salt === 'number')
|
|
199
|
-
salt = bcrypt.genSaltSync(salt);
|
|
200
|
-
if (typeof s !== 'string' || typeof salt !== 'string')
|
|
201
|
-
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof salt));
|
|
202
|
-
return _hash(s, salt);
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Asynchronously generates a hash for the given string.
|
|
207
|
-
* @param {string} s String to hash
|
|
208
|
-
* @param {number|string} salt Salt length to generate or salt to use
|
|
209
|
-
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash
|
|
210
|
-
* @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
|
|
211
|
-
* (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
|
212
|
-
* @returns {!Promise} If `callback` has been omitted
|
|
213
|
-
* @throws {Error} If `callback` is present but not a function
|
|
214
|
-
* @expose
|
|
215
|
-
*/
|
|
216
|
-
bcrypt.hash = function(s, salt, callback, progressCallback) {
|
|
217
|
-
|
|
218
|
-
function _async(callback) {
|
|
219
|
-
if (typeof s === 'string' && typeof salt === 'number')
|
|
220
|
-
bcrypt.genSalt(salt, function(err, salt) {
|
|
221
|
-
_hash(s, salt, callback, progressCallback);
|
|
222
|
-
});
|
|
223
|
-
else if (typeof s === 'string' && typeof salt === 'string')
|
|
224
|
-
_hash(s, salt, callback, progressCallback);
|
|
225
|
-
else
|
|
226
|
-
nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof salt))));
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (callback) {
|
|
230
|
-
if (typeof callback !== 'function')
|
|
231
|
-
throw Error("Illegal callback: "+typeof(callback));
|
|
232
|
-
_async(callback);
|
|
233
|
-
} else
|
|
234
|
-
return new Promise(function(resolve, reject) {
|
|
235
|
-
_async(function(err, res) {
|
|
236
|
-
if (err) {
|
|
237
|
-
reject(err);
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
resolve(res);
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Compares two strings of the same length in constant time.
|
|
247
|
-
* @param {string} known Must be of the correct length
|
|
248
|
-
* @param {string} unknown Must be the same length as `known`
|
|
249
|
-
* @returns {boolean}
|
|
250
|
-
* @inner
|
|
251
|
-
*/
|
|
252
|
-
function safeStringCompare(known, unknown) {
|
|
253
|
-
var right = 0,
|
|
254
|
-
wrong = 0;
|
|
255
|
-
for (var i=0, k=known.length; i<k; ++i) {
|
|
256
|
-
if (known.charCodeAt(i) === unknown.charCodeAt(i))
|
|
257
|
-
++right;
|
|
258
|
-
else
|
|
259
|
-
++wrong;
|
|
260
|
-
}
|
|
261
|
-
// Prevent removal of unused variables (never true, actually)
|
|
262
|
-
if (right < 0)
|
|
263
|
-
return false;
|
|
264
|
-
return wrong === 0;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Synchronously tests a string against a hash.
|
|
269
|
-
* @param {string} s String to compare
|
|
270
|
-
* @param {string} hash Hash to test against
|
|
271
|
-
* @returns {boolean} true if matching, otherwise false
|
|
272
|
-
* @throws {Error} If an argument is illegal
|
|
273
|
-
* @expose
|
|
274
|
-
*/
|
|
275
|
-
bcrypt.compareSync = function(s, hash) {
|
|
276
|
-
if (typeof s !== "string" || typeof hash !== "string")
|
|
277
|
-
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash));
|
|
278
|
-
if (hash.length !== 60)
|
|
279
|
-
return false;
|
|
280
|
-
return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Asynchronously compares the given data against the given hash.
|
|
285
|
-
* @param {string} s Data to compare
|
|
286
|
-
* @param {string} hash Data to be compared to
|
|
287
|
-
* @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result
|
|
288
|
-
* @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
|
|
289
|
-
* (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
|
290
|
-
* @returns {!Promise} If `callback` has been omitted
|
|
291
|
-
* @throws {Error} If `callback` is present but not a function
|
|
292
|
-
* @expose
|
|
293
|
-
*/
|
|
294
|
-
bcrypt.compare = function(s, hash, callback, progressCallback) {
|
|
295
|
-
|
|
296
|
-
function _async(callback) {
|
|
297
|
-
if (typeof s !== "string" || typeof hash !== "string") {
|
|
298
|
-
nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof hash))));
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
if (hash.length !== 60) {
|
|
302
|
-
nextTick(callback.bind(this, null, false));
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {
|
|
306
|
-
if (err)
|
|
307
|
-
callback(err);
|
|
308
|
-
else
|
|
309
|
-
callback(null, safeStringCompare(comp, hash));
|
|
310
|
-
}, progressCallback);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
if (callback) {
|
|
314
|
-
if (typeof callback !== 'function')
|
|
315
|
-
throw Error("Illegal callback: "+typeof(callback));
|
|
316
|
-
_async(callback);
|
|
317
|
-
} else
|
|
318
|
-
return new Promise(function(resolve, reject) {
|
|
319
|
-
_async(function(err, res) {
|
|
320
|
-
if (err) {
|
|
321
|
-
reject(err);
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
resolve(res);
|
|
325
|
-
});
|
|
326
|
-
});
|
|
327
|
-
};
|
|
328
|
-
|
|
329
|
-
/**
|
|
330
|
-
* Gets the number of rounds used to encrypt the specified hash.
|
|
331
|
-
* @param {string} hash Hash to extract the used number of rounds from
|
|
332
|
-
* @returns {number} Number of rounds used
|
|
333
|
-
* @throws {Error} If `hash` is not a string
|
|
334
|
-
* @expose
|
|
335
|
-
*/
|
|
336
|
-
bcrypt.getRounds = function(hash) {
|
|
337
|
-
if (typeof hash !== "string")
|
|
338
|
-
throw Error("Illegal arguments: "+(typeof hash));
|
|
339
|
-
return parseInt(hash.split("$")[2], 10);
|
|
340
|
-
};
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* Gets the salt portion from a hash. Does not validate the hash.
|
|
344
|
-
* @param {string} hash Hash to extract the salt from
|
|
345
|
-
* @returns {string} Extracted salt part
|
|
346
|
-
* @throws {Error} If `hash` is not a string or otherwise invalid
|
|
347
|
-
* @expose
|
|
348
|
-
*/
|
|
349
|
-
bcrypt.getSalt = function(hash) {
|
|
350
|
-
if (typeof hash !== 'string')
|
|
351
|
-
throw Error("Illegal arguments: "+(typeof hash));
|
|
352
|
-
if (hash.length !== 60)
|
|
353
|
-
throw Error("Illegal hash length: "+hash.length+" != 60");
|
|
354
|
-
return hash.substring(0, 29);
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Continues with the callback on the next tick.
|
|
359
|
-
* @function
|
|
360
|
-
* @param {function(...[*])} callback Callback to execute
|
|
361
|
-
* @inner
|
|
362
|
-
*/
|
|
363
|
-
var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'
|
|
364
|
-
? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)
|
|
365
|
-
: setTimeout;
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Converts a JavaScript string to UTF8 bytes.
|
|
369
|
-
* @param {string} str String
|
|
370
|
-
* @returns {!Array.<number>} UTF8 bytes
|
|
371
|
-
* @inner
|
|
372
|
-
*/
|
|
373
|
-
function stringToBytes(str) {
|
|
374
|
-
var out = [],
|
|
375
|
-
i = 0;
|
|
376
|
-
utfx.encodeUTF16toUTF8(function() {
|
|
377
|
-
if (i >= str.length) return null;
|
|
378
|
-
return str.charCodeAt(i++);
|
|
379
|
-
}, function(b) {
|
|
380
|
-
out.push(b);
|
|
381
|
-
});
|
|
382
|
-
return out;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// A base64 implementation for the bcrypt algorithm. This is partly non-standard.
|
|
386
|
-
|
|
387
|
-
/**
|
|
388
|
-
* bcrypt's own non-standard base64 dictionary.
|
|
389
|
-
* @type {!Array.<string>}
|
|
390
|
-
* @const
|
|
391
|
-
* @inner
|
|
392
|
-
**/
|
|
393
|
-
var BASE64_CODE = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split('');
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* @type {!Array.<number>}
|
|
397
|
-
* @const
|
|
398
|
-
* @inner
|
|
399
|
-
**/
|
|
400
|
-
var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
401
|
-
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
402
|
-
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
|
|
403
|
-
1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,
|
|
404
|
-
-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
|
405
|
-
20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,
|
|
406
|
-
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
|
407
|
-
48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* @type {!function(...number):string}
|
|
411
|
-
* @inner
|
|
412
|
-
*/
|
|
413
|
-
var stringFromCharCode = String.fromCharCode;
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* Encodes a byte array to base64 with up to len bytes of input.
|
|
417
|
-
* @param {!Array.<number>} b Byte array
|
|
418
|
-
* @param {number} len Maximum input length
|
|
419
|
-
* @returns {string}
|
|
420
|
-
* @inner
|
|
421
|
-
*/
|
|
422
|
-
function base64_encode(b, len) {
|
|
423
|
-
var off = 0,
|
|
424
|
-
rs = [],
|
|
425
|
-
c1, c2;
|
|
426
|
-
if (len <= 0 || len > b.length)
|
|
427
|
-
throw Error("Illegal len: "+len);
|
|
428
|
-
while (off < len) {
|
|
429
|
-
c1 = b[off++] & 0xff;
|
|
430
|
-
rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);
|
|
431
|
-
c1 = (c1 & 0x03) << 4;
|
|
432
|
-
if (off >= len) {
|
|
433
|
-
rs.push(BASE64_CODE[c1 & 0x3f]);
|
|
434
|
-
break;
|
|
435
|
-
}
|
|
436
|
-
c2 = b[off++] & 0xff;
|
|
437
|
-
c1 |= (c2 >> 4) & 0x0f;
|
|
438
|
-
rs.push(BASE64_CODE[c1 & 0x3f]);
|
|
439
|
-
c1 = (c2 & 0x0f) << 2;
|
|
440
|
-
if (off >= len) {
|
|
441
|
-
rs.push(BASE64_CODE[c1 & 0x3f]);
|
|
442
|
-
break;
|
|
443
|
-
}
|
|
444
|
-
c2 = b[off++] & 0xff;
|
|
445
|
-
c1 |= (c2 >> 6) & 0x03;
|
|
446
|
-
rs.push(BASE64_CODE[c1 & 0x3f]);
|
|
447
|
-
rs.push(BASE64_CODE[c2 & 0x3f]);
|
|
448
|
-
}
|
|
449
|
-
return rs.join('');
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
/**
|
|
453
|
-
* Decodes a base64 encoded string to up to len bytes of output.
|
|
454
|
-
* @param {string} s String to decode
|
|
455
|
-
* @param {number} len Maximum output length
|
|
456
|
-
* @returns {!Array.<number>}
|
|
457
|
-
* @inner
|
|
458
|
-
*/
|
|
459
|
-
function base64_decode(s, len) {
|
|
460
|
-
var off = 0,
|
|
461
|
-
slen = s.length,
|
|
462
|
-
olen = 0,
|
|
463
|
-
rs = [],
|
|
464
|
-
c1, c2, c3, c4, o, code;
|
|
465
|
-
if (len <= 0)
|
|
466
|
-
throw Error("Illegal len: "+len);
|
|
467
|
-
while (off < slen - 1 && olen < len) {
|
|
468
|
-
code = s.charCodeAt(off++);
|
|
469
|
-
c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
|
470
|
-
code = s.charCodeAt(off++);
|
|
471
|
-
c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
|
472
|
-
if (c1 == -1 || c2 == -1)
|
|
473
|
-
break;
|
|
474
|
-
o = (c1 << 2) >>> 0;
|
|
475
|
-
o |= (c2 & 0x30) >> 4;
|
|
476
|
-
rs.push(stringFromCharCode(o));
|
|
477
|
-
if (++olen >= len || off >= slen)
|
|
478
|
-
break;
|
|
479
|
-
code = s.charCodeAt(off++);
|
|
480
|
-
c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
|
481
|
-
if (c3 == -1)
|
|
482
|
-
break;
|
|
483
|
-
o = ((c2 & 0x0f) << 4) >>> 0;
|
|
484
|
-
o |= (c3 & 0x3c) >> 2;
|
|
485
|
-
rs.push(stringFromCharCode(o));
|
|
486
|
-
if (++olen >= len || off >= slen)
|
|
487
|
-
break;
|
|
488
|
-
code = s.charCodeAt(off++);
|
|
489
|
-
c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
|
490
|
-
o = ((c3 & 0x03) << 6) >>> 0;
|
|
491
|
-
o |= c4;
|
|
492
|
-
rs.push(stringFromCharCode(o));
|
|
493
|
-
++olen;
|
|
494
|
-
}
|
|
495
|
-
var res = [];
|
|
496
|
-
for (off = 0; off<olen; off++)
|
|
497
|
-
res.push(rs[off].charCodeAt(0));
|
|
498
|
-
return res;
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
/**
|
|
502
|
-
* utfx-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
|
503
|
-
* Released under the Apache License, Version 2.0
|
|
504
|
-
* see: https://github.com/dcodeIO/utfx for details
|
|
505
|
-
*/
|
|
506
|
-
var utfx = function() {
|
|
507
|
-
|
|
508
|
-
/**
|
|
509
|
-
* utfx namespace.
|
|
510
|
-
* @inner
|
|
511
|
-
* @type {!Object.<string,*>}
|
|
512
|
-
*/
|
|
513
|
-
var utfx = {};
|
|
514
|
-
|
|
515
|
-
/**
|
|
516
|
-
* Maximum valid code point.
|
|
517
|
-
* @type {number}
|
|
518
|
-
* @const
|
|
519
|
-
*/
|
|
520
|
-
utfx.MAX_CODEPOINT = 0x10FFFF;
|
|
521
|
-
|
|
522
|
-
/**
|
|
523
|
-
* Encodes UTF8 code points to UTF8 bytes.
|
|
524
|
-
* @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
|
|
525
|
-
* respectively `null` if there are no more code points left or a single numeric code point.
|
|
526
|
-
* @param {!function(number)} dst Bytes destination as a function successively called with the next byte
|
|
527
|
-
*/
|
|
528
|
-
utfx.encodeUTF8 = function(src, dst) {
|
|
529
|
-
var cp = null;
|
|
530
|
-
if (typeof src === 'number')
|
|
531
|
-
cp = src,
|
|
532
|
-
src = function() { return null; };
|
|
533
|
-
while (cp !== null || (cp = src()) !== null) {
|
|
534
|
-
if (cp < 0x80)
|
|
535
|
-
dst(cp&0x7F);
|
|
536
|
-
else if (cp < 0x800)
|
|
537
|
-
dst(((cp>>6)&0x1F)|0xC0),
|
|
538
|
-
dst((cp&0x3F)|0x80);
|
|
539
|
-
else if (cp < 0x10000)
|
|
540
|
-
dst(((cp>>12)&0x0F)|0xE0),
|
|
541
|
-
dst(((cp>>6)&0x3F)|0x80),
|
|
542
|
-
dst((cp&0x3F)|0x80);
|
|
543
|
-
else
|
|
544
|
-
dst(((cp>>18)&0x07)|0xF0),
|
|
545
|
-
dst(((cp>>12)&0x3F)|0x80),
|
|
546
|
-
dst(((cp>>6)&0x3F)|0x80),
|
|
547
|
-
dst((cp&0x3F)|0x80);
|
|
548
|
-
cp = null;
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
|
-
|
|
552
|
-
/**
|
|
553
|
-
* Decodes UTF8 bytes to UTF8 code points.
|
|
554
|
-
* @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
|
|
555
|
-
* are no more bytes left.
|
|
556
|
-
* @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.
|
|
557
|
-
* @throws {RangeError} If a starting byte is invalid in UTF8
|
|
558
|
-
* @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the
|
|
559
|
-
* remaining bytes.
|
|
560
|
-
*/
|
|
561
|
-
utfx.decodeUTF8 = function(src, dst) {
|
|
562
|
-
var a, b, c, d, fail = function(b) {
|
|
563
|
-
b = b.slice(0, b.indexOf(null));
|
|
564
|
-
var err = Error(b.toString());
|
|
565
|
-
err.name = "TruncatedError";
|
|
566
|
-
err['bytes'] = b;
|
|
567
|
-
throw err;
|
|
568
|
-
};
|
|
569
|
-
while ((a = src()) !== null) {
|
|
570
|
-
if ((a&0x80) === 0)
|
|
571
|
-
dst(a);
|
|
572
|
-
else if ((a&0xE0) === 0xC0)
|
|
573
|
-
((b = src()) === null) && fail([a, b]),
|
|
574
|
-
dst(((a&0x1F)<<6) | (b&0x3F));
|
|
575
|
-
else if ((a&0xF0) === 0xE0)
|
|
576
|
-
((b=src()) === null || (c=src()) === null) && fail([a, b, c]),
|
|
577
|
-
dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));
|
|
578
|
-
else if ((a&0xF8) === 0xF0)
|
|
579
|
-
((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),
|
|
580
|
-
dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));
|
|
581
|
-
else throw RangeError("Illegal starting byte: "+a);
|
|
582
|
-
}
|
|
583
|
-
};
|
|
584
|
-
|
|
585
|
-
/**
|
|
586
|
-
* Converts UTF16 characters to UTF8 code points.
|
|
587
|
-
* @param {!function():number|null} src Characters source as a function returning the next char code respectively
|
|
588
|
-
* `null` if there are no more characters left.
|
|
589
|
-
* @param {!function(number)} dst Code points destination as a function successively called with each converted code
|
|
590
|
-
* point.
|
|
591
|
-
*/
|
|
592
|
-
utfx.UTF16toUTF8 = function(src, dst) {
|
|
593
|
-
var c1, c2 = null;
|
|
594
|
-
while (true) {
|
|
595
|
-
if ((c1 = c2 !== null ? c2 : src()) === null)
|
|
596
|
-
break;
|
|
597
|
-
if (c1 >= 0xD800 && c1 <= 0xDFFF) {
|
|
598
|
-
if ((c2 = src()) !== null) {
|
|
599
|
-
if (c2 >= 0xDC00 && c2 <= 0xDFFF) {
|
|
600
|
-
dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);
|
|
601
|
-
c2 = null; continue;
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
dst(c1);
|
|
606
|
-
}
|
|
607
|
-
if (c2 !== null) dst(c2);
|
|
608
|
-
};
|
|
609
|
-
|
|
610
|
-
/**
|
|
611
|
-
* Converts UTF8 code points to UTF16 characters.
|
|
612
|
-
* @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
|
|
613
|
-
* respectively `null` if there are no more code points left or a single numeric code point.
|
|
614
|
-
* @param {!function(number)} dst Characters destination as a function successively called with each converted char code.
|
|
615
|
-
* @throws {RangeError} If a code point is out of range
|
|
616
|
-
*/
|
|
617
|
-
utfx.UTF8toUTF16 = function(src, dst) {
|
|
618
|
-
var cp = null;
|
|
619
|
-
if (typeof src === 'number')
|
|
620
|
-
cp = src, src = function() { return null; };
|
|
621
|
-
while (cp !== null || (cp = src()) !== null) {
|
|
622
|
-
if (cp <= 0xFFFF)
|
|
623
|
-
dst(cp);
|
|
624
|
-
else
|
|
625
|
-
cp -= 0x10000,
|
|
626
|
-
dst((cp>>10)+0xD800),
|
|
627
|
-
dst((cp%0x400)+0xDC00);
|
|
628
|
-
cp = null;
|
|
629
|
-
}
|
|
630
|
-
};
|
|
631
|
-
|
|
632
|
-
/**
|
|
633
|
-
* Converts and encodes UTF16 characters to UTF8 bytes.
|
|
634
|
-
* @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`
|
|
635
|
-
* if there are no more characters left.
|
|
636
|
-
* @param {!function(number)} dst Bytes destination as a function successively called with the next byte.
|
|
637
|
-
*/
|
|
638
|
-
utfx.encodeUTF16toUTF8 = function(src, dst) {
|
|
639
|
-
utfx.UTF16toUTF8(src, function(cp) {
|
|
640
|
-
utfx.encodeUTF8(cp, dst);
|
|
641
|
-
});
|
|
642
|
-
};
|
|
643
|
-
|
|
644
|
-
/**
|
|
645
|
-
* Decodes and converts UTF8 bytes to UTF16 characters.
|
|
646
|
-
* @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
|
|
647
|
-
* are no more bytes left.
|
|
648
|
-
* @param {!function(number)} dst Characters destination as a function successively called with each converted char code.
|
|
649
|
-
* @throws {RangeError} If a starting byte is invalid in UTF8
|
|
650
|
-
* @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.
|
|
651
|
-
*/
|
|
652
|
-
utfx.decodeUTF8toUTF16 = function(src, dst) {
|
|
653
|
-
utfx.decodeUTF8(src, function(cp) {
|
|
654
|
-
utfx.UTF8toUTF16(cp, dst);
|
|
655
|
-
});
|
|
656
|
-
};
|
|
657
|
-
|
|
658
|
-
/**
|
|
659
|
-
* Calculates the byte length of an UTF8 code point.
|
|
660
|
-
* @param {number} cp UTF8 code point
|
|
661
|
-
* @returns {number} Byte length
|
|
662
|
-
*/
|
|
663
|
-
utfx.calculateCodePoint = function(cp) {
|
|
664
|
-
return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;
|
|
665
|
-
};
|
|
666
|
-
|
|
667
|
-
/**
|
|
668
|
-
* Calculates the number of UTF8 bytes required to store UTF8 code points.
|
|
669
|
-
* @param {(!function():number|null)} src Code points source as a function returning the next code point respectively
|
|
670
|
-
* `null` if there are no more code points left.
|
|
671
|
-
* @returns {number} The number of UTF8 bytes required
|
|
672
|
-
*/
|
|
673
|
-
utfx.calculateUTF8 = function(src) {
|
|
674
|
-
var cp, l=0;
|
|
675
|
-
while ((cp = src()) !== null)
|
|
676
|
-
l += utfx.calculateCodePoint(cp);
|
|
677
|
-
return l;
|
|
678
|
-
};
|
|
679
|
-
|
|
680
|
-
/**
|
|
681
|
-
* Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.
|
|
682
|
-
* @param {(!function():number|null)} src Characters source as a function returning the next char code respectively
|
|
683
|
-
* `null` if there are no more characters left.
|
|
684
|
-
* @returns {!Array.<number>} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.
|
|
685
|
-
*/
|
|
686
|
-
utfx.calculateUTF16asUTF8 = function(src) {
|
|
687
|
-
var n=0, l=0;
|
|
688
|
-
utfx.UTF16toUTF8(src, function(cp) {
|
|
689
|
-
++n; l += utfx.calculateCodePoint(cp);
|
|
690
|
-
});
|
|
691
|
-
return [n,l];
|
|
692
|
-
};
|
|
693
|
-
|
|
694
|
-
return utfx;
|
|
695
|
-
}();
|
|
696
|
-
|
|
697
|
-
Date.now = Date.now || function() { return +new Date; };
|
|
698
|
-
|
|
699
|
-
/**
|
|
700
|
-
* @type {number}
|
|
701
|
-
* @const
|
|
702
|
-
* @inner
|
|
703
|
-
*/
|
|
704
|
-
var BCRYPT_SALT_LEN = 16;
|
|
705
|
-
|
|
706
|
-
/**
|
|
707
|
-
* @type {number}
|
|
708
|
-
* @const
|
|
709
|
-
* @inner
|
|
710
|
-
*/
|
|
711
|
-
var GENSALT_DEFAULT_LOG2_ROUNDS = 10;
|
|
712
|
-
|
|
713
|
-
/**
|
|
714
|
-
* @type {number}
|
|
715
|
-
* @const
|
|
716
|
-
* @inner
|
|
717
|
-
*/
|
|
718
|
-
var BLOWFISH_NUM_ROUNDS = 16;
|
|
719
|
-
|
|
720
|
-
/**
|
|
721
|
-
* @type {number}
|
|
722
|
-
* @const
|
|
723
|
-
* @inner
|
|
724
|
-
*/
|
|
725
|
-
var MAX_EXECUTION_TIME = 100;
|
|
726
|
-
|
|
727
|
-
/**
|
|
728
|
-
* @type {Array.<number>}
|
|
729
|
-
* @const
|
|
730
|
-
* @inner
|
|
731
|
-
*/
|
|
732
|
-
var P_ORIG = [
|
|
733
|
-
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,
|
|
734
|
-
0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,
|
|
735
|
-
0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,
|
|
736
|
-
0xb5470917, 0x9216d5d9, 0x8979fb1b
|
|
737
|
-
];
|
|
738
|
-
|
|
739
|
-
/**
|
|
740
|
-
* @type {Array.<number>}
|
|
741
|
-
* @const
|
|
742
|
-
* @inner
|
|
743
|
-
*/
|
|
744
|
-
var S_ORIG = [
|
|
745
|
-
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,
|
|
746
|
-
0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,
|
|
747
|
-
0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,
|
|
748
|
-
0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
|
|
749
|
-
0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,
|
|
750
|
-
0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
|
|
751
|
-
0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,
|
|
752
|
-
0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
|
|
753
|
-
0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,
|
|
754
|
-
0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,
|
|
755
|
-
0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,
|
|
756
|
-
0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
|
|
757
|
-
0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,
|
|
758
|
-
0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,
|
|
759
|
-
0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,
|
|
760
|
-
0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
|
|
761
|
-
0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,
|
|
762
|
-
0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
|
|
763
|
-
0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,
|
|
764
|
-
0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
|
|
765
|
-
0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,
|
|
766
|
-
0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,
|
|
767
|
-
0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,
|
|
768
|
-
0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
|
|
769
|
-
0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,
|
|
770
|
-
0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,
|
|
771
|
-
0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,
|
|
772
|
-
0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
|
|
773
|
-
0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,
|
|
774
|
-
0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
|
|
775
|
-
0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,
|
|
776
|
-
0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
|
|
777
|
-
0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,
|
|
778
|
-
0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,
|
|
779
|
-
0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,
|
|
780
|
-
0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
|
|
781
|
-
0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,
|
|
782
|
-
0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,
|
|
783
|
-
0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,
|
|
784
|
-
0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
|
|
785
|
-
0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,
|
|
786
|
-
0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
|
|
787
|
-
0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,
|
|
788
|
-
0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
|
|
789
|
-
0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,
|
|
790
|
-
0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,
|
|
791
|
-
0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,
|
|
792
|
-
0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
|
|
793
|
-
0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,
|
|
794
|
-
0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,
|
|
795
|
-
0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,
|
|
796
|
-
0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
|
|
797
|
-
0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,
|
|
798
|
-
0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,
|
|
799
|
-
0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,
|
|
800
|
-
0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
|
|
801
|
-
0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,
|
|
802
|
-
0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,
|
|
803
|
-
0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,
|
|
804
|
-
0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
|
|
805
|
-
0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,
|
|
806
|
-
0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
|
|
807
|
-
0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,
|
|
808
|
-
0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
|
|
809
|
-
0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,
|
|
810
|
-
0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,
|
|
811
|
-
0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,
|
|
812
|
-
0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
|
|
813
|
-
0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,
|
|
814
|
-
0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,
|
|
815
|
-
0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,
|
|
816
|
-
0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
|
|
817
|
-
0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,
|
|
818
|
-
0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
|
|
819
|
-
0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,
|
|
820
|
-
0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
|
|
821
|
-
0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,
|
|
822
|
-
0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,
|
|
823
|
-
0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,
|
|
824
|
-
0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
|
|
825
|
-
0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,
|
|
826
|
-
0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,
|
|
827
|
-
0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,
|
|
828
|
-
0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
|
|
829
|
-
0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,
|
|
830
|
-
0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
|
|
831
|
-
0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,
|
|
832
|
-
0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
|
|
833
|
-
0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,
|
|
834
|
-
0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,
|
|
835
|
-
0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,
|
|
836
|
-
0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
|
|
837
|
-
0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,
|
|
838
|
-
0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,
|
|
839
|
-
0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,
|
|
840
|
-
0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
|
|
841
|
-
0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,
|
|
842
|
-
0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
|
|
843
|
-
0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,
|
|
844
|
-
0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
|
|
845
|
-
0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,
|
|
846
|
-
0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,
|
|
847
|
-
0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,
|
|
848
|
-
0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
|
|
849
|
-
0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,
|
|
850
|
-
0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
|
|
851
|
-
0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,
|
|
852
|
-
0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
|
|
853
|
-
0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,
|
|
854
|
-
0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,
|
|
855
|
-
0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,
|
|
856
|
-
0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
|
|
857
|
-
0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,
|
|
858
|
-
0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,
|
|
859
|
-
0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,
|
|
860
|
-
0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
|
|
861
|
-
0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,
|
|
862
|
-
0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
|
|
863
|
-
0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,
|
|
864
|
-
0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
|
|
865
|
-
0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,
|
|
866
|
-
0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,
|
|
867
|
-
0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,
|
|
868
|
-
0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
|
|
869
|
-
0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,
|
|
870
|
-
0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,
|
|
871
|
-
0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,
|
|
872
|
-
0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
|
|
873
|
-
0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,
|
|
874
|
-
0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
|
|
875
|
-
0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,
|
|
876
|
-
0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
|
|
877
|
-
0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,
|
|
878
|
-
0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,
|
|
879
|
-
0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,
|
|
880
|
-
0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
|
|
881
|
-
0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,
|
|
882
|
-
0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,
|
|
883
|
-
0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,
|
|
884
|
-
0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
|
|
885
|
-
0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,
|
|
886
|
-
0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
|
|
887
|
-
0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,
|
|
888
|
-
0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
|
|
889
|
-
0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,
|
|
890
|
-
0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,
|
|
891
|
-
0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,
|
|
892
|
-
0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
|
|
893
|
-
0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,
|
|
894
|
-
0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,
|
|
895
|
-
0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,
|
|
896
|
-
0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
|
|
897
|
-
0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,
|
|
898
|
-
0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,
|
|
899
|
-
0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,
|
|
900
|
-
0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
|
|
901
|
-
0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,
|
|
902
|
-
0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,
|
|
903
|
-
0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,
|
|
904
|
-
0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
|
|
905
|
-
0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,
|
|
906
|
-
0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
|
|
907
|
-
0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,
|
|
908
|
-
0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
|
|
909
|
-
0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,
|
|
910
|
-
0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,
|
|
911
|
-
0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,
|
|
912
|
-
0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
|
|
913
|
-
0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,
|
|
914
|
-
0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,
|
|
915
|
-
0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,
|
|
916
|
-
0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
|
|
917
|
-
0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,
|
|
918
|
-
0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
|
|
919
|
-
0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,
|
|
920
|
-
0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
|
|
921
|
-
0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,
|
|
922
|
-
0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,
|
|
923
|
-
0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,
|
|
924
|
-
0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
|
|
925
|
-
0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,
|
|
926
|
-
0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,
|
|
927
|
-
0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,
|
|
928
|
-
0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
|
|
929
|
-
0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,
|
|
930
|
-
0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
|
|
931
|
-
0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,
|
|
932
|
-
0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
|
|
933
|
-
0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,
|
|
934
|
-
0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,
|
|
935
|
-
0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,
|
|
936
|
-
0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
|
|
937
|
-
0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,
|
|
938
|
-
0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,
|
|
939
|
-
0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,
|
|
940
|
-
0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
|
|
941
|
-
0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,
|
|
942
|
-
0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
|
|
943
|
-
0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,
|
|
944
|
-
0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
|
|
945
|
-
0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,
|
|
946
|
-
0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,
|
|
947
|
-
0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,
|
|
948
|
-
0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
|
|
949
|
-
0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
|
|
950
|
-
];
|
|
951
|
-
|
|
952
|
-
/**
|
|
953
|
-
* @type {Array.<number>}
|
|
954
|
-
* @const
|
|
955
|
-
* @inner
|
|
956
|
-
*/
|
|
957
|
-
var C_ORIG = [
|
|
958
|
-
0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,
|
|
959
|
-
0x6f756274
|
|
960
|
-
];
|
|
961
|
-
|
|
962
|
-
/**
|
|
963
|
-
* @param {Array.<number>} lr
|
|
964
|
-
* @param {number} off
|
|
965
|
-
* @param {Array.<number>} P
|
|
966
|
-
* @param {Array.<number>} S
|
|
967
|
-
* @returns {Array.<number>}
|
|
968
|
-
* @inner
|
|
969
|
-
*/
|
|
970
|
-
function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
|
|
971
|
-
var n,
|
|
972
|
-
l = lr[off],
|
|
973
|
-
r = lr[off + 1];
|
|
974
|
-
|
|
975
|
-
l ^= P[0];
|
|
976
|
-
|
|
977
|
-
/*
|
|
978
|
-
for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
|
|
979
|
-
// Feistel substitution on left word
|
|
980
|
-
n = S[l >>> 24],
|
|
981
|
-
n += S[0x100 | ((l >> 16) & 0xff)],
|
|
982
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)],
|
|
983
|
-
n += S[0x300 | (l & 0xff)],
|
|
984
|
-
r ^= n ^ P[++i],
|
|
985
|
-
// Feistel substitution on right word
|
|
986
|
-
n = S[r >>> 24],
|
|
987
|
-
n += S[0x100 | ((r >> 16) & 0xff)],
|
|
988
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)],
|
|
989
|
-
n += S[0x300 | (r & 0xff)],
|
|
990
|
-
l ^= n ^ P[++i];
|
|
991
|
-
*/
|
|
992
|
-
|
|
993
|
-
//The following is an unrolled version of the above loop.
|
|
994
|
-
//Iteration 0
|
|
995
|
-
n = S[l >>> 24];
|
|
996
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
997
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
998
|
-
n += S[0x300 | (l & 0xff)];
|
|
999
|
-
r ^= n ^ P[1];
|
|
1000
|
-
n = S[r >>> 24];
|
|
1001
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1002
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1003
|
-
n += S[0x300 | (r & 0xff)];
|
|
1004
|
-
l ^= n ^ P[2];
|
|
1005
|
-
//Iteration 1
|
|
1006
|
-
n = S[l >>> 24];
|
|
1007
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1008
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1009
|
-
n += S[0x300 | (l & 0xff)];
|
|
1010
|
-
r ^= n ^ P[3];
|
|
1011
|
-
n = S[r >>> 24];
|
|
1012
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1013
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1014
|
-
n += S[0x300 | (r & 0xff)];
|
|
1015
|
-
l ^= n ^ P[4];
|
|
1016
|
-
//Iteration 2
|
|
1017
|
-
n = S[l >>> 24];
|
|
1018
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1019
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1020
|
-
n += S[0x300 | (l & 0xff)];
|
|
1021
|
-
r ^= n ^ P[5];
|
|
1022
|
-
n = S[r >>> 24];
|
|
1023
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1024
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1025
|
-
n += S[0x300 | (r & 0xff)];
|
|
1026
|
-
l ^= n ^ P[6];
|
|
1027
|
-
//Iteration 3
|
|
1028
|
-
n = S[l >>> 24];
|
|
1029
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1030
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1031
|
-
n += S[0x300 | (l & 0xff)];
|
|
1032
|
-
r ^= n ^ P[7];
|
|
1033
|
-
n = S[r >>> 24];
|
|
1034
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1035
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1036
|
-
n += S[0x300 | (r & 0xff)];
|
|
1037
|
-
l ^= n ^ P[8];
|
|
1038
|
-
//Iteration 4
|
|
1039
|
-
n = S[l >>> 24];
|
|
1040
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1041
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1042
|
-
n += S[0x300 | (l & 0xff)];
|
|
1043
|
-
r ^= n ^ P[9];
|
|
1044
|
-
n = S[r >>> 24];
|
|
1045
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1046
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1047
|
-
n += S[0x300 | (r & 0xff)];
|
|
1048
|
-
l ^= n ^ P[10];
|
|
1049
|
-
//Iteration 5
|
|
1050
|
-
n = S[l >>> 24];
|
|
1051
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1052
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1053
|
-
n += S[0x300 | (l & 0xff)];
|
|
1054
|
-
r ^= n ^ P[11];
|
|
1055
|
-
n = S[r >>> 24];
|
|
1056
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1057
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1058
|
-
n += S[0x300 | (r & 0xff)];
|
|
1059
|
-
l ^= n ^ P[12];
|
|
1060
|
-
//Iteration 6
|
|
1061
|
-
n = S[l >>> 24];
|
|
1062
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1063
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1064
|
-
n += S[0x300 | (l & 0xff)];
|
|
1065
|
-
r ^= n ^ P[13];
|
|
1066
|
-
n = S[r >>> 24];
|
|
1067
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1068
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1069
|
-
n += S[0x300 | (r & 0xff)];
|
|
1070
|
-
l ^= n ^ P[14];
|
|
1071
|
-
//Iteration 7
|
|
1072
|
-
n = S[l >>> 24];
|
|
1073
|
-
n += S[0x100 | ((l >> 16) & 0xff)];
|
|
1074
|
-
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
|
1075
|
-
n += S[0x300 | (l & 0xff)];
|
|
1076
|
-
r ^= n ^ P[15];
|
|
1077
|
-
n = S[r >>> 24];
|
|
1078
|
-
n += S[0x100 | ((r >> 16) & 0xff)];
|
|
1079
|
-
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
|
1080
|
-
n += S[0x300 | (r & 0xff)];
|
|
1081
|
-
l ^= n ^ P[16];
|
|
1082
|
-
|
|
1083
|
-
lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];
|
|
1084
|
-
lr[off + 1] = l;
|
|
1085
|
-
return lr;
|
|
1086
|
-
}
|
|
1087
|
-
|
|
1088
|
-
/**
|
|
1089
|
-
* @param {Array.<number>} data
|
|
1090
|
-
* @param {number} offp
|
|
1091
|
-
* @returns {{key: number, offp: number}}
|
|
1092
|
-
* @inner
|
|
1093
|
-
*/
|
|
1094
|
-
function _streamtoword(data, offp) {
|
|
1095
|
-
for (var i = 0, word = 0; i < 4; ++i)
|
|
1096
|
-
word = (word << 8) | (data[offp] & 0xff),
|
|
1097
|
-
offp = (offp + 1) % data.length;
|
|
1098
|
-
return { key: word, offp: offp };
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1101
|
-
/**
|
|
1102
|
-
* @param {Array.<number>} key
|
|
1103
|
-
* @param {Array.<number>} P
|
|
1104
|
-
* @param {Array.<number>} S
|
|
1105
|
-
* @inner
|
|
1106
|
-
*/
|
|
1107
|
-
function _key(key, P, S) {
|
|
1108
|
-
var offset = 0,
|
|
1109
|
-
lr = [0, 0],
|
|
1110
|
-
plen = P.length,
|
|
1111
|
-
slen = S.length,
|
|
1112
|
-
sw;
|
|
1113
|
-
for (var i = 0; i < plen; i++)
|
|
1114
|
-
sw = _streamtoword(key, offset),
|
|
1115
|
-
offset = sw.offp,
|
|
1116
|
-
P[i] = P[i] ^ sw.key;
|
|
1117
|
-
for (i = 0; i < plen; i += 2)
|
|
1118
|
-
lr = _encipher(lr, 0, P, S),
|
|
1119
|
-
P[i] = lr[0],
|
|
1120
|
-
P[i + 1] = lr[1];
|
|
1121
|
-
for (i = 0; i < slen; i += 2)
|
|
1122
|
-
lr = _encipher(lr, 0, P, S),
|
|
1123
|
-
S[i] = lr[0],
|
|
1124
|
-
S[i + 1] = lr[1];
|
|
1125
|
-
}
|
|
1126
|
-
|
|
1127
|
-
/**
|
|
1128
|
-
* Expensive key schedule Blowfish.
|
|
1129
|
-
* @param {Array.<number>} data
|
|
1130
|
-
* @param {Array.<number>} key
|
|
1131
|
-
* @param {Array.<number>} P
|
|
1132
|
-
* @param {Array.<number>} S
|
|
1133
|
-
* @inner
|
|
1134
|
-
*/
|
|
1135
|
-
function _ekskey(data, key, P, S) {
|
|
1136
|
-
var offp = 0,
|
|
1137
|
-
lr = [0, 0],
|
|
1138
|
-
plen = P.length,
|
|
1139
|
-
slen = S.length,
|
|
1140
|
-
sw;
|
|
1141
|
-
for (var i = 0; i < plen; i++)
|
|
1142
|
-
sw = _streamtoword(key, offp),
|
|
1143
|
-
offp = sw.offp,
|
|
1144
|
-
P[i] = P[i] ^ sw.key;
|
|
1145
|
-
offp = 0;
|
|
1146
|
-
for (i = 0; i < plen; i += 2)
|
|
1147
|
-
sw = _streamtoword(data, offp),
|
|
1148
|
-
offp = sw.offp,
|
|
1149
|
-
lr[0] ^= sw.key,
|
|
1150
|
-
sw = _streamtoword(data, offp),
|
|
1151
|
-
offp = sw.offp,
|
|
1152
|
-
lr[1] ^= sw.key,
|
|
1153
|
-
lr = _encipher(lr, 0, P, S),
|
|
1154
|
-
P[i] = lr[0],
|
|
1155
|
-
P[i + 1] = lr[1];
|
|
1156
|
-
for (i = 0; i < slen; i += 2)
|
|
1157
|
-
sw = _streamtoword(data, offp),
|
|
1158
|
-
offp = sw.offp,
|
|
1159
|
-
lr[0] ^= sw.key,
|
|
1160
|
-
sw = _streamtoword(data, offp),
|
|
1161
|
-
offp = sw.offp,
|
|
1162
|
-
lr[1] ^= sw.key,
|
|
1163
|
-
lr = _encipher(lr, 0, P, S),
|
|
1164
|
-
S[i] = lr[0],
|
|
1165
|
-
S[i + 1] = lr[1];
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
/**
|
|
1169
|
-
* Internaly crypts a string.
|
|
1170
|
-
* @param {Array.<number>} b Bytes to crypt
|
|
1171
|
-
* @param {Array.<number>} salt Salt bytes to use
|
|
1172
|
-
* @param {number} rounds Number of rounds
|
|
1173
|
-
* @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If
|
|
1174
|
-
* omitted, the operation will be performed synchronously.
|
|
1175
|
-
* @param {function(number)=} progressCallback Callback called with the current progress
|
|
1176
|
-
* @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`
|
|
1177
|
-
* @inner
|
|
1178
|
-
*/
|
|
1179
|
-
function _crypt(b, salt, rounds, callback, progressCallback) {
|
|
1180
|
-
var cdata = C_ORIG.slice(),
|
|
1181
|
-
clen = cdata.length,
|
|
1182
|
-
err;
|
|
1183
|
-
|
|
1184
|
-
// Validate
|
|
1185
|
-
if (rounds < 4 || rounds > 31) {
|
|
1186
|
-
err = Error("Illegal number of rounds (4-31): "+rounds);
|
|
1187
|
-
if (callback) {
|
|
1188
|
-
nextTick(callback.bind(this, err));
|
|
1189
|
-
return;
|
|
1190
|
-
} else
|
|
1191
|
-
throw err;
|
|
1192
|
-
}
|
|
1193
|
-
if (salt.length !== BCRYPT_SALT_LEN) {
|
|
1194
|
-
err =Error("Illegal salt length: "+salt.length+" != "+BCRYPT_SALT_LEN);
|
|
1195
|
-
if (callback) {
|
|
1196
|
-
nextTick(callback.bind(this, err));
|
|
1197
|
-
return;
|
|
1198
|
-
} else
|
|
1199
|
-
throw err;
|
|
1200
|
-
}
|
|
1201
|
-
rounds = (1 << rounds) >>> 0;
|
|
1202
|
-
|
|
1203
|
-
var P, S, i = 0, j;
|
|
1204
|
-
|
|
1205
|
-
//Use typed arrays when available - huge speedup!
|
|
1206
|
-
if (Int32Array) {
|
|
1207
|
-
P = new Int32Array(P_ORIG);
|
|
1208
|
-
S = new Int32Array(S_ORIG);
|
|
1209
|
-
} else {
|
|
1210
|
-
P = P_ORIG.slice();
|
|
1211
|
-
S = S_ORIG.slice();
|
|
1212
|
-
}
|
|
1213
|
-
|
|
1214
|
-
_ekskey(salt, b, P, S);
|
|
1215
|
-
|
|
1216
|
-
/**
|
|
1217
|
-
* Calcualtes the next round.
|
|
1218
|
-
* @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`
|
|
1219
|
-
* @inner
|
|
1220
|
-
*/
|
|
1221
|
-
function next() {
|
|
1222
|
-
if (progressCallback)
|
|
1223
|
-
progressCallback(i / rounds);
|
|
1224
|
-
if (i < rounds) {
|
|
1225
|
-
var start = Date.now();
|
|
1226
|
-
for (; i < rounds;) {
|
|
1227
|
-
i = i + 1;
|
|
1228
|
-
_key(b, P, S);
|
|
1229
|
-
_key(salt, P, S);
|
|
1230
|
-
if (Date.now() - start > MAX_EXECUTION_TIME)
|
|
1231
|
-
break;
|
|
1232
|
-
}
|
|
1233
|
-
} else {
|
|
1234
|
-
for (i = 0; i < 64; i++)
|
|
1235
|
-
for (j = 0; j < (clen >> 1); j++)
|
|
1236
|
-
_encipher(cdata, j << 1, P, S);
|
|
1237
|
-
var ret = [];
|
|
1238
|
-
for (i = 0; i < clen; i++)
|
|
1239
|
-
ret.push(((cdata[i] >> 24) & 0xff) >>> 0),
|
|
1240
|
-
ret.push(((cdata[i] >> 16) & 0xff) >>> 0),
|
|
1241
|
-
ret.push(((cdata[i] >> 8) & 0xff) >>> 0),
|
|
1242
|
-
ret.push((cdata[i] & 0xff) >>> 0);
|
|
1243
|
-
if (callback) {
|
|
1244
|
-
callback(null, ret);
|
|
1245
|
-
return;
|
|
1246
|
-
} else
|
|
1247
|
-
return ret;
|
|
1248
|
-
}
|
|
1249
|
-
if (callback)
|
|
1250
|
-
nextTick(next);
|
|
1251
|
-
}
|
|
1252
|
-
|
|
1253
|
-
// Async
|
|
1254
|
-
if (typeof callback !== 'undefined') {
|
|
1255
|
-
next();
|
|
1256
|
-
|
|
1257
|
-
// Sync
|
|
1258
|
-
} else {
|
|
1259
|
-
var res;
|
|
1260
|
-
while (true)
|
|
1261
|
-
if (typeof(res = next()) !== 'undefined')
|
|
1262
|
-
return res || [];
|
|
1263
|
-
}
|
|
1264
|
-
}
|
|
1265
|
-
|
|
1266
|
-
/**
|
|
1267
|
-
* Internally hashes a string.
|
|
1268
|
-
* @param {string} s String to hash
|
|
1269
|
-
* @param {?string} salt Salt to use, actually never null
|
|
1270
|
-
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,
|
|
1271
|
-
* hashing is perormed synchronously.
|
|
1272
|
-
* @param {function(number)=} progressCallback Callback called with the current progress
|
|
1273
|
-
* @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`
|
|
1274
|
-
* @inner
|
|
1275
|
-
*/
|
|
1276
|
-
function _hash(s, salt, callback, progressCallback) {
|
|
1277
|
-
var err;
|
|
1278
|
-
if (typeof s !== 'string' || typeof salt !== 'string') {
|
|
1279
|
-
err = Error("Invalid string / salt: Not a string");
|
|
1280
|
-
if (callback) {
|
|
1281
|
-
nextTick(callback.bind(this, err));
|
|
1282
|
-
return;
|
|
1283
|
-
}
|
|
1284
|
-
else
|
|
1285
|
-
throw err;
|
|
1286
|
-
}
|
|
1287
|
-
|
|
1288
|
-
// Validate the salt
|
|
1289
|
-
var minor, offset;
|
|
1290
|
-
if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {
|
|
1291
|
-
err = Error("Invalid salt version: "+salt.substring(0,2));
|
|
1292
|
-
if (callback) {
|
|
1293
|
-
nextTick(callback.bind(this, err));
|
|
1294
|
-
return;
|
|
1295
|
-
}
|
|
1296
|
-
else
|
|
1297
|
-
throw err;
|
|
1298
|
-
}
|
|
1299
|
-
if (salt.charAt(2) === '$')
|
|
1300
|
-
minor = String.fromCharCode(0),
|
|
1301
|
-
offset = 3;
|
|
1302
|
-
else {
|
|
1303
|
-
minor = salt.charAt(2);
|
|
1304
|
-
if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {
|
|
1305
|
-
err = Error("Invalid salt revision: "+salt.substring(2,4));
|
|
1306
|
-
if (callback) {
|
|
1307
|
-
nextTick(callback.bind(this, err));
|
|
1308
|
-
return;
|
|
1309
|
-
} else
|
|
1310
|
-
throw err;
|
|
1311
|
-
}
|
|
1312
|
-
offset = 4;
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
// Extract number of rounds
|
|
1316
|
-
if (salt.charAt(offset + 2) > '$') {
|
|
1317
|
-
err = Error("Missing salt rounds");
|
|
1318
|
-
if (callback) {
|
|
1319
|
-
nextTick(callback.bind(this, err));
|
|
1320
|
-
return;
|
|
1321
|
-
} else
|
|
1322
|
-
throw err;
|
|
1323
|
-
}
|
|
1324
|
-
var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,
|
|
1325
|
-
r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),
|
|
1326
|
-
rounds = r1 + r2,
|
|
1327
|
-
real_salt = salt.substring(offset + 3, offset + 25);
|
|
1328
|
-
s += minor >= 'a' ? "\x00" : "";
|
|
1329
|
-
|
|
1330
|
-
var passwordb = stringToBytes(s),
|
|
1331
|
-
saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);
|
|
1332
|
-
|
|
1333
|
-
/**
|
|
1334
|
-
* Finishes hashing.
|
|
1335
|
-
* @param {Array.<number>} bytes Byte array
|
|
1336
|
-
* @returns {string}
|
|
1337
|
-
* @inner
|
|
1338
|
-
*/
|
|
1339
|
-
function finish(bytes) {
|
|
1340
|
-
var res = [];
|
|
1341
|
-
res.push("$2");
|
|
1342
|
-
if (minor >= 'a')
|
|
1343
|
-
res.push(minor);
|
|
1344
|
-
res.push("$");
|
|
1345
|
-
if (rounds < 10)
|
|
1346
|
-
res.push("0");
|
|
1347
|
-
res.push(rounds.toString());
|
|
1348
|
-
res.push("$");
|
|
1349
|
-
res.push(base64_encode(saltb, saltb.length));
|
|
1350
|
-
res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));
|
|
1351
|
-
return res.join('');
|
|
1352
|
-
}
|
|
1353
|
-
|
|
1354
|
-
// Sync
|
|
1355
|
-
if (typeof callback == 'undefined')
|
|
1356
|
-
return finish(_crypt(passwordb, saltb, rounds));
|
|
1357
|
-
|
|
1358
|
-
// Async
|
|
1359
|
-
else {
|
|
1360
|
-
_crypt(passwordb, saltb, rounds, function(err, bytes) {
|
|
1361
|
-
if (err)
|
|
1362
|
-
callback(err, null);
|
|
1363
|
-
else
|
|
1364
|
-
callback(null, finish(bytes));
|
|
1365
|
-
}, progressCallback);
|
|
1366
|
-
}
|
|
1367
|
-
}
|
|
1368
|
-
|
|
1369
|
-
/**
|
|
1370
|
-
* Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.
|
|
1371
|
-
* @function
|
|
1372
|
-
* @param {!Array.<number>} b Byte array
|
|
1373
|
-
* @param {number} len Maximum input length
|
|
1374
|
-
* @returns {string}
|
|
1375
|
-
* @expose
|
|
1376
|
-
*/
|
|
1377
|
-
bcrypt.encodeBase64 = base64_encode;
|
|
1378
|
-
|
|
1379
|
-
/**
|
|
1380
|
-
* Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.
|
|
1381
|
-
* @function
|
|
1382
|
-
* @param {string} s String to decode
|
|
1383
|
-
* @param {number} len Maximum output length
|
|
1384
|
-
* @returns {!Array.<number>}
|
|
1385
|
-
* @expose
|
|
1386
|
-
*/
|
|
1387
|
-
bcrypt.decodeBase64 = base64_decode;
|
|
1388
|
-
|
|
1389
|
-
return bcrypt;
|
|
1390
|
-
}));
|
|
1391
|
-
});
|
|
1392
|
-
|
|
1393
|
-
/*
|
|
1394
|
-
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
|
|
1395
|
-
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
|
|
1396
|
-
Copyright (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
|
1397
|
-
|
|
1398
|
-
Redistribution and use in source and binary forms, with or without
|
|
1399
|
-
modification, are permitted provided that the following conditions
|
|
1400
|
-
are met:
|
|
1401
|
-
1. Redistributions of source code must retain the above copyright
|
|
1402
|
-
notice, this list of conditions and the following disclaimer.
|
|
1403
|
-
2. Redistributions in binary form must reproduce the above copyright
|
|
1404
|
-
notice, this list of conditions and the following disclaimer in the
|
|
1405
|
-
documentation and/or other materials provided with the distribution.
|
|
1406
|
-
3. The name of the author may not be used to endorse or promote products
|
|
1407
|
-
derived from this software without specific prior written permission.
|
|
1408
|
-
|
|
1409
|
-
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
1410
|
-
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
1411
|
-
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
1412
|
-
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
1413
|
-
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
1414
|
-
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
1415
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
1416
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
1417
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
1418
|
-
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1419
|
-
*/
|
|
1420
|
-
|
|
1421
|
-
var bcryptjs = bcrypt;
|
|
1422
|
-
|
|
1423
15
|
var encrypt = function () {
|
|
1424
16
|
var _ref = asyncToGenerator._asyncToGenerator( /*#__PURE__*/asyncToGenerator.regenerator.mark(function _callee(password) {
|
|
1425
|
-
var
|
|
17
|
+
var hash;
|
|
1426
18
|
return asyncToGenerator.regenerator.wrap(function _callee$(_context) {
|
|
1427
19
|
while (1) {
|
|
1428
20
|
switch (_context.prev = _context.next) {
|
|
1429
21
|
case 0:
|
|
1430
|
-
|
|
1431
|
-
return
|
|
22
|
+
hash = md5.md5(password);
|
|
23
|
+
return _context.abrupt('return', hash);
|
|
1432
24
|
|
|
1433
25
|
case 2:
|
|
1434
|
-
salt = _context.sent;
|
|
1435
|
-
_context.next = 5;
|
|
1436
|
-
return bcryptjs.hash(password, salt);
|
|
1437
|
-
|
|
1438
|
-
case 5:
|
|
1439
|
-
hashedPassword = _context.sent;
|
|
1440
|
-
return _context.abrupt('return', hashedPassword);
|
|
1441
|
-
|
|
1442
|
-
case 7:
|
|
1443
26
|
case 'end':
|
|
1444
27
|
return _context.stop();
|
|
1445
28
|
}
|
|
@@ -1454,28 +37,15 @@ var encrypt = function () {
|
|
|
1454
37
|
|
|
1455
38
|
var comparePassword = function () {
|
|
1456
39
|
var _ref2 = asyncToGenerator._asyncToGenerator( /*#__PURE__*/asyncToGenerator.regenerator.mark(function _callee2(plainTextPassword, hashedPassword) {
|
|
1457
|
-
var
|
|
40
|
+
var hash;
|
|
1458
41
|
return asyncToGenerator.regenerator.wrap(function _callee2$(_context2) {
|
|
1459
42
|
while (1) {
|
|
1460
43
|
switch (_context2.prev = _context2.next) {
|
|
1461
44
|
case 0:
|
|
1462
|
-
|
|
1463
|
-
return
|
|
45
|
+
hash = md5.md5(plainTextPassword);
|
|
46
|
+
return _context2.abrupt('return', hash === hashedPassword);
|
|
1464
47
|
|
|
1465
48
|
case 2:
|
|
1466
|
-
isAuth = _context2.sent;
|
|
1467
|
-
|
|
1468
|
-
if (!isAuth.error) {
|
|
1469
|
-
_context2.next = 5;
|
|
1470
|
-
break;
|
|
1471
|
-
}
|
|
1472
|
-
|
|
1473
|
-
throw new Error('failed to compare password');
|
|
1474
|
-
|
|
1475
|
-
case 5:
|
|
1476
|
-
return _context2.abrupt('return', isAuth);
|
|
1477
|
-
|
|
1478
|
-
case 6:
|
|
1479
49
|
case 'end':
|
|
1480
50
|
return _context2.stop();
|
|
1481
51
|
}
|
|
@@ -1490,7 +60,7 @@ var comparePassword = function () {
|
|
|
1490
60
|
|
|
1491
61
|
var faunadb = require('faunadb'),
|
|
1492
62
|
q = faunadb.query;
|
|
1493
|
-
var secret =
|
|
63
|
+
var secret = 'fnAEG3Bb7AACAC0BiSQFYGBLFUtHjn3QOTKE1iBX'; //
|
|
1494
64
|
|
|
1495
65
|
var registerUser = function () {
|
|
1496
66
|
var _ref = asyncToGenerator._asyncToGenerator( /*#__PURE__*/asyncToGenerator.regenerator.mark(function _callee(body) {
|
|
@@ -1502,13 +72,11 @@ var registerUser = function () {
|
|
|
1502
72
|
_context.prev = 0;
|
|
1503
73
|
data = body;
|
|
1504
74
|
|
|
1505
|
-
|
|
75
|
+
{
|
|
1506
76
|
_context.next = 4;
|
|
1507
77
|
break;
|
|
1508
78
|
}
|
|
1509
79
|
|
|
1510
|
-
throw new Error('Missing secret key');
|
|
1511
|
-
|
|
1512
80
|
case 4:
|
|
1513
81
|
client = new faunadb.Client({ secret: secret });
|
|
1514
82
|
_context.next = 7;
|
|
@@ -1518,6 +86,7 @@ var registerUser = function () {
|
|
|
1518
86
|
hashedPassword = _context.sent;
|
|
1519
87
|
|
|
1520
88
|
data.Password = hashedPassword;
|
|
89
|
+
|
|
1521
90
|
_context.next = 11;
|
|
1522
91
|
return client.query(q.Create(q.Collection('Users'), {
|
|
1523
92
|
data: data
|
|
@@ -1526,7 +95,7 @@ var registerUser = function () {
|
|
|
1526
95
|
case 11:
|
|
1527
96
|
result = _context.sent;
|
|
1528
97
|
|
|
1529
|
-
if (!(!result.data || result.data.Email != data.Email)) {
|
|
98
|
+
if (!(!result || !result.data || result.data.Email != data.Email)) {
|
|
1530
99
|
_context.next = 14;
|
|
1531
100
|
break;
|
|
1532
101
|
}
|