aboutsummaryrefslogtreecommitdiff
path: root/node_modules/randombytes/browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/randombytes/browser.js')
-rw-r--r--node_modules/randombytes/browser.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/node_modules/randombytes/browser.js b/node_modules/randombytes/browser.js
new file mode 100644
index 00000000..58990c55
--- /dev/null
+++ b/node_modules/randombytes/browser.js
@@ -0,0 +1,38 @@
+'use strict'
+
+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 > 65536) throw new Error('requested too many random bytes')
+ // in case browserify isn't using the Uint8Array version
+ var rawBytes = new global.Uint8Array(size)
+
+ // This will not work in older browsers.
+ // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
+ if (size > 0) { // getRandomValues fails on IE if size == 0
+ crypto.getRandomValues(rawBytes)
+ }
+
+ // XXX: phantomjs doesn't like a buffer being passed here
+ var bytes = Buffer.from(rawBytes.buffer)
+
+ if (typeof cb === 'function') {
+ return process.nextTick(function () {
+ cb(null, bytes)
+ })
+ }
+
+ return bytes
+}