UNPKG

@korekoi/react-native-get-random-values

Version:

⚡️ A fast implementation of `crypto.getRandomValues` for React Native

33 lines (30 loc) 1.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRandomValues = exports.TypeMismatchError = exports.QuotaExceededError = exports.MAX_BYTE_ARRAY_LENGTH = void 0; var _reactNativeNitroModules = require("react-native-nitro-modules"); // 4byte const MAX_BYTE_ARRAY_LENGTH = exports.MAX_BYTE_ARRAY_LENGTH = 65536; const sodium = _reactNativeNitroModules.NitroModules.createHybridObject("Sodium"); // port correct types as the browser/node implementation https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#exceptions class TypeMismatchError extends Error {} exports.TypeMismatchError = TypeMismatchError; class QuotaExceededError extends Error {} exports.QuotaExceededError = QuotaExceededError; const getRandomValues = array => { if (array.byteLength > MAX_BYTE_ARRAY_LENGTH) { throw new QuotaExceededError("ArrayBuffer length exceeds maximum length of 65536 bytes."); } sodium.getRandomValues(array.buffer); return array; }; exports.getRandomValues = getRandomValues; if (typeof global.crypto !== "object") { // eslint-disable-next-line @typescript-eslint/no-explicit-any global.crypto = {}; } if (typeof global.crypto.getRandomValues === "undefined") { global.crypto.getRandomValues = getRandomValues; } //# sourceMappingURL=index.js.map