@solana/webcrypto-ed25519-polyfill 5.1.0-canary-20251202173352 → 5.1.0-canary-20251202174830

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
@@ -284,7 +284,7 @@ function install() {
284
284
  const originalCryptoObject = globalThis.crypto ||= {};
285
285
  const originalSubtleCrypto = originalCryptoObject.subtle ||= {};
286
286
  const originalExportKey = originalSubtleCrypto.exportKey;
287
- originalSubtleCrypto.exportKey = async (...args) => {
287
+ originalSubtleCrypto.exportKey = (async (...args) => {
288
288
  const [_, key] = args;
289
289
  if (isPolyfilledKey(key)) {
290
290
  return await exportKeyPolyfill(...args);
@@ -293,10 +293,10 @@ function install() {
293
293
  } else {
294
294
  throw new TypeError("No native `exportKey` function exists to handle this call");
295
295
  }
296
- };
296
+ });
297
297
  const originalGenerateKey = originalSubtleCrypto.generateKey;
298
298
  let originalGenerateKeySupportsEd25519;
299
- originalSubtleCrypto.generateKey = async (...args) => {
299
+ originalSubtleCrypto.generateKey = (async (...args) => {
300
300
  const [algorithm] = args;
301
301
  if (!isAlgorithmEd25519(algorithm)) {
302
302
  if (originalGenerateKey) {
@@ -340,9 +340,9 @@ function install() {
340
340
  const [_, extractable, keyUsages] = args;
341
341
  return generateKeyPolyfill(extractable, keyUsages);
342
342
  }
343
- };
343
+ });
344
344
  const originalSign = originalSubtleCrypto.sign;
345
- originalSubtleCrypto.sign = async (...args) => {
345
+ originalSubtleCrypto.sign = (async (...args) => {
346
346
  const [_, key] = args;
347
347
  if (isPolyfilledKey(key)) {
348
348
  const [_2, ...rest] = args;
@@ -352,9 +352,9 @@ function install() {
352
352
  } else {
353
353
  throw new TypeError("No native `sign` function exists to handle this call");
354
354
  }
355
- };
355
+ });
356
356
  const originalVerify = originalSubtleCrypto.verify;
357
- originalSubtleCrypto.verify = async (...args) => {
357
+ originalSubtleCrypto.verify = (async (...args) => {
358
358
  const [_, key] = args;
359
359
  if (isPolyfilledKey(key)) {
360
360
  const [_2, ...rest] = args;
@@ -364,10 +364,10 @@ function install() {
364
364
  } else {
365
365
  throw new TypeError("No native `verify` function exists to handle this call");
366
366
  }
367
- };
367
+ });
368
368
  const originalImportKey = originalSubtleCrypto.importKey;
369
369
  let originalImportKeySupportsEd25519;
370
- originalSubtleCrypto.importKey = async (...args) => {
370
+ originalSubtleCrypto.importKey = (async (...args) => {
371
371
  const [format, keyData, algorithm] = args;
372
372
  if (!isAlgorithmEd25519(algorithm)) {
373
373
  if (originalImportKey) {
@@ -411,7 +411,7 @@ function install() {
411
411
  const [_format, _keyData, _algorithm, extractable, keyUsages] = args;
412
412
  return importKeyPolyfill(format, keyData, extractable, keyUsages);
413
413
  }
414
- };
414
+ });
415
415
  }
416
416
  }
417
417
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
@@ -787,7 +787,7 @@ function install() {
787
787
  const originalCryptoObject = globalThis.crypto ||= {};
788
788
  const originalSubtleCrypto = originalCryptoObject.subtle ||= {};
789
789
  const originalExportKey = originalSubtleCrypto.exportKey;
790
- originalSubtleCrypto.exportKey = async (...args) => {
790
+ originalSubtleCrypto.exportKey = (async (...args) => {
791
791
  const [_, key] = args;
792
792
  if (isPolyfilledKey(key)) {
793
793
  return await exportKeyPolyfill(...args);
@@ -796,10 +796,10 @@ function install() {
796
796
  } else {
797
797
  throw new TypeError("No native `exportKey` function exists to handle this call");
798
798
  }
799
- };
799
+ });
800
800
  const originalGenerateKey = originalSubtleCrypto.generateKey;
801
801
  let originalGenerateKeySupportsEd25519;
802
- originalSubtleCrypto.generateKey = async (...args) => {
802
+ originalSubtleCrypto.generateKey = (async (...args) => {
803
803
  const [algorithm] = args;
804
804
  if (!isAlgorithmEd25519(algorithm)) {
805
805
  if (originalGenerateKey) {
@@ -843,9 +843,9 @@ function install() {
843
843
  const [_, extractable, keyUsages] = args;
844
844
  return generateKeyPolyfill(extractable, keyUsages);
845
845
  }
846
- };
846
+ });
847
847
  const originalSign = originalSubtleCrypto.sign;
848
- originalSubtleCrypto.sign = async (...args) => {
848
+ originalSubtleCrypto.sign = (async (...args) => {
849
849
  const [_, key] = args;
850
850
  if (isPolyfilledKey(key)) {
851
851
  const [_2, ...rest] = args;
@@ -855,9 +855,9 @@ function install() {
855
855
  } else {
856
856
  throw new TypeError("No native `sign` function exists to handle this call");
857
857
  }
858
- };
858
+ });
859
859
  const originalVerify = originalSubtleCrypto.verify;
860
- originalSubtleCrypto.verify = async (...args) => {
860
+ originalSubtleCrypto.verify = (async (...args) => {
861
861
  const [_, key] = args;
862
862
  if (isPolyfilledKey(key)) {
863
863
  const [_2, ...rest] = args;
@@ -867,10 +867,10 @@ function install() {
867
867
  } else {
868
868
  throw new TypeError("No native `verify` function exists to handle this call");
869
869
  }
870
- };
870
+ });
871
871
  const originalImportKey = originalSubtleCrypto.importKey;
872
872
  let originalImportKeySupportsEd25519;
873
- originalSubtleCrypto.importKey = async (...args) => {
873
+ originalSubtleCrypto.importKey = (async (...args) => {
874
874
  const [format, keyData, algorithm] = args;
875
875
  if (!isAlgorithmEd25519(algorithm)) {
876
876
  if (originalImportKey) {
@@ -914,7 +914,7 @@ function install() {
914
914
  const [_format, _keyData, _algorithm, extractable, keyUsages] = args;
915
915
  return importKeyPolyfill(format, keyData, extractable, keyUsages);
916
916
  }
917
- };
917
+ });
918
918
  }
919
919
  }
920
920
  /*! Bundled license information: