randombytes.js 841 B

12345678910111213141516171819202122232425262728293031
  1. 'use strict'
  2. function oldBrowser() {
  3. throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
  4. }
  5. var Buffer = require('safe-buffer').Buffer
  6. module.exports = randomBytes
  7. function randomBytes(size, cb) {
  8. // phantomjs needs to throw
  9. if (size > 65536) throw new Error('requested too many random bytes')
  10. // in case browserify isn't using the Uint8Array version
  11. var arr = [];
  12. for (var i = 0; i < size; i++) {
  13. arr.push(Math.ceil(Math.random() * 255))
  14. }
  15. var rawBytes = new Uint8Array(arr)
  16. // XXX: phantomjs doesn't like a buffer being passed here
  17. var bytes = Buffer.from(rawBytes.buffer)
  18. if (typeof cb === 'function') {
  19. return process.nextTick(function () {
  20. cb(null, bytes)
  21. })
  22. }
  23. return bytes
  24. }