33 lines
		
	
	
		
			735 B
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			735 B
		
	
	
	
		
			JavaScript
		
	
	
	
| 
 | |
| var rng;
 | |
| 
 | |
| var crypto = global.crypto || global.msCrypto; // for IE 11
 | |
| if (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;
 | |
| 
 |