smartmeter-app/utils/blufi/crypto/lib/brorand.js

53 lines
1.1 KiB
JavaScript
Raw Normal View History

2024-04-27 17:20:50 +08:00
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) {}
}