Skip to content

Commit 9b1cf11

Browse files
committed
Implement pseudoRandomBytes.
Provide the same interface as rng, but fallback to pseudoRandomBytes on node.
1 parent 5142c60 commit 9b1cf11

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

index.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
2-
var rng = require('./rng')
2+
var rng = exports.rng = require('./rng')
3+
var prng = exports.prng = require('./prng');
34

45
function error () {
56
var m = [].slice.call(arguments).join(' ')
@@ -23,6 +24,15 @@ exports.randomBytes = function(size, callback) {
2324
return new Buffer(rng(size))
2425
}
2526
}
27+
exports.pseudoRandomBytes = function(size, callback) {
28+
if (callback && callback.call) {
29+
try {
30+
callback.call(this, undefined, new Buffer(prng(size)))
31+
} catch (err) { callback(err) }
32+
} else {
33+
return new Buffer(prng(size))
34+
}
35+
}
2636

2737
function each(a, f) {
2838
for(var i in a)

prng.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
(function() {
3+
var g = ('undefined' === typeof window ? global : window) || {}
4+
var _crypto = (
5+
g.crypto || g.msCrypto || require('crypto')
6+
)
7+
module.exports = function(size) {
8+
// Modern Browsers
9+
if(_crypto.getRandomValues) {
10+
var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
11+
/* This will not work in older browsers.
12+
* See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
13+
*/
14+
15+
_crypto.getRandomValues(bytes);
16+
return bytes;
17+
}
18+
else if (_crypto.pseudoRandomBytes) {
19+
return _crypto.pseudoRandomBytes(size)
20+
}
21+
else
22+
throw new Error(
23+
'pseudo random number generation not yet implemented for this browser\n'+
24+
'use chrome, FireFox or Internet Explorer 11'
25+
)
26+
}
27+
}())

0 commit comments

Comments
 (0)