Server IP : 162.213.251.212 / Your IP : 3.134.245.237 [ Web Server : LiteSpeed System : Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : allssztx ( 535) PHP Version : 8.1.31 Disable Function : NONE Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/root/home/allssztx/needapair.com/node_modules/bcryptjs/src/ |
Upload File : |
/** * bcrypt namespace. * @type {Object.<string,*>} */ var bcrypt = {}; /** * The random implementation to use as a fallback. * @type {?function(number):!Array.<number>} * @inner */ var randomFallback = null; /** * Generates cryptographically secure random bytes. * @function * @param {number} len Bytes length * @returns {!Array.<number>} Random bytes * @throws {Error} If no random implementation is available * @inner */ function random(len) { /* node */ if (typeof module !== 'undefined' && module && module['exports']) try { return require("crypto")['randomBytes'](len); } catch (e) {} /* WCA */ try { var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len)); return Array.prototype.slice.call(a); } catch (e) {} /* fallback */ if (!randomFallback) throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative"); return randomFallback(len); } // Test if any secure randomness source is available var randomAvailable = false; try { random(1); randomAvailable = true; } catch (e) {} // Default fallback, if any randomFallback = /*? if (ISAAC) { */function(len) { for (var a=[], i=0; i<len; ++i) a[i] = ((0.5 + isaac() * 2.3283064365386963e-10) * 256) | 0; return a; };/*? } else { */null;/*? }*/ /** * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it * is seeded properly! * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its * sole argument, returning the corresponding array of cryptographically secure random byte values. * @see http://nodejs.org/api/crypto.html * @see http://www.w3.org/TR/WebCryptoAPI/ */ bcrypt.setRandomFallback = function(random) { randomFallback = random; }; /** * Synchronously generates a salt. * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted * @param {number=} seed_length Not supported. * @returns {string} Resulting salt * @throws {Error} If a random fallback is required but not set * @expose */ bcrypt.genSaltSync = function(rounds, seed_length) { rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS; if (typeof rounds !== 'number') throw Error("Illegal arguments: "+(typeof rounds)+", "+(typeof seed_length)); if (rounds < 4) rounds = 4; else if (rounds > 31) rounds = 31; var salt = []; salt.push("$2a$"); if (rounds < 10) salt.push("0"); salt.push(rounds.toString()); salt.push('$'); salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw return salt.join(''); }; /** * Asynchronously generates a salt. * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted * @param {(number|function(Error, string=))=} seed_length Not supported. * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt * @returns {!Promise} If `callback` has been omitted * @throws {Error} If `callback` is present but not a function * @expose */ bcrypt.genSalt = function(rounds, seed_length, callback) { if (typeof seed_length === 'function') callback = seed_length, seed_length = undefined; // Not supported. if (typeof rounds === 'function') callback = rounds, rounds = undefined; if (typeof rounds === 'undefined') rounds = GENSALT_DEFAULT_LOG2_ROUNDS; else if (typeof rounds !== 'number') throw Error("illegal arguments: "+(typeof rounds)); function _async(callback) { nextTick(function() { // Pretty thin, but salting is fast enough try { callback(null, bcrypt.genSaltSync(rounds)); } catch (err) { callback(err); } }); } if (callback) { if (typeof callback !== 'function') throw Error("Illegal callback: "+typeof(callback)); _async(callback); } else return new Promise(function(resolve, reject) { _async(function(err, res) { if (err) { reject(err); return; } resolve(res); }); }); }; /** * Synchronously generates a hash for the given string. * @param {string} s String to hash * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10 * @returns {string} Resulting hash * @expose */ bcrypt.hashSync = function(s, salt) { if (typeof salt === 'undefined') salt = GENSALT_DEFAULT_LOG2_ROUNDS; if (typeof salt === 'number') salt = bcrypt.genSaltSync(salt); if (typeof s !== 'string' || typeof salt !== 'string') throw Error("Illegal arguments: "+(typeof s)+', '+(typeof salt)); return _hash(s, salt); }; /** * Asynchronously generates a hash for the given string. * @param {string} s String to hash * @param {number|string} salt Salt length to generate or salt to use * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms. * @returns {!Promise} If `callback` has been omitted * @throws {Error} If `callback` is present but not a function * @expose */ bcrypt.hash = function(s, salt, callback, progressCallback) { function _async(callback) { if (typeof s === 'string' && typeof salt === 'number') bcrypt.genSalt(salt, function(err, salt) { _hash(s, salt, callback, progressCallback); }); else if (typeof s === 'string' && typeof salt === 'string') _hash(s, salt, callback, progressCallback); else nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof salt)))); } if (callback) { if (typeof callback !== 'function') throw Error("Illegal callback: "+typeof(callback)); _async(callback); } else return new Promise(function(resolve, reject) { _async(function(err, res) { if (err) { reject(err); return; } resolve(res); }); }); }; /** * Compares two strings of the same length in constant time. * @param {string} known Must be of the correct length * @param {string} unknown Must be the same length as `known` * @returns {boolean} * @inner */ function safeStringCompare(known, unknown) { var right = 0, wrong = 0; for (var i=0, k=known.length; i<k; ++i) { if (known.charCodeAt(i) === unknown.charCodeAt(i)) ++right; else ++wrong; } // Prevent removal of unused variables (never true, actually) if (right < 0) return false; return wrong === 0; } /** * Synchronously tests a string against a hash. * @param {string} s String to compare * @param {string} hash Hash to test against * @returns {boolean} true if matching, otherwise false * @throws {Error} If an argument is illegal * @expose */ bcrypt.compareSync = function(s, hash) { if (typeof s !== "string" || typeof hash !== "string") throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash)); if (hash.length !== 60) return false; return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash); }; /** * Asynchronously compares the given data against the given hash. * @param {string} s Data to compare * @param {string} hash Data to be compared to * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms. * @returns {!Promise} If `callback` has been omitted * @throws {Error} If `callback` is present but not a function * @expose */ bcrypt.compare = function(s, hash, callback, progressCallback) { function _async(callback) { if (typeof s !== "string" || typeof hash !== "string") { nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof hash)))); return; } if (hash.length !== 60) { nextTick(callback.bind(this, null, false)); return; } bcrypt.hash(s, hash.substr(0, 29), function(err, comp) { if (err) callback(err); else callback(null, safeStringCompare(comp, hash)); }, progressCallback); } if (callback) { if (typeof callback !== 'function') throw Error("Illegal callback: "+typeof(callback)); _async(callback); } else return new Promise(function(resolve, reject) { _async(function(err, res) { if (err) { reject(err); return; } resolve(res); }); }); }; /** * Gets the number of rounds used to encrypt the specified hash. * @param {string} hash Hash to extract the used number of rounds from * @returns {number} Number of rounds used * @throws {Error} If `hash` is not a string * @expose */ bcrypt.getRounds = function(hash) { if (typeof hash !== "string") throw Error("Illegal arguments: "+(typeof hash)); return parseInt(hash.split("$")[2], 10); }; /** * Gets the salt portion from a hash. Does not validate the hash. * @param {string} hash Hash to extract the salt from * @returns {string} Extracted salt part * @throws {Error} If `hash` is not a string or otherwise invalid * @expose */ bcrypt.getSalt = function(hash) { if (typeof hash !== 'string') throw Error("Illegal arguments: "+(typeof hash)); if (hash.length !== 60) throw Error("Illegal hash length: "+hash.length+" != 60"); return hash.substring(0, 29); }; //? include("bcrypt/util.js"); //? include("bcrypt/impl.js"); /** * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet. * @function * @param {!Array.<number>} b Byte array * @param {number} len Maximum input length * @returns {string} * @expose */ bcrypt.encodeBase64 = base64_encode; /** * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet. * @function * @param {string} s String to decode * @param {number} len Maximum output length * @returns {!Array.<number>} * @expose */ bcrypt.decodeBase64 = base64_decode;