line_push/node_modules/js-crypto-random/dist/random.js
2022-07-21 03:28:35 +00:00

112 lines
3.3 KiB
JavaScript

"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getRandomBytes = exports.getRandomSampledString = exports.getRandomAsciiString = exports.getRandomString = void 0;
var util = _interopRequireWildcard(require("js-crypto-env"));
/**
* random.js
*/
/**
* Secure random string generator based on getRandomBytes,
* which is composed of uppercase or lowercase alphanumeric characters;
* @param {Number} len - Length of string.
* @return {String} - Generated random ASCII string.
*/
var getRandomString = function getRandomString(len) {
var array = getRandomBytes(len);
var types = getRandomBytes(len); // indicating alphanumeric, upper, lower
var finalString = ''; // Ascii code
// 1-0: 0x30 -- 0x39, 10 chars
// A-Z: 0x41 -- 0x5a,
// a-z: 0x61 -- 0x7a
for (var i = 0; i < len; i++) {
types[i] = types[i] % 3;
array[i] = types[i] === 0 ? array[i] % 10 + 0x30 : array[i] % 26 + (types[i] === 1 ? 0x41 : 0x61);
finalString += String.fromCharCode(array[i]);
}
return finalString;
};
/**
* Secure random 'ASCII' string generator based on getRandomBytes;
* @param {Number} len - Length of ASCII string.
* @return {String} - Generated random ASCII string.
*/
exports.getRandomString = getRandomString;
var getRandomAsciiString = function getRandomAsciiString(len) {
var array = getRandomBytes(len);
var finalString = ''; // Ascii code excluding control characters are in 0x20 -- 0x7e
for (var i = 0; i < len; i++) {
array[i] = array[i] % 0x5e + 0x20;
finalString += String.fromCharCode(array[i]);
}
return finalString;
};
/**
* Secure random string generator based on getRandomBytes,
* which is composed of givin character candidates;
* @param {Number} len - Length of string.
* @param {String} candidates - Candidates string to sample randomly.
* @return {String} - Generated random string.
*/
exports.getRandomAsciiString = getRandomAsciiString;
var getRandomSampledString = function getRandomSampledString(len, candidates) {
var candidate_len = candidates.length;
if (candidate_len === 0) return '';
var array = getRandomBytes(len);
var finalString = '';
for (var i = 0; i < len; i++) {
finalString += candidates[array[i] % candidate_len];
}
return finalString;
};
/**
* Secure random generator that returns a byte array filled with cryptographically secure random bytes
* @param {Number} len - Byte length of random sequence.
* @return {Uint8Array} - Generated random sequence.
* @throws {Error} - Throws if UnsupportedEnvironment.
*/
exports.getRandomSampledString = getRandomSampledString;
var getRandomBytes = function getRandomBytes(len) {
var webCrypto = util.getRootWebCryptoAll(); // web crypto api or ms crypto
var nodeCrypto = util.getNodeCrypto(); // implementation on node.js
var array;
if (typeof webCrypto !== 'undefined' && typeof webCrypto.getRandomValues === 'function') {
array = new Uint8Array(len);
webCrypto.getRandomValues(array); // for modern browsers or legacy ie 11
} else if (typeof nodeCrypto !== 'undefined') {
// for node
array = new Uint8Array(nodeCrypto.randomBytes(len));
} else {
throw new Error('UnsupportedEnvironment');
}
return array;
};
exports.getRandomBytes = getRandomBytes;