var r; module.exports = function rand(len) { if (!r) r = new Rand(null); return r.generate(len); }; function Rand(rand) { this.rand = rand; } module.exports.Rand = Rand; Rand.prototype.generate = function generate(len) { return this._rand(len); }; // Emulate crypto API using randy Rand.prototype._rand = function _rand(n) { console.log(this); if (this.rand.getBytes) return this.rand.getBytes(n); var res = new Uint8Array(n); for (var i = 0; i < res.length; i++) res[i] = this.rand.getByte(); return res; }; if (typeof self === 'object') { Rand.prototype._rand = function _rand(n) { var list = []; for (var i = 0; i < n; i++) { list.push(Math.ceil(Math.random() * 255)); } var arr = new Uint8Array(list); return arr; }; } else { // Node.js or Web worker with no crypto support try { // var crypto = require("./crypto.js"); var crypto = 0; if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); Rand.prototype._rand = function _rand(n) { // return crypto.randomBytes(n); return crypto; }; } catch (e) {} }