@geut/randombytes
Version:
randombytes from node that works in the browser
1 lines • 2.64 kB
Source Map (JSON)
{"version":3,"sources":["../src/browser.js"],"sourcesContent":["// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nconst MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nconst MAX_UINT32 = 4294967295\n\nconst crypto = globalThis.crypto || globalThis.msCrypto\nconst canUseBuffer = typeof Buffer !== 'undefined' || globalThis.Buffer\n\nexport default function randomBytes (size, cb) {\n size = Number(size)\n\n let err\n if (isNaN(size)) {\n err = new Error('Invalid size')\n } else if (!crypto || !crypto.getRandomValues) {\n err = new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n } else if (size > MAX_UINT32) {\n err = new RangeError('requested too many random bytes')\n }\n\n if (err) {\n if (cb) {\n return queueMicrotask(() => {\n cb(err)\n })\n } else {\n throw err\n }\n }\n\n const bytes = canUseBuffer ? Buffer.allocUnsafe(size) : new Uint8Array(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (let generated = 0; generated < size; generated += MAX_BYTES) {\n crypto.getRandomValues(bytes.subarray(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (cb) {\n return queueMicrotask(() => {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAM,YAAY;AAIlB,IAAM,aAAa;AAEnB,IAAM,SAAS,WAAW,UAAU,WAAW;AAC/C,IAAM,eAAe,OAAO,WAAW,eAAe,WAAW;AAElD,SAAR,YAA8B,MAAM,IAAI;AAC7C,SAAO,OAAO,IAAI;AAElB,MAAI;AACJ,MAAI,MAAM,IAAI,GAAG;AACf,UAAM,IAAI,MAAM,cAAc;AAAA,EAChC,WAAW,CAAC,UAAU,CAAC,OAAO,iBAAiB;AAC7C,UAAM,IAAI,MAAM,gHAAgH;AAAA,EAClI,WAAW,OAAO,YAAY;AAC5B,UAAM,IAAI,WAAW,iCAAiC;AAAA,EACxD;AAEA,MAAI,KAAK;AACP,QAAI,IAAI;AACN,aAAO,eAAe,MAAM;AAC1B,WAAG,GAAG;AAAA,MACR,CAAC;AAAA,IACH,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,QAAQ,eAAe,OAAO,YAAY,IAAI,IAAI,IAAI,WAAW,IAAI;AAE3E,MAAI,OAAO,GAAG;AACZ,QAAI,OAAO,WAAW;AAEpB,eAAS,YAAY,GAAG,YAAY,MAAM,aAAa,WAAW;AAChE,eAAO,gBAAgB,MAAM,SAAS,WAAW,YAAY,SAAS,CAAC;AAAA,MACzE;AAAA,IACF,OAAO;AACL,aAAO,gBAAgB,KAAK;AAAA,IAC9B;AAAA,EACF;AAEA,MAAI,IAAI;AACN,WAAO,eAAe,MAAM;AAC1B,SAAG,MAAM,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}