Sha256: c5245d2d375ccb7dd5b42cd88b7c23b771ba6c759e9d081174db2caff1346a50

Contents?: true

Size: 1.54 KB

Versions: 34

Compression:

Stored size: 1.54 KB

Contents

'use strict'

// limit of Crypto.getRandomValues()
// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
var MAX_BYTES = 65536

// Node supports requesting up to this number of bytes
// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48
var MAX_UINT32 = 4294967295

function oldBrowser () {
  throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
}

var Buffer = require('safe-buffer').Buffer
var crypto = global.crypto || global.msCrypto

if (crypto && crypto.getRandomValues) {
  module.exports = randomBytes
} else {
  module.exports = oldBrowser
}

function randomBytes (size, cb) {
  // phantomjs needs to throw
  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')

  var bytes = Buffer.allocUnsafe(size)

  if (size > 0) {  // getRandomValues fails on IE if size == 0
    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues
      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
      for (var generated = 0; generated < size; generated += MAX_BYTES) {
        // buffer.slice automatically checks if the end is past the end of
        // the buffer so we don't have to here
        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))
      }
    } else {
      crypto.getRandomValues(bytes)
    }
  }

  if (typeof cb === 'function') {
    return process.nextTick(function () {
      cb(null, bytes)
    })
  }

  return bytes
}

Version data entries

34 entries across 33 versions & 11 rubygems

Version Path
rapid_stack-0.2.0 templates/frontend/node_modules/randombytes/browser.js
rapid_stack-0.1.1 templates/FrontEnd/node_modules/randombytes/browser.js
rapid_stack-0.1.0 templates/FrontEnd/node_modules/randombytes/browser.js
optimacms-0.1.61 spec/dummy/node_modules/randombytes/browser.js
disco_app-0.18.0 test/dummy/node_modules/randombytes/browser.js
disco_app-0.18.2 test/dummy/node_modules/randombytes/browser.js
epuber-stylus-source-0.56.0 vendor/node_modules/randombytes/browser.js
disco_app-0.16.1 test/dummy/node_modules/randombytes/browser.js
disco_app-0.15.2 test/dummy/node_modules/randombytes/browser.js
disco_app-0.18.4 test/dummy/node_modules/randombytes/browser.js
disco_app-0.18.1 test/dummy/node_modules/randombytes/browser.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/randombytes/browser.js
disco_app-0.14.0 test/dummy/node_modules/randombytes/browser.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/randombytes/browser.js
epuber-stylus-source-0.54.8 vendor/node_modules/randombytes/browser.js
tang-0.2.1 spec/tang_app/node_modules/randombytes/browser.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/randombytes/browser.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/randombytes/browser.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/randombytes/browser.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/randombytes/browser.js