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.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/node_modules/randombytes/browser.js b/node_modules/randombytes/browser.js
new file mode 100644
index 000000000..1aa3edcc7
--- /dev/null
+++ b/node_modules/randombytes/browser.js
@@ -0,0 +1,36 @@
+'use strict'
+
+function oldBrowser () {
+ throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
+}
+
+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)
+ }
+ // phantomjs doesn't like a buffer being passed here
+ var bytes = new Buffer(rawBytes.buffer)
+
+ if (typeof cb === 'function') {
+ return process.nextTick(function () {
+ cb(null, bytes)
+ })
+ }
+
+ return bytes
+}