@hxa-rn/react-native-quick-crypto 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -1
- package/README.md +2 -3
- package/dist/commonjs/blake3.js +1 -1
- package/dist/commonjs/blake3.js.map +1 -1
- package/dist/commonjs/cipher.js +1 -1
- package/dist/commonjs/cipher.js.map +1 -1
- package/dist/commonjs/dhKeyPair.js +1 -1
- package/dist/commonjs/dhKeyPair.js.map +1 -1
- package/dist/commonjs/diffie-hellman.js +1 -1
- package/dist/commonjs/diffie-hellman.js.map +1 -1
- package/dist/commonjs/dsa.js +1 -1
- package/dist/commonjs/dsa.js.map +1 -1
- package/dist/commonjs/ec.js +1 -1
- package/dist/commonjs/ec.js.map +1 -1
- package/dist/commonjs/ecdh.js +1 -1
- package/dist/commonjs/ecdh.js.map +1 -1
- package/dist/commonjs/ed.js +1 -1
- package/dist/commonjs/ed.js.map +1 -1
- package/dist/commonjs/hash.js +1 -1
- package/dist/commonjs/hash.js.map +1 -1
- package/dist/commonjs/hmac.js +1 -1
- package/dist/commonjs/hmac.js.map +1 -1
- package/dist/commonjs/index.js +2 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/keys/classes.js +1 -1
- package/dist/commonjs/keys/classes.js.map +1 -1
- package/dist/commonjs/keys/signVerify.js +1 -1
- package/dist/commonjs/keys/signVerify.js.map +1 -1
- package/dist/commonjs/mldsa.js +1 -1
- package/dist/commonjs/mldsa.js.map +1 -1
- package/dist/commonjs/mlkem.js +1 -1
- package/dist/commonjs/mlkem.js.map +1 -1
- package/dist/commonjs/rsa.js +1 -1
- package/dist/commonjs/rsa.js.map +1 -1
- package/dist/commonjs/x509certificate.js +1 -1
- package/dist/commonjs/x509certificate.js.map +1 -1
- package/dist/module/blake3.js +1 -1
- package/dist/module/cipher.js +1 -1
- package/dist/module/dhKeyPair.js +1 -1
- package/dist/module/diffie-hellman.js +1 -1
- package/dist/module/dsa.js +1 -1
- package/dist/module/ec.js +1 -1
- package/dist/module/ecdh.js +1 -1
- package/dist/module/ed.js +1 -1
- package/dist/module/hash.js +1 -1
- package/dist/module/hmac.js +1 -1
- package/dist/module/keys/classes.js +1 -1
- package/dist/module/keys/signVerify.js +1 -1
- package/dist/module/mldsa.js +1 -1
- package/dist/module/mlkem.js +1 -1
- package/dist/module/rsa.js +1 -1
- package/dist/module/x509certificate.js +1 -1
- package/harmony/quick_crypto/LICENSE +9 -2
- package/harmony/quick_crypto/src/main/cpp/cpp/cipher/HybridCipher.cpp +415 -415
- package/harmony/quick_crypto/src/main/cpp/cpp/dh/HybridDiffieHellman.cpp +501 -501
- package/harmony/quick_crypto/src/main/cpp/cpp/keys/KeyObjectData.cpp +284 -284
- package/harmony/quick_crypto.har +0 -0
- package/package.json +3 -3
package/dist/commonjs/ec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeNitroModules","require","_classes","_utils","_reactNativeBuffer","_ecdh","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","EcUtils","native","_native","NitroModules","createHybridObject","getSupportedCurves","getCurves","Ec","constructor","curve","setCurve","generateKeyPair","publicKey","getPublicKey","privateKey","getPrivateKey","generateKeyPairSync","exports","ecImportKey","format","keyData","algorithm","extractable","keyUsages","name","namedCurve","kNamedCurveAliases","lazyDOMException","jwk","kty","crv","use","undefined","expectedUse","alg","expectedAlg","handle","keyType","initJwk","keyObject","PublicKeyObject","PrivateKeyObject","CryptoKey","expectedKeyType","isPublicKey","validUsages","hasAnyNotIn","keyBuffer","bufferLikeToArrayBuffer","curveAlias","initECRaw","KeyObject","createKeyObject","KFormatType","DER","KeyEncoding","SPKI","PKCS8","ecdsaSignVerify","key","data","hash","signature","isSign","type","hashName","normalizedHashName","normalizeHashName","HashContext","WebCrypto","ec","encoding","exportKey","importKey","usages","dataBuffer","sign","signatureBuffer","verify","ec_generateKeyPair","_options","keys","includes","publicUsages","privateUsages","getUsagesUnion","keyAlgorithm","publicKeyData","privateKeyData","pub","priv","ec_prepareKeyGenParams","options","Error","ec_formatKeyPairOutput","publicFormat","publicType","privateFormat","privateType","cipher","passphrase","PEM","keyEncoding","exported","Buffer","from","Uint8Array","toString","SEC1","ec_generateKeyPairNode","ec_generateKeyPairNodeSync","ecDeriveBits","baseKey","length","public","opensslCurve","ecdh","ECDH","jwkPrivate","exportJwk","d","privateBytes","setPrivateKey","jwkPublic","x","y","publicBytes","concat","secret","computeSecret","secretBuf","buffer","byteLength","Math","ceil","slice","byteOffset"],"sources":["ec.ts"],"sourcesContent":["import { NitroModules } from 'react-native-nitro-modules';\r\nimport type { EcKeyPair } from './specs/v1/ecKeyPair.nitro';\r\nimport type { KeyObjectHandle } from './specs/v1/keyObjectHandle.nitro';\r\nimport {\r\n CryptoKey,\r\n KeyObject,\r\n PublicKeyObject,\r\n PrivateKeyObject,\r\n} from './keys/classes';\r\nimport type {\r\n CryptoKeyPair,\r\n KeyPairOptions,\r\n KeyUsage,\r\n SubtleAlgorithm,\r\n BufferLike,\r\n BinaryLike,\r\n JWK,\r\n ImportFormat,\r\n NamedCurve,\r\n GenerateKeyPairOptions,\r\n KeyPairGenConfig,\r\n} from './utils/types';\r\nimport {\r\n bufferLikeToArrayBuffer,\r\n getUsagesUnion,\r\n hasAnyNotIn,\r\n kNamedCurveAliases,\r\n lazyDOMException,\r\n normalizeHashName,\r\n HashContext,\r\n KeyEncoding,\r\n KFormatType,\r\n} from './utils';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport { ECDH } from './ecdh';\r\n\r\nclass EcUtils {\r\n private static _native: EcKeyPair | undefined;\r\n private static get native(): EcKeyPair {\r\n if (!this._native) {\r\n this._native = NitroModules.createHybridObject<EcKeyPair>('EcKeyPair');\r\n }\r\n return this._native;\r\n }\r\n public static getSupportedCurves(): string[] {\r\n return this.native.getSupportedCurves();\r\n }\r\n}\r\n\r\nexport function getCurves(): string[] {\r\n return EcUtils.getSupportedCurves();\r\n}\r\n\r\nexport class Ec {\r\n native: EcKeyPair;\r\n\r\n constructor(curve: string) {\r\n this.native = NitroModules.createHybridObject<EcKeyPair>('EcKeyPair');\r\n this.native.setCurve(curve);\r\n }\r\n\r\n async generateKeyPair(): Promise<CryptoKeyPair> {\r\n await this.native.generateKeyPair();\r\n return {\r\n publicKey: this.native.getPublicKey(),\r\n privateKey: this.native.getPrivateKey(),\r\n };\r\n }\r\n\r\n generateKeyPairSync(): CryptoKeyPair {\r\n this.native.generateKeyPairSync();\r\n return {\r\n publicKey: this.native.getPublicKey(),\r\n privateKey: this.native.getPrivateKey(),\r\n };\r\n }\r\n}\r\n\r\n// WebCrypto API - only P-256, P-384, P-521 allowed per spec\r\nexport function ecImportKey(\r\n format: ImportFormat,\r\n keyData: BufferLike | BinaryLike | JWK,\r\n algorithm: SubtleAlgorithm,\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n): CryptoKey {\r\n const { name, namedCurve } = algorithm;\r\n\r\n if (\r\n !namedCurve ||\r\n !kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases]\r\n ) {\r\n throw lazyDOMException('Unrecognized namedCurve', 'NotSupportedError');\r\n }\r\n\r\n // Handle JWK format\r\n if (format === 'jwk') {\r\n const jwk = keyData as JWK;\r\n\r\n // Validate JWK\r\n if (jwk.kty !== 'EC') {\r\n throw lazyDOMException('Invalid JWK \"kty\" Parameter', 'DataError');\r\n }\r\n\r\n if (jwk.crv !== namedCurve) {\r\n throw lazyDOMException(\r\n 'JWK \"crv\" does not match the requested algorithm',\r\n 'DataError',\r\n );\r\n }\r\n\r\n // Check use parameter if present\r\n if (jwk.use !== undefined) {\r\n const expectedUse = name === 'ECDH' ? 'enc' : 'sig';\r\n if (jwk.use !== expectedUse) {\r\n throw lazyDOMException('Invalid JWK \"use\" Parameter', 'DataError');\r\n }\r\n }\r\n\r\n // Check alg parameter if present\r\n if (jwk.alg !== undefined) {\r\n let expectedAlg: string | undefined;\r\n\r\n if (name === 'ECDSA') {\r\n // Map namedCurve to expected ECDSA algorithm\r\n expectedAlg =\r\n namedCurve === 'P-256'\r\n ? 'ES256'\r\n : namedCurve === 'P-384'\r\n ? 'ES384'\r\n : namedCurve === 'P-521'\r\n ? 'ES512'\r\n : undefined;\r\n } else if (name === 'ECDH') {\r\n // ECDH uses ECDH-ES algorithm\r\n expectedAlg = 'ECDH-ES';\r\n }\r\n\r\n if (expectedAlg && jwk.alg !== undefined && jwk.alg !== expectedAlg) {\r\n throw lazyDOMException(\r\n 'JWK \"alg\" does not match the requested algorithm',\r\n 'DataError',\r\n );\r\n }\r\n }\r\n\r\n // Import using C++ layer\r\n const handle =\r\n NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');\r\n const keyType = handle.initJwk(jwk, namedCurve as NamedCurve);\r\n\r\n if (keyType === undefined) {\r\n throw lazyDOMException('Invalid JWK', 'DataError');\r\n }\r\n\r\n // Create the appropriate KeyObject based on type\r\n let keyObject: KeyObject;\r\n if (keyType === 1) {\r\n keyObject = new PublicKeyObject(handle);\r\n } else if (keyType === 2) {\r\n keyObject = new PrivateKeyObject(handle);\r\n } else {\r\n throw lazyDOMException(\r\n 'Unexpected key type from JWK import',\r\n 'DataError',\r\n );\r\n }\r\n\r\n return new CryptoKey(keyObject, algorithm, keyUsages, extractable);\r\n }\r\n\r\n // Handle binary formats (spki, pkcs8, raw)\r\n if (format !== 'spki' && format !== 'pkcs8' && format !== 'raw') {\r\n throw lazyDOMException(\r\n `Unsupported format: ${format}`,\r\n 'NotSupportedError',\r\n );\r\n }\r\n\r\n // Determine expected key type based on format\r\n const expectedKeyType =\r\n format === 'spki' || format === 'raw' ? 'public' : 'private';\r\n\r\n // Validate usages for the key type\r\n const isPublicKey = expectedKeyType === 'public';\r\n let validUsages: KeyUsage[];\r\n\r\n if (name === 'ECDSA') {\r\n validUsages = isPublicKey ? ['verify'] : ['sign'];\r\n } else if (name === 'ECDH') {\r\n validUsages = isPublicKey ? [] : ['deriveKey', 'deriveBits'];\r\n } else {\r\n throw lazyDOMException('Unsupported algorithm', 'NotSupportedError');\r\n }\r\n\r\n if (hasAnyNotIn(keyUsages, validUsages)) {\r\n throw lazyDOMException(\r\n `Unsupported key usage for a ${name} key`,\r\n 'SyntaxError',\r\n );\r\n }\r\n\r\n // Convert keyData to ArrayBuffer\r\n const keyBuffer = bufferLikeToArrayBuffer(keyData as BufferLike);\r\n\r\n // Create KeyObject directly using the appropriate format\r\n let keyObject: KeyObject;\r\n\r\n if (format === 'raw') {\r\n // Raw format is only for public keys - use specialized EC raw import\r\n const handle =\r\n NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');\r\n const curveAlias =\r\n kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases];\r\n // Only throw if initialization explicitly fails\r\n if (!handle.initECRaw(curveAlias, keyBuffer)) {\r\n throw lazyDOMException('Failed to import EC raw key', 'DataError');\r\n }\r\n keyObject = new PublicKeyObject(handle);\r\n } else {\r\n // Use standard DER import for spki/pkcs8\r\n keyObject = KeyObject.createKeyObject(\r\n expectedKeyType,\r\n keyBuffer,\r\n KFormatType.DER,\r\n format === 'spki' ? KeyEncoding.SPKI : KeyEncoding.PKCS8,\r\n );\r\n }\r\n\r\n return new CryptoKey(keyObject, algorithm, keyUsages, extractable);\r\n}\r\n\r\n// Node API\r\nexport const ecdsaSignVerify = (\r\n key: CryptoKey,\r\n data: BufferLike,\r\n { hash }: SubtleAlgorithm,\r\n signature?: BufferLike,\r\n): ArrayBuffer | boolean => {\r\n const isSign = signature === undefined;\r\n const expectedKeyType = isSign ? 'private' : 'public';\r\n\r\n if (key.type !== expectedKeyType) {\r\n throw lazyDOMException(\r\n `Key must be a ${expectedKeyType} key`,\r\n 'InvalidAccessError',\r\n );\r\n }\r\n\r\n const hashName = typeof hash === 'string' ? hash : hash?.name;\r\n\r\n if (!hashName) {\r\n throw lazyDOMException(\r\n 'Hash algorithm is required for ECDSA',\r\n 'InvalidAccessError',\r\n );\r\n }\r\n\r\n // Normalize hash algorithm name to WebCrypto format for C++ layer\r\n const normalizedHashName = normalizeHashName(hashName, HashContext.WebCrypto);\r\n\r\n // Create EC instance with the curve from the key\r\n const namedCurve = key.algorithm.namedCurve!;\r\n const ec = new Ec(namedCurve);\r\n\r\n // Extract and import the actual key data from the CryptoKey\r\n // Export in DER format with appropriate encoding\r\n const encoding =\r\n key.type === 'private' ? KeyEncoding.PKCS8 : KeyEncoding.SPKI;\r\n const keyData = key.keyObject.handle.exportKey(KFormatType.DER, encoding);\r\n const keyBuffer = bufferLikeToArrayBuffer(keyData);\r\n ec.native.importKey(\r\n 'der',\r\n keyBuffer,\r\n key.algorithm.name!,\r\n key.extractable,\r\n key.usages,\r\n );\r\n\r\n const dataBuffer = bufferLikeToArrayBuffer(data);\r\n\r\n if (isSign) {\r\n // Sign operation\r\n return ec.native.sign(dataBuffer, normalizedHashName);\r\n } else {\r\n // Verify operation\r\n const signatureBuffer = bufferLikeToArrayBuffer(signature!);\r\n return ec.native.verify(dataBuffer, signatureBuffer, normalizedHashName);\r\n }\r\n};\r\n\r\n// WebCrypto API - only P-256, P-384, P-521 allowed per spec\r\n\r\nexport async function ec_generateKeyPair(\r\n name: string,\r\n namedCurve: string,\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n _options?: KeyPairOptions, // TODO: Implement format options support\r\n): Promise<CryptoKeyPair> {\r\n // validation checks\r\n if (!Object.keys(kNamedCurveAliases).includes(namedCurve || '')) {\r\n throw lazyDOMException(\r\n `Unrecognized namedCurve '${namedCurve}'`,\r\n 'NotSupportedError',\r\n );\r\n }\r\n\r\n switch (name) {\r\n case 'ECDSA':\r\n if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {\r\n throw lazyDOMException(\r\n 'Unsupported key usage for an ECDSA key',\r\n 'SyntaxError',\r\n );\r\n }\r\n break;\r\n case 'ECDH':\r\n if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {\r\n throw lazyDOMException(\r\n 'Unsupported key usage for an ECDH key',\r\n 'SyntaxError',\r\n );\r\n }\r\n // Fall through\r\n }\r\n\r\n const ec = new Ec(namedCurve!);\r\n await ec.generateKeyPair();\r\n\r\n let publicUsages: KeyUsage[] = [];\r\n let privateUsages: KeyUsage[] = [];\r\n switch (name) {\r\n case 'ECDSA':\r\n publicUsages = getUsagesUnion(keyUsages, 'verify');\r\n privateUsages = getUsagesUnion(keyUsages, 'sign');\r\n break;\r\n case 'ECDH':\r\n publicUsages = [];\r\n privateUsages = getUsagesUnion(keyUsages, 'deriveKey', 'deriveBits');\r\n break;\r\n }\r\n\r\n const keyAlgorithm = { name, namedCurve: namedCurve! };\r\n\r\n // Export keys directly from the EC key pair using the internal EVP_PKEY\r\n // These methods export in DER format (SPKI for public, PKCS8 for private)\r\n const publicKeyData = ec.native.getPublicKey();\r\n const privateKeyData = ec.native.getPrivateKey();\r\n\r\n const pub = KeyObject.createKeyObject(\r\n 'public',\r\n publicKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.SPKI,\r\n ) as PublicKeyObject;\r\n const publicKey = new CryptoKey(\r\n pub,\r\n keyAlgorithm as SubtleAlgorithm,\r\n publicUsages,\r\n true,\r\n );\r\n\r\n // All keys are now exported in PKCS8 format for consistency\r\n const priv = KeyObject.createKeyObject(\r\n 'private',\r\n privateKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.PKCS8,\r\n ) as PrivateKeyObject;\r\n const privateKey = new CryptoKey(\r\n priv,\r\n keyAlgorithm as SubtleAlgorithm,\r\n privateUsages,\r\n extractable,\r\n );\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nfunction ec_prepareKeyGenParams(\r\n options: GenerateKeyPairOptions | undefined,\r\n): Ec {\r\n if (!options) {\r\n throw new Error('Options are required for EC key generation');\r\n }\r\n\r\n const { namedCurve } = options as { namedCurve?: string };\r\n\r\n if (!namedCurve) {\r\n throw new Error('namedCurve is required for EC key generation');\r\n }\r\n\r\n return new Ec(namedCurve);\r\n}\r\n\r\nfunction ec_formatKeyPairOutput(\r\n ec: Ec,\r\n encoding: KeyPairGenConfig,\r\n): {\r\n publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n} {\r\n const {\r\n publicFormat,\r\n publicType,\r\n privateFormat,\r\n privateType,\r\n cipher,\r\n passphrase,\r\n } = encoding;\r\n\r\n const publicKeyData = ec.native.getPublicKey();\r\n const privateKeyData = ec.native.getPrivateKey();\r\n\r\n const pub = KeyObject.createKeyObject(\r\n 'public',\r\n publicKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.SPKI,\r\n ) as PublicKeyObject;\r\n\r\n const priv = KeyObject.createKeyObject(\r\n 'private',\r\n privateKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.PKCS8,\r\n ) as PrivateKeyObject;\r\n\r\n let publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n let privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n\r\n if (publicFormat === -1) {\r\n publicKey = pub;\r\n } else {\r\n const format =\r\n publicFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const keyEncoding =\r\n publicType === KeyEncoding.SPKI ? KeyEncoding.SPKI : KeyEncoding.SPKI;\r\n const exported = pub.handle.exportKey(format, keyEncoding);\r\n if (format === KFormatType.PEM) {\r\n publicKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n publicKey = exported;\r\n }\r\n }\r\n\r\n if (privateFormat === -1) {\r\n privateKey = priv;\r\n } else {\r\n const format =\r\n privateFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const keyEncoding =\r\n privateType === KeyEncoding.PKCS8\r\n ? KeyEncoding.PKCS8\r\n : privateType === KeyEncoding.SEC1\r\n ? KeyEncoding.SEC1\r\n : KeyEncoding.PKCS8;\r\n const exported = priv.handle.exportKey(\r\n format,\r\n keyEncoding,\r\n cipher,\r\n passphrase,\r\n );\r\n if (format === KFormatType.PEM) {\r\n privateKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n privateKey = exported;\r\n }\r\n }\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport async function ec_generateKeyPairNode(\r\n options: GenerateKeyPairOptions | undefined,\r\n encoding: KeyPairGenConfig,\r\n): Promise<{\r\n publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n}> {\r\n const ec = ec_prepareKeyGenParams(options);\r\n await ec.generateKeyPair();\r\n return ec_formatKeyPairOutput(ec, encoding);\r\n}\r\n\r\nexport function ec_generateKeyPairNodeSync(\r\n options: GenerateKeyPairOptions | undefined,\r\n encoding: KeyPairGenConfig,\r\n): {\r\n publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n} {\r\n const ec = ec_prepareKeyGenParams(options);\r\n ec.generateKeyPairSync();\r\n return ec_formatKeyPairOutput(ec, encoding);\r\n}\r\n\r\nexport function ecDeriveBits(\r\n algorithm: SubtleAlgorithm,\r\n baseKey: CryptoKey,\r\n length: number | null,\r\n): ArrayBuffer {\r\n const publicKey = algorithm.public;\r\n\r\n if (!publicKey) {\r\n throw new Error('Public key is required for ECDH derivation');\r\n }\r\n\r\n if (baseKey.algorithm.name !== publicKey.algorithm.name) {\r\n throw new Error('Keys must be of the same algorithm');\r\n }\r\n\r\n if (baseKey.algorithm.namedCurve !== publicKey.algorithm.namedCurve) {\r\n throw new Error('Keys must use the same curve');\r\n }\r\n\r\n const namedCurve = baseKey.algorithm.namedCurve;\r\n if (!namedCurve) {\r\n throw new Error('Curve name is missing');\r\n }\r\n\r\n const opensslCurve =\r\n kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases];\r\n const ecdh = new ECDH(opensslCurve);\r\n\r\n const jwkPrivate = baseKey.keyObject.handle.exportJwk({}, false);\r\n if (!jwkPrivate.d) throw new Error('Invalid private key');\r\n const privateBytes = Buffer.from(jwkPrivate.d, 'base64url');\r\n ecdh.setPrivateKey(privateBytes);\r\n\r\n const jwkPublic = publicKey.keyObject.handle.exportJwk({}, false);\r\n if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');\r\n const x = Buffer.from(jwkPublic.x, 'base64url');\r\n const y = Buffer.from(jwkPublic.y, 'base64url');\r\n const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);\r\n\r\n const secret = ecdh.computeSecret(publicBytes);\r\n const secretBuf = Buffer.from(secret);\r\n\r\n // If length is null, return full secret\r\n if (length === null) {\r\n return secretBuf.buffer;\r\n }\r\n\r\n // If length is specified, truncate\r\n const byteLength = Math.ceil(length / 8);\r\n if (secretBuf.byteLength >= byteLength) {\r\n return secretBuf.buffer.slice(\r\n secretBuf.byteOffset,\r\n secretBuf.byteOffset + byteLength,\r\n ) as ArrayBuffer;\r\n }\r\n\r\n throw new Error('Derived key is shorter than requested length');\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_classes","_utils","_reactNativeBuffer","_ecdh","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","EcUtils","native","_native","NitroModules","createHybridObject","getSupportedCurves","getCurves","Ec","constructor","curve","setCurve","generateKeyPair","publicKey","getPublicKey","privateKey","getPrivateKey","generateKeyPairSync","exports","ecImportKey","format","keyData","algorithm","extractable","keyUsages","name","namedCurve","kNamedCurveAliases","lazyDOMException","jwk","kty","crv","use","undefined","expectedUse","alg","expectedAlg","handle","keyType","initJwk","keyObject","PublicKeyObject","PrivateKeyObject","CryptoKey","expectedKeyType","isPublicKey","validUsages","hasAnyNotIn","keyBuffer","bufferLikeToArrayBuffer","curveAlias","initECRaw","KeyObject","createKeyObject","KFormatType","DER","KeyEncoding","SPKI","PKCS8","ecdsaSignVerify","key","data","hash","signature","isSign","type","hashName","normalizedHashName","normalizeHashName","HashContext","WebCrypto","ec","encoding","exportKey","importKey","usages","dataBuffer","sign","signatureBuffer","verify","ec_generateKeyPair","_options","keys","includes","publicUsages","privateUsages","getUsagesUnion","keyAlgorithm","publicKeyData","privateKeyData","pub","priv","ec_prepareKeyGenParams","options","Error","ec_formatKeyPairOutput","publicFormat","publicType","privateFormat","privateType","cipher","passphrase","PEM","keyEncoding","exported","Buffer","from","Uint8Array","toString","SEC1","ec_generateKeyPairNode","ec_generateKeyPairNodeSync","ecDeriveBits","baseKey","length","public","opensslCurve","ecdh","ECDH","jwkPrivate","exportJwk","d","privateBytes","setPrivateKey","jwkPublic","x","y","publicBytes","concat","secret","computeSecret","secretBuf","buffer","byteLength","Math","ceil","slice","byteOffset"],"sources":["ec.ts"],"sourcesContent":["import { NitroModules } from 'react-native-nitro-modules';\r\nimport type { EcKeyPair } from './specs/v1/ecKeyPair.nitro';\r\nimport type { KeyObjectHandle } from './specs/v1/keyObjectHandle.nitro';\r\nimport {\r\n CryptoKey,\r\n KeyObject,\r\n PublicKeyObject,\r\n PrivateKeyObject,\r\n} from './keys/classes';\r\nimport type {\r\n CryptoKeyPair,\r\n KeyPairOptions,\r\n KeyUsage,\r\n SubtleAlgorithm,\r\n BufferLike,\r\n BinaryLike,\r\n JWK,\r\n ImportFormat,\r\n NamedCurve,\r\n GenerateKeyPairOptions,\r\n KeyPairGenConfig,\r\n} from './utils/types';\r\nimport {\r\n bufferLikeToArrayBuffer,\r\n getUsagesUnion,\r\n hasAnyNotIn,\r\n kNamedCurveAliases,\r\n lazyDOMException,\r\n normalizeHashName,\r\n HashContext,\r\n KeyEncoding,\r\n KFormatType,\r\n} from './utils';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport { ECDH } from './ecdh';\r\n\r\nclass EcUtils {\r\n private static _native: EcKeyPair | undefined;\r\n private static get native(): EcKeyPair {\r\n if (!this._native) {\r\n this._native = NitroModules.createHybridObject<EcKeyPair>('EcKeyPair');\r\n }\r\n return this._native;\r\n }\r\n public static getSupportedCurves(): string[] {\r\n return this.native.getSupportedCurves();\r\n }\r\n}\r\n\r\nexport function getCurves(): string[] {\r\n return EcUtils.getSupportedCurves();\r\n}\r\n\r\nexport class Ec {\r\n native: EcKeyPair;\r\n\r\n constructor(curve: string) {\r\n this.native = NitroModules.createHybridObject<EcKeyPair>('EcKeyPair');\r\n this.native.setCurve(curve);\r\n }\r\n\r\n async generateKeyPair(): Promise<CryptoKeyPair> {\r\n await this.native.generateKeyPair();\r\n return {\r\n publicKey: this.native.getPublicKey(),\r\n privateKey: this.native.getPrivateKey(),\r\n };\r\n }\r\n\r\n generateKeyPairSync(): CryptoKeyPair {\r\n this.native.generateKeyPairSync();\r\n return {\r\n publicKey: this.native.getPublicKey(),\r\n privateKey: this.native.getPrivateKey(),\r\n };\r\n }\r\n}\r\n\r\n// WebCrypto API - only P-256, P-384, P-521 allowed per spec\r\nexport function ecImportKey(\r\n format: ImportFormat,\r\n keyData: BufferLike | BinaryLike | JWK,\r\n algorithm: SubtleAlgorithm,\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n): CryptoKey {\r\n const { name, namedCurve } = algorithm;\r\n\r\n if (\r\n !namedCurve ||\r\n !kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases]\r\n ) {\r\n throw lazyDOMException('Unrecognized namedCurve', 'NotSupportedError');\r\n }\r\n\r\n // Handle JWK format\r\n if (format === 'jwk') {\r\n const jwk = keyData as JWK;\r\n\r\n // Validate JWK\r\n if (jwk.kty !== 'EC') {\r\n throw lazyDOMException('Invalid JWK \"kty\" Parameter', 'DataError');\r\n }\r\n\r\n if (jwk.crv !== namedCurve) {\r\n throw lazyDOMException(\r\n 'JWK \"crv\" does not match the requested algorithm',\r\n 'DataError',\r\n );\r\n }\r\n\r\n // Check use parameter if present\r\n if (jwk.use !== undefined) {\r\n const expectedUse = name === 'ECDH' ? 'enc' : 'sig';\r\n if (jwk.use !== expectedUse) {\r\n throw lazyDOMException('Invalid JWK \"use\" Parameter', 'DataError');\r\n }\r\n }\r\n\r\n // Check alg parameter if present\r\n if (jwk.alg !== undefined) {\r\n let expectedAlg: string | undefined;\r\n\r\n if (name === 'ECDSA') {\r\n // Map namedCurve to expected ECDSA algorithm\r\n expectedAlg =\r\n namedCurve === 'P-256'\r\n ? 'ES256'\r\n : namedCurve === 'P-384'\r\n ? 'ES384'\r\n : namedCurve === 'P-521'\r\n ? 'ES512'\r\n : undefined;\r\n } else if (name === 'ECDH') {\r\n // ECDH uses ECDH-ES algorithm\r\n expectedAlg = 'ECDH-ES';\r\n }\r\n\r\n if (expectedAlg && jwk.alg !== undefined && jwk.alg !== expectedAlg) {\r\n throw lazyDOMException(\r\n 'JWK \"alg\" does not match the requested algorithm',\r\n 'DataError',\r\n );\r\n }\r\n }\r\n\r\n // Import using C++ layer\r\n const handle =\r\n NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');\r\n const keyType = handle.initJwk(jwk, namedCurve as NamedCurve);\r\n\r\n if (keyType === undefined) {\r\n throw lazyDOMException('Invalid JWK', 'DataError');\r\n }\r\n\r\n // Create the appropriate KeyObject based on type\r\n let keyObject: KeyObject;\r\n if (keyType === 1) {\r\n keyObject = new PublicKeyObject(handle);\r\n } else if (keyType === 2) {\r\n keyObject = new PrivateKeyObject(handle);\r\n } else {\r\n throw lazyDOMException(\r\n 'Unexpected key type from JWK import',\r\n 'DataError',\r\n );\r\n }\r\n\r\n return new CryptoKey(keyObject, algorithm, keyUsages, extractable);\r\n }\r\n\r\n // Handle binary formats (spki, pkcs8, raw)\r\n if (format !== 'spki' && format !== 'pkcs8' && format !== 'raw') {\r\n throw lazyDOMException(\r\n `Unsupported format: ${format}`,\r\n 'NotSupportedError',\r\n );\r\n }\r\n\r\n // Determine expected key type based on format\r\n const expectedKeyType =\r\n format === 'spki' || format === 'raw' ? 'public' : 'private';\r\n\r\n // Validate usages for the key type\r\n const isPublicKey = expectedKeyType === 'public';\r\n let validUsages: KeyUsage[];\r\n\r\n if (name === 'ECDSA') {\r\n validUsages = isPublicKey ? ['verify'] : ['sign'];\r\n } else if (name === 'ECDH') {\r\n validUsages = isPublicKey ? [] : ['deriveKey', 'deriveBits'];\r\n } else {\r\n throw lazyDOMException('Unsupported algorithm', 'NotSupportedError');\r\n }\r\n\r\n if (hasAnyNotIn(keyUsages, validUsages)) {\r\n throw lazyDOMException(\r\n `Unsupported key usage for a ${name} key`,\r\n 'SyntaxError',\r\n );\r\n }\r\n\r\n // Convert keyData to ArrayBuffer\r\n const keyBuffer = bufferLikeToArrayBuffer(keyData as BufferLike);\r\n\r\n // Create KeyObject directly using the appropriate format\r\n let keyObject: KeyObject;\r\n\r\n if (format === 'raw') {\r\n // Raw format is only for public keys - use specialized EC raw import\r\n const handle =\r\n NitroModules.createHybridObject<KeyObjectHandle>('KeyObjectHandle');\r\n const curveAlias =\r\n kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases];\r\n // Only throw if initialization explicitly fails\r\n if (!handle.initECRaw(curveAlias, keyBuffer)) {\r\n throw lazyDOMException('Failed to import EC raw key', 'DataError');\r\n }\r\n keyObject = new PublicKeyObject(handle);\r\n } else {\r\n // Use standard DER import for spki/pkcs8\r\n keyObject = KeyObject.createKeyObject(\r\n expectedKeyType,\r\n keyBuffer,\r\n KFormatType.DER,\r\n format === 'spki' ? KeyEncoding.SPKI : KeyEncoding.PKCS8,\r\n );\r\n }\r\n\r\n return new CryptoKey(keyObject, algorithm, keyUsages, extractable);\r\n}\r\n\r\n// Node API\r\nexport const ecdsaSignVerify = (\r\n key: CryptoKey,\r\n data: BufferLike,\r\n { hash }: SubtleAlgorithm,\r\n signature?: BufferLike,\r\n): ArrayBuffer | boolean => {\r\n const isSign = signature === undefined;\r\n const expectedKeyType = isSign ? 'private' : 'public';\r\n\r\n if (key.type !== expectedKeyType) {\r\n throw lazyDOMException(\r\n `Key must be a ${expectedKeyType} key`,\r\n 'InvalidAccessError',\r\n );\r\n }\r\n\r\n const hashName = typeof hash === 'string' ? hash : hash?.name;\r\n\r\n if (!hashName) {\r\n throw lazyDOMException(\r\n 'Hash algorithm is required for ECDSA',\r\n 'InvalidAccessError',\r\n );\r\n }\r\n\r\n // Normalize hash algorithm name to WebCrypto format for C++ layer\r\n const normalizedHashName = normalizeHashName(hashName, HashContext.WebCrypto);\r\n\r\n // Create EC instance with the curve from the key\r\n const namedCurve = key.algorithm.namedCurve!;\r\n const ec = new Ec(namedCurve);\r\n\r\n // Extract and import the actual key data from the CryptoKey\r\n // Export in DER format with appropriate encoding\r\n const encoding =\r\n key.type === 'private' ? KeyEncoding.PKCS8 : KeyEncoding.SPKI;\r\n const keyData = key.keyObject.handle.exportKey(KFormatType.DER, encoding);\r\n const keyBuffer = bufferLikeToArrayBuffer(keyData);\r\n ec.native.importKey(\r\n 'der',\r\n keyBuffer,\r\n key.algorithm.name!,\r\n key.extractable,\r\n key.usages,\r\n );\r\n\r\n const dataBuffer = bufferLikeToArrayBuffer(data);\r\n\r\n if (isSign) {\r\n // Sign operation\r\n return ec.native.sign(dataBuffer, normalizedHashName);\r\n } else {\r\n // Verify operation\r\n const signatureBuffer = bufferLikeToArrayBuffer(signature!);\r\n return ec.native.verify(dataBuffer, signatureBuffer, normalizedHashName);\r\n }\r\n};\r\n\r\n// WebCrypto API - only P-256, P-384, P-521 allowed per spec\r\n\r\nexport async function ec_generateKeyPair(\r\n name: string,\r\n namedCurve: string,\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n _options?: KeyPairOptions, // TODO: Implement format options support\r\n): Promise<CryptoKeyPair> {\r\n // validation checks\r\n if (!Object.keys(kNamedCurveAliases).includes(namedCurve || '')) {\r\n throw lazyDOMException(\r\n `Unrecognized namedCurve '${namedCurve}'`,\r\n 'NotSupportedError',\r\n );\r\n }\r\n\r\n switch (name) {\r\n case 'ECDSA':\r\n if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {\r\n throw lazyDOMException(\r\n 'Unsupported key usage for an ECDSA key',\r\n 'SyntaxError',\r\n );\r\n }\r\n break;\r\n case 'ECDH':\r\n if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {\r\n throw lazyDOMException(\r\n 'Unsupported key usage for an ECDH key',\r\n 'SyntaxError',\r\n );\r\n }\r\n // Fall through\r\n }\r\n\r\n const ec = new Ec(namedCurve!);\r\n await ec.generateKeyPair();\r\n\r\n let publicUsages: KeyUsage[] = [];\r\n let privateUsages: KeyUsage[] = [];\r\n switch (name) {\r\n case 'ECDSA':\r\n publicUsages = getUsagesUnion(keyUsages, 'verify');\r\n privateUsages = getUsagesUnion(keyUsages, 'sign');\r\n break;\r\n case 'ECDH':\r\n publicUsages = [];\r\n privateUsages = getUsagesUnion(keyUsages, 'deriveKey', 'deriveBits');\r\n break;\r\n }\r\n\r\n const keyAlgorithm = { name, namedCurve: namedCurve! };\r\n\r\n // Export keys directly from the EC key pair using the internal EVP_PKEY\r\n // These methods export in DER format (SPKI for public, PKCS8 for private)\r\n const publicKeyData = ec.native.getPublicKey();\r\n const privateKeyData = ec.native.getPrivateKey();\r\n\r\n const pub = KeyObject.createKeyObject(\r\n 'public',\r\n publicKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.SPKI,\r\n ) as PublicKeyObject;\r\n const publicKey = new CryptoKey(\r\n pub,\r\n keyAlgorithm as SubtleAlgorithm,\r\n publicUsages,\r\n true,\r\n );\r\n\r\n // All keys are now exported in PKCS8 format for consistency\r\n const priv = KeyObject.createKeyObject(\r\n 'private',\r\n privateKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.PKCS8,\r\n ) as PrivateKeyObject;\r\n const privateKey = new CryptoKey(\r\n priv,\r\n keyAlgorithm as SubtleAlgorithm,\r\n privateUsages,\r\n extractable,\r\n );\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nfunction ec_prepareKeyGenParams(\r\n options: GenerateKeyPairOptions | undefined,\r\n): Ec {\r\n if (!options) {\r\n throw new Error('Options are required for EC key generation');\r\n }\r\n\r\n const { namedCurve } = options as { namedCurve?: string };\r\n\r\n if (!namedCurve) {\r\n throw new Error('namedCurve is required for EC key generation');\r\n }\r\n\r\n return new Ec(namedCurve);\r\n}\r\n\r\nfunction ec_formatKeyPairOutput(\r\n ec: Ec,\r\n encoding: KeyPairGenConfig,\r\n): {\r\n publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n} {\r\n const {\r\n publicFormat,\r\n publicType,\r\n privateFormat,\r\n privateType,\r\n cipher,\r\n passphrase,\r\n } = encoding;\r\n\r\n const publicKeyData = ec.native.getPublicKey();\r\n const privateKeyData = ec.native.getPrivateKey();\r\n\r\n const pub = KeyObject.createKeyObject(\r\n 'public',\r\n publicKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.SPKI,\r\n ) as PublicKeyObject;\r\n\r\n const priv = KeyObject.createKeyObject(\r\n 'private',\r\n privateKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.PKCS8,\r\n ) as PrivateKeyObject;\r\n\r\n let publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n let privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n\r\n if (publicFormat === -1) {\r\n publicKey = pub;\r\n } else {\r\n const format =\r\n publicFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const keyEncoding =\r\n publicType === KeyEncoding.SPKI ? KeyEncoding.SPKI : KeyEncoding.SPKI;\r\n const exported = pub.handle.exportKey(format, keyEncoding);\r\n if (format === KFormatType.PEM) {\r\n publicKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n publicKey = exported;\r\n }\r\n }\r\n\r\n if (privateFormat === -1) {\r\n privateKey = priv;\r\n } else {\r\n const format =\r\n privateFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const keyEncoding =\r\n privateType === KeyEncoding.PKCS8\r\n ? KeyEncoding.PKCS8\r\n : privateType === KeyEncoding.SEC1\r\n ? KeyEncoding.SEC1\r\n : KeyEncoding.PKCS8;\r\n const exported = priv.handle.exportKey(\r\n format,\r\n keyEncoding,\r\n cipher,\r\n passphrase,\r\n );\r\n if (format === KFormatType.PEM) {\r\n privateKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n privateKey = exported;\r\n }\r\n }\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport async function ec_generateKeyPairNode(\r\n options: GenerateKeyPairOptions | undefined,\r\n encoding: KeyPairGenConfig,\r\n): Promise<{\r\n publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n}> {\r\n const ec = ec_prepareKeyGenParams(options);\r\n await ec.generateKeyPair();\r\n return ec_formatKeyPairOutput(ec, encoding);\r\n}\r\n\r\nexport function ec_generateKeyPairNodeSync(\r\n options: GenerateKeyPairOptions | undefined,\r\n encoding: KeyPairGenConfig,\r\n): {\r\n publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;\r\n privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;\r\n} {\r\n const ec = ec_prepareKeyGenParams(options);\r\n ec.generateKeyPairSync();\r\n return ec_formatKeyPairOutput(ec, encoding);\r\n}\r\n\r\nexport function ecDeriveBits(\r\n algorithm: SubtleAlgorithm,\r\n baseKey: CryptoKey,\r\n length: number | null,\r\n): ArrayBuffer {\r\n const publicKey = algorithm.public;\r\n\r\n if (!publicKey) {\r\n throw new Error('Public key is required for ECDH derivation');\r\n }\r\n\r\n if (baseKey.algorithm.name !== publicKey.algorithm.name) {\r\n throw new Error('Keys must be of the same algorithm');\r\n }\r\n\r\n if (baseKey.algorithm.namedCurve !== publicKey.algorithm.namedCurve) {\r\n throw new Error('Keys must use the same curve');\r\n }\r\n\r\n const namedCurve = baseKey.algorithm.namedCurve;\r\n if (!namedCurve) {\r\n throw new Error('Curve name is missing');\r\n }\r\n\r\n const opensslCurve =\r\n kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases];\r\n const ecdh = new ECDH(opensslCurve);\r\n\r\n const jwkPrivate = baseKey.keyObject.handle.exportJwk({}, false);\r\n if (!jwkPrivate.d) throw new Error('Invalid private key');\r\n const privateBytes = Buffer.from(jwkPrivate.d, 'base64url');\r\n ecdh.setPrivateKey(privateBytes);\r\n\r\n const jwkPublic = publicKey.keyObject.handle.exportJwk({}, false);\r\n if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');\r\n const x = Buffer.from(jwkPublic.x, 'base64url');\r\n const y = Buffer.from(jwkPublic.y, 'base64url');\r\n const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);\r\n\r\n const secret = ecdh.computeSecret(publicBytes);\r\n const secretBuf = Buffer.from(secret);\r\n\r\n // If length is null, return full secret\r\n if (length === null) {\r\n return secretBuf.buffer;\r\n }\r\n\r\n // If length is specified, truncate\r\n const byteLength = Math.ceil(length / 8);\r\n if (secretBuf.byteLength >= byteLength) {\r\n return secretBuf.buffer.slice(\r\n secretBuf.byteOffset,\r\n secretBuf.byteOffset + byteLength,\r\n ) as ArrayBuffer;\r\n }\r\n\r\n throw new Error('Derived key is shorter than requested length');\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/ecdh.js
CHANGED
|
@@ -10,7 +10,7 @@ var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
|
|
|
10
10
|
var _conversion = require("./utils/conversion");
|
|
11
11
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
12
12
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
13
|
-
function _toPrimitive(t,
|
|
13
|
+
function _toPrimitive(t, e) { if ("object" != typeof t || !t) return t; var r; if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) { var i = r.call(t, e || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === e ? String : Number)(t); }
|
|
14
14
|
const POINT_CONVERSION_COMPRESSED = 2;
|
|
15
15
|
const POINT_CONVERSION_UNCOMPRESSED = 4;
|
|
16
16
|
const POINT_CONVERSION_HYBRID = 6;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_conversion","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","ECDH","convertKeyHybrid","_convertKeyHybrid","NitroModules","createHybridObject","constructor","curveName","_hybrid","init","generateKeys","key","Buffer","from","computeSecret","otherPublicKey","inputEncoding","keyBuf","isBuffer","secret","toArrayBuffer","getPrivateKey","setPrivateKey","privateKey","encoding","getPublicKey","pub","toString","setPublicKey","publicKey","convertKey","curve","outputEncoding","format","formatNum","undefined","result","exports","createECDH"],"sources":["ecdh.ts"],"sourcesContent":["import { NitroModules } from 'react-native-nitro-modules';\r\nimport type { ECDH as ECDHInterface } from './specs/v1/ecdh.nitro';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport { toArrayBuffer } from './utils/conversion';\r\n\r\nconst POINT_CONVERSION_COMPRESSED = 2;\r\nconst POINT_CONVERSION_UNCOMPRESSED = 4;\r\nconst POINT_CONVERSION_HYBRID = 6;\r\n\r\nexport class ECDH {\r\n private static _convertKeyHybrid: ECDHInterface | undefined;\r\n private static get convertKeyHybrid(): ECDHInterface {\r\n if (!this._convertKeyHybrid) {\r\n this._convertKeyHybrid =\r\n NitroModules.createHybridObject<ECDHInterface>('ECDH');\r\n }\r\n return this._convertKeyHybrid;\r\n }\r\n\r\n private _hybrid: ECDHInterface;\r\n\r\n constructor(curveName: string) {\r\n this._hybrid = NitroModules.createHybridObject<ECDHInterface>('ECDH');\r\n this._hybrid.init(curveName);\r\n }\r\n\r\n generateKeys(): Buffer {\r\n const key = this._hybrid.generateKeys();\r\n return Buffer.from(key);\r\n }\r\n\r\n computeSecret(\r\n otherPublicKey: Buffer | string | { code: number; byteLength: number },\r\n inputEncoding?: BufferEncoding,\r\n ): Buffer {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(otherPublicKey)) {\r\n keyBuf = otherPublicKey;\r\n } else if (typeof otherPublicKey === 'string') {\r\n keyBuf = Buffer.from(otherPublicKey, inputEncoding);\r\n } else {\r\n // Handle array view or other types if necessary, but Node.js typically expects Buffer or string + encoding\r\n throw new TypeError('Invalid otherPublicKey type');\r\n }\r\n\r\n // ECDH.computeSecret in Node.js returns Buffer\r\n const secret = this._hybrid.computeSecret(toArrayBuffer(keyBuf));\r\n return Buffer.from(secret);\r\n }\r\n\r\n getPrivateKey(): Buffer {\r\n return Buffer.from(this._hybrid.getPrivateKey());\r\n }\r\n\r\n setPrivateKey(privateKey: Buffer | string, encoding?: BufferEncoding): void {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(privateKey)) {\r\n keyBuf = privateKey;\r\n } else {\r\n keyBuf = Buffer.from(privateKey, encoding);\r\n }\r\n this._hybrid.setPrivateKey(toArrayBuffer(keyBuf));\r\n }\r\n\r\n getPublicKey(encoding?: BufferEncoding): Buffer | string {\r\n // Node.js getPublicKey([encoding[, format]])\r\n // If encoding is provided, returns string. If not, Buffer.\r\n // Our C++ returns ArrayBuffer (Buffer).\r\n // We ignore format for now as C++ implementation defaults to uncompressed.\r\n const pub = Buffer.from(this._hybrid.getPublicKey());\r\n if (encoding) {\r\n return pub.toString(encoding);\r\n }\r\n return pub;\r\n }\r\n\r\n setPublicKey(publicKey: Buffer | string, encoding?: BufferEncoding): void {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(publicKey)) {\r\n keyBuf = publicKey;\r\n } else {\r\n keyBuf = Buffer.from(publicKey, encoding);\r\n }\r\n this._hybrid.setPublicKey(toArrayBuffer(keyBuf));\r\n }\r\n\r\n static convertKey(\r\n key: Buffer | string,\r\n curve: string,\r\n inputEncoding?: BufferEncoding,\r\n outputEncoding?: BufferEncoding,\r\n format?: 'uncompressed' | 'compressed' | 'hybrid',\r\n ): Buffer | string {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(key)) {\r\n keyBuf = key;\r\n } else {\r\n keyBuf = Buffer.from(key, inputEncoding);\r\n }\r\n\r\n let formatNum: number;\r\n switch (format) {\r\n case 'compressed':\r\n formatNum = POINT_CONVERSION_COMPRESSED;\r\n break;\r\n case 'hybrid':\r\n formatNum = POINT_CONVERSION_HYBRID;\r\n break;\r\n case 'uncompressed':\r\n case undefined:\r\n formatNum = POINT_CONVERSION_UNCOMPRESSED;\r\n break;\r\n default:\r\n throw new TypeError(\r\n `Invalid point conversion format: ${format as string}`,\r\n );\r\n }\r\n\r\n const result = Buffer.from(\r\n ECDH.convertKeyHybrid.convertKey(toArrayBuffer(keyBuf), curve, formatNum),\r\n );\r\n\r\n if (outputEncoding) {\r\n return result.toString(outputEncoding);\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nexport function createECDH(curveName: string): ECDH {\r\n return new ECDH(curveName);\r\n}\r\n"],"mappings":";;;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAEA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAAmD,SAAAG,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_conversion","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","ECDH","convertKeyHybrid","_convertKeyHybrid","NitroModules","createHybridObject","constructor","curveName","_hybrid","init","generateKeys","key","Buffer","from","computeSecret","otherPublicKey","inputEncoding","keyBuf","isBuffer","secret","toArrayBuffer","getPrivateKey","setPrivateKey","privateKey","encoding","getPublicKey","pub","toString","setPublicKey","publicKey","convertKey","curve","outputEncoding","format","formatNum","undefined","result","exports","createECDH"],"sources":["ecdh.ts"],"sourcesContent":["import { NitroModules } from 'react-native-nitro-modules';\r\nimport type { ECDH as ECDHInterface } from './specs/v1/ecdh.nitro';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport { toArrayBuffer } from './utils/conversion';\r\n\r\nconst POINT_CONVERSION_COMPRESSED = 2;\r\nconst POINT_CONVERSION_UNCOMPRESSED = 4;\r\nconst POINT_CONVERSION_HYBRID = 6;\r\n\r\nexport class ECDH {\r\n private static _convertKeyHybrid: ECDHInterface | undefined;\r\n private static get convertKeyHybrid(): ECDHInterface {\r\n if (!this._convertKeyHybrid) {\r\n this._convertKeyHybrid =\r\n NitroModules.createHybridObject<ECDHInterface>('ECDH');\r\n }\r\n return this._convertKeyHybrid;\r\n }\r\n\r\n private _hybrid: ECDHInterface;\r\n\r\n constructor(curveName: string) {\r\n this._hybrid = NitroModules.createHybridObject<ECDHInterface>('ECDH');\r\n this._hybrid.init(curveName);\r\n }\r\n\r\n generateKeys(): Buffer {\r\n const key = this._hybrid.generateKeys();\r\n return Buffer.from(key);\r\n }\r\n\r\n computeSecret(\r\n otherPublicKey: Buffer | string | { code: number; byteLength: number },\r\n inputEncoding?: BufferEncoding,\r\n ): Buffer {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(otherPublicKey)) {\r\n keyBuf = otherPublicKey;\r\n } else if (typeof otherPublicKey === 'string') {\r\n keyBuf = Buffer.from(otherPublicKey, inputEncoding);\r\n } else {\r\n // Handle array view or other types if necessary, but Node.js typically expects Buffer or string + encoding\r\n throw new TypeError('Invalid otherPublicKey type');\r\n }\r\n\r\n // ECDH.computeSecret in Node.js returns Buffer\r\n const secret = this._hybrid.computeSecret(toArrayBuffer(keyBuf));\r\n return Buffer.from(secret);\r\n }\r\n\r\n getPrivateKey(): Buffer {\r\n return Buffer.from(this._hybrid.getPrivateKey());\r\n }\r\n\r\n setPrivateKey(privateKey: Buffer | string, encoding?: BufferEncoding): void {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(privateKey)) {\r\n keyBuf = privateKey;\r\n } else {\r\n keyBuf = Buffer.from(privateKey, encoding);\r\n }\r\n this._hybrid.setPrivateKey(toArrayBuffer(keyBuf));\r\n }\r\n\r\n getPublicKey(encoding?: BufferEncoding): Buffer | string {\r\n // Node.js getPublicKey([encoding[, format]])\r\n // If encoding is provided, returns string. If not, Buffer.\r\n // Our C++ returns ArrayBuffer (Buffer).\r\n // We ignore format for now as C++ implementation defaults to uncompressed.\r\n const pub = Buffer.from(this._hybrid.getPublicKey());\r\n if (encoding) {\r\n return pub.toString(encoding);\r\n }\r\n return pub;\r\n }\r\n\r\n setPublicKey(publicKey: Buffer | string, encoding?: BufferEncoding): void {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(publicKey)) {\r\n keyBuf = publicKey;\r\n } else {\r\n keyBuf = Buffer.from(publicKey, encoding);\r\n }\r\n this._hybrid.setPublicKey(toArrayBuffer(keyBuf));\r\n }\r\n\r\n static convertKey(\r\n key: Buffer | string,\r\n curve: string,\r\n inputEncoding?: BufferEncoding,\r\n outputEncoding?: BufferEncoding,\r\n format?: 'uncompressed' | 'compressed' | 'hybrid',\r\n ): Buffer | string {\r\n let keyBuf: Buffer;\r\n if (Buffer.isBuffer(key)) {\r\n keyBuf = key;\r\n } else {\r\n keyBuf = Buffer.from(key, inputEncoding);\r\n }\r\n\r\n let formatNum: number;\r\n switch (format) {\r\n case 'compressed':\r\n formatNum = POINT_CONVERSION_COMPRESSED;\r\n break;\r\n case 'hybrid':\r\n formatNum = POINT_CONVERSION_HYBRID;\r\n break;\r\n case 'uncompressed':\r\n case undefined:\r\n formatNum = POINT_CONVERSION_UNCOMPRESSED;\r\n break;\r\n default:\r\n throw new TypeError(\r\n `Invalid point conversion format: ${format as string}`,\r\n );\r\n }\r\n\r\n const result = Buffer.from(\r\n ECDH.convertKeyHybrid.convertKey(toArrayBuffer(keyBuf), curve, formatNum),\r\n );\r\n\r\n if (outputEncoding) {\r\n return result.toString(outputEncoding);\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nexport function createECDH(curveName: string): ECDH {\r\n return new ECDH(curveName);\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/ed.js
CHANGED
|
@@ -16,7 +16,7 @@ var _utils = require("./utils");
|
|
|
16
16
|
var _ecdh = require("./ecdh");
|
|
17
17
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
18
18
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
19
|
-
function _toPrimitive(t,
|
|
19
|
+
function _toPrimitive(t, e) { if ("object" != typeof t || !t) return t; var r; if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) { var i = r.call(t, e || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === e ? String : Number)(t); }
|
|
20
20
|
class Ed {
|
|
21
21
|
constructor(type, config) {
|
|
22
22
|
_defineProperty(this, "type", void 0);
|
package/dist/commonjs/ed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_classes","_utils","_ecdh","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Ed","constructor","type","config","native","NitroModules","createHybridObject","setCurve","diffieHellman","options","callback","privKeyObj","privateKey","pubKeyObj","publicKey","handle","exportKey","ret","Error","Buffer","from","err","undefined","generateKeyPair","publicFormat","publicType","privateFormat","privateType","cipher","passphrase","generateKeyPairSync","getPublicKey","getPrivateKey","getSharedSecret","toAB","sign","message","key","signSync","verify","signature","verifySync","exports","checkDiffieHellmanOptions","keyType","asymmetricKeyType","ecDiffieHellman","ed","ed_createKeyObjects","publicKeyData","privateKeyData","pub","KeyObject","createKeyObject","KFormatType","DER","KeyEncoding","SPKI","priv","PKCS8","ed_formatKeyPairOutput","encoding","format","PEM","exported","Uint8Array","toString","ed_generateKeyPair","isAsync","derConfig","then","catch","curveName","namedCurve","ecdh","ECDH","jwkPrivate","exportJwk","d","setPrivateKey","jwkPublic","x","y","publicBytes","concat","secret","computeSecret","privateKeyAsym","publicKeyAsym","privateCurve","publicCurve","ed_generateKeyPairWebCrypto","extractable","keyUsages","hasAnyNotIn","lazyDOMException","publicUsages","getUsagesUnion","privateUsages","length","algorithmName","CryptoKey","name","x_generateKeyPairWebCrypto","xDeriveBits","algorithm","baseKey","public","toLowerCase","privateKeyBytes","keyObject","publicKeyBytes","privateKeyTyped","publicKeyTyped","byteLength","Math","ceil","slice"],"sources":["ed.ts"],"sourcesContent":["import { NitroModules } from 'react-native-nitro-modules';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport type { AsymmetricKeyObject, PrivateKeyObject } from './keys/classes';\r\nimport {\r\n CryptoKey,\r\n KeyObject,\r\n PublicKeyObject,\r\n PrivateKeyObject as PrivateKeyObjectClass,\r\n} from './keys/classes';\r\nimport type { EdKeyPair } from './specs/v1/edKeyPair.nitro';\r\nimport type {\r\n BinaryLike,\r\n CFRGKeyPairType,\r\n CryptoKeyPair,\r\n DiffieHellmanCallback,\r\n DiffieHellmanOptions,\r\n GenerateKeyPairCallback,\r\n GenerateKeyPairReturn,\r\n Hex,\r\n KeyPairGenConfig,\r\n KeyUsage,\r\n SubtleAlgorithm,\r\n} from './utils';\r\nimport {\r\n binaryLikeToArrayBuffer as toAB,\r\n hasAnyNotIn,\r\n lazyDOMException,\r\n getUsagesUnion,\r\n KFormatType,\r\n KeyEncoding,\r\n} from './utils';\r\nimport { ECDH } from './ecdh';\r\n\r\nexport class Ed {\r\n type: CFRGKeyPairType;\r\n config: KeyPairGenConfig;\r\n native: EdKeyPair;\r\n\r\n constructor(type: CFRGKeyPairType, config: KeyPairGenConfig) {\r\n this.type = type;\r\n this.config = config;\r\n this.native = NitroModules.createHybridObject<EdKeyPair>('EdKeyPair');\r\n this.native.setCurve(type);\r\n }\r\n\r\n /**\r\n * Computes the Diffie-Hellman secret based on a privateKey and a publicKey.\r\n * Both keys must have the same asymmetricKeyType, which must be one of 'dh'\r\n * (for Diffie-Hellman), 'ec', 'x448', or 'x25519' (for ECDH).\r\n *\r\n * @api nodejs/node\r\n *\r\n * @param options `{ privateKey, publicKey }`, both of which are `KeyObject`s\r\n * @param callback optional `(err, secret) => void`\r\n * @returns `Buffer` if no callback, or `void` if callback is provided\r\n */\r\n diffieHellman(\r\n options: DiffieHellmanOptions,\r\n callback?: DiffieHellmanCallback,\r\n ): Buffer | void {\r\n // extract raw key bytes from KeyObject instances\r\n const privKeyObj = options.privateKey as AsymmetricKeyObject;\r\n const pubKeyObj = options.publicKey as AsymmetricKeyObject;\r\n const privateKey = privKeyObj.handle.exportKey();\r\n const publicKey = pubKeyObj.handle.exportKey();\r\n\r\n try {\r\n const ret = this.native.diffieHellman(privateKey, publicKey);\r\n if (!ret) {\r\n throw new Error('No secret');\r\n }\r\n if (callback) {\r\n callback(null, Buffer.from(ret));\r\n } else {\r\n return Buffer.from(ret);\r\n }\r\n } catch (e: unknown) {\r\n const err = e as Error;\r\n if (callback) {\r\n callback(err, undefined);\r\n } else {\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n async generateKeyPair(): Promise<void> {\r\n await this.native.generateKeyPair(\r\n this.config.publicFormat ?? -1,\r\n this.config.publicType ?? -1,\r\n this.config.privateFormat ?? -1,\r\n this.config.privateType ?? -1,\r\n this.config.cipher,\r\n this.config.passphrase as ArrayBuffer,\r\n );\r\n }\r\n\r\n generateKeyPairSync(): void {\r\n this.native.generateKeyPairSync(\r\n this.config.publicFormat ?? -1,\r\n this.config.publicType ?? -1,\r\n this.config.privateFormat ?? -1,\r\n this.config.privateType ?? -1,\r\n this.config.cipher,\r\n this.config.passphrase as ArrayBuffer,\r\n );\r\n }\r\n\r\n getPublicKey(): ArrayBuffer {\r\n return this.native.getPublicKey();\r\n }\r\n\r\n getPrivateKey(): ArrayBuffer {\r\n return this.native.getPrivateKey();\r\n }\r\n\r\n /**\r\n * Computes the Diffie-Hellman shared secret based on a privateKey and a\r\n * publicKey for key exchange\r\n *\r\n * @api \\@paulmillr/noble-curves/ed25519\r\n *\r\n * @param privateKey\r\n * @param publicKey\r\n * @returns shared secret key\r\n */\r\n getSharedSecret(privateKey: Hex, publicKey: Hex): ArrayBuffer {\r\n return this.native.diffieHellman(toAB(privateKey), toAB(publicKey));\r\n }\r\n\r\n async sign(message: BinaryLike, key?: BinaryLike): Promise<ArrayBuffer> {\r\n return key\r\n ? this.native.sign(toAB(message), toAB(key))\r\n : this.native.sign(toAB(message));\r\n }\r\n\r\n signSync(message: BinaryLike, key?: BinaryLike): ArrayBuffer {\r\n return key\r\n ? this.native.signSync(toAB(message), toAB(key))\r\n : this.native.signSync(toAB(message));\r\n }\r\n\r\n async verify(\r\n signature: BinaryLike,\r\n message: BinaryLike,\r\n key?: BinaryLike,\r\n ): Promise<boolean> {\r\n return key\r\n ? this.native.verify(toAB(signature), toAB(message), toAB(key))\r\n : this.native.verify(toAB(signature), toAB(message));\r\n }\r\n\r\n verifySync(\r\n signature: BinaryLike,\r\n message: BinaryLike,\r\n key?: BinaryLike,\r\n ): boolean {\r\n return key\r\n ? this.native.verifySync(toAB(signature), toAB(message), toAB(key))\r\n : this.native.verifySync(toAB(signature), toAB(message));\r\n }\r\n}\r\n\r\n// Node API\r\nexport function diffieHellman(\r\n options: DiffieHellmanOptions,\r\n callback?: DiffieHellmanCallback,\r\n): Buffer | void {\r\n checkDiffieHellmanOptions(options);\r\n\r\n const privateKey = options.privateKey as PrivateKeyObject;\r\n const keyType = privateKey.asymmetricKeyType;\r\n\r\n if (keyType === 'ec') {\r\n return ecDiffieHellman(options, callback);\r\n }\r\n\r\n const type = keyType as CFRGKeyPairType;\r\n const ed = new Ed(type, {});\r\n return ed.diffieHellman(options, callback);\r\n}\r\n\r\nfunction ed_createKeyObjects(ed: Ed): {\r\n pub: PublicKeyObject;\r\n priv: PrivateKeyObjectClass;\r\n} {\r\n const publicKeyData = ed.getPublicKey();\r\n const privateKeyData = ed.getPrivateKey();\r\n const pub = KeyObject.createKeyObject(\r\n 'public',\r\n publicKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.SPKI,\r\n ) as PublicKeyObject;\r\n const priv = KeyObject.createKeyObject(\r\n 'private',\r\n privateKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.PKCS8,\r\n ) as PrivateKeyObjectClass;\r\n return { pub, priv };\r\n}\r\n\r\n// Node API\r\nfunction ed_formatKeyPairOutput(\r\n ed: Ed,\r\n encoding: KeyPairGenConfig,\r\n): {\r\n publicKey: PublicKeyObject | string | ArrayBuffer;\r\n privateKey: PrivateKeyObjectClass | string | ArrayBuffer;\r\n} {\r\n const { publicFormat, privateFormat, cipher, passphrase } = encoding;\r\n const { pub, priv } = ed_createKeyObjects(ed);\r\n\r\n let publicKey: PublicKeyObject | string | ArrayBuffer;\r\n let privateKey: PrivateKeyObjectClass | string | ArrayBuffer;\r\n\r\n if (publicFormat == null || publicFormat === -1) {\r\n publicKey = pub;\r\n } else {\r\n const format =\r\n publicFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const exported = pub.handle.exportKey(format, KeyEncoding.SPKI);\r\n if (format === KFormatType.PEM) {\r\n publicKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n publicKey = exported;\r\n }\r\n }\r\n\r\n if (privateFormat == null || privateFormat === -1) {\r\n privateKey = priv;\r\n } else {\r\n const format =\r\n privateFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const exported = priv.handle.exportKey(\r\n format,\r\n KeyEncoding.PKCS8,\r\n cipher,\r\n passphrase,\r\n );\r\n if (format === KFormatType.PEM) {\r\n privateKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n privateKey = exported;\r\n }\r\n }\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport function ed_generateKeyPair(\r\n isAsync: boolean,\r\n type: CFRGKeyPairType,\r\n encoding: KeyPairGenConfig,\r\n callback: GenerateKeyPairCallback | undefined,\r\n): GenerateKeyPairReturn | void {\r\n const derConfig: KeyPairGenConfig = {\r\n ...encoding,\r\n publicFormat: KFormatType.DER,\r\n publicType: KeyEncoding.SPKI,\r\n privateFormat: KFormatType.DER,\r\n privateType: KeyEncoding.PKCS8,\r\n };\r\n const ed = new Ed(type, derConfig);\r\n\r\n if (isAsync) {\r\n if (!callback) {\r\n throw new Error('A callback is required for async key generation.');\r\n }\r\n ed.generateKeyPair()\r\n .then(() => {\r\n const { publicKey, privateKey } = ed_formatKeyPairOutput(ed, encoding);\r\n callback(undefined, publicKey, privateKey);\r\n })\r\n .catch(err => {\r\n callback(err, undefined, undefined);\r\n });\r\n return;\r\n }\r\n\r\n let err: Error | undefined;\r\n try {\r\n ed.generateKeyPairSync();\r\n } catch (e) {\r\n err = e instanceof Error ? e : new Error(String(e));\r\n }\r\n\r\n const { publicKey, privateKey } = err\r\n ? { publicKey: undefined, privateKey: undefined }\r\n : ed_formatKeyPairOutput(ed, encoding);\r\n\r\n if (callback) {\r\n callback(err, publicKey, privateKey);\r\n return;\r\n }\r\n return [err, publicKey, privateKey];\r\n}\r\n\r\nfunction ecDiffieHellman(\r\n options: DiffieHellmanOptions,\r\n callback?: DiffieHellmanCallback,\r\n): Buffer | void {\r\n const privateKey = options.privateKey as PrivateKeyObject;\r\n const publicKey = options.publicKey as AsymmetricKeyObject;\r\n\r\n const curveName = privateKey.namedCurve;\r\n if (!curveName) {\r\n throw new Error('Unable to determine EC curve name from private key');\r\n }\r\n\r\n const ecdh = new ECDH(curveName);\r\n\r\n const jwkPrivate = privateKey.handle.exportJwk({}, false);\r\n if (!jwkPrivate.d) throw new Error('Invalid private key');\r\n ecdh.setPrivateKey(Buffer.from(jwkPrivate.d, 'base64url'));\r\n\r\n const jwkPublic = publicKey.handle.exportJwk({}, false);\r\n if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');\r\n const x = Buffer.from(jwkPublic.x, 'base64url');\r\n const y = Buffer.from(jwkPublic.y, 'base64url');\r\n const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);\r\n\r\n try {\r\n const secret = ecdh.computeSecret(publicBytes);\r\n if (callback) {\r\n callback(null, secret);\r\n } else {\r\n return secret;\r\n }\r\n } catch (e: unknown) {\r\n const err = e as Error;\r\n if (callback) {\r\n callback(err, undefined);\r\n } else {\r\n throw err;\r\n }\r\n }\r\n}\r\n\r\nfunction checkDiffieHellmanOptions(options: DiffieHellmanOptions): void {\r\n const { privateKey, publicKey } = options;\r\n\r\n // Check if keys are KeyObject instances\r\n if (\r\n !privateKey ||\r\n typeof privateKey !== 'object' ||\r\n !('type' in privateKey)\r\n ) {\r\n throw new Error('privateKey must be a KeyObject');\r\n }\r\n if (!publicKey || typeof publicKey !== 'object' || !('type' in publicKey)) {\r\n throw new Error('publicKey must be a KeyObject');\r\n }\r\n\r\n // type checks\r\n if (privateKey.type !== 'private') {\r\n throw new Error('privateKey must be a private KeyObject');\r\n }\r\n if (publicKey.type !== 'public') {\r\n throw new Error('publicKey must be a public KeyObject');\r\n }\r\n\r\n // For asymmetric keys, check if they have the asymmetricKeyType property\r\n const privateKeyAsym = privateKey as AsymmetricKeyObject;\r\n const publicKeyAsym = publicKey as AsymmetricKeyObject;\r\n\r\n // key types must match\r\n if (\r\n privateKeyAsym.asymmetricKeyType &&\r\n publicKeyAsym.asymmetricKeyType &&\r\n privateKeyAsym.asymmetricKeyType !== publicKeyAsym.asymmetricKeyType\r\n ) {\r\n throw new Error('Keys must be asymmetric and their types must match');\r\n }\r\n\r\n switch (privateKeyAsym.asymmetricKeyType) {\r\n // case 'dh': // TODO: uncomment when implemented\r\n case 'ec': {\r\n const privateCurve = privateKeyAsym.namedCurve;\r\n const publicCurve = publicKeyAsym.namedCurve;\r\n if (privateCurve && publicCurve && privateCurve !== publicCurve) {\r\n throw new Error('Private and public key curves do not match');\r\n }\r\n break;\r\n }\r\n case 'x25519':\r\n case 'x448':\r\n break;\r\n default:\r\n throw new Error(\r\n `Unknown curve type: ${privateKeyAsym.asymmetricKeyType}`,\r\n );\r\n }\r\n}\r\n\r\nexport async function ed_generateKeyPairWebCrypto(\r\n type: 'ed25519' | 'ed448',\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n): Promise<CryptoKeyPair> {\r\n if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {\r\n throw lazyDOMException(`Unsupported key usage for ${type}`, 'SyntaxError');\r\n }\r\n\r\n const publicUsages = getUsagesUnion(keyUsages, 'verify');\r\n const privateUsages = getUsagesUnion(keyUsages, 'sign');\r\n\r\n if (privateUsages.length === 0) {\r\n throw lazyDOMException('Usages cannot be empty', 'SyntaxError');\r\n }\r\n\r\n // Request DER-encoded SPKI for public key, PKCS8 for private key\r\n const config = {\r\n publicFormat: KFormatType.DER,\r\n publicType: KeyEncoding.SPKI,\r\n privateFormat: KFormatType.DER,\r\n privateType: KeyEncoding.PKCS8,\r\n };\r\n const ed = new Ed(type, config);\r\n await ed.generateKeyPair();\r\n\r\n const algorithmName = type === 'ed25519' ? 'Ed25519' : 'Ed448';\r\n const { pub, priv } = ed_createKeyObjects(ed);\r\n\r\n const publicKey = new CryptoKey(\r\n pub,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n publicUsages,\r\n true,\r\n );\r\n const privateKey = new CryptoKey(\r\n priv,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n privateUsages,\r\n extractable,\r\n );\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport async function x_generateKeyPairWebCrypto(\r\n type: 'x25519' | 'x448',\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n): Promise<CryptoKeyPair> {\r\n if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {\r\n throw lazyDOMException(`Unsupported key usage for ${type}`, 'SyntaxError');\r\n }\r\n\r\n const publicUsages = getUsagesUnion(keyUsages);\r\n const privateUsages = getUsagesUnion(keyUsages, 'deriveKey', 'deriveBits');\r\n\r\n if (privateUsages.length === 0) {\r\n throw lazyDOMException('Usages cannot be empty', 'SyntaxError');\r\n }\r\n\r\n // Request DER-encoded SPKI for public key, PKCS8 for private key\r\n const config = {\r\n publicFormat: KFormatType.DER,\r\n publicType: KeyEncoding.SPKI,\r\n privateFormat: KFormatType.DER,\r\n privateType: KeyEncoding.PKCS8,\r\n };\r\n const ed = new Ed(type, config);\r\n await ed.generateKeyPair();\r\n\r\n const algorithmName = type === 'x25519' ? 'X25519' : 'X448';\r\n const { pub, priv } = ed_createKeyObjects(ed);\r\n\r\n const publicKey = new CryptoKey(\r\n pub,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n publicUsages,\r\n true,\r\n );\r\n const privateKey = new CryptoKey(\r\n priv,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n privateUsages,\r\n extractable,\r\n );\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport function xDeriveBits(\r\n algorithm: SubtleAlgorithm,\r\n baseKey: CryptoKey,\r\n length: number | null,\r\n): ArrayBuffer {\r\n const publicKey = algorithm.public;\r\n\r\n if (!publicKey) {\r\n throw new Error('Public key is required for X25519/X448 derivation');\r\n }\r\n\r\n if (baseKey.algorithm.name !== publicKey.algorithm.name) {\r\n throw new Error('Keys must be of the same algorithm');\r\n }\r\n\r\n const type = baseKey.algorithm.name.toLowerCase() as 'x25519' | 'x448';\r\n const ed = new Ed(type, {});\r\n\r\n // Export raw keys\r\n const privateKeyBytes = baseKey.keyObject.handle.exportKey();\r\n const publicKeyBytes = publicKey.keyObject.handle.exportKey();\r\n\r\n const privateKeyTyped = new Uint8Array(privateKeyBytes);\r\n const publicKeyTyped = new Uint8Array(publicKeyBytes);\r\n\r\n const secret = ed.getSharedSecret(privateKeyTyped, publicKeyTyped);\r\n\r\n // If length is null, return the full secret\r\n if (length === null) {\r\n return secret;\r\n }\r\n\r\n // If length is specified, truncate\r\n const byteLength = Math.ceil(length / 8);\r\n if (secret.byteLength >= byteLength) {\r\n return secret.slice(0, byteLength);\r\n }\r\n\r\n throw new Error('Derived key is shorter than requested length');\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_reactNativeBuffer","_classes","_utils","_ecdh","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Ed","constructor","type","config","native","NitroModules","createHybridObject","setCurve","diffieHellman","options","callback","privKeyObj","privateKey","pubKeyObj","publicKey","handle","exportKey","ret","Error","Buffer","from","err","undefined","generateKeyPair","publicFormat","publicType","privateFormat","privateType","cipher","passphrase","generateKeyPairSync","getPublicKey","getPrivateKey","getSharedSecret","toAB","sign","message","key","signSync","verify","signature","verifySync","exports","checkDiffieHellmanOptions","keyType","asymmetricKeyType","ecDiffieHellman","ed","ed_createKeyObjects","publicKeyData","privateKeyData","pub","KeyObject","createKeyObject","KFormatType","DER","KeyEncoding","SPKI","priv","PKCS8","ed_formatKeyPairOutput","encoding","format","PEM","exported","Uint8Array","toString","ed_generateKeyPair","isAsync","derConfig","then","catch","curveName","namedCurve","ecdh","ECDH","jwkPrivate","exportJwk","d","setPrivateKey","jwkPublic","x","y","publicBytes","concat","secret","computeSecret","privateKeyAsym","publicKeyAsym","privateCurve","publicCurve","ed_generateKeyPairWebCrypto","extractable","keyUsages","hasAnyNotIn","lazyDOMException","publicUsages","getUsagesUnion","privateUsages","length","algorithmName","CryptoKey","name","x_generateKeyPairWebCrypto","xDeriveBits","algorithm","baseKey","public","toLowerCase","privateKeyBytes","keyObject","publicKeyBytes","privateKeyTyped","publicKeyTyped","byteLength","Math","ceil","slice"],"sources":["ed.ts"],"sourcesContent":["import { NitroModules } from 'react-native-nitro-modules';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport type { AsymmetricKeyObject, PrivateKeyObject } from './keys/classes';\r\nimport {\r\n CryptoKey,\r\n KeyObject,\r\n PublicKeyObject,\r\n PrivateKeyObject as PrivateKeyObjectClass,\r\n} from './keys/classes';\r\nimport type { EdKeyPair } from './specs/v1/edKeyPair.nitro';\r\nimport type {\r\n BinaryLike,\r\n CFRGKeyPairType,\r\n CryptoKeyPair,\r\n DiffieHellmanCallback,\r\n DiffieHellmanOptions,\r\n GenerateKeyPairCallback,\r\n GenerateKeyPairReturn,\r\n Hex,\r\n KeyPairGenConfig,\r\n KeyUsage,\r\n SubtleAlgorithm,\r\n} from './utils';\r\nimport {\r\n binaryLikeToArrayBuffer as toAB,\r\n hasAnyNotIn,\r\n lazyDOMException,\r\n getUsagesUnion,\r\n KFormatType,\r\n KeyEncoding,\r\n} from './utils';\r\nimport { ECDH } from './ecdh';\r\n\r\nexport class Ed {\r\n type: CFRGKeyPairType;\r\n config: KeyPairGenConfig;\r\n native: EdKeyPair;\r\n\r\n constructor(type: CFRGKeyPairType, config: KeyPairGenConfig) {\r\n this.type = type;\r\n this.config = config;\r\n this.native = NitroModules.createHybridObject<EdKeyPair>('EdKeyPair');\r\n this.native.setCurve(type);\r\n }\r\n\r\n /**\r\n * Computes the Diffie-Hellman secret based on a privateKey and a publicKey.\r\n * Both keys must have the same asymmetricKeyType, which must be one of 'dh'\r\n * (for Diffie-Hellman), 'ec', 'x448', or 'x25519' (for ECDH).\r\n *\r\n * @api nodejs/node\r\n *\r\n * @param options `{ privateKey, publicKey }`, both of which are `KeyObject`s\r\n * @param callback optional `(err, secret) => void`\r\n * @returns `Buffer` if no callback, or `void` if callback is provided\r\n */\r\n diffieHellman(\r\n options: DiffieHellmanOptions,\r\n callback?: DiffieHellmanCallback,\r\n ): Buffer | void {\r\n // extract raw key bytes from KeyObject instances\r\n const privKeyObj = options.privateKey as AsymmetricKeyObject;\r\n const pubKeyObj = options.publicKey as AsymmetricKeyObject;\r\n const privateKey = privKeyObj.handle.exportKey();\r\n const publicKey = pubKeyObj.handle.exportKey();\r\n\r\n try {\r\n const ret = this.native.diffieHellman(privateKey, publicKey);\r\n if (!ret) {\r\n throw new Error('No secret');\r\n }\r\n if (callback) {\r\n callback(null, Buffer.from(ret));\r\n } else {\r\n return Buffer.from(ret);\r\n }\r\n } catch (e: unknown) {\r\n const err = e as Error;\r\n if (callback) {\r\n callback(err, undefined);\r\n } else {\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n async generateKeyPair(): Promise<void> {\r\n await this.native.generateKeyPair(\r\n this.config.publicFormat ?? -1,\r\n this.config.publicType ?? -1,\r\n this.config.privateFormat ?? -1,\r\n this.config.privateType ?? -1,\r\n this.config.cipher,\r\n this.config.passphrase as ArrayBuffer,\r\n );\r\n }\r\n\r\n generateKeyPairSync(): void {\r\n this.native.generateKeyPairSync(\r\n this.config.publicFormat ?? -1,\r\n this.config.publicType ?? -1,\r\n this.config.privateFormat ?? -1,\r\n this.config.privateType ?? -1,\r\n this.config.cipher,\r\n this.config.passphrase as ArrayBuffer,\r\n );\r\n }\r\n\r\n getPublicKey(): ArrayBuffer {\r\n return this.native.getPublicKey();\r\n }\r\n\r\n getPrivateKey(): ArrayBuffer {\r\n return this.native.getPrivateKey();\r\n }\r\n\r\n /**\r\n * Computes the Diffie-Hellman shared secret based on a privateKey and a\r\n * publicKey for key exchange\r\n *\r\n * @api \\@paulmillr/noble-curves/ed25519\r\n *\r\n * @param privateKey\r\n * @param publicKey\r\n * @returns shared secret key\r\n */\r\n getSharedSecret(privateKey: Hex, publicKey: Hex): ArrayBuffer {\r\n return this.native.diffieHellman(toAB(privateKey), toAB(publicKey));\r\n }\r\n\r\n async sign(message: BinaryLike, key?: BinaryLike): Promise<ArrayBuffer> {\r\n return key\r\n ? this.native.sign(toAB(message), toAB(key))\r\n : this.native.sign(toAB(message));\r\n }\r\n\r\n signSync(message: BinaryLike, key?: BinaryLike): ArrayBuffer {\r\n return key\r\n ? this.native.signSync(toAB(message), toAB(key))\r\n : this.native.signSync(toAB(message));\r\n }\r\n\r\n async verify(\r\n signature: BinaryLike,\r\n message: BinaryLike,\r\n key?: BinaryLike,\r\n ): Promise<boolean> {\r\n return key\r\n ? this.native.verify(toAB(signature), toAB(message), toAB(key))\r\n : this.native.verify(toAB(signature), toAB(message));\r\n }\r\n\r\n verifySync(\r\n signature: BinaryLike,\r\n message: BinaryLike,\r\n key?: BinaryLike,\r\n ): boolean {\r\n return key\r\n ? this.native.verifySync(toAB(signature), toAB(message), toAB(key))\r\n : this.native.verifySync(toAB(signature), toAB(message));\r\n }\r\n}\r\n\r\n// Node API\r\nexport function diffieHellman(\r\n options: DiffieHellmanOptions,\r\n callback?: DiffieHellmanCallback,\r\n): Buffer | void {\r\n checkDiffieHellmanOptions(options);\r\n\r\n const privateKey = options.privateKey as PrivateKeyObject;\r\n const keyType = privateKey.asymmetricKeyType;\r\n\r\n if (keyType === 'ec') {\r\n return ecDiffieHellman(options, callback);\r\n }\r\n\r\n const type = keyType as CFRGKeyPairType;\r\n const ed = new Ed(type, {});\r\n return ed.diffieHellman(options, callback);\r\n}\r\n\r\nfunction ed_createKeyObjects(ed: Ed): {\r\n pub: PublicKeyObject;\r\n priv: PrivateKeyObjectClass;\r\n} {\r\n const publicKeyData = ed.getPublicKey();\r\n const privateKeyData = ed.getPrivateKey();\r\n const pub = KeyObject.createKeyObject(\r\n 'public',\r\n publicKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.SPKI,\r\n ) as PublicKeyObject;\r\n const priv = KeyObject.createKeyObject(\r\n 'private',\r\n privateKeyData,\r\n KFormatType.DER,\r\n KeyEncoding.PKCS8,\r\n ) as PrivateKeyObjectClass;\r\n return { pub, priv };\r\n}\r\n\r\n// Node API\r\nfunction ed_formatKeyPairOutput(\r\n ed: Ed,\r\n encoding: KeyPairGenConfig,\r\n): {\r\n publicKey: PublicKeyObject | string | ArrayBuffer;\r\n privateKey: PrivateKeyObjectClass | string | ArrayBuffer;\r\n} {\r\n const { publicFormat, privateFormat, cipher, passphrase } = encoding;\r\n const { pub, priv } = ed_createKeyObjects(ed);\r\n\r\n let publicKey: PublicKeyObject | string | ArrayBuffer;\r\n let privateKey: PrivateKeyObjectClass | string | ArrayBuffer;\r\n\r\n if (publicFormat == null || publicFormat === -1) {\r\n publicKey = pub;\r\n } else {\r\n const format =\r\n publicFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const exported = pub.handle.exportKey(format, KeyEncoding.SPKI);\r\n if (format === KFormatType.PEM) {\r\n publicKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n publicKey = exported;\r\n }\r\n }\r\n\r\n if (privateFormat == null || privateFormat === -1) {\r\n privateKey = priv;\r\n } else {\r\n const format =\r\n privateFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;\r\n const exported = priv.handle.exportKey(\r\n format,\r\n KeyEncoding.PKCS8,\r\n cipher,\r\n passphrase,\r\n );\r\n if (format === KFormatType.PEM) {\r\n privateKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');\r\n } else {\r\n privateKey = exported;\r\n }\r\n }\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport function ed_generateKeyPair(\r\n isAsync: boolean,\r\n type: CFRGKeyPairType,\r\n encoding: KeyPairGenConfig,\r\n callback: GenerateKeyPairCallback | undefined,\r\n): GenerateKeyPairReturn | void {\r\n const derConfig: KeyPairGenConfig = {\r\n ...encoding,\r\n publicFormat: KFormatType.DER,\r\n publicType: KeyEncoding.SPKI,\r\n privateFormat: KFormatType.DER,\r\n privateType: KeyEncoding.PKCS8,\r\n };\r\n const ed = new Ed(type, derConfig);\r\n\r\n if (isAsync) {\r\n if (!callback) {\r\n throw new Error('A callback is required for async key generation.');\r\n }\r\n ed.generateKeyPair()\r\n .then(() => {\r\n const { publicKey, privateKey } = ed_formatKeyPairOutput(ed, encoding);\r\n callback(undefined, publicKey, privateKey);\r\n })\r\n .catch(err => {\r\n callback(err, undefined, undefined);\r\n });\r\n return;\r\n }\r\n\r\n let err: Error | undefined;\r\n try {\r\n ed.generateKeyPairSync();\r\n } catch (e) {\r\n err = e instanceof Error ? e : new Error(String(e));\r\n }\r\n\r\n const { publicKey, privateKey } = err\r\n ? { publicKey: undefined, privateKey: undefined }\r\n : ed_formatKeyPairOutput(ed, encoding);\r\n\r\n if (callback) {\r\n callback(err, publicKey, privateKey);\r\n return;\r\n }\r\n return [err, publicKey, privateKey];\r\n}\r\n\r\nfunction ecDiffieHellman(\r\n options: DiffieHellmanOptions,\r\n callback?: DiffieHellmanCallback,\r\n): Buffer | void {\r\n const privateKey = options.privateKey as PrivateKeyObject;\r\n const publicKey = options.publicKey as AsymmetricKeyObject;\r\n\r\n const curveName = privateKey.namedCurve;\r\n if (!curveName) {\r\n throw new Error('Unable to determine EC curve name from private key');\r\n }\r\n\r\n const ecdh = new ECDH(curveName);\r\n\r\n const jwkPrivate = privateKey.handle.exportJwk({}, false);\r\n if (!jwkPrivate.d) throw new Error('Invalid private key');\r\n ecdh.setPrivateKey(Buffer.from(jwkPrivate.d, 'base64url'));\r\n\r\n const jwkPublic = publicKey.handle.exportJwk({}, false);\r\n if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');\r\n const x = Buffer.from(jwkPublic.x, 'base64url');\r\n const y = Buffer.from(jwkPublic.y, 'base64url');\r\n const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);\r\n\r\n try {\r\n const secret = ecdh.computeSecret(publicBytes);\r\n if (callback) {\r\n callback(null, secret);\r\n } else {\r\n return secret;\r\n }\r\n } catch (e: unknown) {\r\n const err = e as Error;\r\n if (callback) {\r\n callback(err, undefined);\r\n } else {\r\n throw err;\r\n }\r\n }\r\n}\r\n\r\nfunction checkDiffieHellmanOptions(options: DiffieHellmanOptions): void {\r\n const { privateKey, publicKey } = options;\r\n\r\n // Check if keys are KeyObject instances\r\n if (\r\n !privateKey ||\r\n typeof privateKey !== 'object' ||\r\n !('type' in privateKey)\r\n ) {\r\n throw new Error('privateKey must be a KeyObject');\r\n }\r\n if (!publicKey || typeof publicKey !== 'object' || !('type' in publicKey)) {\r\n throw new Error('publicKey must be a KeyObject');\r\n }\r\n\r\n // type checks\r\n if (privateKey.type !== 'private') {\r\n throw new Error('privateKey must be a private KeyObject');\r\n }\r\n if (publicKey.type !== 'public') {\r\n throw new Error('publicKey must be a public KeyObject');\r\n }\r\n\r\n // For asymmetric keys, check if they have the asymmetricKeyType property\r\n const privateKeyAsym = privateKey as AsymmetricKeyObject;\r\n const publicKeyAsym = publicKey as AsymmetricKeyObject;\r\n\r\n // key types must match\r\n if (\r\n privateKeyAsym.asymmetricKeyType &&\r\n publicKeyAsym.asymmetricKeyType &&\r\n privateKeyAsym.asymmetricKeyType !== publicKeyAsym.asymmetricKeyType\r\n ) {\r\n throw new Error('Keys must be asymmetric and their types must match');\r\n }\r\n\r\n switch (privateKeyAsym.asymmetricKeyType) {\r\n // case 'dh': // TODO: uncomment when implemented\r\n case 'ec': {\r\n const privateCurve = privateKeyAsym.namedCurve;\r\n const publicCurve = publicKeyAsym.namedCurve;\r\n if (privateCurve && publicCurve && privateCurve !== publicCurve) {\r\n throw new Error('Private and public key curves do not match');\r\n }\r\n break;\r\n }\r\n case 'x25519':\r\n case 'x448':\r\n break;\r\n default:\r\n throw new Error(\r\n `Unknown curve type: ${privateKeyAsym.asymmetricKeyType}`,\r\n );\r\n }\r\n}\r\n\r\nexport async function ed_generateKeyPairWebCrypto(\r\n type: 'ed25519' | 'ed448',\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n): Promise<CryptoKeyPair> {\r\n if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {\r\n throw lazyDOMException(`Unsupported key usage for ${type}`, 'SyntaxError');\r\n }\r\n\r\n const publicUsages = getUsagesUnion(keyUsages, 'verify');\r\n const privateUsages = getUsagesUnion(keyUsages, 'sign');\r\n\r\n if (privateUsages.length === 0) {\r\n throw lazyDOMException('Usages cannot be empty', 'SyntaxError');\r\n }\r\n\r\n // Request DER-encoded SPKI for public key, PKCS8 for private key\r\n const config = {\r\n publicFormat: KFormatType.DER,\r\n publicType: KeyEncoding.SPKI,\r\n privateFormat: KFormatType.DER,\r\n privateType: KeyEncoding.PKCS8,\r\n };\r\n const ed = new Ed(type, config);\r\n await ed.generateKeyPair();\r\n\r\n const algorithmName = type === 'ed25519' ? 'Ed25519' : 'Ed448';\r\n const { pub, priv } = ed_createKeyObjects(ed);\r\n\r\n const publicKey = new CryptoKey(\r\n pub,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n publicUsages,\r\n true,\r\n );\r\n const privateKey = new CryptoKey(\r\n priv,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n privateUsages,\r\n extractable,\r\n );\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport async function x_generateKeyPairWebCrypto(\r\n type: 'x25519' | 'x448',\r\n extractable: boolean,\r\n keyUsages: KeyUsage[],\r\n): Promise<CryptoKeyPair> {\r\n if (hasAnyNotIn(keyUsages, ['deriveKey', 'deriveBits'])) {\r\n throw lazyDOMException(`Unsupported key usage for ${type}`, 'SyntaxError');\r\n }\r\n\r\n const publicUsages = getUsagesUnion(keyUsages);\r\n const privateUsages = getUsagesUnion(keyUsages, 'deriveKey', 'deriveBits');\r\n\r\n if (privateUsages.length === 0) {\r\n throw lazyDOMException('Usages cannot be empty', 'SyntaxError');\r\n }\r\n\r\n // Request DER-encoded SPKI for public key, PKCS8 for private key\r\n const config = {\r\n publicFormat: KFormatType.DER,\r\n publicType: KeyEncoding.SPKI,\r\n privateFormat: KFormatType.DER,\r\n privateType: KeyEncoding.PKCS8,\r\n };\r\n const ed = new Ed(type, config);\r\n await ed.generateKeyPair();\r\n\r\n const algorithmName = type === 'x25519' ? 'X25519' : 'X448';\r\n const { pub, priv } = ed_createKeyObjects(ed);\r\n\r\n const publicKey = new CryptoKey(\r\n pub,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n publicUsages,\r\n true,\r\n );\r\n const privateKey = new CryptoKey(\r\n priv,\r\n { name: algorithmName } as SubtleAlgorithm,\r\n privateUsages,\r\n extractable,\r\n );\r\n\r\n return { publicKey, privateKey };\r\n}\r\n\r\nexport function xDeriveBits(\r\n algorithm: SubtleAlgorithm,\r\n baseKey: CryptoKey,\r\n length: number | null,\r\n): ArrayBuffer {\r\n const publicKey = algorithm.public;\r\n\r\n if (!publicKey) {\r\n throw new Error('Public key is required for X25519/X448 derivation');\r\n }\r\n\r\n if (baseKey.algorithm.name !== publicKey.algorithm.name) {\r\n throw new Error('Keys must be of the same algorithm');\r\n }\r\n\r\n const type = baseKey.algorithm.name.toLowerCase() as 'x25519' | 'x448';\r\n const ed = new Ed(type, {});\r\n\r\n // Export raw keys\r\n const privateKeyBytes = baseKey.keyObject.handle.exportKey();\r\n const publicKeyBytes = publicKey.keyObject.handle.exportKey();\r\n\r\n const privateKeyTyped = new Uint8Array(privateKeyBytes);\r\n const publicKeyTyped = new Uint8Array(publicKeyBytes);\r\n\r\n const secret = ed.getSharedSecret(privateKeyTyped, publicKeyTyped);\r\n\r\n // If length is null, return the full secret\r\n if (length === null) {\r\n return secret;\r\n }\r\n\r\n // If length is specified, truncate\r\n const byteLength = Math.ceil(length / 8);\r\n if (secret.byteLength >= byteLength) {\r\n return secret.slice(0, byteLength);\r\n }\r\n\r\n throw new Error('Derived key is shorter than requested length');\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/hash.js
CHANGED
|
@@ -17,7 +17,7 @@ var _errors = require("./utils/errors");
|
|
|
17
17
|
var _hashnames = require("./utils/hashnames");
|
|
18
18
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
19
19
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
20
|
-
function _toPrimitive(t,
|
|
20
|
+
function _toPrimitive(t, e) { if ("object" != typeof t || !t) return t; var r; if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) { var i = r.call(t, e || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === e ? String : Number)(t); }
|
|
21
21
|
class HashUtils {
|
|
22
22
|
static getSupportedHashAlgorithms() {
|
|
23
23
|
return this.native.getSupportedHashAlgorithms();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_readableStream","require","_reactNativeNitroModules","_reactNativeBuffer","_utils","_validation","_errors","_hashnames","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","HashUtils","getSupportedHashAlgorithms","native","NitroModules","createHybridObject","getHashes","Hash","Stream","Transform","validate","args","_args$options","_args$options2","algorithm","length","Error","options","outputLength","undefined","constructor","createHash","update","data","inputEncoding","defaultEncoding","binaryLikeToArrayBuffer","digest","encoding","nativeDigest","ab2str","Buffer","from","copy","newOptions","newNativeHash","hash","getOpenSSLVersion","_transform","chunk","callback","_flush","push","asyncDigest","validateMaxBufferLength","name","internalDigest","lazyDOMException","exports","normalizedHashName","normalizeHashName","bufferLikeToArrayBuffer","result","arrayBuffer","ArrayBuffer","view","Uint8Array","set","outputEncoding","h","hashExports"],"sources":["hash.ts"],"sourcesContent":["import { Stream } from 'readable-stream';\r\nimport { NitroModules } from 'react-native-nitro-modules';\r\nimport type { TransformOptions } from 'readable-stream';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport type { Hash as NativeHash } from './specs/v1/hash.nitro';\r\nimport type {\r\n BinaryLike,\r\n Encoding,\r\n BufferLike,\r\n SubtleAlgorithm,\r\n} from './utils';\r\nimport {\r\n ab2str,\r\n binaryLikeToArrayBuffer,\r\n bufferLikeToArrayBuffer,\r\n} from './utils';\r\nimport { validateMaxBufferLength } from './utils/validation';\r\nimport { lazyDOMException } from './utils/errors';\r\nimport { normalizeHashName } from './utils/hashnames';\r\n\r\nclass HashUtils {\r\n private static native = NitroModules.createHybridObject<NativeHash>('Hash');\r\n public static getSupportedHashAlgorithms(): string[] {\r\n return this.native.getSupportedHashAlgorithms();\r\n }\r\n}\r\n\r\nexport function getHashes() {\r\n return HashUtils.getSupportedHashAlgorithms();\r\n}\r\n\r\ninterface HashOptions extends TransformOptions {\r\n /**\r\n * For XOF hash functions such as `shake256`, the\r\n * outputLength option can be used to specify the desired output length in bytes.\r\n */\r\n outputLength?: number | undefined;\r\n}\r\n\r\ninterface HashArgs {\r\n algorithm: string;\r\n options?: HashOptions;\r\n native?: NativeHash;\r\n}\r\n\r\nclass Hash extends Stream.Transform {\r\n private algorithm: string;\r\n private options: HashOptions;\r\n private native: NativeHash;\r\n\r\n private validate(args: HashArgs) {\r\n if (typeof args.algorithm !== 'string' || args.algorithm.length === 0)\r\n throw new Error('Algorithm must be a non-empty string');\r\n if (\r\n args.options?.outputLength !== undefined &&\r\n args.options.outputLength < 0\r\n )\r\n throw new Error('Output length must be a non-negative number');\r\n if (\r\n args.options?.outputLength !== undefined &&\r\n typeof args.options.outputLength !== 'number'\r\n )\r\n throw new Error('Output length must be a number');\r\n }\r\n\r\n /**\r\n * @internal use `createHash()` instead\r\n */\r\n private constructor(args: HashArgs) {\r\n super(args.options);\r\n\r\n this.validate(args);\r\n\r\n this.algorithm = args.algorithm;\r\n this.options = args.options ?? {};\r\n\r\n if (args.native) {\r\n this.native = args.native;\r\n return;\r\n }\r\n\r\n this.native = NitroModules.createHybridObject<NativeHash>('Hash');\r\n this.native.createHash(this.algorithm, this.options.outputLength);\r\n }\r\n\r\n /**\r\n * Updates the hash content with the given `data`, the encoding of which\r\n * is given in `inputEncoding`.\r\n * If `encoding` is not provided, and the `data` is a string, an\r\n * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.\r\n *\r\n * This can be called many times with new data as it is streamed.\r\n * @since v1.0.0\r\n * @param inputEncoding The `encoding` of the `data` string.\r\n */\r\n update(data: BinaryLike): Hash;\r\n update(data: BinaryLike, inputEncoding: Encoding): Buffer;\r\n update(data: BinaryLike, inputEncoding?: Encoding): Hash | Buffer {\r\n const defaultEncoding: Encoding = 'utf8';\r\n inputEncoding = inputEncoding ?? defaultEncoding;\r\n\r\n // OPTIMIZED PATH: Pass UTF-8 strings directly to native without conversion\r\n if (typeof data === 'string' && inputEncoding === 'utf8') {\r\n this.native.update(data);\r\n } else {\r\n this.native.update(binaryLikeToArrayBuffer(data, inputEncoding));\r\n }\r\n\r\n return this; // to support chaining syntax createHash().update().digest()\r\n }\r\n\r\n /**\r\n * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method).\r\n * If `encoding` is provided a string will be returned; otherwise\r\n * a `Buffer` is returned.\r\n *\r\n * The `Hash` object can not be used again after `hash.digest()` method has been\r\n * called. Multiple calls will cause an error to be thrown.\r\n * @since v1.0.0\r\n * @param encoding The `encoding` of the return value.\r\n */\r\n digest(): Buffer;\r\n digest(encoding: Encoding): string;\r\n digest(encoding?: Encoding): Buffer | string {\r\n const nativeDigest = this.native.digest(encoding);\r\n\r\n if (encoding && encoding !== 'buffer') {\r\n return ab2str(nativeDigest, encoding);\r\n }\r\n\r\n return Buffer.from(nativeDigest);\r\n }\r\n\r\n /**\r\n * Creates a new `Hash` object that contains a deep copy of the internal state\r\n * of the current `Hash` object.\r\n *\r\n * The optional `options` argument controls stream behavior. For XOF hash\r\n * functions such as `'shake256'`, the `outputLength` option can be used to\r\n * specify the desired output length in bytes.\r\n *\r\n * An error is thrown when an attempt is made to copy the `Hash` object after\r\n * its `hash.digest()` method has been called.\r\n *\r\n * ```js\r\n * // Calculate a rolling hash.\r\n * import { createHash } from 'react-native-quick-crypto';\r\n *\r\n * const hash = createHash('sha256');\r\n *\r\n * hash.update('one');\r\n * console.log(hash.copy().digest('hex'));\r\n *\r\n * hash.update('two');\r\n * console.log(hash.copy().digest('hex'));\r\n *\r\n * hash.update('three');\r\n * console.log(hash.copy().digest('hex'));\r\n *\r\n * // Etc.\r\n * ```\r\n * @since v1.0.0\r\n * @param options `stream.transform` options\r\n */\r\n copy(): Hash;\r\n copy(options: HashOptions): Hash;\r\n copy(options?: HashOptions): Hash {\r\n const newOptions = options ?? this.options;\r\n const newNativeHash = this.native.copy(newOptions.outputLength);\r\n const hash = new Hash({\r\n algorithm: this.algorithm,\r\n options: newOptions,\r\n native: newNativeHash,\r\n });\r\n return hash;\r\n }\r\n\r\n /**\r\n * Returns the OpenSSL version string\r\n * @since v1.0.0\r\n */\r\n getOpenSSLVersion(): string {\r\n return this.native.getOpenSSLVersion();\r\n }\r\n\r\n // stream interface\r\n _transform(\r\n chunk: BinaryLike,\r\n encoding: BufferEncoding,\r\n callback: () => void,\r\n ) {\r\n this.update(chunk, encoding as Encoding);\r\n callback();\r\n }\r\n _flush(callback: () => void) {\r\n this.push(this.digest());\r\n callback();\r\n }\r\n}\r\n\r\n/**\r\n * Creates and returns a `Hash` object that can be used to generate hash digests\r\n * using the given `algorithm`. Optional `options` argument controls stream\r\n * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option\r\n * can be used to specify the desired output length in bytes.\r\n *\r\n * The `algorithm` is dependent on the available algorithms supported by the\r\n * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.\r\n * On recent releases of OpenSSL, `openssl list -digest-algorithms` will\r\n * display the available digest algorithms.\r\n *\r\n * Example: generating the sha256 sum of a file\r\n *\r\n * ```js\r\n * import crypto from 'react-native-quick-crypto';\r\n *\r\n * const hash = crypto.createHash('sha256').update('Test123').digest('hex');\r\n * console.log('SHA-256 of \"Test123\":', hash);\r\n * ```\r\n * @since v1.0.0\r\n * @param options `stream.transform` options\r\n */\r\nexport function createHash(algorithm: string, options?: HashOptions): Hash {\r\n // @ts-expect-error private constructor\r\n return new Hash({\r\n algorithm,\r\n options,\r\n });\r\n}\r\n\r\n// Implementation for WebCrypto subtle.digest()\r\n\r\n/**\r\n * Asynchronous digest function for WebCrypto SubtleCrypto API\r\n * @param algorithm The hash algorithm to use\r\n * @param data The data to hash\r\n * @returns Promise resolving to the hash digest as ArrayBuffer\r\n */\r\nexport const asyncDigest = async (\r\n algorithm: SubtleAlgorithm,\r\n data: BufferLike,\r\n): Promise<ArrayBuffer> => {\r\n validateMaxBufferLength(data, 'data');\r\n\r\n const name = algorithm.name;\r\n\r\n if (\r\n name === 'SHA-1' ||\r\n name === 'SHA-256' ||\r\n name === 'SHA-384' ||\r\n name === 'SHA-512' ||\r\n name === 'SHA3-256' ||\r\n name === 'SHA3-384' ||\r\n name === 'SHA3-512'\r\n ) {\r\n return internalDigest(algorithm, data);\r\n }\r\n\r\n if (name === 'cSHAKE128' || name === 'cSHAKE256') {\r\n if (typeof algorithm.length !== 'number' || algorithm.length <= 0) {\r\n throw lazyDOMException(\r\n 'cSHAKE requires a length parameter',\r\n 'OperationError',\r\n );\r\n }\r\n if (algorithm.length % 8) {\r\n throw lazyDOMException(\r\n 'Unsupported CShakeParams length',\r\n 'NotSupportedError',\r\n );\r\n }\r\n return internalDigest(algorithm, data, algorithm.length);\r\n }\r\n\r\n throw lazyDOMException(\r\n `Unrecognized algorithm name: ${name}`,\r\n 'NotSupportedError',\r\n );\r\n};\r\n\r\nconst internalDigest = (\r\n algorithm: SubtleAlgorithm,\r\n data: BufferLike,\r\n outputLength?: number,\r\n): ArrayBuffer => {\r\n const normalizedHashName = normalizeHashName(algorithm.name);\r\n const hash = createHash(\r\n normalizedHashName,\r\n outputLength ? { outputLength } : undefined,\r\n );\r\n hash.update(bufferLikeToArrayBuffer(data));\r\n const result = hash.digest();\r\n const arrayBuffer = new ArrayBuffer(result.length);\r\n const view = new Uint8Array(arrayBuffer);\r\n view.set(result);\r\n return arrayBuffer;\r\n};\r\n\r\nexport function hash(\r\n algorithm: string,\r\n data: BinaryLike,\r\n outputEncoding: Encoding,\r\n): string;\r\nexport function hash(algorithm: string, data: BinaryLike): Buffer;\r\nexport function hash(\r\n algorithm: string,\r\n data: BinaryLike,\r\n outputEncoding?: Encoding,\r\n): string | Buffer {\r\n const h = createHash(algorithm);\r\n h.update(data);\r\n return outputEncoding ? h.digest(outputEncoding) : h.digest();\r\n}\r\n\r\nexport const hashExports = {\r\n createHash,\r\n getHashes,\r\n hash,\r\n asyncDigest,\r\n};\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_readableStream","require","_reactNativeNitroModules","_reactNativeBuffer","_utils","_validation","_errors","_hashnames","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","HashUtils","getSupportedHashAlgorithms","native","NitroModules","createHybridObject","getHashes","Hash","Stream","Transform","validate","args","_args$options","_args$options2","algorithm","length","Error","options","outputLength","undefined","constructor","createHash","update","data","inputEncoding","defaultEncoding","binaryLikeToArrayBuffer","digest","encoding","nativeDigest","ab2str","Buffer","from","copy","newOptions","newNativeHash","hash","getOpenSSLVersion","_transform","chunk","callback","_flush","push","asyncDigest","validateMaxBufferLength","name","internalDigest","lazyDOMException","exports","normalizedHashName","normalizeHashName","bufferLikeToArrayBuffer","result","arrayBuffer","ArrayBuffer","view","Uint8Array","set","outputEncoding","h","hashExports"],"sources":["hash.ts"],"sourcesContent":["import { Stream } from 'readable-stream';\r\nimport { NitroModules } from 'react-native-nitro-modules';\r\nimport type { TransformOptions } from 'readable-stream';\r\nimport { Buffer } from '@craftzdog/react-native-buffer';\r\nimport type { Hash as NativeHash } from './specs/v1/hash.nitro';\r\nimport type {\r\n BinaryLike,\r\n Encoding,\r\n BufferLike,\r\n SubtleAlgorithm,\r\n} from './utils';\r\nimport {\r\n ab2str,\r\n binaryLikeToArrayBuffer,\r\n bufferLikeToArrayBuffer,\r\n} from './utils';\r\nimport { validateMaxBufferLength } from './utils/validation';\r\nimport { lazyDOMException } from './utils/errors';\r\nimport { normalizeHashName } from './utils/hashnames';\r\n\r\nclass HashUtils {\r\n private static native = NitroModules.createHybridObject<NativeHash>('Hash');\r\n public static getSupportedHashAlgorithms(): string[] {\r\n return this.native.getSupportedHashAlgorithms();\r\n }\r\n}\r\n\r\nexport function getHashes() {\r\n return HashUtils.getSupportedHashAlgorithms();\r\n}\r\n\r\ninterface HashOptions extends TransformOptions {\r\n /**\r\n * For XOF hash functions such as `shake256`, the\r\n * outputLength option can be used to specify the desired output length in bytes.\r\n */\r\n outputLength?: number | undefined;\r\n}\r\n\r\ninterface HashArgs {\r\n algorithm: string;\r\n options?: HashOptions;\r\n native?: NativeHash;\r\n}\r\n\r\nclass Hash extends Stream.Transform {\r\n private algorithm: string;\r\n private options: HashOptions;\r\n private native: NativeHash;\r\n\r\n private validate(args: HashArgs) {\r\n if (typeof args.algorithm !== 'string' || args.algorithm.length === 0)\r\n throw new Error('Algorithm must be a non-empty string');\r\n if (\r\n args.options?.outputLength !== undefined &&\r\n args.options.outputLength < 0\r\n )\r\n throw new Error('Output length must be a non-negative number');\r\n if (\r\n args.options?.outputLength !== undefined &&\r\n typeof args.options.outputLength !== 'number'\r\n )\r\n throw new Error('Output length must be a number');\r\n }\r\n\r\n /**\r\n * @internal use `createHash()` instead\r\n */\r\n private constructor(args: HashArgs) {\r\n super(args.options);\r\n\r\n this.validate(args);\r\n\r\n this.algorithm = args.algorithm;\r\n this.options = args.options ?? {};\r\n\r\n if (args.native) {\r\n this.native = args.native;\r\n return;\r\n }\r\n\r\n this.native = NitroModules.createHybridObject<NativeHash>('Hash');\r\n this.native.createHash(this.algorithm, this.options.outputLength);\r\n }\r\n\r\n /**\r\n * Updates the hash content with the given `data`, the encoding of which\r\n * is given in `inputEncoding`.\r\n * If `encoding` is not provided, and the `data` is a string, an\r\n * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.\r\n *\r\n * This can be called many times with new data as it is streamed.\r\n * @since v1.0.0\r\n * @param inputEncoding The `encoding` of the `data` string.\r\n */\r\n update(data: BinaryLike): Hash;\r\n update(data: BinaryLike, inputEncoding: Encoding): Buffer;\r\n update(data: BinaryLike, inputEncoding?: Encoding): Hash | Buffer {\r\n const defaultEncoding: Encoding = 'utf8';\r\n inputEncoding = inputEncoding ?? defaultEncoding;\r\n\r\n // OPTIMIZED PATH: Pass UTF-8 strings directly to native without conversion\r\n if (typeof data === 'string' && inputEncoding === 'utf8') {\r\n this.native.update(data);\r\n } else {\r\n this.native.update(binaryLikeToArrayBuffer(data, inputEncoding));\r\n }\r\n\r\n return this; // to support chaining syntax createHash().update().digest()\r\n }\r\n\r\n /**\r\n * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method).\r\n * If `encoding` is provided a string will be returned; otherwise\r\n * a `Buffer` is returned.\r\n *\r\n * The `Hash` object can not be used again after `hash.digest()` method has been\r\n * called. Multiple calls will cause an error to be thrown.\r\n * @since v1.0.0\r\n * @param encoding The `encoding` of the return value.\r\n */\r\n digest(): Buffer;\r\n digest(encoding: Encoding): string;\r\n digest(encoding?: Encoding): Buffer | string {\r\n const nativeDigest = this.native.digest(encoding);\r\n\r\n if (encoding && encoding !== 'buffer') {\r\n return ab2str(nativeDigest, encoding);\r\n }\r\n\r\n return Buffer.from(nativeDigest);\r\n }\r\n\r\n /**\r\n * Creates a new `Hash` object that contains a deep copy of the internal state\r\n * of the current `Hash` object.\r\n *\r\n * The optional `options` argument controls stream behavior. For XOF hash\r\n * functions such as `'shake256'`, the `outputLength` option can be used to\r\n * specify the desired output length in bytes.\r\n *\r\n * An error is thrown when an attempt is made to copy the `Hash` object after\r\n * its `hash.digest()` method has been called.\r\n *\r\n * ```js\r\n * // Calculate a rolling hash.\r\n * import { createHash } from 'react-native-quick-crypto';\r\n *\r\n * const hash = createHash('sha256');\r\n *\r\n * hash.update('one');\r\n * console.log(hash.copy().digest('hex'));\r\n *\r\n * hash.update('two');\r\n * console.log(hash.copy().digest('hex'));\r\n *\r\n * hash.update('three');\r\n * console.log(hash.copy().digest('hex'));\r\n *\r\n * // Etc.\r\n * ```\r\n * @since v1.0.0\r\n * @param options `stream.transform` options\r\n */\r\n copy(): Hash;\r\n copy(options: HashOptions): Hash;\r\n copy(options?: HashOptions): Hash {\r\n const newOptions = options ?? this.options;\r\n const newNativeHash = this.native.copy(newOptions.outputLength);\r\n const hash = new Hash({\r\n algorithm: this.algorithm,\r\n options: newOptions,\r\n native: newNativeHash,\r\n });\r\n return hash;\r\n }\r\n\r\n /**\r\n * Returns the OpenSSL version string\r\n * @since v1.0.0\r\n */\r\n getOpenSSLVersion(): string {\r\n return this.native.getOpenSSLVersion();\r\n }\r\n\r\n // stream interface\r\n _transform(\r\n chunk: BinaryLike,\r\n encoding: BufferEncoding,\r\n callback: () => void,\r\n ) {\r\n this.update(chunk, encoding as Encoding);\r\n callback();\r\n }\r\n _flush(callback: () => void) {\r\n this.push(this.digest());\r\n callback();\r\n }\r\n}\r\n\r\n/**\r\n * Creates and returns a `Hash` object that can be used to generate hash digests\r\n * using the given `algorithm`. Optional `options` argument controls stream\r\n * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option\r\n * can be used to specify the desired output length in bytes.\r\n *\r\n * The `algorithm` is dependent on the available algorithms supported by the\r\n * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.\r\n * On recent releases of OpenSSL, `openssl list -digest-algorithms` will\r\n * display the available digest algorithms.\r\n *\r\n * Example: generating the sha256 sum of a file\r\n *\r\n * ```js\r\n * import crypto from 'react-native-quick-crypto';\r\n *\r\n * const hash = crypto.createHash('sha256').update('Test123').digest('hex');\r\n * console.log('SHA-256 of \"Test123\":', hash);\r\n * ```\r\n * @since v1.0.0\r\n * @param options `stream.transform` options\r\n */\r\nexport function createHash(algorithm: string, options?: HashOptions): Hash {\r\n // @ts-expect-error private constructor\r\n return new Hash({\r\n algorithm,\r\n options,\r\n });\r\n}\r\n\r\n// Implementation for WebCrypto subtle.digest()\r\n\r\n/**\r\n * Asynchronous digest function for WebCrypto SubtleCrypto API\r\n * @param algorithm The hash algorithm to use\r\n * @param data The data to hash\r\n * @returns Promise resolving to the hash digest as ArrayBuffer\r\n */\r\nexport const asyncDigest = async (\r\n algorithm: SubtleAlgorithm,\r\n data: BufferLike,\r\n): Promise<ArrayBuffer> => {\r\n validateMaxBufferLength(data, 'data');\r\n\r\n const name = algorithm.name;\r\n\r\n if (\r\n name === 'SHA-1' ||\r\n name === 'SHA-256' ||\r\n name === 'SHA-384' ||\r\n name === 'SHA-512' ||\r\n name === 'SHA3-256' ||\r\n name === 'SHA3-384' ||\r\n name === 'SHA3-512'\r\n ) {\r\n return internalDigest(algorithm, data);\r\n }\r\n\r\n if (name === 'cSHAKE128' || name === 'cSHAKE256') {\r\n if (typeof algorithm.length !== 'number' || algorithm.length <= 0) {\r\n throw lazyDOMException(\r\n 'cSHAKE requires a length parameter',\r\n 'OperationError',\r\n );\r\n }\r\n if (algorithm.length % 8) {\r\n throw lazyDOMException(\r\n 'Unsupported CShakeParams length',\r\n 'NotSupportedError',\r\n );\r\n }\r\n return internalDigest(algorithm, data, algorithm.length);\r\n }\r\n\r\n throw lazyDOMException(\r\n `Unrecognized algorithm name: ${name}`,\r\n 'NotSupportedError',\r\n );\r\n};\r\n\r\nconst internalDigest = (\r\n algorithm: SubtleAlgorithm,\r\n data: BufferLike,\r\n outputLength?: number,\r\n): ArrayBuffer => {\r\n const normalizedHashName = normalizeHashName(algorithm.name);\r\n const hash = createHash(\r\n normalizedHashName,\r\n outputLength ? { outputLength } : undefined,\r\n );\r\n hash.update(bufferLikeToArrayBuffer(data));\r\n const result = hash.digest();\r\n const arrayBuffer = new ArrayBuffer(result.length);\r\n const view = new Uint8Array(arrayBuffer);\r\n view.set(result);\r\n return arrayBuffer;\r\n};\r\n\r\nexport function hash(\r\n algorithm: string,\r\n data: BinaryLike,\r\n outputEncoding: Encoding,\r\n): string;\r\nexport function hash(algorithm: string, data: BinaryLike): Buffer;\r\nexport function hash(\r\n algorithm: string,\r\n data: BinaryLike,\r\n outputEncoding?: Encoding,\r\n): string | Buffer {\r\n const h = createHash(algorithm);\r\n h.update(data);\r\n return outputEncoding ? h.digest(outputEncoding) : h.digest();\r\n}\r\n\r\nexport const hashExports = {\r\n createHash,\r\n getHashes,\r\n hash,\r\n asyncDigest,\r\n};\r\n"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/hmac.js
CHANGED
|
@@ -11,7 +11,7 @@ var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
|
11
11
|
var _conversion = require("./utils/conversion");
|
|
12
12
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
13
13
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
14
|
-
function _toPrimitive(t,
|
|
14
|
+
function _toPrimitive(t, e) { if ("object" != typeof t || !t) return t; var r; if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) { var i = r.call(t, e || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === e ? String : Number)(t); }
|
|
15
15
|
class Hmac extends _readableStream.Stream.Transform {
|
|
16
16
|
validate(args) {
|
|
17
17
|
if (typeof args.algorithm !== 'string' || args.algorithm.length === 0) throw new Error('Algorithm must be a non-empty string');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeBuffer","require","_readableStream","_reactNativeNitroModules","_conversion","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Hmac","Stream","Transform","validate","args","algorithm","length","Error","key","undefined","constructor","options","native","NitroModules","createHybridObject","createHmac","binaryLikeToArrayBuffer","update","data","inputEncoding","defaultEncoding","digest","encoding","nativeDigest","ab2str","Buffer","from","_transform","chunk","callback","_flush","push","hmacExports","exports"],"sources":["hmac.ts"],"sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\r\nimport { Stream } from 'readable-stream';\r\nimport { NitroModules } from 'react-native-nitro-modules';\r\nimport type { TransformOptions } from 'readable-stream';\r\nimport type { Hmac as NativeHmac } from './specs/v1/hmac.nitro';\r\nimport type { BinaryLike, Encoding } from './utils/types';\r\nimport { ab2str, binaryLikeToArrayBuffer } from './utils/conversion';\r\n\r\ninterface HmacArgs {\r\n algorithm: string;\r\n key: BinaryLike;\r\n options?: TransformOptions;\r\n}\r\n\r\nclass Hmac extends Stream.Transform {\r\n private algorithm: string;\r\n private key: BinaryLike;\r\n private native: NativeHmac;\r\n\r\n private validate(args: HmacArgs) {\r\n if (typeof args.algorithm !== 'string' || args.algorithm.length === 0)\r\n throw new Error('Algorithm must be a non-empty string');\r\n if (args.key === null || args.key === undefined)\r\n throw new Error('Key must not be null or undefined');\r\n }\r\n\r\n /**\r\n * @internal use `createHmac()` instead\r\n */\r\n private constructor(args: HmacArgs) {\r\n super(args.options);\r\n\r\n this.validate(args);\r\n\r\n this.algorithm = args.algorithm;\r\n this.key = args.key;\r\n\r\n this.native = NitroModules.createHybridObject<NativeHmac>('Hmac');\r\n this.native.createHmac(this.algorithm, binaryLikeToArrayBuffer(this.key));\r\n }\r\n\r\n /**\r\n * Updates the `Hmac` content with the given `data`, the encoding of which is given in `inputEncoding`.\r\n * If `encoding` is not provided, and the `data` is a string, an encoding of `'utf8'` is enforced.\r\n * If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.\r\n *\r\n * This can be called many times with new data as it is streamed.\r\n * @since v1.0.0\r\n * @param inputEncoding The `encoding` of the `data` string.\r\n */\r\n update(data: BinaryLike): Hmac;\r\n update(data: BinaryLike, inputEncoding: Encoding): Hmac;\r\n update(data: BinaryLike, inputEncoding?: Encoding): Hmac {\r\n const defaultEncoding: Encoding = 'utf8';\r\n inputEncoding = inputEncoding ?? defaultEncoding;\r\n\r\n // Optimize: pass UTF-8 strings directly to C++ without conversion\r\n if (typeof data === 'string' && inputEncoding === 'utf8') {\r\n this.native.update(data);\r\n } else {\r\n this.native.update(binaryLikeToArrayBuffer(data, inputEncoding));\r\n }\r\n\r\n return this; // to support chaining syntax createHmac().update().digest()\r\n }\r\n\r\n /**\r\n * Calculates the HMAC digest of all of the data passed using `hmac.update()`.\r\n * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned;\r\n *\r\n * The `Hmac` object can not be used again after `hmac.digest()` has been\r\n * called. Multiple calls to `hmac.digest()` will result in an error being thrown.\r\n * @since v1.0.0\r\n * @param encoding The `encoding` of the return value.\r\n */\r\n digest(): Buffer;\r\n digest(encoding: Encoding): string;\r\n digest(encoding?: Encoding): Buffer | string {\r\n const nativeDigest = this.native.digest();\r\n\r\n if (encoding && encoding !== 'buffer') {\r\n return ab2str(nativeDigest, encoding);\r\n }\r\n\r\n return Buffer.from(nativeDigest);\r\n }\r\n\r\n // stream interface\r\n _transform(\r\n chunk: BinaryLike,\r\n encoding: BufferEncoding,\r\n callback: () => void,\r\n ) {\r\n this.update(chunk, encoding as Encoding);\r\n callback();\r\n }\r\n _flush(callback: () => void) {\r\n this.push(this.digest());\r\n callback();\r\n }\r\n}\r\n\r\n/**\r\n * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`.\r\n * Optional `options` argument controls stream behavior.\r\n *\r\n * The `algorithm` is dependent on the available algorithms supported by the\r\n * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.\r\n * On recent releases of OpenSSL, `openssl list -digest-algorithms` will\r\n * display the available digest algorithms.\r\n *\r\n * Example: generating the sha256 HMAC of a file\r\n *\r\n * ```js\r\n * import crypto from 'react-native-quick-crypto';\r\n *\r\n * const hmac = crypto.createHmac('sha256', 'secret-key');\r\n * hmac.update('message to hash');\r\n * const digest = hmac.digest('hex');\r\n * console.log(digest); // prints HMAC digest in hexadecimal format\r\n * ```\r\n * @since v1.0.0\r\n * @param options `stream.transform` options\r\n */\r\nexport function createHmac(\r\n algorithm: string,\r\n key: BinaryLike,\r\n options?: TransformOptions,\r\n): Hmac {\r\n // @ts-expect-error private constructor\r\n return new Hmac({\r\n algorithm,\r\n key,\r\n options,\r\n });\r\n}\r\n\r\nexport const hmacExports = {\r\n createHmac,\r\n};\r\n"],"mappings":";;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAF,OAAA;AAIA,IAAAG,WAAA,GAAAH,OAAA;AAAqE,SAAAI,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,
|
|
1
|
+
{"version":3,"names":["_reactNativeBuffer","require","_readableStream","_reactNativeNitroModules","_conversion","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Hmac","Stream","Transform","validate","args","algorithm","length","Error","key","undefined","constructor","options","native","NitroModules","createHybridObject","createHmac","binaryLikeToArrayBuffer","update","data","inputEncoding","defaultEncoding","digest","encoding","nativeDigest","ab2str","Buffer","from","_transform","chunk","callback","_flush","push","hmacExports","exports"],"sources":["hmac.ts"],"sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\r\nimport { Stream } from 'readable-stream';\r\nimport { NitroModules } from 'react-native-nitro-modules';\r\nimport type { TransformOptions } from 'readable-stream';\r\nimport type { Hmac as NativeHmac } from './specs/v1/hmac.nitro';\r\nimport type { BinaryLike, Encoding } from './utils/types';\r\nimport { ab2str, binaryLikeToArrayBuffer } from './utils/conversion';\r\n\r\ninterface HmacArgs {\r\n algorithm: string;\r\n key: BinaryLike;\r\n options?: TransformOptions;\r\n}\r\n\r\nclass Hmac extends Stream.Transform {\r\n private algorithm: string;\r\n private key: BinaryLike;\r\n private native: NativeHmac;\r\n\r\n private validate(args: HmacArgs) {\r\n if (typeof args.algorithm !== 'string' || args.algorithm.length === 0)\r\n throw new Error('Algorithm must be a non-empty string');\r\n if (args.key === null || args.key === undefined)\r\n throw new Error('Key must not be null or undefined');\r\n }\r\n\r\n /**\r\n * @internal use `createHmac()` instead\r\n */\r\n private constructor(args: HmacArgs) {\r\n super(args.options);\r\n\r\n this.validate(args);\r\n\r\n this.algorithm = args.algorithm;\r\n this.key = args.key;\r\n\r\n this.native = NitroModules.createHybridObject<NativeHmac>('Hmac');\r\n this.native.createHmac(this.algorithm, binaryLikeToArrayBuffer(this.key));\r\n }\r\n\r\n /**\r\n * Updates the `Hmac` content with the given `data`, the encoding of which is given in `inputEncoding`.\r\n * If `encoding` is not provided, and the `data` is a string, an encoding of `'utf8'` is enforced.\r\n * If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.\r\n *\r\n * This can be called many times with new data as it is streamed.\r\n * @since v1.0.0\r\n * @param inputEncoding The `encoding` of the `data` string.\r\n */\r\n update(data: BinaryLike): Hmac;\r\n update(data: BinaryLike, inputEncoding: Encoding): Hmac;\r\n update(data: BinaryLike, inputEncoding?: Encoding): Hmac {\r\n const defaultEncoding: Encoding = 'utf8';\r\n inputEncoding = inputEncoding ?? defaultEncoding;\r\n\r\n // Optimize: pass UTF-8 strings directly to C++ without conversion\r\n if (typeof data === 'string' && inputEncoding === 'utf8') {\r\n this.native.update(data);\r\n } else {\r\n this.native.update(binaryLikeToArrayBuffer(data, inputEncoding));\r\n }\r\n\r\n return this; // to support chaining syntax createHmac().update().digest()\r\n }\r\n\r\n /**\r\n * Calculates the HMAC digest of all of the data passed using `hmac.update()`.\r\n * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned;\r\n *\r\n * The `Hmac` object can not be used again after `hmac.digest()` has been\r\n * called. Multiple calls to `hmac.digest()` will result in an error being thrown.\r\n * @since v1.0.0\r\n * @param encoding The `encoding` of the return value.\r\n */\r\n digest(): Buffer;\r\n digest(encoding: Encoding): string;\r\n digest(encoding?: Encoding): Buffer | string {\r\n const nativeDigest = this.native.digest();\r\n\r\n if (encoding && encoding !== 'buffer') {\r\n return ab2str(nativeDigest, encoding);\r\n }\r\n\r\n return Buffer.from(nativeDigest);\r\n }\r\n\r\n // stream interface\r\n _transform(\r\n chunk: BinaryLike,\r\n encoding: BufferEncoding,\r\n callback: () => void,\r\n ) {\r\n this.update(chunk, encoding as Encoding);\r\n callback();\r\n }\r\n _flush(callback: () => void) {\r\n this.push(this.digest());\r\n callback();\r\n }\r\n}\r\n\r\n/**\r\n * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`.\r\n * Optional `options` argument controls stream behavior.\r\n *\r\n * The `algorithm` is dependent on the available algorithms supported by the\r\n * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.\r\n * On recent releases of OpenSSL, `openssl list -digest-algorithms` will\r\n * display the available digest algorithms.\r\n *\r\n * Example: generating the sha256 HMAC of a file\r\n *\r\n * ```js\r\n * import crypto from 'react-native-quick-crypto';\r\n *\r\n * const hmac = crypto.createHmac('sha256', 'secret-key');\r\n * hmac.update('message to hash');\r\n * const digest = hmac.digest('hex');\r\n * console.log(digest); // prints HMAC digest in hexadecimal format\r\n * ```\r\n * @since v1.0.0\r\n * @param options `stream.transform` options\r\n */\r\nexport function createHmac(\r\n algorithm: string,\r\n key: BinaryLike,\r\n options?: TransformOptions,\r\n): Hmac {\r\n // @ts-expect-error private constructor\r\n return new Hmac({\r\n algorithm,\r\n key,\r\n options,\r\n });\r\n}\r\n\r\nexport const hmacExports = {\r\n createHmac,\r\n};\r\n"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -266,7 +266,8 @@ Object.keys(subtle).forEach(function (key) {
|
|
|
266
266
|
}
|
|
267
267
|
});
|
|
268
268
|
});
|
|
269
|
-
|
|
269
|
+
var cache;
|
|
270
|
+
function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var r, c, a = Object.defineProperty, n = { __proto__: null, default: e }; if (Object(e) !== e) return n; if (cache || "function" != typeof WeakMap || (cache = new WeakMap()), cache) { if (cache.has(e)) return cache.get(e); cache.set(e, n); } for (c in e) "default" !== c && {}.hasOwnProperty.call(e, c) && ((r = a && Object.getOwnPropertyDescriptor(e, c)) && (r.get || r.set) ? a(n, c, r) : n[c] = e[c]); return n; }
|
|
270
271
|
// polyfill imports
|
|
271
272
|
|
|
272
273
|
// API imports
|