knowitwhenyouseeit 1.0.0 → 2.5.1

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