madeline-ton
Version:
Pure JS client-side implementation of the Telegram TON blockchain protocol
79 lines (59 loc) • 1.86 kB
JavaScript
;
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;