'use strict'; var defineProperty = require('./properties.js').defineProperty; var crypto = global.crypto || global.msCrypto; if (!crypto || !crypto.getRandomValues) { console.log('WARNING: Missing strong random number source; using weak randomBytes'); crypto = { getRandomValues: function(buffer) { for (var round = 0; round < 20; round++) { for (var i = 0; i < buffer.length; i++) { if (round) { buffer[i] ^= parseInt(256 * Math.random()); } else { buffer[i] = parseInt(256 * Math.random()); } } } return buffer; }, _weakCrypto: true }; } function randomBytes(length) { if (length <= 0 || length > 1024 || parseInt(length) != length) { throw new Error('invalid length'); } var result = new Uint8Array(length); crypto.getRandomValues(result); return result; }; if (crypto._weakCrypto === true) { defineProperty(randomBytes, '_weakCrypto', true); } module.exports = randomBytes;