var rng; | |
if (global.crypto && crypto.getRandomValues) { | |
// WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto | |
// Moderately fast, high quality | |
var _rnds8 = new Uint8Array(16); | |
rng = function whatwgRNG() { | |
crypto.getRandomValues(_rnds8); | |
return _rnds8; | |
}; | |
} | |
if (!rng) { | |
// Math.random()-based (RNG) | |
// | |
// If all else fails, use Math.random(). It's fast, but is of unspecified | |
// quality. | |
var _rnds = new Array(16); | |
rng = function() { | |
for (var i = 0, r; i < 16; i++) { | |
if ((i & 0x03) === 0) r = Math.random() * 0x100000000; | |
_rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; | |
} | |
return _rnds; | |
}; | |
} | |
module.exports = rng; | |