UNPKG

@geut/randombytes

Version:

randombytes from node that works in the browser

67 lines (66 loc) 2.23 kB
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 }); module.exports = __toCommonJS(browser_exports); 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; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = {}); //# sourceMappingURL=browser.cjs.map