@geut/randombytes
Version:
randombytes from node that works in the browser
67 lines (66 loc) • 2.3 kB
JavaScript
var randomBytes = (() => {
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/browser.js
var browser_exports = {};
__export(browser_exports, {
default: () => randomBytes
});
var MAX_BYTES = 65536;
var MAX_UINT32 = 4294967295;
var crypto = globalThis.crypto || globalThis.msCrypto;
var canUseBuffer = typeof Buffer !== "undefined" || globalThis.Buffer;
function randomBytes(size, cb) {
size = Number(size);
let err;
if (isNaN(size)) {
err = new Error("Invalid size");
} else if (!crypto || !crypto.getRandomValues) {
err = new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11");
} else if (size > MAX_UINT32) {
err = new RangeError("requested too many random bytes");
}
if (err) {
if (cb) {
return queueMicrotask(() => {
cb(err);
});
} else {
throw err;
}
}
const bytes = canUseBuffer ? Buffer.allocUnsafe(size) : new Uint8Array(size);
if (size > 0) {
if (size > MAX_BYTES) {
for (let generated = 0; generated < size; generated += MAX_BYTES) {
crypto.getRandomValues(bytes.subarray(generated, generated + MAX_BYTES));
}
} else {
crypto.getRandomValues(bytes);
}
}
if (cb) {
return queueMicrotask(() => {
cb(null, bytes);
});
}
return bytes;
}
return __toCommonJS(browser_exports);
})();
//# sourceMappingURL=browser.global.js.map