UNPKG

contingent

Version:

Create cryptographically-strong random numbers in node.js or the browser

429 lines (357 loc) 11.4 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["contingent"] = factory(); else root["contingent"] = factory(); })(window, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 2); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __importDefault = this && this.__importDefault || function (mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = __webpack_require__(3); var browser_lib_1 = __importDefault(__webpack_require__(4)); var _core_1$core = core_1.core(browser_lib_1["default"]), _randomBytes = _core_1$core.randomBytes, randomBit = _core_1$core.randomBit, randomByte = _core_1$core.randomByte, randomInt = _core_1$core.randomInt, randomUInt = _core_1$core.randomUInt, randomFloat = _core_1$core.randomFloat, randomIn = _core_1$core.randomIn, randomOf = _core_1$core.randomOf, roll = _core_1$core.roll, shuffle = _core_1$core.shuffle, pick = _core_1$core.pick, select = _core_1$core.select, replace = _core_1$core.replace, generate = _core_1$core.generate; exports.randomBit = randomBit; exports.randomByte = randomByte; exports.randomInt = randomInt; exports.randomUInt = randomUInt; exports.randomFloat = randomFloat; exports.randomIn = randomIn; exports.randomOf = randomOf; exports.roll = roll; exports.shuffle = shuffle; exports.pick = pick; exports.select = select; exports.replace = replace; exports.generate = generate; function randomBytes(n) { return _randomBytes(n); } exports.randomBytes = randomBytes; exports["default"] = { randomBytes: randomBytes, randomBit: randomBit, randomByte: randomByte, randomInt: randomInt, randomUInt: randomUInt, randomFloat: randomFloat, randomIn: randomIn, randomOf: randomOf, roll: roll, shuffle: shuffle, pick: pick, select: select, replace: replace, generate: generate }; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function swap(list, a, b) { var temp = list[a]; list[a] = list[b]; list[b] = temp; return list; } exports.swap = swap; function toArray(obj) { if (obj instanceof DataView) { return Array.from(new Uint8Array(obj.buffer)); } return Array.from(obj); } exports.toArray = toArray; /***/ }), /* 2 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _lib_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _lib_browser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_lib_browser__WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "contingent", function() { return _lib_browser__WEBPACK_IMPORTED_MODULE_0___default.a; }); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); /* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_lib_utils__WEBPACK_IMPORTED_MODULE_1__); _lib_browser__WEBPACK_IMPORTED_MODULE_0___default.a.toArray = _lib_utils__WEBPACK_IMPORTED_MODULE_1__["toArray"]; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = __webpack_require__(1); function _randomBytes(crypto, n) { return crypto.randomBytes(n); } function _randomBit(crypto) { return crypto.randomBit(); } function _randomByte(crypto) { return crypto.randomByte(); } function _randomInt(crypto) { return crypto.randomInt(); } function _randomUInt(crypto) { return crypto.randomUint(); } function _randomFloat(crypto) { return crypto.randomUint() / Math.pow(2, 32); } function _randomIn(crypto, min, max) { if (max < min) { throw new Error('max should be >= min'); } return min + Math.floor((max - min) * _randomFloat(crypto)); } function _randomOf(crypto, list) { return list[_randomIn(crypto, 0, list.length)]; } function _roll(crypto, n) { if (n <= 0) { throw new Error('<roll> sides should be >= 1'); } return _randomIn(crypto, 1, n + 1); } function _shuffle(crypto, list) { for (var i = 0; i < list.length; i++) { var elem = _randomIn(crypto, i, list.length); utils_1.swap(list, i, elem); } return list; } function _pick(crypto, n, list) { if (n < 0 || n > list.length) { throw new Error("num should be in the range [0, ".concat(list.length, "]")); } var copy = _shuffle(crypto, list.slice()); return copy.slice(-n); } function _select(crypto, n, list) { if (n < 0 || n > list.length) { throw new Error("num should be in the range [0, ".concat(list.length, "]")); } var indexes = []; var len = list.length; for (var i = 0; i < n; i++) { indexes.push(_randomIn(crypto, 0, len)); } return indexes.map(function (i) { return list[i]; }); } function _replace(crypto, list, value) { var elem = _randomIn(crypto, 0, list.length); list[elem] = value; return list; } function _generate(len, create) { return new Array(len).fill(0).map(function () { return create(); }); } function core(crypto) { return { randomBytes: function randomBytes(n) { return _randomBytes(crypto, n); }, randomBit: function randomBit() { return _randomBit(crypto); }, randomByte: function randomByte() { return _randomByte(crypto); }, randomInt: function randomInt() { return _randomInt(crypto); }, randomUInt: function randomUInt() { return _randomUInt(crypto); }, randomFloat: function randomFloat() { return _randomFloat(crypto); }, randomIn: function randomIn(min, max) { return _randomIn(crypto, min, max); }, randomOf: function randomOf(list) { return _randomOf(crypto, list); }, roll: function roll(n) { return _roll(crypto, n); }, shuffle: function shuffle(list) { return _shuffle(crypto, list); }, pick: function pick(n, list) { return _pick(crypto, n, list); }, select: function select(n, list) { return _select(crypto, n, list); }, replace: function replace(list, value) { return _replace(crypto, list, value); }, generate: function generate(len, create) { return _generate(len, create); } }; } exports.core = core; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function randomBytes(n) { var crypto = window.crypto || window.msCrypto; if (crypto == null) { throw new Error('crypto not found for randomBytes'); } var uint8 = crypto.getRandomValues(new Uint8Array(n)); return new DataView(uint8.buffer); } exports.randomBytes = randomBytes; function randomBit() { return randomBytes(1).getUint8(0) % 2 === 0; } exports.randomBit = randomBit; function randomByte() { return randomBytes(1).getUint8(0); } exports.randomByte = randomByte; function randomInt() { return randomBytes(4).getInt32(0); } exports.randomInt = randomInt; function randomUint() { return randomBytes(4).getUint32(0); } exports.randomUint = randomUint; exports["default"] = { randomBytes: randomBytes, randomBit: randomBit, randomByte: randomByte, randomInt: randomInt, randomUint: randomUint }; /***/ }) /******/ ])["contingent"]; });