UNPKG

react-native-quick-crypto

Version:

A fast implementation of Node's `crypto` module written in C/C++ JSI

84 lines (83 loc) 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkPrime = checkPrime; exports.checkPrimeSync = checkPrimeSync; exports.generatePrime = generatePrime; exports.generatePrimeSync = generatePrimeSync; var _reactNativeNitroModules = require("react-native-nitro-modules"); var _reactNativeBuffer = require("@craftzdog/react-native-buffer"); var _utils = require("./utils"); let native; function getNative() { if (native == null) { native = _reactNativeNitroModules.NitroModules.createHybridObject('Prime'); } return native; } function toOptionalArrayBuffer(value) { if (value == null) return undefined; if (value instanceof ArrayBuffer) return value; return (0, _utils.binaryLikeToArrayBuffer)(value); } function bufferToBigInt(buf) { let result = 0n; for (let i = 0; i < buf.length; i++) { result = result << 8n | BigInt(buf[i]); } return result; } function bigIntToBuffer(value) { if (value === 0n) return new Uint8Array([0]).buffer; const hex = value.toString(16); const paddedHex = hex.length % 2 ? '0' + hex : hex; const bytes = new Uint8Array(paddedHex.length / 2); for (let i = 0; i < bytes.length; i++) { bytes[i] = parseInt(paddedHex.substring(i * 2, i * 2 + 2), 16); } return bytes.buffer; } function generatePrimeSync(size, options) { const safe = options?.safe ?? false; const add = toOptionalArrayBuffer(options?.add); const rem = toOptionalArrayBuffer(options?.rem); const result = _reactNativeBuffer.Buffer.from(getNative().generatePrimeSync(size, safe, add, rem)); if (options?.bigint) { return bufferToBigInt(result); } return result; } function generatePrime(size, options, callback) { if (typeof options === 'function') { callback = options; options = {}; } const safe = options?.safe ?? false; const add = toOptionalArrayBuffer(options?.add); const rem = toOptionalArrayBuffer(options?.rem); const wantBigint = options?.bigint ?? false; getNative().generatePrime(size, safe, add, rem).then(ab => { const result = _reactNativeBuffer.Buffer.from(ab); if (wantBigint) { callback?.(null, bufferToBigInt(result)); } else { callback?.(null, result); } }).catch(err => callback?.(err, _reactNativeBuffer.Buffer.alloc(0))); } function checkPrimeSync(candidate, options) { const checks = options?.checks ?? 0; const buf = typeof candidate === 'bigint' ? bigIntToBuffer(candidate) : (0, _utils.binaryLikeToArrayBuffer)(candidate); return getNative().checkPrimeSync(buf, checks); } function checkPrime(candidate, options, callback) { if (typeof options === 'function') { callback = options; options = {}; } const checks = options.checks ?? 0; const buf = typeof candidate === 'bigint' ? bigIntToBuffer(candidate) : (0, _utils.binaryLikeToArrayBuffer)(candidate); getNative().checkPrime(buf, checks).then(result => callback?.(null, result)).catch(err => callback?.(err, false)); } //# sourceMappingURL=prime.js.map