UNPKG

madeline-ton

Version:

Pure JS client-side implementation of the Telegram TON blockchain protocol

79 lines (59 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.secureRandomInt = exports.secureRandom = exports.fastRandomInt = exports.fastRandom = void 0; var _rng = require("../lib/rng"); var _poly = require("./poly"); var fastRandom = function fastRandom(buffer) { var myBuf = buffer; if (!(buffer instanceof Uint8Array)) { myBuf = new Uint8Array(buffer.buffer); } var length = myBuf.byteLength; for (var x = 0; x < length; x++) { myBuf[x] = Math.floor(Math.random() * 0xFF); } return buffer; }; /** * Fill array with cryptographically secure random values * @param {BufferSource} buffer Buffer to fill */ exports.fastRandom = fastRandom; var secureRandom; exports.secureRandom = secureRandom; if (_poly.useWebCryptoRandom) { exports.secureRandom = secureRandom = _poly.windowObject.crypto.getRandomValues.bind(_poly.windowObject.crypto); } else { if (typeof window !== 'undefined' && !_poly.useWorkers) { window.onclick = _rng.rng_seed_time; window.onkeydown = _rng.rng_seed_time; } exports.secureRandom = secureRandom = function secureRandom(buffer) { var myBuf = buffer; if (!(buffer instanceof Uint8Array)) { myBuf = new Uint8Array(buffer.buffer); } (0, _rng.rng_get_bytes)(myBuf); return buffer; }; } /** * Get non-cryptographically secure integer modulo mod * @param {number} mod Modulo * @returns number */ var fastRandomInt = function fastRandomInt(mod) { return Math.floor(Math.random() * (mod || 0xFFFFFFFF)); }; /** * Get cryptographically secure integer modulo mod * @param {number} mod Modulo * @returns number */ exports.fastRandomInt = fastRandomInt; var secureRandomInt = function secureRandomInt(mod) { return secureRandom(new Uint32Array(1))[0] % (mod || 0xFFFFFFFF); }; exports.secureRandomInt = secureRandomInt;