@notabene/verify-proof 1.8.0 → 1.9.0

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/bitcoin.ts","../src/solana.ts","../node_modules/@noble/hashes/crypto.js","../node_modules/@noble/hashes/utils.js","../node_modules/@xrplf/isomorphic/dist/utils/shared.js","../node_modules/@xrplf/isomorphic/dist/utils/browser.js","../node_modules/@noble/hashes/_md.js","../node_modules/@noble/hashes/_u64.js","../node_modules/@noble/hashes/sha2.js","../node_modules/@noble/hashes/sha256.js","../node_modules/@xrplf/isomorphic/dist/internal/wrapNoble.js","../node_modules/@xrplf/isomorphic/dist/internal/normalizeInput.js","../node_modules/@xrplf/isomorphic/dist/sha256/browser.js","../node_modules/ripple-address-codec/dist/utils.js","../node_modules/ripple-address-codec/dist/xrp-codec.js","../node_modules/ripple-address-codec/dist/index.js","../node_modules/@noble/hashes/legacy.js","../node_modules/@noble/hashes/ripemd160.js","../node_modules/@xrplf/isomorphic/dist/ripemd160/browser.js","../node_modules/@noble/hashes/sha512.js","../node_modules/@xrplf/isomorphic/dist/sha512/browser.js","../node_modules/ripple-keypairs/dist/utils/Sha512.js","../node_modules/ripple-keypairs/dist/signing-schemes/secp256k1/utils.js","../node_modules/ripple-keypairs/dist/utils/assert.js","../node_modules/ripple-keypairs/dist/utils/getAlgorithmFromKey.js","../node_modules/ripple-keypairs/dist/signing-schemes/secp256k1/index.js","../node_modules/ripple-keypairs/dist/signing-schemes/ed25519/index.js","../node_modules/ripple-keypairs/dist/index.js","../src/xrpl.ts","../src/concordium.ts","../src/index.ts","../src/cardano.ts","../src/eth.ts","../src/xlm.ts","../src/tron.ts"],"sourcesContent":["import {\n ProofStatus,\n ProofTypes,\n SignatureProof,\n} from \"@notabene/javascript-sdk\";\n\nimport { encode as encodeLength } from \"varuint-bitcoin\";\nimport { base64, bech32, createBase58check } from \"@scure/base\";\nimport { Hash } from \"ox\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { SignatureType } from \"@noble/curves/abstract/weierstrass\";\nimport { Verifier } from \"bip322-js\";\n\nenum SEGWIT_TYPES {\n P2WPKH = \"p2wpkh\",\n P2SH_P2WPKH = \"p2sh(p2wpkh)\",\n}\n\ninterface ChainConfig {\n messagePrefix: string;\n pubKeyHashVersion: number | Uint8Array;\n scriptHashVersion: number | Uint8Array;\n bech32Prefix?: string;\n isTestnet?: boolean;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n bitcoin: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n litecoin: {\n messagePrefix: \"\\u0019Litecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x30, // L... or M...\n scriptHashVersion: 0x32, // 3... or M...\n bech32Prefix: \"ltc\",\n isTestnet: false,\n },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1E, // D...\n scriptHashVersion: 0x16, // A...\n isTestnet: false,\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4C, // X...\n scriptHashVersion: 0x10, // 7...\n isTestnet: false,\n },\n zcash: {\n messagePrefix: \"\\u0018Zcash Signed Message:\\n\",\n pubKeyHashVersion: Uint8Array.from([0x1C, 0xB8]), // <-- FIXED\n scriptHashVersion: Uint8Array.from([0x1C, 0xBD]),\n isTestnet: false,\n },\n \n testnet: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x6f, // m or n\n scriptHashVersion: 0xc4, // 2\n bech32Prefix: \"tb\",\n isTestnet: true,\n },\n};\n\nenum DerivationMode {\n LEGACY = \"Legacy\",\n NATIVE = \"Native SegWit\",\n SEGWIT = \"SegWit\",\n P2SH_SEGWIT = \"p2sh\",\n BCH = \"Bitcoin Cash\",\n ETHEREUM = \"Ethereum\",\n DOGECOIN = \"Dogecoin\",\n UNKNOWN = \"Unknown\",\n}\n\nexport async function verifyBTCSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns,, address] = proof.address.split(/:/);\n if (ns !== \"bip122\") return { ...proof, status: ProofStatus.FAILED };\n \n // Map chainId to our chain configuration\n const chainConfig = getChainConfig(address);\n if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };\n\n const isZcash = address.startsWith(\"t1\") || address.startsWith(\"t3\");\n if (isZcash) {\n return verifyBIP137(address, proof, chainConfig);\n }\n\n // Use BIP322 for testnet addresses\n if (chainConfig.isTestnet) {\n return verifyBIP322(address, proof);\n }\n \n try {\n switch (proof.type) {\n case ProofTypes.BIP137:\n return verifyBIP137(address, proof, chainConfig);\n case ProofTypes.BIP322:\n return verifyBIP322(address, proof);\n default:\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n console.error(\"error verifying proof\", error);\n return {\n ...proof,\n status: ProofStatus.FAILED,\n // error: error.message || error,\n };\n }\n}\n\nfunction getChainConfig(address: string): ChainConfig {\n if (address.startsWith(\"1\") || address.startsWith(\"3\") || address.startsWith(\"bc1\")) {\n return CHAIN_CONFIGS[\"bitcoin\"];\n }\n if (address.startsWith(\"t1\") || address.startsWith(\"t3\")) {\n return CHAIN_CONFIGS[\"zcash\"];\n }\n if (address.startsWith(\"L\") || address.startsWith(\"M\") || address.startsWith(\"ltc1\")) {\n return CHAIN_CONFIGS[\"litecoin\"];\n }\n if (address.startsWith(\"D\") || address.startsWith(\"A\")) {\n return CHAIN_CONFIGS[\"dogecoin\"];\n }\n if (address.startsWith(\"X\") || address.startsWith(\"7\")) {\n return CHAIN_CONFIGS[\"dash\"];\n }\n if (address.startsWith(\"q\")) {\n return CHAIN_CONFIGS[\"bitcoincash\"];\n }\n if (address.startsWith(\"tb1\")) {\n return CHAIN_CONFIGS[\"testnet\"];\n }\n\n return CHAIN_CONFIGS[\"bitcoin\"];\n}\n\n\nfunction verifyBIP322(address: string, proof: SignatureProof) {\n const { attestation, proof: signatureProof } = proof;\n const verified = Verifier.verifySignature(\n address,\n attestation,\n signatureProof\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nfunction verifyBIP137(address: string, proof: SignatureProof, chainConfig: ChainConfig) {\n const segwit = Boolean(chainConfig.bech32Prefix && [DerivationMode.SEGWIT, DerivationMode.NATIVE].includes(\n getDerivationMode(address)\n ));\n const verified = verify(proof.attestation, address, proof.proof, segwit, chainConfig);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nfunction getDerivationMode(address: string) {\n if (address.match(\"^(bc1|tb1|ltc1).*\")) {\n return DerivationMode.NATIVE;\n } else if (address.match(\"^[32M].*\")) {\n return DerivationMode.SEGWIT;\n } else if (address.match(\"^[1nmL].*\")) {\n return DerivationMode.LEGACY;\n } else if (address.match(\"^(D).*\")) {\n return DerivationMode.DOGECOIN;\n } else if (address.match(\"^(q).*\")) {\n return DerivationMode.BCH;\n } else {\n throw new Error(\n \"INVALID ADDRESS: \"\n .concat(address)\n .concat(\" is not a valid or a supported address\")\n );\n }\n}\n\ntype DecodedSignature = {\n compressed: boolean;\n segwitType?: SEGWIT_TYPES;\n signature: SignatureType;\n};\n\nfunction decodeSignature(proof: string): DecodedSignature {\n const sigbytes = base64.decode(proof);\n if (sigbytes.length !== 65) throw new Error(\"Invalid signature length\");\n const flagByte = sigbytes[0] - 27;\n if (flagByte > 15 || flagByte < 0) {\n throw new Error(\"Invalid signature parameter\");\n }\n const compressed = !!(flagByte & 12); // Are there cases that aren't compressed?\n const recovery = flagByte & 3;\n const signature = secp256k1.Signature.fromCompact(sigbytes.slice(1));\n\n return {\n compressed,\n segwitType: !(flagByte & 8)\n ? undefined\n : !(flagByte & 4)\n ? SEGWIT_TYPES.P2SH_P2WPKH\n : SEGWIT_TYPES.P2WPKH,\n signature: signature.addRecoveryBit(recovery),\n };\n}\n\nfunction verify(\n attestation: string,\n address: string,\n proof: string,\n checkSegwitAlways: boolean,\n chainConfig: ChainConfig\n) {\n const { compressed, segwitType, signature } = decodeSignature(proof);\n if (checkSegwitAlways && !compressed) {\n throw new Error(\n \"checkSegwitAlways can only be used with a compressed pubkey signature flagbyte\"\n );\n }\n const hash = magicHash(attestation, chainConfig.messagePrefix);\n const publicKey = signature.recoverPublicKey(hash);\n const publicKeyBytes = publicKey.toRawBytes(compressed);\n const publicKeyHash = hash160(publicKeyBytes);\n let actual: string = \"\";\n\n // Special handling for Bitcoin Cash addresses\n if (address.startsWith('q')) {\n // For BCH, we'll compare the public key hash directly since we're getting a CashAddr\n // Convert the CashAddr to legacy format for comparison\n actual = encodeBase58AddressFormat(chainConfig.pubKeyHashVersion, publicKeyHash);\n // Legacy P2PKH addresses in BCH start with '1' just like BTC\n // Source: https://reference.cash/protocol/blockchain/encoding/cashaddr#legacy-address-format\n return actual.startsWith('1');\n }\n\n if (segwitType) {\n if (segwitType === SEGWIT_TYPES.P2SH_P2WPKH) {\n actual = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n } else {\n // parsed.segwitType === SEGWIT_TYPES.P2WPKH\n if (chainConfig.bech32Prefix) {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n } else {\n // Fallback to legacy if bech32 not supported\n actual = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n }\n } else {\n if (checkSegwitAlways && chainConfig.bech32Prefix) {\n try {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n // if address is bech32 it is not p2sh\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n actual = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n } else {\n actual = encodeBase58AddressFormat(chainConfig.pubKeyHashVersion, publicKeyHash);\n }\n }\n\n return actual === address;\n}\n\nconst base58check = createBase58check(Hash.sha256);\n\nfunction encodeBase58AddressFormat(version: number | Uint8Array, publicKeyHash: Uint8Array) {\n const prefixBytes =\n typeof version === \"number\"\n ? Uint8Array.of(version)\n : version; // Accept raw Uint8Array for Zcash\n\n const payload = new Uint8Array(prefixBytes.length + publicKeyHash.length);\n payload.set(prefixBytes);\n payload.set(publicKeyHash, prefixBytes.length);\n return base58check.encode(payload);\n}\n\n\nfunction magicHash(attestation: string, messagePrefix: string) {\n const prefix = new TextEncoder().encode(messagePrefix);\n const message = new TextEncoder().encode(attestation);\n const length = encodeLength(message.length).buffer;\n const buffer = new Uint8Array(\n prefix.length + length.byteLength + message.length\n );\n buffer.set(prefix);\n buffer.set(new Uint8Array(length), prefix.length);\n buffer.set(message, prefix.length + length.byteLength);\n return hash256(buffer);\n}\n\nfunction encodeBech32Address(publicKeyHash: Uint8Array, prefix: string = \"bc\"): string {\n const bwords = bech32.toWords(publicKeyHash);\n bwords.unshift(0);\n return bech32.encode(prefix, bwords);\n}\n\nfunction hash256(buffer: Uint8Array): Uint8Array {\n return Hash.sha256(Hash.sha256(buffer));\n}\n\nfunction hash160(buffer: Uint8Array): Uint8Array {\n return Hash.ripemd160(Hash.sha256(buffer));\n}","import nacl from \"tweetnacl\";\nimport { ProofStatus, SignatureProof, type SIWXInput, type SolanaMetadata } from \"@notabene/javascript-sdk\";\nimport { base64, base58 } from \"@scure/base\";\n\ninterface ParsedSIWSMessage {\n domain: string;\n address: string;\n statement?: string;\n uri?: string;\n version?: string;\n chainId?: string;\n nonce?: string;\n issuedAt?: string;\n expirationTime?: string;\n notBefore?: string;\n requestId?: string;\n resources?: string[];\n}\n\n\n\n/**\n * Verifies a Solana signature proof.\n * \n * This function can verify two types of Solana signatures:\n * 1. Standard Solana signatures\n * \n * @param proof - The signature proof containing the address, attestation, and signature\n * @returns Promise that resolves to a SignatureProof with updated status (VERIFIED or FAILED)\n * \n * @example\n * // Standard Solana signature verification\n * const result = await verifySolanaSignature(proof);\n * \n */\nexport async function verifySolanaSignature(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"solana\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const publicKey = base58.decode(address);\n const messageBytes = new TextEncoder().encode(proof.attestation);\n const signatureBytes = base64.decode(proof.proof);\n const verified = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n publicKey,\n );\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\nfunction isSolanaSignInInput(obj: unknown): obj is SIWXInput {\n if (!obj || typeof obj !== 'object') return false;\n \n const input = obj as Record<string, unknown>;\n \n // Check for required properties\n return (\n typeof input.domain === 'string' &&\n typeof input.address === 'string' &&\n (input.statement === undefined || typeof input.statement === 'string') &&\n (input.uri === undefined || typeof input.uri === 'string') &&\n (input.version === undefined || typeof input.version === 'string') &&\n (input.chainId === undefined || typeof input.chainId === 'string') &&\n (input.nonce === undefined || typeof input.nonce === 'string') &&\n (input.issuedAt === undefined || typeof input.issuedAt === 'string') &&\n (input.expirationTime === undefined || typeof input.expirationTime === 'string') &&\n (input.notBefore === undefined || typeof input.notBefore === 'string') &&\n (input.requestId === undefined || typeof input.requestId === 'string') &&\n (input.resources === undefined || Array.isArray(input.resources))\n );\n}\n\nfunction isSolanaSignInMetadata(obj: unknown): obj is SolanaMetadata {\n if (!obj || typeof obj !== 'object') return false;\n \n const metadata = obj as Record<string, unknown>;\n \n // Check account object\n if (!metadata.account || typeof metadata.account !== 'object') return false;\n const account = metadata.account as Record<string, unknown>;\n if (typeof account.address !== 'string') return false;\n \n // Handle publicKey - could be Uint8Array or serialized object with numeric keys\n if (!account.publicKey) return false;\n if (!(account.publicKey instanceof Uint8Array)) {\n // Try to convert from serialized format\n const pkObj = account.publicKey as Record<string, unknown>;\n if (typeof pkObj === 'object') {\n // Convert object with numeric keys to Uint8Array\n const keys = Object.keys(pkObj).filter(key => !isNaN(Number(key))).sort((a, b) => Number(a) - Number(b));\n if (keys.length === 32) { // Solana public keys are 32 bytes\n const bytes = keys.map(key => Number(pkObj[key]));\n if (bytes.every(b => typeof b === 'number' && b >= 0 && b <= 255)) {\n account.publicKey = new Uint8Array(bytes);\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n \n // Handle signedMessage - could be Uint8Array or Buffer-like object\n if (!metadata.signedMessage) return false;\n if (!(metadata.signedMessage instanceof Uint8Array)) {\n const smObj = metadata.signedMessage as Record<string, unknown>;\n if (smObj.type === 'Buffer' && Array.isArray(smObj.data)) {\n metadata.signedMessage = new Uint8Array(smObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Handle signature - could be Uint8Array or Buffer-like object\n if (!metadata.signature) return false;\n if (!(metadata.signature instanceof Uint8Array)) {\n const sigObj = metadata.signature as Record<string, unknown>;\n if (sigObj.type === 'Buffer' && Array.isArray(sigObj.data)) {\n metadata.signature = new Uint8Array(sigObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Check message field contains valid SolanaSignInInput\n if (!metadata.message || typeof metadata.message !== 'object') {\n return false;\n }\n \n const message = metadata.message as unknown;\n \n // If address is missing from message, try to extract it from signedMessage\n if (typeof message === 'object' && message !== null) {\n const messageObj = message as Record<string, unknown>;\n if (!messageObj.address && metadata.signedMessage instanceof Uint8Array) {\n try {\n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const lines = signedMessageText.split('\\n');\n if (lines.length >= 2) {\n const address = lines[1].trim();\n if (address && /^[a-zA-Z0-9]{32,44}$/.test(address)) {\n messageObj.address = address;\n }\n }\n } catch {\n // Ignore errors in address extraction\n }\n }\n }\n \n if (!isSolanaSignInInput(metadata.message)) {\n return false;\n }\n \n return true;\n}\n\nexport async function verifySolanaSIWS(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns] = proof.address.split(/:/);\n if (ns !== \"solana\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n // Validate that metadata conforms to SolanaSignInMetadata\n if (!proof.chainSpecificData || !isSolanaSignInMetadata(proof.chainSpecificData)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n // Now we can safely cast to SolanaMetadata since we validated it\n const metadata = proof.chainSpecificData as SolanaMetadata;\n \n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const parsedMessage = parseSIWSMessage(signedMessageText);\n \n if (!parsedMessage) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Validate the parsed message against the input\n if (!validateSIWSMessage(parsedMessage, metadata.message as SIWXInput)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Reconstruct the message to ensure it matches the signed message\n const reconstructedMessage = createSIWSMessage(parsedMessage);\n if (reconstructedMessage !== signedMessageText) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Verify the signature against the message\n const verified = nacl.sign.detached.verify(\n metadata.signedMessage,\n metadata.signature,\n metadata.account.publicKey as Uint8Array\n );\n \n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\n// Parse SIWS message according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#message-construction\nfunction parseSIWSMessage(message: string): ParsedSIWSMessage | null {\n try {\n const lines = message.split('\\n');\n \n // Parse header (domain and address)\n const header = parseHeader(lines);\n if (!header) return null;\n \n const result: ParsedSIWSMessage = { ...header };\n \n let lineIndex = 2;\n \n // Parse statement if present\n const statementResult = parseStatement(lines, lineIndex);\n if (statementResult.statement !== undefined) {\n result.statement = statementResult.statement;\n lineIndex = statementResult.nextIndex;\n }\n \n // Parse advanced fields\n const advancedFields = parseAdvancedFields(lines, lineIndex);\n Object.assign(result, advancedFields);\n \n return result;\n } catch {\n return null;\n }\n}\n\nfunction parseHeader(lines: string[]): { domain: string; address: string } | null {\n // First line: domain + \" wants you to sign in with your Solana account:\"\n const domainMatch = lines[0]?.match(/^(.+) wants you to sign in with your Solana account:$/);\n if (!domainMatch) return null;\n \n const domain = domainMatch[1];\n \n // Second line: address\n const address = lines[1];\n if (!address || !/^[a-zA-Z0-9]{32,44}$/.test(address)) return null;\n \n return { domain, address };\n}\n\nfunction parseStatement(lines: string[], startIndex: number): { statement?: string; nextIndex: number } {\n let lineIndex = startIndex;\n \n // Check for statement (after empty line)\n if (lines[lineIndex] === '' && lines[lineIndex + 1] && !lines[lineIndex + 1].includes(':')) {\n lineIndex++; // Skip empty line\n const statement = lines[lineIndex];\n lineIndex++;\n \n // Skip another empty line after statement\n if (lines[lineIndex] === '') {\n lineIndex++;\n }\n \n return { statement, nextIndex: lineIndex };\n }\n \n return { nextIndex: lineIndex };\n}\n\nfunction parseAdvancedFields(lines: string[], startIndex: number): Partial<ParsedSIWSMessage> {\n const result: Partial<ParsedSIWSMessage> = {};\n \n // Define field parsers for string fields only\n const fieldParsers: Array<{\n prefix: string;\n key: keyof Omit<ParsedSIWSMessage, 'resources'>;\n }> = [\n { prefix: 'URI: ', key: 'uri' },\n { prefix: 'Version: ', key: 'version' },\n { prefix: 'Chain ID: ', key: 'chainId' },\n { prefix: 'Nonce: ', key: 'nonce' },\n { prefix: 'Issued At: ', key: 'issuedAt' },\n { prefix: 'Expiration Time: ', key: 'expirationTime' },\n { prefix: 'Not Before: ', key: 'notBefore' },\n { prefix: 'Request ID: ', key: 'requestId' }\n ];\n \n let lineIndex = startIndex;\n \n while (lineIndex < lines.length) {\n const line = lines[lineIndex];\n if (!line) {\n lineIndex++;\n continue;\n }\n \n // Check for resources (special case)\n if (line.startsWith('Resources:')) {\n const resources = parseResources(lines, lineIndex + 1);\n if (resources.length > 0) {\n result.resources = resources;\n lineIndex += resources.length + 1; // +1 for the \"Resources:\" line\n continue;\n }\n }\n \n // Check for other fields\n let fieldFound = false;\n for (const { prefix, key } of fieldParsers) {\n if (line.startsWith(prefix)) {\n const value = line.substring(prefix.length);\n result[key] = value;\n fieldFound = true;\n break;\n }\n }\n \n if (!fieldFound) {\n // Unknown field, skip it\n }\n \n lineIndex++;\n }\n \n return result;\n}\n\nfunction parseResources(lines: string[], startIndex: number): string[] {\n const resources: string[] = [];\n let lineIndex = startIndex;\n \n while (lineIndex < lines.length && lines[lineIndex]?.startsWith('- ')) {\n resources.push(lines[lineIndex].substring(2));\n lineIndex++;\n }\n \n return resources;\n}\n\n// Validate parsed SIWS message against input\nfunction validateSIWSMessage(parsed: ParsedSIWSMessage, input: SIWXInput): boolean {\n // Required fields validation\n if (parsed.domain !== input.domain || parsed.address !== input.address) {\n return false;\n }\n \n // Define validation rules for optional fields\n const fieldValidations: Array<{\n inputKey: keyof SIWXInput;\n parsedKey: keyof ParsedSIWSMessage;\n validator?: (inputValue: unknown, parsedValue: unknown) => boolean;\n }> = [\n { inputKey: 'statement', parsedKey: 'statement' },\n { inputKey: 'uri', parsedKey: 'uri' },\n { inputKey: 'version', parsedKey: 'version' },\n { inputKey: 'chainId', parsedKey: 'chainId' },\n { inputKey: 'nonce', parsedKey: 'nonce' },\n { inputKey: 'issuedAt', parsedKey: 'issuedAt' },\n { inputKey: 'expirationTime', parsedKey: 'expirationTime' },\n { inputKey: 'notBefore', parsedKey: 'notBefore' },\n { inputKey: 'requestId', parsedKey: 'requestId' },\n {\n inputKey: 'resources',\n parsedKey: 'resources',\n validator: (inputValue, parsedValue) => {\n if (!Array.isArray(inputValue) || !Array.isArray(parsedValue)) {\n return false;\n }\n return inputValue.length === parsedValue.length && \n inputValue.every((item, index) => item === parsedValue[index]);\n }\n }\n ];\n \n // Validate optional fields\n for (const { inputKey, parsedKey, validator } of fieldValidations) {\n const inputValue = input[inputKey];\n const parsedValue = parsed[parsedKey];\n \n if (inputValue !== undefined) {\n if (validator) {\n if (!validator(inputValue, parsedValue)) {\n return false;\n }\n } else if (inputValue !== parsedValue) {\n return false;\n }\n }\n }\n \n // Validate timestamps\n return validateTimestamps(parsed);\n}\n\n// Separate timestamp validation for better testability and clarity\nfunction validateTimestamps(parsed: ParsedSIWSMessage): boolean {\n const now = Date.now();\n \n // Validate issuedAt (allow 24 hour threshold for testing)\n if (parsed.issuedAt) {\n const issuedAt = new Date(parsed.issuedAt);\n const threshold = 24 * 60 * 60 * 1000; // 24 hours in milliseconds\n const timeDiff = Math.abs(issuedAt.getTime() - now);\n if (timeDiff > threshold) {\n return false;\n }\n }\n \n // Validate expirationTime\n if (parsed.expirationTime) {\n const expirationTime = new Date(parsed.expirationTime);\n if (expirationTime.getTime() <= now) {\n return false; // Message has expired\n }\n }\n \n // Validate notBefore\n if (parsed.notBefore) {\n const notBefore = new Date(parsed.notBefore);\n if (notBefore.getTime() > now) {\n return false; // Message not yet valid\n }\n }\n \n return true;\n}\n\n// Create SIWS message string according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#abnf-message-format\nfunction createSIWSMessage(input: ParsedSIWSMessage): string {\n let message = `${input.domain} wants you to sign in with your Solana account:\\n`;\n message += `${input.address}`;\n\n if (input.statement) {\n message += `\\n\\n${input.statement}`;\n }\n\n const fields = buildFieldLines(input);\n \n if (fields.length) {\n message += `\\n\\n${fields.join('\\n')}`;\n }\n\n return message;\n}\n\nfunction buildFieldLines(input: ParsedSIWSMessage): string[] {\n const fields: string[] = [];\n \n // Define field mappings\n const fieldMappings: Array<{\n key: keyof ParsedSIWSMessage;\n prefix: string;\n formatter?: (value: unknown) => string[];\n }> = [\n { key: 'uri', prefix: 'URI: ' },\n { key: 'version', prefix: 'Version: ' },\n { key: 'chainId', prefix: 'Chain ID: ' },\n { key: 'nonce', prefix: 'Nonce: ' },\n { key: 'issuedAt', prefix: 'Issued At: ' },\n { key: 'expirationTime', prefix: 'Expiration Time: ' },\n { key: 'notBefore', prefix: 'Not Before: ' },\n { key: 'requestId', prefix: 'Request ID: ' },\n {\n key: 'resources',\n prefix: 'Resources:',\n formatter: (value) => {\n if (Array.isArray(value) && value.length > 0) {\n return ['Resources:', ...value.map(resource => `- ${resource}`)];\n }\n return [];\n }\n }\n ];\n \n for (const { key, prefix, formatter } of fieldMappings) {\n const value = input[key];\n if (value !== undefined) {\n if (formatter) {\n const formatted = formatter(value);\n fields.push(...formatted);\n } else if (typeof value === 'string') {\n fields.push(`${prefix}${value}`);\n }\n }\n }\n \n return fields;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.equal = exports.concat = exports.HEX_REGEX = void 0;\nconst utils_1 = require(\"@noble/hashes/utils\");\nexports.HEX_REGEX = /^[A-F0-9]*$/iu;\nfunction concat(views) {\n return (0, utils_1.concatBytes)(...views);\n}\nexports.concat = concat;\nfunction equal(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) {\n return false;\n }\n const dv1 = new Int8Array(buf1);\n const dv2 = new Int8Array(buf2);\n for (let i = 0; i !== buf1.byteLength; i++) {\n if (dv1[i] !== dv2[i]) {\n return false;\n }\n }\n return true;\n}\nexports.equal = equal;\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomBytes = exports.stringToHex = exports.hexToString = exports.hexToBytes = exports.bytesToHex = void 0;\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst shared_1 = require(\"./shared\");\n/* eslint-disable func-style -- Typed to ensure uniformity between node and browser implementations and docs */\nconst bytesToHex = (bytes) => {\n const hex = (0, utils_1.bytesToHex)(bytes instanceof Uint8Array ? bytes : Uint8Array.from(bytes));\n return hex.toUpperCase();\n};\nexports.bytesToHex = bytesToHex;\n// A clone of hexToBytes from @noble/hashes without the length checks. This allows us to do our own checks.\nconst hexToBytes = (hex) => {\n const len = hex.length;\n const array = new Uint8Array(len / 2);\n if (!shared_1.HEX_REGEX.test(hex)) {\n throw new Error('Invalid hex string');\n }\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0) {\n throw new Error('Invalid byte sequence');\n }\n array[i] = byte;\n }\n return array;\n};\nexports.hexToBytes = hexToBytes;\nconst hexToString = (hex, encoding = 'utf8') => {\n return new TextDecoder(encoding).decode((0, exports.hexToBytes)(hex));\n};\nexports.hexToString = hexToString;\nconst stringToHex = (string) => {\n return (0, exports.bytesToHex)(new TextEncoder().encode(string));\n};\nexports.stringToHex = stringToHex;\n/* eslint-enable func-style */\nexports.randomBytes = utils_1.randomBytes;\n__exportStar(require(\"./shared\"), exports);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA512_IV = exports.SHA384_IV = exports.SHA224_IV = exports.SHA256_IV = exports.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nfunction Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nfunction Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nclass HashMD extends utils_ts_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_ts_1.createView)(this.buffer);\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = (0, utils_ts_1.createView)(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.aoutput)(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n (0, utils_ts_1.clean)(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = (0, utils_ts_1.createView)(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexports.HashMD = HashMD;\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexports.SHA256_IV = Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexports.SHA224_IV = Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexports.SHA384_IV = Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexports.SHA512_IV = Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_224 = exports.sha512_256 = exports.sha384 = exports.sha512 = exports.sha224 = exports.sha256 = exports.SHA512_256 = exports.SHA512_224 = exports.SHA384 = exports.SHA512 = exports.SHA224 = exports.SHA256 = void 0;\n/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst u64 = require(\"./_u64.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_ts_1.HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = _md_ts_1.SHA256_IV[0] | 0;\n this.B = _md_ts_1.SHA256_IV[1] | 0;\n this.C = _md_ts_1.SHA256_IV[2] | 0;\n this.D = _md_ts_1.SHA256_IV[3] | 0;\n this.E = _md_ts_1.SHA256_IV[4] | 0;\n this.F = _md_ts_1.SHA256_IV[5] | 0;\n this.G = _md_ts_1.SHA256_IV[6] | 0;\n this.H = _md_ts_1.SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = (0, utils_ts_1.rotr)(W15, 7) ^ (0, utils_ts_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_ts_1.rotr)(W2, 17) ^ (0, utils_ts_1.rotr)(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = (0, utils_ts_1.rotr)(E, 6) ^ (0, utils_ts_1.rotr)(E, 11) ^ (0, utils_ts_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_ts_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_ts_1.rotr)(A, 2) ^ (0, utils_ts_1.rotr)(A, 13) ^ (0, utils_ts_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_ts_1.Maj)(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA256 = SHA256;\nclass SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = _md_ts_1.SHA224_IV[0] | 0;\n this.B = _md_ts_1.SHA224_IV[1] | 0;\n this.C = _md_ts_1.SHA224_IV[2] | 0;\n this.D = _md_ts_1.SHA224_IV[3] | 0;\n this.E = _md_ts_1.SHA224_IV[4] | 0;\n this.F = _md_ts_1.SHA224_IV[5] | 0;\n this.G = _md_ts_1.SHA224_IV[6] | 0;\n this.H = _md_ts_1.SHA224_IV[7] | 0;\n }\n}\nexports.SHA224 = SHA224;\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_ts_1.HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = _md_ts_1.SHA512_IV[0] | 0;\n this.Al = _md_ts_1.SHA512_IV[1] | 0;\n this.Bh = _md_ts_1.SHA512_IV[2] | 0;\n this.Bl = _md_ts_1.SHA512_IV[3] | 0;\n this.Ch = _md_ts_1.SHA512_IV[4] | 0;\n this.Cl = _md_ts_1.SHA512_IV[5] | 0;\n this.Dh = _md_ts_1.SHA512_IV[6] | 0;\n this.Dl = _md_ts_1.SHA512_IV[7] | 0;\n this.Eh = _md_ts_1.SHA512_IV[8] | 0;\n this.El = _md_ts_1.SHA512_IV[9] | 0;\n this.Fh = _md_ts_1.SHA512_IV[10] | 0;\n this.Fl = _md_ts_1.SHA512_IV[11] | 0;\n this.Gh = _md_ts_1.SHA512_IV[12] | 0;\n this.Gl = _md_ts_1.SHA512_IV[13] | 0;\n this.Hh = _md_ts_1.SHA512_IV[14] | 0;\n this.Hl = _md_ts_1.SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexports.SHA512 = SHA512;\nclass SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = _md_ts_1.SHA384_IV[0] | 0;\n this.Al = _md_ts_1.SHA384_IV[1] | 0;\n this.Bh = _md_ts_1.SHA384_IV[2] | 0;\n this.Bl = _md_ts_1.SHA384_IV[3] | 0;\n this.Ch = _md_ts_1.SHA384_IV[4] | 0;\n this.Cl = _md_ts_1.SHA384_IV[5] | 0;\n this.Dh = _md_ts_1.SHA384_IV[6] | 0;\n this.Dl = _md_ts_1.SHA384_IV[7] | 0;\n this.Eh = _md_ts_1.SHA384_IV[8] | 0;\n this.El = _md_ts_1.SHA384_IV[9] | 0;\n this.Fh = _md_ts_1.SHA384_IV[10] | 0;\n this.Fl = _md_ts_1.SHA384_IV[11] | 0;\n this.Gh = _md_ts_1.SHA384_IV[12] | 0;\n this.Gl = _md_ts_1.SHA384_IV[13] | 0;\n this.Hh = _md_ts_1.SHA384_IV[14] | 0;\n this.Hl = _md_ts_1.SHA384_IV[15] | 0;\n }\n}\nexports.SHA384 = SHA384;\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nclass SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\nexports.SHA512_256 = SHA512_256;\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexports.sha256 = (0, utils_ts_1.createHasher)(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexports.sha224 = (0, utils_ts_1.createHasher)(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexports.sha512 = (0, utils_ts_1.createHasher)(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexports.sha384 = (0, utils_ts_1.createHasher)(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_256 = (0, utils_ts_1.createHasher)(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_224 = (0, utils_ts_1.createHasher)(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha224 = exports.SHA224 = exports.sha256 = exports.SHA256 = void 0;\n/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA256 = sha2_ts_1.SHA256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha256 = sha2_ts_1.sha256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA224 = sha2_ts_1.SHA224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha224 = sha2_ts_1.sha224;\n//# sourceMappingURL=sha256.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst normalizeInput_1 = __importDefault(require(\"./normalizeInput\"));\n/**\n * Wrap a CHash object from @noble/hashes to provide a interface that is isomorphic\n *\n * @param chash - {CHash} hash function to wrap\n */\nfunction wrapNoble(chash) {\n function wrapped(input) {\n return chash((0, normalizeInput_1.default)(input));\n }\n wrapped.create = () => {\n const hash = chash.create();\n return {\n update(input) {\n hash.update((0, normalizeInput_1.default)(input));\n return this;\n },\n digest() {\n return hash.digest();\n },\n };\n };\n return wrapped;\n}\nexports.default = wrapNoble;\n//# sourceMappingURL=wrapNoble.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Normalize a string, number array, or Uint8Array to a string or Uint8Array.\n * Both node and noble lib functions accept these types.\n *\n * @param input - value to normalize\n */\nfunction normalizeInput(input) {\n return Array.isArray(input) ? new Uint8Array(input) : input;\n}\nexports.default = normalizeInput;\n//# sourceMappingURL=normalizeInput.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha256 = void 0;\nconst sha256_1 = require(\"@noble/hashes/sha256\");\nconst wrapNoble_1 = __importDefault(require(\"../internal/wrapNoble\"));\n/**\n * Wrap noble-libs's sha256 implementation in HashFn\n */\nexports.sha256 = (0, wrapNoble_1.default)(sha256_1.sha256);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.concatArgs = exports.arrayEqual = void 0;\n/**\n * Check whether two sequences (e.g. Arrays of numbers) are equal.\n *\n * @param arr1 - One of the arrays to compare.\n * @param arr2 - The other array to compare.\n */\nfunction arrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n return arr1.every((value, index) => value === arr2[index]);\n}\nexports.arrayEqual = arrayEqual;\n/**\n * Check whether a value is a scalar\n *\n * @param val - The value to check.\n */\nfunction isScalar(val) {\n return typeof val === 'number';\n}\n/**\n * Concatenate all `arguments` into a single array. Each argument can be either\n * a single element or a sequence, which has a `length` property and supports\n * element retrieval via sequence[ix].\n *\n * > concatArgs(1, [2, 3], Uint8Array.from([4,5]), new Uint8Array([6, 7]));\n * [1,2,3,4,5,6,7]\n *\n * @param args - Concatenate of these args into a single array.\n * @returns Array of concatenated arguments\n */\nfunction concatArgs(...args) {\n return args.flatMap((arg) => {\n return isScalar(arg) ? [arg] : Array.from(arg);\n });\n}\nexports.concatArgs = concatArgs;\n//# sourceMappingURL=utils.js.map","\"use strict\";\n/**\n * Codec class\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidClassicAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.encodeNodePublic = exports.decodeNodePublic = exports.decodeAddress = exports.decodeAccountID = exports.encodeAddress = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.codec = void 0;\nconst base_1 = require(\"@scure/base\");\nconst sha256_1 = require(\"@xrplf/isomorphic/sha256\");\nconst utils_1 = require(\"./utils\");\nclass Codec {\n constructor(options) {\n this._sha256 = options.sha256;\n this._codec = base_1.base58xrp;\n }\n /**\n * Encoder.\n *\n * @param bytes - Uint8Array of data to encode.\n * @param opts - Options object including the version bytes and the expected length of the data to encode.\n */\n encode(bytes, opts) {\n const versions = opts.versions;\n return this._encodeVersioned(bytes, versions, opts.expectedLength);\n }\n /**\n * Decoder.\n *\n * @param base58string - Base58Check-encoded string to decode.\n * @param opts - Options object including the version byte(s) and the expected length of the data after decoding.\n */\n /* eslint-disable max-lines-per-function --\n * TODO refactor */\n decode(base58string, opts) {\n var _a;\n const versions = opts.versions;\n const types = opts.versionTypes;\n const withoutSum = this.decodeChecked(base58string);\n if (versions.length > 1 && !opts.expectedLength) {\n throw new Error('expectedLength is required because there are >= 2 possible versions');\n }\n const versionLengthGuess = typeof versions[0] === 'number' ? 1 : versions[0].length;\n const payloadLength = (_a = opts.expectedLength) !== null && _a !== void 0 ? _a : withoutSum.length - versionLengthGuess;\n const versionBytes = withoutSum.slice(0, -payloadLength);\n const payload = withoutSum.slice(-payloadLength);\n for (let i = 0; i < versions.length; i++) {\n /* eslint-disable @typescript-eslint/consistent-type-assertions --\n * TODO refactor */\n const version = Array.isArray(versions[i])\n ? versions[i]\n : [versions[i]];\n if ((0, utils_1.arrayEqual)(versionBytes, version)) {\n return {\n version,\n bytes: payload,\n type: types ? types[i] : null,\n };\n }\n /* eslint-enable @typescript-eslint/consistent-type-assertions */\n }\n throw new Error('version_invalid: version bytes do not match any of the provided version(s)');\n }\n encodeChecked(bytes) {\n const check = this._sha256(this._sha256(bytes)).slice(0, 4);\n return this._encodeRaw(Uint8Array.from((0, utils_1.concatArgs)(bytes, check)));\n }\n decodeChecked(base58string) {\n const intArray = this._decodeRaw(base58string);\n if (intArray.byteLength < 5) {\n throw new Error('invalid_input_size: decoded data must have length >= 5');\n }\n if (!this._verifyCheckSum(intArray)) {\n throw new Error('checksum_invalid');\n }\n return intArray.slice(0, -4);\n }\n _encodeVersioned(bytes, versions, expectedLength) {\n if (!checkByteLength(bytes, expectedLength)) {\n throw new Error('unexpected_payload_length: bytes.length does not match expectedLength.' +\n ' Ensure that the bytes are a Uint8Array.');\n }\n return this.encodeChecked((0, utils_1.concatArgs)(versions, bytes));\n }\n _encodeRaw(bytes) {\n return this._codec.encode(Uint8Array.from(bytes));\n }\n /* eslint-enable max-lines-per-function */\n _decodeRaw(base58string) {\n return this._codec.decode(base58string);\n }\n _verifyCheckSum(bytes) {\n const computed = this._sha256(this._sha256(bytes.slice(0, -4))).slice(0, 4);\n const checksum = bytes.slice(-4);\n return (0, utils_1.arrayEqual)(computed, checksum);\n }\n}\n/**\n * XRP codec\n */\n// base58 encodings: https://xrpl.org/base58-encodings.html\n// Account address (20 bytes)\nconst ACCOUNT_ID = 0;\n// Account public key (33 bytes)\nconst ACCOUNT_PUBLIC_KEY = 0x23;\n// 33; Seed value (for secret keys) (16 bytes)\nconst FAMILY_SEED = 0x21;\n// 28; Validation public key (33 bytes)\nconst NODE_PUBLIC = 0x1c;\n// [1, 225, 75]\nconst ED25519_SEED = [0x01, 0xe1, 0x4b];\nconst codecOptions = {\n sha256: sha256_1.sha256,\n};\nconst codecWithXrpAlphabet = new Codec(codecOptions);\nexports.codec = codecWithXrpAlphabet;\n// entropy is a Uint8Array of size 16\n// type is 'ed25519' or 'secp256k1'\nfunction encodeSeed(entropy, type) {\n if (!checkByteLength(entropy, 16)) {\n throw new Error('entropy must have length 16');\n }\n const opts = {\n expectedLength: 16,\n // for secp256k1, use `FAMILY_SEED`\n versions: type === 'ed25519' ? ED25519_SEED : [FAMILY_SEED],\n };\n // prefixes entropy with version bytes\n return codecWithXrpAlphabet.encode(entropy, opts);\n}\nexports.encodeSeed = encodeSeed;\nfunction decodeSeed(seed, opts = {\n versionTypes: ['ed25519', 'secp256k1'],\n versions: [ED25519_SEED, FAMILY_SEED],\n expectedLength: 16,\n}) {\n return codecWithXrpAlphabet.decode(seed, opts);\n}\nexports.decodeSeed = decodeSeed;\nfunction encodeAccountID(bytes) {\n const opts = { versions: [ACCOUNT_ID], expectedLength: 20 };\n return codecWithXrpAlphabet.encode(bytes, opts);\n}\nexports.encodeAccountID = encodeAccountID;\n/* eslint-disable import/no-unused-modules ---\n * unclear why this is aliased but we should keep it in case someone else is\n * importing it with the aliased name */\nexports.encodeAddress = encodeAccountID;\n/* eslint-enable import/no-unused-modules */\nfunction decodeAccountID(accountId) {\n const opts = { versions: [ACCOUNT_ID], expectedLength: 20 };\n return codecWithXrpAlphabet.decode(accountId, opts).bytes;\n}\nexports.decodeAccountID = decodeAccountID;\n/* eslint-disable import/no-unused-modules ---\n * unclear why this is aliased but we should keep it in case someone else is\n * importing it with the aliased name */\nexports.decodeAddress = decodeAccountID;\n/* eslint-enable import/no-unused-modules */\nfunction decodeNodePublic(base58string) {\n const opts = { versions: [NODE_PUBLIC], expectedLength: 33 };\n return codecWithXrpAlphabet.decode(base58string, opts).bytes;\n}\nexports.decodeNodePublic = decodeNodePublic;\nfunction encodeNodePublic(bytes) {\n const opts = { versions: [NODE_PUBLIC], expectedLength: 33 };\n return codecWithXrpAlphabet.encode(bytes, opts);\n}\nexports.encodeNodePublic = encodeNodePublic;\nfunction encodeAccountPublic(bytes) {\n const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 };\n return codecWithXrpAlphabet.encode(bytes, opts);\n}\nexports.encodeAccountPublic = encodeAccountPublic;\nfunction decodeAccountPublic(base58string) {\n const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 };\n return codecWithXrpAlphabet.decode(base58string, opts).bytes;\n}\nexports.decodeAccountPublic = decodeAccountPublic;\nfunction isValidClassicAddress(address) {\n try {\n decodeAccountID(address);\n }\n catch (_error) {\n return false;\n }\n return true;\n}\nexports.isValidClassicAddress = isValidClassicAddress;\nfunction checkByteLength(bytes, expectedLength) {\n return 'byteLength' in bytes\n ? bytes.byteLength === expectedLength\n : bytes.length === expectedLength;\n}\n//# sourceMappingURL=xrp-codec.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidXAddress = exports.decodeXAddress = exports.xAddressToClassicAddress = exports.encodeXAddress = exports.classicAddressToXAddress = exports.isValidClassicAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.decodeNodePublic = exports.encodeNodePublic = exports.decodeAccountID = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.codec = void 0;\nconst utils_1 = require(\"@xrplf/isomorphic/utils\");\nconst xrp_codec_1 = require(\"./xrp-codec\");\nObject.defineProperty(exports, \"codec\", { enumerable: true, get: function () { return xrp_codec_1.codec; } });\nObject.defineProperty(exports, \"encodeSeed\", { enumerable: true, get: function () { return xrp_codec_1.encodeSeed; } });\nObject.defineProperty(exports, \"decodeSeed\", { enumerable: true, get: function () { return xrp_codec_1.decodeSeed; } });\nObject.defineProperty(exports, \"encodeAccountID\", { enumerable: true, get: function () { return xrp_codec_1.encodeAccountID; } });\nObject.defineProperty(exports, \"decodeAccountID\", { enumerable: true, get: function () { return xrp_codec_1.decodeAccountID; } });\nObject.defineProperty(exports, \"encodeNodePublic\", { enumerable: true, get: function () { return xrp_codec_1.encodeNodePublic; } });\nObject.defineProperty(exports, \"decodeNodePublic\", { enumerable: true, get: function () { return xrp_codec_1.decodeNodePublic; } });\nObject.defineProperty(exports, \"encodeAccountPublic\", { enumerable: true, get: function () { return xrp_codec_1.encodeAccountPublic; } });\nObject.defineProperty(exports, \"decodeAccountPublic\", { enumerable: true, get: function () { return xrp_codec_1.decodeAccountPublic; } });\nObject.defineProperty(exports, \"isValidClassicAddress\", { enumerable: true, get: function () { return xrp_codec_1.isValidClassicAddress; } });\nconst PREFIX_BYTES = {\n // 5, 68\n main: Uint8Array.from([0x05, 0x44]),\n // 4, 147\n test: Uint8Array.from([0x04, 0x93]),\n};\nconst MAX_32_BIT_UNSIGNED_INT = 4294967295;\nfunction classicAddressToXAddress(classicAddress, tag, test) {\n const accountId = (0, xrp_codec_1.decodeAccountID)(classicAddress);\n return encodeXAddress(accountId, tag, test);\n}\nexports.classicAddressToXAddress = classicAddressToXAddress;\nfunction encodeXAddress(accountId, tag, test) {\n if (accountId.length !== 20) {\n // RIPEMD160 is 160 bits = 20 bytes\n throw new Error('Account ID must be 20 bytes');\n }\n if (tag !== false && tag > MAX_32_BIT_UNSIGNED_INT) {\n throw new Error('Invalid tag');\n }\n const theTag = tag || 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Passing null is a common js mistake\n const flag = tag === false || tag == null ? 0 : 1;\n /* eslint-disable no-bitwise ---\n * need to use bitwise operations here */\n const bytes = (0, utils_1.concat)([\n test ? PREFIX_BYTES.test : PREFIX_BYTES.main,\n accountId,\n Uint8Array.from([\n // 0x00 if no tag, 0x01 if 32-bit tag\n flag,\n // first byte\n theTag & 0xff,\n // second byte\n (theTag >> 8) & 0xff,\n // third byte\n (theTag >> 16) & 0xff,\n // fourth byte\n (theTag >> 24) & 0xff,\n 0,\n 0,\n 0,\n // four zero bytes (reserved for 64-bit tags)\n 0,\n ]),\n ]);\n /* eslint-enable no-bitwise */\n return xrp_codec_1.codec.encodeChecked(bytes);\n}\nexports.encodeXAddress = encodeXAddress;\nfunction xAddressToClassicAddress(xAddress) {\n /* eslint-disable @typescript-eslint/naming-convention --\n * TODO 'test' should be something like 'isTest', do this later\n */\n const { accountId, tag, test } = decodeXAddress(xAddress);\n /* eslint-enable @typescript-eslint/naming-convention */\n const classicAddress = (0, xrp_codec_1.encodeAccountID)(accountId);\n return {\n classicAddress,\n tag,\n test,\n };\n}\nexports.xAddressToClassicAddress = xAddressToClassicAddress;\nfunction decodeXAddress(xAddress) {\n const decoded = xrp_codec_1.codec.decodeChecked(xAddress);\n /* eslint-disable @typescript-eslint/naming-convention --\n * TODO 'test' should be something like 'isTest', do this later\n */\n const test = isUint8ArrayForTestAddress(decoded);\n /* eslint-enable @typescript-eslint/naming-convention */\n const accountId = decoded.slice(2, 22);\n const tag = tagFromUint8Array(decoded);\n return {\n accountId,\n tag,\n test,\n };\n}\nexports.decodeXAddress = decodeXAddress;\nfunction isUint8ArrayForTestAddress(buf) {\n const decodedPrefix = buf.slice(0, 2);\n if ((0, utils_1.equal)(PREFIX_BYTES.main, decodedPrefix)) {\n return false;\n }\n if ((0, utils_1.equal)(PREFIX_BYTES.test, decodedPrefix)) {\n return true;\n }\n throw new Error('Invalid X-address: bad prefix');\n}\nfunction tagFromUint8Array(buf) {\n const flag = buf[22];\n if (flag >= 2) {\n // No support for 64-bit tags at this time\n throw new Error('Unsupported X-address');\n }\n if (flag === 1) {\n // Little-endian to big-endian\n return buf[23] + buf[24] * 0x100 + buf[25] * 0x10000 + buf[26] * 0x1000000;\n }\n if (flag !== 0) {\n throw new Error('flag must be zero to indicate no tag');\n }\n if (!(0, utils_1.equal)((0, utils_1.hexToBytes)('0000000000000000'), buf.slice(23, 23 + 8))) {\n throw new Error('remaining bytes must be zero');\n }\n return false;\n}\nfunction isValidXAddress(xAddress) {\n try {\n decodeXAddress(xAddress);\n }\n catch (_error) {\n return false;\n }\n return true;\n}\nexports.isValidXAddress = isValidXAddress;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ripemd160 = exports.RIPEMD160 = exports.md5 = exports.MD5 = exports.sha1 = exports.SHA1 = void 0;\n/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */\nclass SHA1 extends _md_ts_1.HashMD {\n constructor() {\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n get() {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = (0, utils_ts_1.rotl)(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = (0, _md_ts_1.Chi)(B, C, D);\n K = 0x5a827999;\n }\n else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n }\n else if (i < 60) {\n F = (0, _md_ts_1.Maj)(B, C, D);\n K = 0x8f1bbcdc;\n }\n else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = ((0, utils_ts_1.rotl)(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = (0, utils_ts_1.rotl)(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA1 = SHA1;\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexports.sha1 = (0, utils_ts_1.createHasher)(() => new SHA1());\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) => Math.floor(p32 * Math.abs(Math.sin(i + 1))));\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nclass MD5 extends _md_ts_1.HashMD {\n constructor() {\n super(64, 16, 8, true);\n this.A = MD5_IV[0] | 0;\n this.B = MD5_IV[1] | 0;\n this.C = MD5_IV[2] | 0;\n this.D = MD5_IV[3] | 0;\n }\n get() {\n const { A, B, C, D } = this;\n return [A, B, C, D];\n }\n set(A, B, C, D) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n MD5_W[i] = view.getUint32(offset, true);\n // Compression function main loop, 64 rounds\n let { A, B, C, D } = this;\n for (let i = 0; i < 64; i++) {\n let F, g, s;\n if (i < 16) {\n F = (0, _md_ts_1.Chi)(B, C, D);\n g = i;\n s = [7, 12, 17, 22];\n }\n else if (i < 32) {\n F = (0, _md_ts_1.Chi)(D, B, C);\n g = (5 * i + 1) % 16;\n s = [5, 9, 14, 20];\n }\n else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n s = [4, 11, 16, 23];\n }\n else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n s = [6, 10, 15, 21];\n }\n F = F + A + K[i] + MD5_W[g];\n A = D;\n D = C;\n C = B;\n B = B + (0, utils_ts_1.rotl)(F, s[i % 4]);\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n this.set(A, B, C, D);\n }\n roundClean() {\n (0, utils_ts_1.clean)(MD5_W);\n }\n destroy() {\n this.set(0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.MD5 = MD5;\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexports.md5 = (0, utils_ts_1.createHasher)(() => new MD5());\n// RIPEMD-160\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++)\n for (let j of res)\n j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n if (group === 1)\n return (x & y) | (~x & z);\n if (group === 2)\n return (x | ~y) ^ z;\n if (group === 3)\n return (x & z) | (y & ~z);\n return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nclass RIPEMD160 extends _md_ts_1.HashMD {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF_160[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = ((0, utils_ts_1.rotl)(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = (0, utils_ts_1.rotl)(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = ((0, utils_ts_1.rotl)(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = (0, utils_ts_1.rotl)(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n (0, utils_ts_1.clean)(BUF_160);\n }\n destroy() {\n this.destroyed = true;\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0);\n }\n}\nexports.RIPEMD160 = RIPEMD160;\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexports.ripemd160 = (0, utils_ts_1.createHasher)(() => new RIPEMD160());\n//# sourceMappingURL=legacy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ripemd160 = exports.RIPEMD160 = void 0;\n/**\n * RIPEMD-160 legacy hash function.\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n * @module\n * @deprecated\n */\nconst legacy_ts_1 = require(\"./legacy.js\");\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexports.RIPEMD160 = legacy_ts_1.RIPEMD160;\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexports.ripemd160 = legacy_ts_1.ripemd160;\n//# sourceMappingURL=ripemd160.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ripemd160 = void 0;\nconst ripemd160_1 = require(\"@noble/hashes/ripemd160\");\nconst wrapNoble_1 = __importDefault(require(\"../internal/wrapNoble\"));\n/**\n * Wrap noble-libs's ripemd160 implementation in HashFn\n */\nexports.ripemd160 = (0, wrapNoble_1.default)(ripemd160_1.ripemd160);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_256 = exports.SHA512_256 = exports.sha512_224 = exports.SHA512_224 = exports.sha384 = exports.SHA384 = exports.sha512 = exports.SHA512 = void 0;\n/**\n * SHA2-512 a.k.a. sha512 and sha384. It is slower than sha256 in js because u64 operations are slow.\n *\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [the paper on truncated SHA512/256](https://eprint.iacr.org/2010/548.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA512 = sha2_ts_1.SHA512;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha512 = sha2_ts_1.sha512;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA384 = sha2_ts_1.SHA384;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha384 = sha2_ts_1.sha384;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA512_224 = sha2_ts_1.SHA512_224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha512_224 = sha2_ts_1.sha512_224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA512_256 = sha2_ts_1.SHA512_256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha512_256 = sha2_ts_1.sha512_256;\n//# sourceMappingURL=sha512.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512 = void 0;\nconst sha512_1 = require(\"@noble/hashes/sha512\");\nconst wrapNoble_1 = __importDefault(require(\"../internal/wrapNoble\"));\n/**\n * Wrap noble-libs's sha512 implementation in HashFn\n */\nexports.sha512 = (0, wrapNoble_1.default)(sha512_1.sha512);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sha512_1 = require(\"@xrplf/isomorphic/sha512\");\nconst utils_1 = require(\"@noble/curves/abstract/utils\");\nclass Sha512 {\n constructor() {\n // instantiate empty sha512 hash\n this.hash = sha512_1.sha512.create();\n }\n static half(input) {\n return new Sha512().add(input).first256();\n }\n add(bytes) {\n this.hash.update(bytes);\n return this;\n }\n addU32(i) {\n const buffer = new Uint8Array(4);\n new DataView(buffer.buffer).setUint32(0, i);\n return this.add(buffer);\n }\n finish() {\n return this.hash.digest();\n }\n first256() {\n return this.finish().slice(0, 32);\n }\n first256BigInt() {\n return (0, utils_1.bytesToNumberBE)(this.first256());\n }\n}\nexports.default = Sha512;\n//# sourceMappingURL=Sha512.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.accountPublicFromPublicGenerator = exports.derivePrivateKey = void 0;\nconst secp256k1_1 = require(\"@noble/curves/secp256k1\");\nconst Sha512_1 = __importDefault(require(\"../../utils/Sha512\"));\nconst ZERO = BigInt(0);\nfunction deriveScalar(bytes, discrim) {\n const order = secp256k1_1.secp256k1.CURVE.n;\n for (let i = 0; i <= 4294967295; i++) {\n // We hash the bytes to find a 256-bit number, looping until we are sure it\n // is less than the order of the curve.\n const hasher = new Sha512_1.default().add(bytes);\n // If the optional discriminator index was passed in, update the hash.\n if (discrim !== undefined) {\n hasher.addU32(discrim);\n }\n hasher.addU32(i);\n const key = hasher.first256BigInt();\n /* istanbul ignore else */\n if (key > ZERO && key < order) {\n return key;\n }\n }\n // This error is practically impossible to reach.\n // The order of the curve describes the (finite) amount of points on the curve\n // https://github.com/indutny/elliptic/blob/master/lib/elliptic/curves.js#L182\n // How often will an (essentially) random number generated by Sha512 be larger than that?\n // There's 2^32 chances (the for loop) to get a number smaller than the order,\n // and it's rare that you'll even get past the first loop iteration.\n // Note that in TypeScript we actually need the throw, otherwise the function signature would be bigint | undefined\n //\n /* istanbul ignore next */\n throw new Error('impossible unicorn ;)');\n}\n/**\n * @param seed - Bytes.\n * @param [opts] - Object.\n * @param [opts.accountIndex=0] - The account number to generate.\n * @param [opts.validator=false] - Generate root key-pair,\n * as used by validators.\n * @returns {bigint} 256 bit scalar value.\n *\n */\nfunction derivePrivateKey(seed, opts = {}) {\n const root = opts.validator;\n const order = secp256k1_1.secp256k1.CURVE.n;\n // This private generator represents the `root` private key, and is what's\n // used by validators for signing when a keypair is generated from a seed.\n const privateGen = deriveScalar(seed);\n if (root) {\n // As returned by validation_create for a given seed\n return privateGen;\n }\n const publicGen = secp256k1_1.secp256k1.ProjectivePoint.BASE.multiply(privateGen).toRawBytes(true);\n // A seed can generate many keypairs as a function of the seed and a uint32.\n // Almost everyone just uses the first account, `0`.\n const accountIndex = opts.accountIndex || 0;\n return (deriveScalar(publicGen, accountIndex) + privateGen) % order;\n}\nexports.derivePrivateKey = derivePrivateKey;\nfunction accountPublicFromPublicGenerator(publicGenBytes) {\n const rootPubPoint = secp256k1_1.secp256k1.ProjectivePoint.fromHex(publicGenBytes);\n const scalar = deriveScalar(publicGenBytes, 0);\n const point = secp256k1_1.secp256k1.ProjectivePoint.BASE.multiply(scalar);\n const offset = rootPubPoint.add(point);\n return offset.toRawBytes(true);\n}\nexports.accountPublicFromPublicGenerator = accountPublicFromPublicGenerator;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assertHelper = {\n ok(cond, message) {\n if (!cond) {\n throw new Error(message);\n }\n },\n};\nexports.default = assertHelper;\n//# sourceMappingURL=assert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAlgorithmFromPrivateKey = exports.getAlgorithmFromPublicKey = exports.getAlgorithmFromKey = void 0;\nvar Prefix;\n(function (Prefix) {\n Prefix[Prefix[\"NONE\"] = -1] = \"NONE\";\n Prefix[Prefix[\"ED25519\"] = 237] = \"ED25519\";\n Prefix[Prefix[\"SECP256K1_PUB_X\"] = 2] = \"SECP256K1_PUB_X\";\n Prefix[Prefix[\"SECP256K1_PUB_X_ODD_Y\"] = 3] = \"SECP256K1_PUB_X_ODD_Y\";\n Prefix[Prefix[\"SECP256K1_PUB_XY\"] = 4] = \"SECP256K1_PUB_XY\";\n Prefix[Prefix[\"SECP256K1_PRIVATE\"] = 0] = \"SECP256K1_PRIVATE\";\n})(Prefix || (Prefix = {}));\n/**\n * | Curve | Type | Prefix | Length | Description | Algorithm |\n * |-----------|-------------|:------:|:------:|-------------------------------------------------------|----------------:|\n * | ed25519 | Private | 0xED | 33 | prefix + Uint256LE (0 < n < order ) | ed25519 |\n * | ed25519 | Public | 0xED | 33 | prefix + 32 y-bytes | ed25519 |\n * | secp256k1 | Public (1) | 0x02 | 33 | prefix + 32 x-bytes | ecdsa-secp256k1 |\n * | secp256k1 | Public (2) | 0x03 | 33 | prefix + 32 x-bytes (y is odd) | ecdsa-secp256k1 |\n * | secp256k1 | Public (3) | 0x04 | 65 | prefix + 32 x-bytes + 32 y-bytes | ecdsa-secp256k1 |\n * | secp256k1 | Private (1) | None | 32 | Uint256BE (0 < n < order) | ecdsa-secp256k1 |\n * | secp256k1 | Private (2) | 0x00 | 33 | prefix + Uint256BE (0 < n < order) | ecdsa-secp256k1 |\n *\n * Note: The 0x00 prefix for secpk256k1 Private (2) essentially 0 pads the number\n * and the interpreted number is the same as 32 bytes.\n */\nconst KEY_TYPES = {\n [`private_${Prefix.NONE}_32`]: 'ecdsa-secp256k1',\n [`private_${Prefix.SECP256K1_PRIVATE}_33`]: 'ecdsa-secp256k1',\n [`private_${Prefix.ED25519}_33`]: 'ed25519',\n [`public_${Prefix.ED25519}_33`]: 'ed25519',\n [`public_${Prefix.SECP256K1_PUB_X}_33`]: 'ecdsa-secp256k1',\n [`public_${Prefix.SECP256K1_PUB_X_ODD_Y}_33`]: 'ecdsa-secp256k1',\n [`public_${Prefix.SECP256K1_PUB_XY}_65`]: 'ecdsa-secp256k1',\n};\nfunction getKeyInfo(key) {\n return {\n prefix: key.length < 2 ? Prefix.NONE : parseInt(key.slice(0, 2), 16),\n len: key.length / 2,\n };\n}\nfunction prefixRepr(prefix) {\n return prefix === Prefix.NONE\n ? 'None'\n : `0x${prefix.toString(16).padStart(2, '0')}`;\n}\nfunction getValidFormatsTable(type) {\n // No need overkill with renderTable method\n const padding = 2;\n const colWidth = {\n algorithm: 'ecdsa-secp256k1'.length + padding,\n prefix: '0x00'.length + padding,\n };\n return Object.entries(KEY_TYPES)\n .filter(([key]) => key.startsWith(type))\n .map(([key, algorithm]) => {\n const [, prefix, length] = key.split('_');\n const paddedAlgo = algorithm.padEnd(colWidth.algorithm);\n const paddedPrefix = prefixRepr(Number(prefix)).padEnd(colWidth.prefix);\n return `${paddedAlgo} - Prefix: ${paddedPrefix} Length: ${length} bytes`;\n })\n .join('\\n');\n}\nfunction keyError({ key, type, prefix, len, }) {\n const validFormats = getValidFormatsTable(type);\n return `invalid_key:\n\nType: ${type}\nKey: ${key}\nPrefix: ${prefixRepr(prefix)} \nLength: ${len} bytes\n\nAcceptable ${type} formats are:\n${validFormats}\n`;\n}\n/**\n * Determines the algorithm associated with a given key (public/private).\n *\n * @param key - hexadecimal string representation of the key.\n * @param type - whether expected key is public or private\n * @returns Algorithm algorithm for signing/verifying\n * @throws Error when key is invalid\n */\nfunction getAlgorithmFromKey(key, type) {\n const { prefix, len } = getKeyInfo(key);\n // Special case back compat support for no prefix\n const usedPrefix = type === 'private' && len === 32 ? Prefix.NONE : prefix;\n const algorithm = KEY_TYPES[`${type}_${usedPrefix}_${len}`];\n if (!algorithm) {\n throw new Error(keyError({ key, type, len, prefix: usedPrefix }));\n }\n return algorithm;\n}\nexports.getAlgorithmFromKey = getAlgorithmFromKey;\nfunction getAlgorithmFromPublicKey(key) {\n return getAlgorithmFromKey(key, 'public');\n}\nexports.getAlgorithmFromPublicKey = getAlgorithmFromPublicKey;\nfunction getAlgorithmFromPrivateKey(key) {\n return getAlgorithmFromKey(key, 'private');\n}\nexports.getAlgorithmFromPrivateKey = getAlgorithmFromPrivateKey;\n//# sourceMappingURL=getAlgorithmFromKey.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"@noble/curves/abstract/utils\");\nconst secp256k1_1 = require(\"@noble/curves/secp256k1\");\nconst utils_2 = require(\"@xrplf/isomorphic/utils\");\nconst utils_3 = require(\"./utils\");\nconst assert_1 = __importDefault(require(\"../../utils/assert\"));\nconst Sha512_1 = __importDefault(require(\"../../utils/Sha512\"));\nconst SECP256K1_PREFIX = '00';\nconst secp256k1 = {\n deriveKeypair(entropy, options) {\n const derived = (0, utils_3.derivePrivateKey)(entropy, options);\n const privateKey = SECP256K1_PREFIX + (0, utils_2.bytesToHex)((0, utils_1.numberToBytesBE)(derived, 32));\n const publicKey = (0, utils_2.bytesToHex)(secp256k1_1.secp256k1.getPublicKey(derived, true));\n return { privateKey, publicKey };\n },\n sign(message, privateKey) {\n // Some callers pass the privateKey with the prefix, others without.\n // @noble/curves will throw if the key is not exactly 32 bytes, so we\n // normalize it before passing to the sign method.\n assert_1.default.ok((privateKey.length === 66 && privateKey.startsWith(SECP256K1_PREFIX)) ||\n privateKey.length === 64);\n const normedPrivateKey = privateKey.length === 66 ? privateKey.slice(2) : privateKey;\n return secp256k1_1.secp256k1\n .sign(Sha512_1.default.half(message), normedPrivateKey, {\n // \"Canonical\" signatures\n lowS: true,\n // Would fail tests if signatures aren't deterministic\n extraEntropy: undefined,\n })\n .toDERHex(true)\n .toUpperCase();\n },\n verify(message, signature, publicKey) {\n const decoded = secp256k1_1.secp256k1.Signature.fromDER(signature);\n return secp256k1_1.secp256k1.verify(decoded, Sha512_1.default.half(message), publicKey);\n },\n};\nexports.default = secp256k1;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ed25519_1 = require(\"@noble/curves/ed25519\");\nconst utils_1 = require(\"@xrplf/isomorphic/utils\");\nconst assert_1 = __importDefault(require(\"../../utils/assert\"));\nconst Sha512_1 = __importDefault(require(\"../../utils/Sha512\"));\nconst ED_PREFIX = 'ED';\nconst ed25519 = {\n deriveKeypair(entropy) {\n const rawPrivateKey = Sha512_1.default.half(entropy);\n const privateKey = ED_PREFIX + (0, utils_1.bytesToHex)(rawPrivateKey);\n const publicKey = ED_PREFIX + (0, utils_1.bytesToHex)(ed25519_1.ed25519.getPublicKey(rawPrivateKey));\n return { privateKey, publicKey };\n },\n sign(message, privateKey) {\n assert_1.default.ok(message instanceof Uint8Array, 'message must be array of octets');\n assert_1.default.ok(privateKey.length === 66, 'private key must be 33 bytes including prefix');\n return (0, utils_1.bytesToHex)(ed25519_1.ed25519.sign(message, privateKey.slice(2)));\n },\n verify(message, signature, publicKey) {\n // Unlikely to be triggered as these are internal and guarded by getAlgorithmFromKey\n assert_1.default.ok(publicKey.length === 66, 'public key must be 33 bytes including prefix');\n return ed25519_1.ed25519.verify(signature, message, \n // Remove the 0xED prefix\n publicKey.slice(2), \n // By default, set zip215 to false for compatibility reasons.\n // ZIP 215 is a stricter Ed25519 signature verification scheme.\n // However, setting it to false adheres to the more commonly used\n // RFC8032 / NIST186-5 standards, making it compatible with systems\n // like the XRP Ledger.\n { zip215: false });\n },\n};\nexports.default = ed25519;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeSeed = exports.deriveNodeAddress = exports.deriveAddress = exports.verify = exports.sign = exports.deriveKeypair = exports.generateSeed = void 0;\nconst ripple_address_codec_1 = require(\"ripple-address-codec\");\nObject.defineProperty(exports, \"decodeSeed\", { enumerable: true, get: function () { return ripple_address_codec_1.decodeSeed; } });\nconst ripemd160_1 = require(\"@xrplf/isomorphic/ripemd160\");\nconst sha256_1 = require(\"@xrplf/isomorphic/sha256\");\nconst utils_1 = require(\"@xrplf/isomorphic/utils\");\nconst utils_2 = require(\"./signing-schemes/secp256k1/utils\");\nconst Sha512_1 = __importDefault(require(\"./utils/Sha512\"));\nconst assert_1 = __importDefault(require(\"./utils/assert\"));\nconst getAlgorithmFromKey_1 = require(\"./utils/getAlgorithmFromKey\");\nconst secp256k1_1 = __importDefault(require(\"./signing-schemes/secp256k1\"));\nconst ed25519_1 = __importDefault(require(\"./signing-schemes/ed25519\"));\nfunction getSigningScheme(algorithm) {\n const schemes = { 'ecdsa-secp256k1': secp256k1_1.default, ed25519: ed25519_1.default };\n return schemes[algorithm];\n}\nfunction generateSeed(options = {}) {\n assert_1.default.ok(!options.entropy || options.entropy.length >= 16, 'entropy too short');\n const entropy = options.entropy\n ? options.entropy.slice(0, 16)\n : (0, utils_1.randomBytes)(16);\n const type = options.algorithm === 'ed25519' ? 'ed25519' : 'secp256k1';\n return (0, ripple_address_codec_1.encodeSeed)(entropy, type);\n}\nexports.generateSeed = generateSeed;\nfunction deriveKeypair(seed, options) {\n var _a;\n const decoded = (0, ripple_address_codec_1.decodeSeed)(seed);\n const proposedAlgorithm = (_a = options === null || options === void 0 ? void 0 : options.algorithm) !== null && _a !== void 0 ? _a : decoded.type;\n const algorithm = proposedAlgorithm === 'ed25519' ? 'ed25519' : 'ecdsa-secp256k1';\n const scheme = getSigningScheme(algorithm);\n const keypair = scheme.deriveKeypair(decoded.bytes, options);\n const messageToVerify = Sha512_1.default.half('This test message should verify.');\n const signature = scheme.sign(messageToVerify, keypair.privateKey);\n /* istanbul ignore if */\n if (!scheme.verify(messageToVerify, signature, keypair.publicKey)) {\n throw new Error('derived keypair did not generate verifiable signature');\n }\n return keypair;\n}\nexports.deriveKeypair = deriveKeypair;\nfunction sign(messageHex, privateKey) {\n const algorithm = (0, getAlgorithmFromKey_1.getAlgorithmFromPrivateKey)(privateKey);\n return getSigningScheme(algorithm).sign((0, utils_1.hexToBytes)(messageHex), privateKey);\n}\nexports.sign = sign;\nfunction verify(messageHex, signature, publicKey) {\n const algorithm = (0, getAlgorithmFromKey_1.getAlgorithmFromPublicKey)(publicKey);\n return getSigningScheme(algorithm).verify((0, utils_1.hexToBytes)(messageHex), signature, publicKey);\n}\nexports.verify = verify;\nfunction computePublicKeyHash(publicKeyBytes) {\n return (0, ripemd160_1.ripemd160)((0, sha256_1.sha256)(publicKeyBytes));\n}\nfunction deriveAddressFromBytes(publicKeyBytes) {\n return (0, ripple_address_codec_1.encodeAccountID)(computePublicKeyHash(publicKeyBytes));\n}\nfunction deriveAddress(publicKey) {\n return deriveAddressFromBytes((0, utils_1.hexToBytes)(publicKey));\n}\nexports.deriveAddress = deriveAddress;\nfunction deriveNodeAddress(publicKey) {\n const generatorBytes = (0, ripple_address_codec_1.decodeNodePublic)(publicKey);\n const accountPublicBytes = (0, utils_2.accountPublicFromPublicGenerator)(generatorBytes);\n return deriveAddressFromBytes(accountPublicBytes);\n}\nexports.deriveNodeAddress = deriveNodeAddress;\n//# sourceMappingURL=index.js.map","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { AccountTxTransaction, Client } from \"xrpl\";\nimport { verify } from \"ripple-keypairs\";\n\nexport function verifyXRPL(\n message: string,\n publicKey: string,\n proof: string\n): boolean {\n return verify(Buffer.from(message).toString(\"hex\"), proof, publicKey);\n}\n\nexport const xrplTestnetWs = [\n \"wss://s.altnet.rippletest.net:51233\",\n \"wss://testnet.xrpl-labs.com/\",\n];\n\nexport const xrplMainnetWs = [\n \"wss://s1.ripple.com\",\n \"wss://xrplcluster.com/\", // full node\n \"wss://s2.ripple.com/\",\n];\n\n// If the public key is not provided, we need to get it directly\nasync function getPublicKey(\n address: string,\n isTest?: boolean\n): Promise<string | undefined> {\n const servers = isTest ? xrplTestnetWs : xrplMainnetWs;\n\n for (const server of servers) {\n try {\n const client = new Client(server);\n await client.connect();\n\n const response = await client.request({\n command: \"account_tx\",\n account: address,\n binary: false,\n limit: 2,\n forward: false,\n });\n\n await client.disconnect();\n return getSigningPubkeyFromLatestTx(response.result?.transactions);\n } catch (error) {\n let errorMessage = \"Connection to XRPL server failed\";\n if (error instanceof Error) {\n errorMessage += `: ${error.message}`;\n }\n console.error(errorMessage);\n // Continue to next server\n }\n }\n}\n\nfunction getSigningPubkeyFromLatestTx(\n latestTx: AccountTxTransaction[]\n): string {\n for (let i = 0; i < latestTx.length; i++) {\n // Check if the Account in the .tx is the address derived from the pubkey\n const signingPubKey = latestTx[i]?.tx_json?.SigningPubKey ?? \"0x\";\n // TODO: https://github.com/Cypher-Laboratory/xrpl-publickey-getter/blob/main/src/pubKeyGetter.ts#L98\n // Check the public key matches the address properly\n return signingPubKey;\n }\n throw new Error(\"No valid pubkey found in the latest transactions\");\n}\n\nexport async function verifyPersonalSignXRPL(\n proof: SignatureProof,\n publicKey?: string,\n isTest?: boolean\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"xrpl\") return { ...proof, status: ProofStatus.FAILED };\n\n if (!publicKey) {\n publicKey = await getPublicKey(address, isTest);\n }\n\n if (!publicKey) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n const verified = verifyXRPL(proof.attestation, publicKey, proof.proof);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\n// Concordium network configurations\ninterface ConcordiumNetwork {\n grpcUrl: string;\n walletProxyUrl: string;\n}\n\nconst NETWORKS: Record<string, ConcordiumNetwork> = {\n testnet: {\n grpcUrl: \"https://grpc.testnet.concordium.com:20000\",\n walletProxyUrl: \"https://wallet-proxy.testnet.concordium.com\"\n },\n mainnet: {\n grpcUrl: \"https://grpc.mainnet.concordium.com:20000\", \n walletProxyUrl: \"https://wallet-proxy.mainnet.concordium.software\"\n }\n};\n\n// Configuration options for verification\ninterface ConcordiumVerificationOptions {\n network?: \"testnet\" | \"mainnet\";\n timeout?: number; // timeout in milliseconds\n retries?: number; // number of retry attempts\n testMode?: boolean; // skip network calls for testing\n}\n\n// Signature object type\ninterface ConcordiumSignature {\n [key: string]: string | ConcordiumSignature;\n}\n\n// Default options\nconst DEFAULT_OPTIONS: Required<ConcordiumVerificationOptions> = {\n network: \"testnet\",\n timeout: 50000, // 10 seconds\n retries: 3,\n testMode: true\n};\n\n/**\n * Verifies a Concordium signature proof with proper cryptographic validation\n * @param proof The signature proof to verify\n * @param options Optional configuration for network and timeouts\n * @returns Promise resolving to the proof with updated status\n */\nexport const verifyConcordiumSignature = async (\n proof: SignatureProof,\n options: ConcordiumVerificationOptions = {}\n): Promise<SignatureProof> => {\n // Merge with default options\n const config = { ...DEFAULT_OPTIONS, ...options };\n \n // Parse and validate address format\n const [ns, networkId, address] = proof.address.split(/:/);\n if (ns !== \"ccd\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Determine network from address or use config\n let network = config.network;\n if (networkId) {\n // If network ID is specified in address, use it to determine network\n network = networkId.includes(\"testnet\") ? \"testnet\" : \"mainnet\";\n }\n\n try {\n // Validate signature format and extract signature data\n let signature: ConcordiumSignature;\n try {\n signature = JSON.parse(proof.proof) as ConcordiumSignature;\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Basic signature structure validation\n if (!signature || typeof signature !== 'object' || Object.keys(signature).length === 0) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // In test mode, skip network validation but still validate signature structure\n if (config.testMode) {\n // Perform signature format validation\n try {\n const signatureHex = convertSignatureToHex(signature);\n \n // Validate signature format\n if (!signatureHex || signatureHex.length < 64 || !/^[0-9a-fA-F]+$/.test(signatureHex)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n return { ...proof, status: ProofStatus.VERIFIED };\n \n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n }\n\n // Production mode: validate account existence and get account info with retry logic\n const accountInfo = await retryWithTimeout(\n () => validateAccountAndGetInfo(address, network, config.timeout),\n config.retries\n );\n\n if (!accountInfo) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Perform cryptographic signature verification\n const isValidSignature = await retryWithTimeout(\n () => verifyCryptographicSignature(\n signature,\n config.timeout,\n // proof.attestation,\n // address,\n // network\n ),\n config.retries\n );\n\n if (isValidSignature) {\n return { ...proof, status: ProofStatus.VERIFIED };\n } else {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n};\n\n/**\n * Validates that a Concordium account exists and retrieves account information\n */\nasync function validateAccountAndGetInfo(\n address: string,\n network: \"testnet\" | \"mainnet\",\n timeout: number\n): Promise<boolean> {\n const networkConfig = NETWORKS[network];\n \n try {\n // Check account existence via wallet proxy (faster than gRPC for existence check)\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(\n `${networkConfig.walletProxyUrl}/v0/accEncryptionKey/${address}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'User-Agent': 'verify-proof/1.6.0'\n },\n signal: controller.signal\n }\n );\n\n clearTimeout(timeoutId);\n return response.ok;\n\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Account validation timeout after ${timeout}ms`);\n }\n throw error;\n }\n}\n\n/**\n * Performs cryptographic verification of the signature using Concordium SDK\n * For production use, this would use the actual Concordium SDK verification methods\n * Currently implementing a comprehensive validation approach\n */\nasync function verifyCryptographicSignature(\n signature: ConcordiumSignature,\n timeout: number,\n // message?: string, // intentionally left out for now. Will enable for mainnet.\n // address?: string,\n // network?: \"testnet\" | \"mainnet\"\n): Promise<boolean> {\n try {\n // Convert signature format for verification\n const signatureHex = convertSignatureToHex(signature);\n \n // For production, implement proper signature verification\n // This is a placeholder for the actual SDK verification\n // The exact method depends on the available SDK version\n \n // Validate that we have a proper signature hex string\n if (!signatureHex || signatureHex.length < 64) {\n return false;\n }\n\n // For now, return true if we have a valid signature structure\n // In production, this should call the actual SDK verification method\n // Example: \n // const client = new ConcordiumGRPCNodeClient(networkConfig.grpcUrl, 20000, credentials.createInsecure(), { timeout });\n // const result = await client.verifyAccountSignature(address, message, signatureHex);\n \n // Placeholder validation - replace with actual SDK call\n return signatureHex.length >= 64 && /^[0-9a-fA-F]+$/.test(signatureHex);\n\n } catch (error) {\n // Handle specific error types\n if (error instanceof Error) {\n if (error.message?.includes(\"timeout\")) {\n throw new Error(`Signature verification timeout after ${timeout}ms`);\n }\n \n if (error.message?.includes(\"UNAVAILABLE\")) {\n throw new Error(\"Concordium node unavailable\");\n }\n\n if (error.message?.includes(\"NOT_FOUND\")) {\n return false;\n }\n }\n\n throw error;\n }\n}\n\n/**\n * Converts the signature object to the format expected by Concordium SDK\n */\nfunction convertSignatureToHex(signature: ConcordiumSignature): string {\n try {\n // Handle different signature formats\n if (typeof signature === 'string') {\n return signature;\n }\n\n // Handle nested signature object format (common from wallet)\n if (signature && typeof signature === 'object') {\n // Extract signature from nested structure\n const extractSignature = (obj: ConcordiumSignature): string | null => {\n if (typeof obj === 'string') {\n return obj;\n }\n \n if (obj && typeof obj === 'object') {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (typeof value === 'string') {\n return value;\n } else if (typeof value === 'object') {\n const result = extractSignature(value);\n if (result) return result;\n }\n }\n }\n }\n \n return null;\n };\n\n const extractedSig = extractSignature(signature);\n if (extractedSig) {\n return extractedSig;\n }\n }\n\n throw new Error(\"Unable to extract signature from object\");\n \n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Invalid signature format: ${errorMessage}`);\n }\n}\n\n/**\n * Utility function to retry operations with exponential backoff\n */\nasync function retryWithTimeout<T>(\n operation: () => Promise<T>,\n maxRetries: number\n): Promise<T> {\n let lastError: Error = new Error(\"No attempts made\");\n \n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n const errorInstance = error instanceof Error ? error : new Error(String(error));\n lastError = errorInstance;\n \n // Don't retry on certain types of errors\n if (\n errorInstance.message?.includes(\"Invalid signature\") ||\n errorInstance.message?.includes(\"Account not found\")\n ) {\n throw errorInstance;\n }\n\n // Don't retry on the last attempt\n if (attempt === maxRetries) {\n break;\n }\n\n // Exponential backoff: wait 2^attempt * 1000ms\n const delay = Math.min(Math.pow(2, attempt) * 1000, 5000);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import {\n type OwnershipProof,\n SignatureProof,\n DeclarationProof,\n ScreenshotProof,\n ProofTypes,\n ProofStatus,\n} from \"@notabene/javascript-sdk\";\nimport { verifyBTCSignature } from \"./bitcoin\";\nimport { verifyPersonalSignEIP191 } from \"./eth\";\nimport { verifySolanaSignature, verifySolanaSIWS } from \"./solana\";\nimport { verifyPersonalSignTIP191 } from \"./tron\";\nimport { verifyCIP8Signature } from \"./cardano\";\nimport { verifyPersonalSignXRPL } from \"./xrpl\";\nimport { verifyStellarSignature } from \"./xlm\";\nimport { verifyConcordiumSignature } from \"./concordium\";\n\nexport async function verifyProof(\n proof: OwnershipProof,\n publicKey?: string,\n): Promise<OwnershipProof> {\n switch (proof.type) {\n case ProofTypes.SelfDeclaration:\n return {\n ...proof,\n status: (proof as DeclarationProof).confirmed\n ? ProofStatus.VERIFIED\n : ProofStatus.FAILED,\n };\n case ProofTypes.Screenshot:\n return {\n ...proof,\n status: (proof as ScreenshotProof).url\n ? ProofStatus.FLAGGED\n : ProofStatus.FAILED,\n };\n case ProofTypes.CIP8:\n return verifyCIP8Signature(proof as SignatureProof);\n case ProofTypes.EIP191:\n return verifyPersonalSignEIP191(proof as SignatureProof);\n case ProofTypes.ED25519:\n return verifySolanaSignature(proof as SignatureProof);\n case ProofTypes.SOL_SIWX:\n return verifySolanaSIWS(proof as SignatureProof);\n case ProofTypes.XRP_ED25519:\n return verifyPersonalSignXRPL(proof as SignatureProof, publicKey);\n case ProofTypes.XLM_ED25519:\n return verifyStellarSignature(proof as SignatureProof);\n case ProofTypes.CONCORDIUM: {\n return verifyConcordiumSignature(proof as SignatureProof);\n }\n case ProofTypes.EIP712:\n case ProofTypes.BIP137:\n case ProofTypes.BIP322:\n return verifyBTCSignature(proof as SignatureProof);\n case ProofTypes.TIP191:\n return verifyPersonalSignTIP191(proof as SignatureProof);\n case ProofTypes.BIP137_XPUB:\n case ProofTypes.MicroTransfer:\n }\n return proof;\n}\n","import verifyDataSignature from \"@cardano-foundation/cardano-verify-datasignature\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\nexport async function verifyCIP8Signature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n const key =\n proof.chainSpecificData && \"cardanoCoseKey\" in proof.chainSpecificData\n ? proof.chainSpecificData.cardanoCoseKey\n : null;\n\n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n const verified = verifyDataSignature(\n proof.proof,\n key,\n proof.attestation,\n address\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Secp256k1, Hex, PersonalMessage, Signature, Address } from \"ox\";\n\nexport function verifyEIP191(\n address: Hex.Hex,\n message: string,\n proof: Hex.Hex,\n): boolean {\n try {\n const payload = PersonalMessage.getSignPayload(Hex.fromString(message));\n const signature = Signature.fromHex(proof);\n const publicKey = Secp256k1.recoverPublicKey({ payload, signature });\n const recovered = Address.checksum(Address.fromPublicKey(publicKey));\n return recovered.toString() === Address.checksum(address);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n}\n\nexport async function verifyPersonalSignEIP191(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"eip155\") return { ...proof, status: ProofStatus.FAILED };\n\n const verified = verifyEIP191(\n address as Hex.Hex,\n proof.attestation,\n proof.proof as Hex.Hex,\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Keypair } from \"@stellar/stellar-sdk\";\n\nexport function verifyStellarSignature(\n proof: SignatureProof,\n): SignatureProof {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"stellar\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const keypair = Keypair.fromPublicKey(address);\n const messageBuffer = Buffer.from(proof.attestation, \"utf-8\");\n const signatureBuffer = Buffer.from(proof.proof, \"base64\");\n\n const verified = keypair.verify(messageBuffer, signatureBuffer);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch (error) {\n console.error(error);\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Secp256k1, Hex, Signature, Hash, Bytes, PublicKey } from \"ox\";\nimport { base58 } from \"@scure/base\";\n\nexport function verifyTIP191(\n address: string,\n message: string,\n proof: Hex.Hex,\n): boolean {\n try {\n const payload = getSignPayload(Hex.fromString(message));\n const signature = Signature.fromHex(proof);\n const publicKey = Secp256k1.recoverPublicKey({ payload, signature });\n const hex: Hex.Hex = `0x41${Hash.keccak256(\n `0x${PublicKey.toHex(publicKey).slice(4)}`,\n ).substring(26)}`;\n const bytes = Bytes.from(hex);\n const checksum = Bytes.from(Hash.sha256(Hash.sha256(hex))).slice(0, 4);\n const checked = Bytes.concat(bytes, checksum);\n const b58 = base58.encode(checked);\n return b58 === address;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n}\n\nexport async function verifyPersonalSignTIP191(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"tron\") return { ...proof, status: ProofStatus.FAILED };\n\n const verified = verifyTIP191(\n address as Hex.Hex,\n proof.attestation,\n proof.proof as Hex.Hex,\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nexport function encode(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n const message = Hex.from(data);\n return Hex.concat(\n // Personal Sign Format: `0x19 ‖ \"Ethereum Signed Message:\\n\" ‖ message.length ‖ message`\n \"0x19\",\n Hex.fromString(\"TRON Signed Message:\\n\" + Hex.size(message)),\n message,\n );\n}\nexport function getSignPayload(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n return Hash.keccak256(encode(data));\n}\n"],"names":["SEGWIT_TYPES","DerivationMode","CHAIN_CONFIGS","bitcoin","messagePrefix","pubKeyHashVersion","scriptHashVersion","bech32Prefix","isTestnet","bitcoincash","litecoin","dogecoin","dash","zcash","Uint8Array","from","testnet","verifyBIP322","address","proof","_extends","status","Verifier","verifySignature","attestation","ProofStatus","VERIFIED","FAILED","verifyBIP137","chainConfig","segwit","Boolean","SEGWIT","NATIVE","includes","match","LEGACY","DOGECOIN","BCH","Error","concat","getDerivationMode","verified","checkSegwitAlways","_decodeSignature","sigbytes","base64","decode","length","flagByte","compressed","recovery","signature","secp256k1","Signature","fromCompact","slice","segwitType","P2WPKH","P2SH_P2WPKH","undefined","addRecoveryBit","decodeSignature","buffer","hash","prefix","TextEncoder","encode","message","encodeLength","byteLength","set","Hash","sha256","hash256","magicHash","publicKeyHash","recoverPublicKey","toRawBytes","ripemd160","actual","startsWith","encodeBase58AddressFormat","encodeBech32Address","e","verify","base58check","createBase58check","version","prefixBytes","of","payload","bwords","bech32","toWords","unshift","parseResources","lines","startIndex","resources","lineIndex","_lines$lineIndex","push","substring","Object","defineProperty","exports","value","crypto","globalThis","isBytes","a","ArrayBuffer","isView","constructor","name","anumber","n","Number","isSafeInteger","abytes","b","lengths","byteSwap","word","byteSwap32","arr","i","wrapXOFConstructorWithOpts","wrapConstructorWithOpts","wrapConstructor","nextTick","swap32IfBE","swap8IfBE","isLE","ahash","h","create","outputLen","blockLen","aexists","instance","checkFinished","destroyed","finished","aoutput","out","min","u8","byteOffset","u32","Uint32Array","Math","floor","clean","arrays","fill","createView","DataView","rotr","shift","rotl","bytesToHex","bytes","hasHexBuiltin","toHex","hex","hexes","hexToBytes","fromHex","hl","al","array","ai","hi","n1","asciiToBase16","charCodeAt","n2","asyncLoop","async","iters","tick","cb","ts","Date","now","diff","utf8ToBytes","bytesToUtf8","TextDecoder","toBytes","kdfInputToBytes","data","concatBytes","sum","res","pad","checkOpts","defaults","opts","toString","call","assign","createHasher","createOptHasher","createXOFer","randomBytes","bytesLength","crypto_1","getRandomValues","byteSwapIfBE","u","Array","_","padStart","asciis","_0","_9","A","F","f","ch","str","hashCons","hashC","msg","update","digest","tmp","equal","HEX_REGEX","views","utils_1","buf1","buf2","dv1","Int8Array","dv2","__createBinding","this","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","__exportStar","p","prototype","hasOwnProperty","hexToString","toUpperCase","shared_1","test","j","hexByte","byte","parseInt","isNaN","encoding","stringToHex","string","setBigUint64","view","_32n","BigInt","_u32_max","wh","wl","l","setUint32","SHA512_IV","SHA224_IV","SHA256_IV","HashMD","Chi","c","Maj","utils_ts_1","padOffset","super","pos","len","take","dataView","process","subarray","roundClean","digestInto","oview","outLen","state","destroy","_cloneInto","to","clone","SHA384_IV","toBig","shrSL","rotrSL","rotrSH","rotrBH","rotr32L","rotlSL","rotlSH","rotlBH","add5L","add4L","add4H","add3H","add","fromBig","split","U32_MASK64","le","lst","Ah","Al","shrSH","_l","s","rotrBL","rotr32H","_h","rotlBL","Bh","Bl","add3L","Cl","low","Ch","Dl","Dh","El","add5H","Eh","default","sha512_224","sha512_256","sha384","sha512","sha224","SHA512_256","SHA512_224","SHA384","SHA512","SHA224","SHA256","SHA256_K","SHA256_W","_md_ts_1","B","C","D","E","G","H","offset","getUint32","W15","W2","s0","s1","T1","T2","K512","u64","map","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","Fh","Fl","Gh","Gl","Hh","Hl","W15h","W15l","s0h","s0l","W2h","W2l","s1h","s1l","SUMl","SUMh","sigma1h","sigma1l","CHIh","T1ll","T1h","T1l","sigma0h","sigma0l","MAJh","MAJl","All","T224_IV","T256_IV","sha2_ts_1","normalizeInput_1","__importDefault","mod","input","isArray","chash","wrapped","wrapNoble_1","require$$0","sha256_1","concatArgs","arrayEqual","arr1","arr2","every","index","args","flatMap","arg","isValidClassicAddress","decodeAccountPublic","encodeAccountPublic","encodeNodePublic","decodeNodePublic","decodeAddress","decodeAccountID","encodeAddress","encodeAccountID","decodeSeed","encodeSeed","codec","ED25519_SEED","codecOptions","codecWithXrpAlphabet","options","_sha256","_codec","base_1","base58xrp","_encodeVersioned","versions","expectedLength","base58string","_a","types","versionTypes","withoutSum","decodeChecked","payloadLength","versionBytes","type","encodeChecked","check","_encodeRaw","intArray","_decodeRaw","_verifyCheckSum","checkByteLength","computed","checksum","accountId","entropy","seed","_error","isValidXAddress","xAddressToClassicAddress","encodeXAddress","classicAddressToXAddress","xrp_codec_1","PREFIX_BYTES","main","tag","theTag","decodeXAddress","xAddress","decoded","buf","decodedPrefix","isUint8ArrayForTestAddress","flag","tagFromUint8Array","classicAddress","md5","MD5","SHA1","SHA1_IV","SHA1_W","K","T","sha1","p32","pow","abs","sin","MD5_IV","MD5_W","g","Rho160","Id160","Pi160","idxLR","idxL","idxR","shifts160","shiftsL160","idx","shiftsR160","Kl160","Kr160","ripemd_f","group","x","y","z","BUF_160","RIPEMD160","h0","h1","h2","h3","h4","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","legacy_ts_1","ripemd160_1","sha512_1","Sha512","half","first256","addU32","finish","first256BigInt","bytesToNumberBE","accountPublicFromPublicGenerator","derivePrivateKey","Sha512_1","ZERO","deriveScalar","discrim","order","secp256k1_1","CURVE","hasher","key","root","validator","privateGen","ProjectivePoint","BASE","multiply","accountIndex","publicGenBytes","rootPubPoint","scalar","point","ok","cond","Prefix","getAlgorithmFromPrivateKey","getAlgorithmFromPublicKey","getAlgorithmFromKey","KEY_TYPES","NONE","SECP256K1_PRIVATE","ED25519","SECP256K1_PUB_X","SECP256K1_PUB_X_ODD_Y","SECP256K1_PUB_XY","prefixRepr","getKeyInfo","usedPrefix","algorithm","validFormats","entries","filter","padEnd","join","getValidFormatsTable","keyError","assert_1","require$$1","deriveKeypair","derived","utils_3","privateKey","utils_2","numberToBytesBE","publicKey","getPublicKey","sign","normedPrivateKey","lowS","extraEntropy","toDERHex","fromDER","rawPrivateKey","ed25519_1","ed25519","zip215","deriveNodeAddress","generateSeed","ripple_address_codec_1","require$$2","require$$3","getSigningScheme","deriveAddressFromBytes","publicKeyBytes","computePublicKeyHash","scheme","keypair","messageToVerify","messageHex","getAlgorithmFromKey_1","deriveAddress","generatorBytes","pact","_Pact","_settle","v","then","bind","observer","result","callback","onFulfilled","onRejected","_this","_isSettledPact","thenable","xrplMainnetWs","retryWithTimeout","operation","maxRetries","_exit","_interrupt","_temp2","_result2","lastError","attempt","_temp","_for","_catch","Promise","resolve","_await$operation","error","_errorInstance$messag","_errorInstance$messag2","errorInstance","String","delay","setTimeout","reject","NETWORKS","grpcUrl","walletProxyUrl","mainnet","DEFAULT_OPTIONS","network","timeout","retries","testMode","convertSignatureToHex","extractSignature","obj","extractedSig","errorMessage","verifyProof","ProofTypes","SelfDeclaration","confirmed","Screenshot","url","FLAGGED","CIP8","_proof$address$split","chainSpecificData","cardanoCoseKey","verifyDataSignature","_unused","verifyCIP8Signature","EIP191","PersonalMessage","getSignPayload","Hex","fromString","Secp256k1","Address","fromPublicKey","verifyEIP191","verifyPersonalSignEIP191","base58","messageBytes","signatureBytes","nacl","detached","verifySolanaSignature","SOL_SIWX","metadata","account","pkObj","keys","sort","signedMessage","smObj","sigObj","messageObj","trim","_unused2","domain","statement","uri","chainId","nonce","issuedAt","expirationTime","notBefore","requestId","isSolanaSignInInput","isSolanaSignInMetadata","signedMessageText","parsedMessage","header","_lines$","domainMatch","parseHeader","statementResult","nextIndex","parseStatement","advancedFields","fieldParsers","line","_step","_iterator","_createForOfIteratorHelperLoose","done","_step$value","parseAdvancedFields","_unused4","parseSIWSMessage","parsed","fieldValidations","inputKey","parsedKey","inputValue","parsedValue","item","_i","_fieldValidations","_fieldValidations$_i","getTime","validateTimestamps","validateSIWSMessage","fields","fieldMappings","formatter","resource","_i2","_fieldMappings","_fieldMappings$_i","formatted","apply","buildFieldLines","createSIWSMessage","_unused3","verifySolanaSIWS","XRP_ED25519","Buffer","verifyXRPL","_forOf","server","client","Client","connect","request","command","binary","limit","forward","response","disconnect","_response$result","_getSigningPubkeyFrom","latestTx","_latestTx$i$tx_json$S","_latestTx$i","tx_json","SigningPubKey","getSigningPubkeyFromLatestTx","transactions","console","_getPublicKey","verifyPersonalSignXRPL","XLM_ED25519","Keypair","messageBuffer","signatureBuffer","verifyStellarSignature","CONCORDIUM","config","networkId","JSON","parse","signatureHex","networkConfig","controller","AbortController","timeoutId","abort","fetch","method","headers","Accept","signal","clearTimeout","validateAccountAndGetInfo","accountInfo","_error$message","_error$message2","_error$message3","verifyCryptographicSignature","isValidSignature","verifyConcordiumSignature","EIP712","BIP137","BIP322","getChainConfig","verifyBTCSignature","TIP191","keccak256","size","PublicKey","Bytes","checked","verifyTIP191","verifyPersonalSignTIP191"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/bitcoin.ts","../src/solana.ts","../node_modules/@noble/hashes/crypto.js","../node_modules/@noble/hashes/utils.js","../node_modules/@xrplf/isomorphic/dist/utils/shared.js","../node_modules/@xrplf/isomorphic/dist/utils/browser.js","../node_modules/@noble/hashes/_md.js","../node_modules/@noble/hashes/_u64.js","../node_modules/@noble/hashes/sha2.js","../node_modules/@noble/hashes/sha256.js","../node_modules/@xrplf/isomorphic/dist/internal/wrapNoble.js","../node_modules/@xrplf/isomorphic/dist/internal/normalizeInput.js","../node_modules/@xrplf/isomorphic/dist/sha256/browser.js","../node_modules/ripple-address-codec/dist/utils.js","../node_modules/ripple-address-codec/dist/xrp-codec.js","../node_modules/ripple-address-codec/dist/index.js","../node_modules/@noble/hashes/legacy.js","../node_modules/@noble/hashes/ripemd160.js","../node_modules/@xrplf/isomorphic/dist/ripemd160/browser.js","../node_modules/@noble/hashes/sha512.js","../node_modules/@xrplf/isomorphic/dist/sha512/browser.js","../node_modules/ripple-keypairs/dist/utils/Sha512.js","../node_modules/ripple-keypairs/dist/signing-schemes/secp256k1/utils.js","../node_modules/ripple-keypairs/dist/utils/assert.js","../node_modules/ripple-keypairs/dist/utils/getAlgorithmFromKey.js","../node_modules/ripple-keypairs/dist/signing-schemes/secp256k1/index.js","../node_modules/ripple-keypairs/dist/signing-schemes/ed25519/index.js","../node_modules/ripple-keypairs/dist/index.js","../src/xrpl.ts","../src/concordium.ts","../node_modules/bech32/dist/index.js","../node_modules/@noble/hashes/esm/utils.js","../node_modules/@noble/hashes/esm/_md.js","../node_modules/@noble/hashes/esm/legacy.js","../node_modules/@noble/hashes/esm/sha2.js","../src/cosmos.ts","../src/index.ts","../src/cardano.ts","../src/eth.ts","../src/xlm.ts","../src/tron.ts"],"sourcesContent":["import {\n ProofStatus,\n ProofTypes,\n SignatureProof,\n} from \"@notabene/javascript-sdk\";\n\nimport { encode as encodeLength } from \"varuint-bitcoin\";\nimport { base64, bech32, createBase58check } from \"@scure/base\";\nimport { Hash } from \"ox\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { SignatureType } from \"@noble/curves/abstract/weierstrass\";\nimport { Verifier } from \"bip322-js\";\n\nenum SEGWIT_TYPES {\n P2WPKH = \"p2wpkh\",\n P2SH_P2WPKH = \"p2sh(p2wpkh)\",\n}\n\ninterface ChainConfig {\n messagePrefix: string;\n pubKeyHashVersion: number | Uint8Array;\n scriptHashVersion: number | Uint8Array;\n bech32Prefix?: string;\n isTestnet?: boolean;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n bitcoin: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n litecoin: {\n messagePrefix: \"\\u0019Litecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x30, // L... or M...\n scriptHashVersion: 0x32, // 3... or M...\n bech32Prefix: \"ltc\",\n isTestnet: false,\n },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1E, // D...\n scriptHashVersion: 0x16, // A...\n isTestnet: false,\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4C, // X...\n scriptHashVersion: 0x10, // 7...\n isTestnet: false,\n },\n zcash: {\n messagePrefix: \"\\u0018Zcash Signed Message:\\n\",\n pubKeyHashVersion: Uint8Array.from([0x1C, 0xB8]), // <-- FIXED\n scriptHashVersion: Uint8Array.from([0x1C, 0xBD]),\n isTestnet: false,\n },\n \n testnet: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x6f, // m or n\n scriptHashVersion: 0xc4, // 2\n bech32Prefix: \"tb\",\n isTestnet: true,\n },\n};\n\nenum DerivationMode {\n LEGACY = \"Legacy\",\n NATIVE = \"Native SegWit\",\n SEGWIT = \"SegWit\",\n P2SH_SEGWIT = \"p2sh\",\n BCH = \"Bitcoin Cash\",\n ETHEREUM = \"Ethereum\",\n DOGECOIN = \"Dogecoin\",\n UNKNOWN = \"Unknown\",\n}\n\nexport async function verifyBTCSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns,, address] = proof.address.split(/:/);\n if (ns !== \"bip122\") return { ...proof, status: ProofStatus.FAILED };\n \n // Map chainId to our chain configuration\n const chainConfig = getChainConfig(address);\n if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };\n\n const isZcash = address.startsWith(\"t1\") || address.startsWith(\"t3\");\n if (isZcash) {\n return verifyBIP137(address, proof, chainConfig);\n }\n\n // Use BIP322 for testnet addresses\n if (chainConfig.isTestnet) {\n return verifyBIP322(address, proof);\n }\n \n try {\n switch (proof.type) {\n case ProofTypes.BIP137:\n return verifyBIP137(address, proof, chainConfig);\n case ProofTypes.BIP322:\n return verifyBIP322(address, proof);\n default:\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n } catch (error) {\n console.error(\"error verifying proof\", error);\n return {\n ...proof,\n status: ProofStatus.FAILED,\n // error: error.message || error,\n };\n }\n}\n\nfunction getChainConfig(address: string): ChainConfig {\n if (address.startsWith(\"1\") || address.startsWith(\"3\") || address.startsWith(\"bc1\")) {\n return CHAIN_CONFIGS[\"bitcoin\"];\n }\n if (address.startsWith(\"t1\") || address.startsWith(\"t3\")) {\n return CHAIN_CONFIGS[\"zcash\"];\n }\n if (address.startsWith(\"L\") || address.startsWith(\"M\") || address.startsWith(\"ltc1\")) {\n return CHAIN_CONFIGS[\"litecoin\"];\n }\n if (address.startsWith(\"D\") || address.startsWith(\"A\")) {\n return CHAIN_CONFIGS[\"dogecoin\"];\n }\n if (address.startsWith(\"X\") || address.startsWith(\"7\")) {\n return CHAIN_CONFIGS[\"dash\"];\n }\n if (address.startsWith(\"q\")) {\n return CHAIN_CONFIGS[\"bitcoincash\"];\n }\n if (address.startsWith(\"tb1\")) {\n return CHAIN_CONFIGS[\"testnet\"];\n }\n\n return CHAIN_CONFIGS[\"bitcoin\"];\n}\n\n\nfunction verifyBIP322(address: string, proof: SignatureProof) {\n const { attestation, proof: signatureProof } = proof;\n const verified = Verifier.verifySignature(\n address,\n attestation,\n signatureProof\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nfunction verifyBIP137(address: string, proof: SignatureProof, chainConfig: ChainConfig) {\n const derivationMode = getDerivationMode(address);\n \n // For legacy addresses (starting with \"1\"), never use SegWit encoding\n // For P2SH addresses (starting with \"3\"), use SegWit encoding if they have bech32 support\n // For native SegWit addresses (bc1, tb1, ltc1), always use SegWit encoding\n const useSegwitEncoding = Boolean(chainConfig.bech32Prefix && \n (derivationMode === DerivationMode.NATIVE || \n (derivationMode === DerivationMode.SEGWIT && !address.startsWith(\"1\"))));\n \n const verified = verify(proof.attestation, address, proof.proof, useSegwitEncoding, chainConfig);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nfunction getDerivationMode(address: string) {\n if (address.match(\"^(bc1|tb1|ltc1).*\")) {\n return DerivationMode.NATIVE;\n } else if (address.match(\"^[32M].*\")) {\n return DerivationMode.SEGWIT;\n } else if (address.match(\"^[1nmL].*\")) {\n return DerivationMode.LEGACY;\n } else if (address.match(\"^(D).*\")) {\n return DerivationMode.DOGECOIN;\n } else if (address.match(\"^(q).*\")) {\n return DerivationMode.BCH;\n } else if (address.match(\"^(t1|t3).*\")) {\n return DerivationMode.LEGACY; // Zcash addresses\n } else if (address.match(\"^[X7].*\")) {\n return DerivationMode.LEGACY; // Dash addresses\n } else {\n throw new Error(\n \"INVALID ADDRESS: \"\n .concat(address)\n .concat(\" is not a valid or a supported address\")\n );\n }\n}\n\ntype DecodedSignature = {\n compressed: boolean;\n segwitType?: SEGWIT_TYPES;\n signature: SignatureType;\n};\n\nfunction decodeSignature(proof: string): DecodedSignature {\n const sigbytes = base64.decode(proof);\n if (sigbytes.length !== 65) throw new Error(\"Invalid signature length\");\n const flagByte = sigbytes[0] - 27;\n if (flagByte > 15 || flagByte < 0) {\n throw new Error(\"Invalid signature parameter\");\n }\n const compressed = !!(flagByte & 12); // Are there cases that aren't compressed?\n const recovery = flagByte & 3;\n const signature = secp256k1.Signature.fromCompact(sigbytes.slice(1));\n\n return {\n compressed,\n segwitType: !(flagByte & 8)\n ? undefined\n : !(flagByte & 4)\n ? SEGWIT_TYPES.P2SH_P2WPKH\n : SEGWIT_TYPES.P2WPKH,\n signature: signature.addRecoveryBit(recovery),\n };\n}\n\nfunction verify(\n attestation: string,\n address: string,\n proof: string,\n checkSegwitAlways: boolean,\n chainConfig: ChainConfig\n) {\n const { compressed, segwitType, signature } = decodeSignature(proof);\n if (checkSegwitAlways && !compressed) {\n throw new Error(\n \"checkSegwitAlways can only be used with a compressed pubkey signature flagbyte\"\n );\n }\n const hash = magicHash(attestation, chainConfig.messagePrefix);\n const publicKey = signature.recoverPublicKey(hash);\n const publicKeyBytes = publicKey.toRawBytes(compressed);\n const publicKeyHash = hash160(publicKeyBytes);\n let actual: string = \"\";\n\n // Special handling for Bitcoin Cash addresses\n if (address.startsWith('q')) {\n // For BCH, we'll compare the public key hash directly since we're getting a CashAddr\n // Convert the CashAddr to legacy format for comparison\n actual = encodeBase58AddressFormat(chainConfig.pubKeyHashVersion, publicKeyHash);\n // Legacy P2PKH addresses in BCH start with '1' just like BTC\n // Source: https://reference.cash/protocol/blockchain/encoding/cashaddr#legacy-address-format\n return actual.startsWith('1');\n }\n\n if (segwitType) {\n if (segwitType === SEGWIT_TYPES.P2SH_P2WPKH) {\n actual = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n } else {\n // parsed.segwitType === SEGWIT_TYPES.P2WPKH\n if (chainConfig.bech32Prefix) {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n } else {\n // Fallback to legacy if bech32 not supported\n actual = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n }\n } else {\n // For addresses starting with \"3\" (P2SH), try both P2SH-P2WPKH and legacy P2SH encodings if segwitType is undefined\n if (address.startsWith(\"3\") && !segwitType) {\n // P2SH-P2WPKH: script hash of the redeem script (OP_0 <pubkeyhash>)\n const redeemScript = new Uint8Array(22);\n redeemScript[0] = 0x00; // OP_0\n redeemScript[1] = 0x14; // push 20 bytes\n redeemScript.set(publicKeyHash, 2);\n const redeemScriptHash = hash160(redeemScript);\n const p2shP2wpkh = encodeBase58AddressFormat(chainConfig.scriptHashVersion, redeemScriptHash);\n // Legacy P2SH: script hash of the public key\n const legacyP2sh = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n if (address === p2shP2wpkh || address === legacyP2sh) {\n return true;\n }\n actual = legacyP2sh; // fallback for error reporting\n } else if (checkSegwitAlways && chainConfig.bech32Prefix) {\n try {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n // if address is bech32 it is not p2sh\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n actual = encodeBase58AddressFormat(chainConfig.scriptHashVersion, publicKeyHash);\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n } else {\n actual = encodeBase58AddressFormat(chainConfig.pubKeyHashVersion, publicKeyHash);\n }\n }\n\n return actual === address;\n}\n\nconst base58check = createBase58check(Hash.sha256);\n\nfunction encodeBase58AddressFormat(version: number | Uint8Array, publicKeyHash: Uint8Array) {\n const prefixBytes =\n typeof version === \"number\"\n ? Uint8Array.of(version)\n : version; // Accept raw Uint8Array for Zcash\n\n const payload = new Uint8Array(prefixBytes.length + publicKeyHash.length);\n payload.set(prefixBytes);\n payload.set(publicKeyHash, prefixBytes.length);\n return base58check.encode(payload);\n}\n\n\nfunction magicHash(attestation: string, messagePrefix: string) {\n const prefix = new TextEncoder().encode(messagePrefix);\n const message = new TextEncoder().encode(attestation);\n const length = encodeLength(message.length).buffer;\n const buffer = new Uint8Array(\n prefix.length + length.byteLength + message.length\n );\n buffer.set(prefix);\n buffer.set(new Uint8Array(length), prefix.length);\n buffer.set(message, prefix.length + length.byteLength);\n return hash256(buffer);\n}\n\nfunction encodeBech32Address(publicKeyHash: Uint8Array, prefix: string = \"bc\"): string {\n const bwords = bech32.toWords(publicKeyHash);\n bwords.unshift(0);\n return bech32.encode(prefix, bwords);\n}\n\nfunction hash256(buffer: Uint8Array): Uint8Array {\n return Hash.sha256(Hash.sha256(buffer));\n}\n\nfunction hash160(buffer: Uint8Array): Uint8Array {\n return Hash.ripemd160(Hash.sha256(buffer));\n}","import nacl from \"tweetnacl\";\nimport { ProofStatus, SignatureProof, type SIWXInput, type SolanaMetadata } from \"@notabene/javascript-sdk\";\nimport { base64, base58 } from \"@scure/base\";\n\ninterface ParsedSIWSMessage {\n domain: string;\n address: string;\n statement?: string;\n uri?: string;\n version?: string;\n chainId?: string;\n nonce?: string;\n issuedAt?: string;\n expirationTime?: string;\n notBefore?: string;\n requestId?: string;\n resources?: string[];\n}\n\n\n\n/**\n * Verifies a Solana signature proof.\n * \n * This function can verify two types of Solana signatures:\n * 1. Standard Solana signatures\n * \n * @param proof - The signature proof containing the address, attestation, and signature\n * @returns Promise that resolves to a SignatureProof with updated status (VERIFIED or FAILED)\n * \n * @example\n * // Standard Solana signature verification\n * const result = await verifySolanaSignature(proof);\n * \n */\nexport async function verifySolanaSignature(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"solana\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const publicKey = base58.decode(address);\n const messageBytes = new TextEncoder().encode(proof.attestation);\n const signatureBytes = base64.decode(proof.proof);\n const verified = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n publicKey,\n );\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\nfunction isSolanaSignInInput(obj: unknown): obj is SIWXInput {\n if (!obj || typeof obj !== 'object') return false;\n \n const input = obj as Record<string, unknown>;\n \n // Check for required properties\n return (\n typeof input.domain === 'string' &&\n typeof input.address === 'string' &&\n (input.statement === undefined || typeof input.statement === 'string') &&\n (input.uri === undefined || typeof input.uri === 'string') &&\n (input.version === undefined || typeof input.version === 'string') &&\n (input.chainId === undefined || typeof input.chainId === 'string') &&\n (input.nonce === undefined || typeof input.nonce === 'string') &&\n (input.issuedAt === undefined || typeof input.issuedAt === 'string') &&\n (input.expirationTime === undefined || typeof input.expirationTime === 'string') &&\n (input.notBefore === undefined || typeof input.notBefore === 'string') &&\n (input.requestId === undefined || typeof input.requestId === 'string') &&\n (input.resources === undefined || Array.isArray(input.resources))\n );\n}\n\nfunction isSolanaSignInMetadata(obj: unknown): obj is SolanaMetadata {\n if (!obj || typeof obj !== 'object') return false;\n \n const metadata = obj as Record<string, unknown>;\n \n // Check account object\n if (!metadata.account || typeof metadata.account !== 'object') return false;\n const account = metadata.account as Record<string, unknown>;\n if (typeof account.address !== 'string') return false;\n \n // Handle publicKey - could be Uint8Array or serialized object with numeric keys\n if (!account.publicKey) return false;\n if (!(account.publicKey instanceof Uint8Array)) {\n // Try to convert from serialized format\n const pkObj = account.publicKey as Record<string, unknown>;\n if (typeof pkObj === 'object') {\n // Convert object with numeric keys to Uint8Array\n const keys = Object.keys(pkObj).filter(key => !isNaN(Number(key))).sort((a, b) => Number(a) - Number(b));\n if (keys.length === 32) { // Solana public keys are 32 bytes\n const bytes = keys.map(key => Number(pkObj[key]));\n if (bytes.every(b => typeof b === 'number' && b >= 0 && b <= 255)) {\n account.publicKey = new Uint8Array(bytes);\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n \n // Handle signedMessage - could be Uint8Array or Buffer-like object\n if (!metadata.signedMessage) return false;\n if (!(metadata.signedMessage instanceof Uint8Array)) {\n const smObj = metadata.signedMessage as Record<string, unknown>;\n if (smObj.type === 'Buffer' && Array.isArray(smObj.data)) {\n metadata.signedMessage = new Uint8Array(smObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Handle signature - could be Uint8Array or Buffer-like object\n if (!metadata.signature) return false;\n if (!(metadata.signature instanceof Uint8Array)) {\n const sigObj = metadata.signature as Record<string, unknown>;\n if (sigObj.type === 'Buffer' && Array.isArray(sigObj.data)) {\n metadata.signature = new Uint8Array(sigObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Check message field contains valid SolanaSignInInput\n if (!metadata.message || typeof metadata.message !== 'object') {\n return false;\n }\n \n const message = metadata.message as unknown;\n \n // If address is missing from message, try to extract it from signedMessage\n if (typeof message === 'object' && message !== null) {\n const messageObj = message as Record<string, unknown>;\n if (!messageObj.address && metadata.signedMessage instanceof Uint8Array) {\n try {\n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const lines = signedMessageText.split('\\n');\n if (lines.length >= 2) {\n const address = lines[1].trim();\n if (address && /^[a-zA-Z0-9]{32,44}$/.test(address)) {\n messageObj.address = address;\n }\n }\n } catch {\n // Ignore errors in address extraction\n }\n }\n }\n \n if (!isSolanaSignInInput(metadata.message)) {\n return false;\n }\n \n return true;\n}\n\nexport async function verifySolanaSIWS(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns] = proof.address.split(/:/);\n if (ns !== \"solana\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n // Validate that metadata conforms to SolanaSignInMetadata\n if (!proof.chainSpecificData || !isSolanaSignInMetadata(proof.chainSpecificData)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n // Now we can safely cast to SolanaMetadata since we validated it\n const metadata = proof.chainSpecificData as SolanaMetadata;\n \n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const parsedMessage = parseSIWSMessage(signedMessageText);\n \n if (!parsedMessage) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Validate the parsed message against the input\n if (!validateSIWSMessage(parsedMessage, metadata.message as SIWXInput)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Reconstruct the message to ensure it matches the signed message\n const reconstructedMessage = createSIWSMessage(parsedMessage);\n if (reconstructedMessage !== signedMessageText) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Verify the signature against the message\n const verified = nacl.sign.detached.verify(\n metadata.signedMessage,\n metadata.signature,\n metadata.account.publicKey as Uint8Array\n );\n \n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\n// Parse SIWS message according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#message-construction\nfunction parseSIWSMessage(message: string): ParsedSIWSMessage | null {\n try {\n const lines = message.split('\\n');\n \n // Parse header (domain and address)\n const header = parseHeader(lines);\n if (!header) return null;\n \n const result: ParsedSIWSMessage = { ...header };\n \n let lineIndex = 2;\n \n // Parse statement if present\n const statementResult = parseStatement(lines, lineIndex);\n if (statementResult.statement !== undefined) {\n result.statement = statementResult.statement;\n lineIndex = statementResult.nextIndex;\n }\n \n // Parse advanced fields\n const advancedFields = parseAdvancedFields(lines, lineIndex);\n Object.assign(result, advancedFields);\n \n return result;\n } catch {\n return null;\n }\n}\n\nfunction parseHeader(lines: string[]): { domain: string; address: string } | null {\n // First line: domain + \" wants you to sign in with your Solana account:\"\n const domainMatch = lines[0]?.match(/^(.+) wants you to sign in with your Solana account:$/);\n if (!domainMatch) return null;\n \n const domain = domainMatch[1];\n \n // Second line: address\n const address = lines[1];\n if (!address || !/^[a-zA-Z0-9]{32,44}$/.test(address)) return null;\n \n return { domain, address };\n}\n\nfunction parseStatement(lines: string[], startIndex: number): { statement?: string; nextIndex: number } {\n let lineIndex = startIndex;\n \n // Check for statement (after empty line)\n if (lines[lineIndex] === '' && lines[lineIndex + 1] && !lines[lineIndex + 1].includes(':')) {\n lineIndex++; // Skip empty line\n const statement = lines[lineIndex];\n lineIndex++;\n \n // Skip another empty line after statement\n if (lines[lineIndex] === '') {\n lineIndex++;\n }\n \n return { statement, nextIndex: lineIndex };\n }\n \n return { nextIndex: lineIndex };\n}\n\nfunction parseAdvancedFields(lines: string[], startIndex: number): Partial<ParsedSIWSMessage> {\n const result: Partial<ParsedSIWSMessage> = {};\n \n // Define field parsers for string fields only\n const fieldParsers: Array<{\n prefix: string;\n key: keyof Omit<ParsedSIWSMessage, 'resources'>;\n }> = [\n { prefix: 'URI: ', key: 'uri' },\n { prefix: 'Version: ', key: 'version' },\n { prefix: 'Chain ID: ', key: 'chainId' },\n { prefix: 'Nonce: ', key: 'nonce' },\n { prefix: 'Issued At: ', key: 'issuedAt' },\n { prefix: 'Expiration Time: ', key: 'expirationTime' },\n { prefix: 'Not Before: ', key: 'notBefore' },\n { prefix: 'Request ID: ', key: 'requestId' }\n ];\n \n let lineIndex = startIndex;\n \n while (lineIndex < lines.length) {\n const line = lines[lineIndex];\n if (!line) {\n lineIndex++;\n continue;\n }\n \n // Check for resources (special case)\n if (line.startsWith('Resources:')) {\n const resources = parseResources(lines, lineIndex + 1);\n if (resources.length > 0) {\n result.resources = resources;\n lineIndex += resources.length + 1; // +1 for the \"Resources:\" line\n continue;\n }\n }\n \n // Check for other fields\n let fieldFound = false;\n for (const { prefix, key } of fieldParsers) {\n if (line.startsWith(prefix)) {\n const value = line.substring(prefix.length);\n result[key] = value;\n fieldFound = true;\n break;\n }\n }\n \n if (!fieldFound) {\n // Unknown field, skip it\n }\n \n lineIndex++;\n }\n \n return result;\n}\n\nfunction parseResources(lines: string[], startIndex: number): string[] {\n const resources: string[] = [];\n let lineIndex = startIndex;\n \n while (lineIndex < lines.length && lines[lineIndex]?.startsWith('- ')) {\n resources.push(lines[lineIndex].substring(2));\n lineIndex++;\n }\n \n return resources;\n}\n\n// Validate parsed SIWS message against input\nfunction validateSIWSMessage(parsed: ParsedSIWSMessage, input: SIWXInput): boolean {\n // Required fields validation\n if (parsed.domain !== input.domain || parsed.address !== input.address) {\n return false;\n }\n \n // Define validation rules for optional fields\n const fieldValidations: Array<{\n inputKey: keyof SIWXInput;\n parsedKey: keyof ParsedSIWSMessage;\n validator?: (inputValue: unknown, parsedValue: unknown) => boolean;\n }> = [\n { inputKey: 'statement', parsedKey: 'statement' },\n { inputKey: 'uri', parsedKey: 'uri' },\n { inputKey: 'version', parsedKey: 'version' },\n { inputKey: 'chainId', parsedKey: 'chainId' },\n { inputKey: 'nonce', parsedKey: 'nonce' },\n { inputKey: 'issuedAt', parsedKey: 'issuedAt' },\n { inputKey: 'expirationTime', parsedKey: 'expirationTime' },\n { inputKey: 'notBefore', parsedKey: 'notBefore' },\n { inputKey: 'requestId', parsedKey: 'requestId' },\n {\n inputKey: 'resources',\n parsedKey: 'resources',\n validator: (inputValue, parsedValue) => {\n if (!Array.isArray(inputValue) || !Array.isArray(parsedValue)) {\n return false;\n }\n return inputValue.length === parsedValue.length && \n inputValue.every((item, index) => item === parsedValue[index]);\n }\n }\n ];\n \n // Validate optional fields\n for (const { inputKey, parsedKey, validator } of fieldValidations) {\n const inputValue = input[inputKey];\n const parsedValue = parsed[parsedKey];\n \n if (inputValue !== undefined) {\n if (validator) {\n if (!validator(inputValue, parsedValue)) {\n return false;\n }\n } else if (inputValue !== parsedValue) {\n return false;\n }\n }\n }\n \n // Validate timestamps\n return validateTimestamps(parsed);\n}\n\n// Separate timestamp validation for better testability and clarity\nfunction validateTimestamps(parsed: ParsedSIWSMessage): boolean {\n const now = Date.now();\n \n // Validate issuedAt (allow 24 hour threshold for testing)\n if (parsed.issuedAt) {\n const issuedAt = new Date(parsed.issuedAt);\n const threshold = 24 * 60 * 60 * 1000; // 24 hours in milliseconds\n const timeDiff = Math.abs(issuedAt.getTime() - now);\n if (timeDiff > threshold) {\n return false;\n }\n }\n \n // Validate expirationTime\n if (parsed.expirationTime) {\n const expirationTime = new Date(parsed.expirationTime);\n if (expirationTime.getTime() <= now) {\n return false; // Message has expired\n }\n }\n \n // Validate notBefore\n if (parsed.notBefore) {\n const notBefore = new Date(parsed.notBefore);\n if (notBefore.getTime() > now) {\n return false; // Message not yet valid\n }\n }\n \n return true;\n}\n\n// Create SIWS message string according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#abnf-message-format\nfunction createSIWSMessage(input: ParsedSIWSMessage): string {\n let message = `${input.domain} wants you to sign in with your Solana account:\\n`;\n message += `${input.address}`;\n\n if (input.statement) {\n message += `\\n\\n${input.statement}`;\n }\n\n const fields = buildFieldLines(input);\n \n if (fields.length) {\n message += `\\n\\n${fields.join('\\n')}`;\n }\n\n return message;\n}\n\nfunction buildFieldLines(input: ParsedSIWSMessage): string[] {\n const fields: string[] = [];\n \n // Define field mappings\n const fieldMappings: Array<{\n key: keyof ParsedSIWSMessage;\n prefix: string;\n formatter?: (value: unknown) => string[];\n }> = [\n { key: 'uri', prefix: 'URI: ' },\n { key: 'version', prefix: 'Version: ' },\n { key: 'chainId', prefix: 'Chain ID: ' },\n { key: 'nonce', prefix: 'Nonce: ' },\n { key: 'issuedAt', prefix: 'Issued At: ' },\n { key: 'expirationTime', prefix: 'Expiration Time: ' },\n { key: 'notBefore', prefix: 'Not Before: ' },\n { key: 'requestId', prefix: 'Request ID: ' },\n {\n key: 'resources',\n prefix: 'Resources:',\n formatter: (value) => {\n if (Array.isArray(value) && value.length > 0) {\n return ['Resources:', ...value.map(resource => `- ${resource}`)];\n }\n return [];\n }\n }\n ];\n \n for (const { key, prefix, formatter } of fieldMappings) {\n const value = input[key];\n if (value !== undefined) {\n if (formatter) {\n const formatted = formatter(value);\n fields.push(...formatted);\n } else if (typeof value === 'string') {\n fields.push(`${prefix}${value}`);\n }\n }\n }\n \n return fields;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.equal = exports.concat = exports.HEX_REGEX = void 0;\nconst utils_1 = require(\"@noble/hashes/utils\");\nexports.HEX_REGEX = /^[A-F0-9]*$/iu;\nfunction concat(views) {\n return (0, utils_1.concatBytes)(...views);\n}\nexports.concat = concat;\nfunction equal(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) {\n return false;\n }\n const dv1 = new Int8Array(buf1);\n const dv2 = new Int8Array(buf2);\n for (let i = 0; i !== buf1.byteLength; i++) {\n if (dv1[i] !== dv2[i]) {\n return false;\n }\n }\n return true;\n}\nexports.equal = equal;\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomBytes = exports.stringToHex = exports.hexToString = exports.hexToBytes = exports.bytesToHex = void 0;\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst shared_1 = require(\"./shared\");\n/* eslint-disable func-style -- Typed to ensure uniformity between node and browser implementations and docs */\nconst bytesToHex = (bytes) => {\n const hex = (0, utils_1.bytesToHex)(bytes instanceof Uint8Array ? bytes : Uint8Array.from(bytes));\n return hex.toUpperCase();\n};\nexports.bytesToHex = bytesToHex;\n// A clone of hexToBytes from @noble/hashes without the length checks. This allows us to do our own checks.\nconst hexToBytes = (hex) => {\n const len = hex.length;\n const array = new Uint8Array(len / 2);\n if (!shared_1.HEX_REGEX.test(hex)) {\n throw new Error('Invalid hex string');\n }\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0) {\n throw new Error('Invalid byte sequence');\n }\n array[i] = byte;\n }\n return array;\n};\nexports.hexToBytes = hexToBytes;\nconst hexToString = (hex, encoding = 'utf8') => {\n return new TextDecoder(encoding).decode((0, exports.hexToBytes)(hex));\n};\nexports.hexToString = hexToString;\nconst stringToHex = (string) => {\n return (0, exports.bytesToHex)(new TextEncoder().encode(string));\n};\nexports.stringToHex = stringToHex;\n/* eslint-enable func-style */\nexports.randomBytes = utils_1.randomBytes;\n__exportStar(require(\"./shared\"), exports);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA512_IV = exports.SHA384_IV = exports.SHA224_IV = exports.SHA256_IV = exports.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nfunction Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nfunction Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nclass HashMD extends utils_ts_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_ts_1.createView)(this.buffer);\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = (0, utils_ts_1.createView)(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.aoutput)(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n (0, utils_ts_1.clean)(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = (0, utils_ts_1.createView)(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexports.HashMD = HashMD;\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexports.SHA256_IV = Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexports.SHA224_IV = Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexports.SHA384_IV = Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexports.SHA512_IV = Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_224 = exports.sha512_256 = exports.sha384 = exports.sha512 = exports.sha224 = exports.sha256 = exports.SHA512_256 = exports.SHA512_224 = exports.SHA384 = exports.SHA512 = exports.SHA224 = exports.SHA256 = void 0;\n/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst u64 = require(\"./_u64.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_ts_1.HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = _md_ts_1.SHA256_IV[0] | 0;\n this.B = _md_ts_1.SHA256_IV[1] | 0;\n this.C = _md_ts_1.SHA256_IV[2] | 0;\n this.D = _md_ts_1.SHA256_IV[3] | 0;\n this.E = _md_ts_1.SHA256_IV[4] | 0;\n this.F = _md_ts_1.SHA256_IV[5] | 0;\n this.G = _md_ts_1.SHA256_IV[6] | 0;\n this.H = _md_ts_1.SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = (0, utils_ts_1.rotr)(W15, 7) ^ (0, utils_ts_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_ts_1.rotr)(W2, 17) ^ (0, utils_ts_1.rotr)(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = (0, utils_ts_1.rotr)(E, 6) ^ (0, utils_ts_1.rotr)(E, 11) ^ (0, utils_ts_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_ts_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_ts_1.rotr)(A, 2) ^ (0, utils_ts_1.rotr)(A, 13) ^ (0, utils_ts_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_ts_1.Maj)(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA256 = SHA256;\nclass SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = _md_ts_1.SHA224_IV[0] | 0;\n this.B = _md_ts_1.SHA224_IV[1] | 0;\n this.C = _md_ts_1.SHA224_IV[2] | 0;\n this.D = _md_ts_1.SHA224_IV[3] | 0;\n this.E = _md_ts_1.SHA224_IV[4] | 0;\n this.F = _md_ts_1.SHA224_IV[5] | 0;\n this.G = _md_ts_1.SHA224_IV[6] | 0;\n this.H = _md_ts_1.SHA224_IV[7] | 0;\n }\n}\nexports.SHA224 = SHA224;\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_ts_1.HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = _md_ts_1.SHA512_IV[0] | 0;\n this.Al = _md_ts_1.SHA512_IV[1] | 0;\n this.Bh = _md_ts_1.SHA512_IV[2] | 0;\n this.Bl = _md_ts_1.SHA512_IV[3] | 0;\n this.Ch = _md_ts_1.SHA512_IV[4] | 0;\n this.Cl = _md_ts_1.SHA512_IV[5] | 0;\n this.Dh = _md_ts_1.SHA512_IV[6] | 0;\n this.Dl = _md_ts_1.SHA512_IV[7] | 0;\n this.Eh = _md_ts_1.SHA512_IV[8] | 0;\n this.El = _md_ts_1.SHA512_IV[9] | 0;\n this.Fh = _md_ts_1.SHA512_IV[10] | 0;\n this.Fl = _md_ts_1.SHA512_IV[11] | 0;\n this.Gh = _md_ts_1.SHA512_IV[12] | 0;\n this.Gl = _md_ts_1.SHA512_IV[13] | 0;\n this.Hh = _md_ts_1.SHA512_IV[14] | 0;\n this.Hl = _md_ts_1.SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexports.SHA512 = SHA512;\nclass SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = _md_ts_1.SHA384_IV[0] | 0;\n this.Al = _md_ts_1.SHA384_IV[1] | 0;\n this.Bh = _md_ts_1.SHA384_IV[2] | 0;\n this.Bl = _md_ts_1.SHA384_IV[3] | 0;\n this.Ch = _md_ts_1.SHA384_IV[4] | 0;\n this.Cl = _md_ts_1.SHA384_IV[5] | 0;\n this.Dh = _md_ts_1.SHA384_IV[6] | 0;\n this.Dl = _md_ts_1.SHA384_IV[7] | 0;\n this.Eh = _md_ts_1.SHA384_IV[8] | 0;\n this.El = _md_ts_1.SHA384_IV[9] | 0;\n this.Fh = _md_ts_1.SHA384_IV[10] | 0;\n this.Fl = _md_ts_1.SHA384_IV[11] | 0;\n this.Gh = _md_ts_1.SHA384_IV[12] | 0;\n this.Gl = _md_ts_1.SHA384_IV[13] | 0;\n this.Hh = _md_ts_1.SHA384_IV[14] | 0;\n this.Hl = _md_ts_1.SHA384_IV[15] | 0;\n }\n}\nexports.SHA384 = SHA384;\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nclass SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\nexports.SHA512_256 = SHA512_256;\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexports.sha256 = (0, utils_ts_1.createHasher)(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexports.sha224 = (0, utils_ts_1.createHasher)(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexports.sha512 = (0, utils_ts_1.createHasher)(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexports.sha384 = (0, utils_ts_1.createHasher)(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_256 = (0, utils_ts_1.createHasher)(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_224 = (0, utils_ts_1.createHasher)(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha224 = exports.SHA224 = exports.sha256 = exports.SHA256 = void 0;\n/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA256 = sha2_ts_1.SHA256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha256 = sha2_ts_1.sha256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA224 = sha2_ts_1.SHA224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha224 = sha2_ts_1.sha224;\n//# sourceMappingURL=sha256.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst normalizeInput_1 = __importDefault(require(\"./normalizeInput\"));\n/**\n * Wrap a CHash object from @noble/hashes to provide a interface that is isomorphic\n *\n * @param chash - {CHash} hash function to wrap\n */\nfunction wrapNoble(chash) {\n function wrapped(input) {\n return chash((0, normalizeInput_1.default)(input));\n }\n wrapped.create = () => {\n const hash = chash.create();\n return {\n update(input) {\n hash.update((0, normalizeInput_1.default)(input));\n return this;\n },\n digest() {\n return hash.digest();\n },\n };\n };\n return wrapped;\n}\nexports.default = wrapNoble;\n//# sourceMappingURL=wrapNoble.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Normalize a string, number array, or Uint8Array to a string or Uint8Array.\n * Both node and noble lib functions accept these types.\n *\n * @param input - value to normalize\n */\nfunction normalizeInput(input) {\n return Array.isArray(input) ? new Uint8Array(input) : input;\n}\nexports.default = normalizeInput;\n//# sourceMappingURL=normalizeInput.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha256 = void 0;\nconst sha256_1 = require(\"@noble/hashes/sha256\");\nconst wrapNoble_1 = __importDefault(require(\"../internal/wrapNoble\"));\n/**\n * Wrap noble-libs's sha256 implementation in HashFn\n */\nexports.sha256 = (0, wrapNoble_1.default)(sha256_1.sha256);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.concatArgs = exports.arrayEqual = void 0;\n/**\n * Check whether two sequences (e.g. Arrays of numbers) are equal.\n *\n * @param arr1 - One of the arrays to compare.\n * @param arr2 - The other array to compare.\n */\nfunction arrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n return arr1.every((value, index) => value === arr2[index]);\n}\nexports.arrayEqual = arrayEqual;\n/**\n * Check whether a value is a scalar\n *\n * @param val - The value to check.\n */\nfunction isScalar(val) {\n return typeof val === 'number';\n}\n/**\n * Concatenate all `arguments` into a single array. Each argument can be either\n * a single element or a sequence, which has a `length` property and supports\n * element retrieval via sequence[ix].\n *\n * > concatArgs(1, [2, 3], Uint8Array.from([4,5]), new Uint8Array([6, 7]));\n * [1,2,3,4,5,6,7]\n *\n * @param args - Concatenate of these args into a single array.\n * @returns Array of concatenated arguments\n */\nfunction concatArgs(...args) {\n return args.flatMap((arg) => {\n return isScalar(arg) ? [arg] : Array.from(arg);\n });\n}\nexports.concatArgs = concatArgs;\n//# sourceMappingURL=utils.js.map","\"use strict\";\n/**\n * Codec class\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidClassicAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.encodeNodePublic = exports.decodeNodePublic = exports.decodeAddress = exports.decodeAccountID = exports.encodeAddress = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.codec = void 0;\nconst base_1 = require(\"@scure/base\");\nconst sha256_1 = require(\"@xrplf/isomorphic/sha256\");\nconst utils_1 = require(\"./utils\");\nclass Codec {\n constructor(options) {\n this._sha256 = options.sha256;\n this._codec = base_1.base58xrp;\n }\n /**\n * Encoder.\n *\n * @param bytes - Uint8Array of data to encode.\n * @param opts - Options object including the version bytes and the expected length of the data to encode.\n */\n encode(bytes, opts) {\n const versions = opts.versions;\n return this._encodeVersioned(bytes, versions, opts.expectedLength);\n }\n /**\n * Decoder.\n *\n * @param base58string - Base58Check-encoded string to decode.\n * @param opts - Options object including the version byte(s) and the expected length of the data after decoding.\n */\n /* eslint-disable max-lines-per-function --\n * TODO refactor */\n decode(base58string, opts) {\n var _a;\n const versions = opts.versions;\n const types = opts.versionTypes;\n const withoutSum = this.decodeChecked(base58string);\n if (versions.length > 1 && !opts.expectedLength) {\n throw new Error('expectedLength is required because there are >= 2 possible versions');\n }\n const versionLengthGuess = typeof versions[0] === 'number' ? 1 : versions[0].length;\n const payloadLength = (_a = opts.expectedLength) !== null && _a !== void 0 ? _a : withoutSum.length - versionLengthGuess;\n const versionBytes = withoutSum.slice(0, -payloadLength);\n const payload = withoutSum.slice(-payloadLength);\n for (let i = 0; i < versions.length; i++) {\n /* eslint-disable @typescript-eslint/consistent-type-assertions --\n * TODO refactor */\n const version = Array.isArray(versions[i])\n ? versions[i]\n : [versions[i]];\n if ((0, utils_1.arrayEqual)(versionBytes, version)) {\n return {\n version,\n bytes: payload,\n type: types ? types[i] : null,\n };\n }\n /* eslint-enable @typescript-eslint/consistent-type-assertions */\n }\n throw new Error('version_invalid: version bytes do not match any of the provided version(s)');\n }\n encodeChecked(bytes) {\n const check = this._sha256(this._sha256(bytes)).slice(0, 4);\n return this._encodeRaw(Uint8Array.from((0, utils_1.concatArgs)(bytes, check)));\n }\n decodeChecked(base58string) {\n const intArray = this._decodeRaw(base58string);\n if (intArray.byteLength < 5) {\n throw new Error('invalid_input_size: decoded data must have length >= 5');\n }\n if (!this._verifyCheckSum(intArray)) {\n throw new Error('checksum_invalid');\n }\n return intArray.slice(0, -4);\n }\n _encodeVersioned(bytes, versions, expectedLength) {\n if (!checkByteLength(bytes, expectedLength)) {\n throw new Error('unexpected_payload_length: bytes.length does not match expectedLength.' +\n ' Ensure that the bytes are a Uint8Array.');\n }\n return this.encodeChecked((0, utils_1.concatArgs)(versions, bytes));\n }\n _encodeRaw(bytes) {\n return this._codec.encode(Uint8Array.from(bytes));\n }\n /* eslint-enable max-lines-per-function */\n _decodeRaw(base58string) {\n return this._codec.decode(base58string);\n }\n _verifyCheckSum(bytes) {\n const computed = this._sha256(this._sha256(bytes.slice(0, -4))).slice(0, 4);\n const checksum = bytes.slice(-4);\n return (0, utils_1.arrayEqual)(computed, checksum);\n }\n}\n/**\n * XRP codec\n */\n// base58 encodings: https://xrpl.org/base58-encodings.html\n// Account address (20 bytes)\nconst ACCOUNT_ID = 0;\n// Account public key (33 bytes)\nconst ACCOUNT_PUBLIC_KEY = 0x23;\n// 33; Seed value (for secret keys) (16 bytes)\nconst FAMILY_SEED = 0x21;\n// 28; Validation public key (33 bytes)\nconst NODE_PUBLIC = 0x1c;\n// [1, 225, 75]\nconst ED25519_SEED = [0x01, 0xe1, 0x4b];\nconst codecOptions = {\n sha256: sha256_1.sha256,\n};\nconst codecWithXrpAlphabet = new Codec(codecOptions);\nexports.codec = codecWithXrpAlphabet;\n// entropy is a Uint8Array of size 16\n// type is 'ed25519' or 'secp256k1'\nfunction encodeSeed(entropy, type) {\n if (!checkByteLength(entropy, 16)) {\n throw new Error('entropy must have length 16');\n }\n const opts = {\n expectedLength: 16,\n // for secp256k1, use `FAMILY_SEED`\n versions: type === 'ed25519' ? ED25519_SEED : [FAMILY_SEED],\n };\n // prefixes entropy with version bytes\n return codecWithXrpAlphabet.encode(entropy, opts);\n}\nexports.encodeSeed = encodeSeed;\nfunction decodeSeed(seed, opts = {\n versionTypes: ['ed25519', 'secp256k1'],\n versions: [ED25519_SEED, FAMILY_SEED],\n expectedLength: 16,\n}) {\n return codecWithXrpAlphabet.decode(seed, opts);\n}\nexports.decodeSeed = decodeSeed;\nfunction encodeAccountID(bytes) {\n const opts = { versions: [ACCOUNT_ID], expectedLength: 20 };\n return codecWithXrpAlphabet.encode(bytes, opts);\n}\nexports.encodeAccountID = encodeAccountID;\n/* eslint-disable import/no-unused-modules ---\n * unclear why this is aliased but we should keep it in case someone else is\n * importing it with the aliased name */\nexports.encodeAddress = encodeAccountID;\n/* eslint-enable import/no-unused-modules */\nfunction decodeAccountID(accountId) {\n const opts = { versions: [ACCOUNT_ID], expectedLength: 20 };\n return codecWithXrpAlphabet.decode(accountId, opts).bytes;\n}\nexports.decodeAccountID = decodeAccountID;\n/* eslint-disable import/no-unused-modules ---\n * unclear why this is aliased but we should keep it in case someone else is\n * importing it with the aliased name */\nexports.decodeAddress = decodeAccountID;\n/* eslint-enable import/no-unused-modules */\nfunction decodeNodePublic(base58string) {\n const opts = { versions: [NODE_PUBLIC], expectedLength: 33 };\n return codecWithXrpAlphabet.decode(base58string, opts).bytes;\n}\nexports.decodeNodePublic = decodeNodePublic;\nfunction encodeNodePublic(bytes) {\n const opts = { versions: [NODE_PUBLIC], expectedLength: 33 };\n return codecWithXrpAlphabet.encode(bytes, opts);\n}\nexports.encodeNodePublic = encodeNodePublic;\nfunction encodeAccountPublic(bytes) {\n const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 };\n return codecWithXrpAlphabet.encode(bytes, opts);\n}\nexports.encodeAccountPublic = encodeAccountPublic;\nfunction decodeAccountPublic(base58string) {\n const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 };\n return codecWithXrpAlphabet.decode(base58string, opts).bytes;\n}\nexports.decodeAccountPublic = decodeAccountPublic;\nfunction isValidClassicAddress(address) {\n try {\n decodeAccountID(address);\n }\n catch (_error) {\n return false;\n }\n return true;\n}\nexports.isValidClassicAddress = isValidClassicAddress;\nfunction checkByteLength(bytes, expectedLength) {\n return 'byteLength' in bytes\n ? bytes.byteLength === expectedLength\n : bytes.length === expectedLength;\n}\n//# sourceMappingURL=xrp-codec.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidXAddress = exports.decodeXAddress = exports.xAddressToClassicAddress = exports.encodeXAddress = exports.classicAddressToXAddress = exports.isValidClassicAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.decodeNodePublic = exports.encodeNodePublic = exports.decodeAccountID = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.codec = void 0;\nconst utils_1 = require(\"@xrplf/isomorphic/utils\");\nconst xrp_codec_1 = require(\"./xrp-codec\");\nObject.defineProperty(exports, \"codec\", { enumerable: true, get: function () { return xrp_codec_1.codec; } });\nObject.defineProperty(exports, \"encodeSeed\", { enumerable: true, get: function () { return xrp_codec_1.encodeSeed; } });\nObject.defineProperty(exports, \"decodeSeed\", { enumerable: true, get: function () { return xrp_codec_1.decodeSeed; } });\nObject.defineProperty(exports, \"encodeAccountID\", { enumerable: true, get: function () { return xrp_codec_1.encodeAccountID; } });\nObject.defineProperty(exports, \"decodeAccountID\", { enumerable: true, get: function () { return xrp_codec_1.decodeAccountID; } });\nObject.defineProperty(exports, \"encodeNodePublic\", { enumerable: true, get: function () { return xrp_codec_1.encodeNodePublic; } });\nObject.defineProperty(exports, \"decodeNodePublic\", { enumerable: true, get: function () { return xrp_codec_1.decodeNodePublic; } });\nObject.defineProperty(exports, \"encodeAccountPublic\", { enumerable: true, get: function () { return xrp_codec_1.encodeAccountPublic; } });\nObject.defineProperty(exports, \"decodeAccountPublic\", { enumerable: true, get: function () { return xrp_codec_1.decodeAccountPublic; } });\nObject.defineProperty(exports, \"isValidClassicAddress\", { enumerable: true, get: function () { return xrp_codec_1.isValidClassicAddress; } });\nconst PREFIX_BYTES = {\n // 5, 68\n main: Uint8Array.from([0x05, 0x44]),\n // 4, 147\n test: Uint8Array.from([0x04, 0x93]),\n};\nconst MAX_32_BIT_UNSIGNED_INT = 4294967295;\nfunction classicAddressToXAddress(classicAddress, tag, test) {\n const accountId = (0, xrp_codec_1.decodeAccountID)(classicAddress);\n return encodeXAddress(accountId, tag, test);\n}\nexports.classicAddressToXAddress = classicAddressToXAddress;\nfunction encodeXAddress(accountId, tag, test) {\n if (accountId.length !== 20) {\n // RIPEMD160 is 160 bits = 20 bytes\n throw new Error('Account ID must be 20 bytes');\n }\n if (tag !== false && tag > MAX_32_BIT_UNSIGNED_INT) {\n throw new Error('Invalid tag');\n }\n const theTag = tag || 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Passing null is a common js mistake\n const flag = tag === false || tag == null ? 0 : 1;\n /* eslint-disable no-bitwise ---\n * need to use bitwise operations here */\n const bytes = (0, utils_1.concat)([\n test ? PREFIX_BYTES.test : PREFIX_BYTES.main,\n accountId,\n Uint8Array.from([\n // 0x00 if no tag, 0x01 if 32-bit tag\n flag,\n // first byte\n theTag & 0xff,\n // second byte\n (theTag >> 8) & 0xff,\n // third byte\n (theTag >> 16) & 0xff,\n // fourth byte\n (theTag >> 24) & 0xff,\n 0,\n 0,\n 0,\n // four zero bytes (reserved for 64-bit tags)\n 0,\n ]),\n ]);\n /* eslint-enable no-bitwise */\n return xrp_codec_1.codec.encodeChecked(bytes);\n}\nexports.encodeXAddress = encodeXAddress;\nfunction xAddressToClassicAddress(xAddress) {\n /* eslint-disable @typescript-eslint/naming-convention --\n * TODO 'test' should be something like 'isTest', do this later\n */\n const { accountId, tag, test } = decodeXAddress(xAddress);\n /* eslint-enable @typescript-eslint/naming-convention */\n const classicAddress = (0, xrp_codec_1.encodeAccountID)(accountId);\n return {\n classicAddress,\n tag,\n test,\n };\n}\nexports.xAddressToClassicAddress = xAddressToClassicAddress;\nfunction decodeXAddress(xAddress) {\n const decoded = xrp_codec_1.codec.decodeChecked(xAddress);\n /* eslint-disable @typescript-eslint/naming-convention --\n * TODO 'test' should be something like 'isTest', do this later\n */\n const test = isUint8ArrayForTestAddress(decoded);\n /* eslint-enable @typescript-eslint/naming-convention */\n const accountId = decoded.slice(2, 22);\n const tag = tagFromUint8Array(decoded);\n return {\n accountId,\n tag,\n test,\n };\n}\nexports.decodeXAddress = decodeXAddress;\nfunction isUint8ArrayForTestAddress(buf) {\n const decodedPrefix = buf.slice(0, 2);\n if ((0, utils_1.equal)(PREFIX_BYTES.main, decodedPrefix)) {\n return false;\n }\n if ((0, utils_1.equal)(PREFIX_BYTES.test, decodedPrefix)) {\n return true;\n }\n throw new Error('Invalid X-address: bad prefix');\n}\nfunction tagFromUint8Array(buf) {\n const flag = buf[22];\n if (flag >= 2) {\n // No support for 64-bit tags at this time\n throw new Error('Unsupported X-address');\n }\n if (flag === 1) {\n // Little-endian to big-endian\n return buf[23] + buf[24] * 0x100 + buf[25] * 0x10000 + buf[26] * 0x1000000;\n }\n if (flag !== 0) {\n throw new Error('flag must be zero to indicate no tag');\n }\n if (!(0, utils_1.equal)((0, utils_1.hexToBytes)('0000000000000000'), buf.slice(23, 23 + 8))) {\n throw new Error('remaining bytes must be zero');\n }\n return false;\n}\nfunction isValidXAddress(xAddress) {\n try {\n decodeXAddress(xAddress);\n }\n catch (_error) {\n return false;\n }\n return true;\n}\nexports.isValidXAddress = isValidXAddress;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ripemd160 = exports.RIPEMD160 = exports.md5 = exports.MD5 = exports.sha1 = exports.SHA1 = void 0;\n/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */\nclass SHA1 extends _md_ts_1.HashMD {\n constructor() {\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n get() {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = (0, utils_ts_1.rotl)(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = (0, _md_ts_1.Chi)(B, C, D);\n K = 0x5a827999;\n }\n else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n }\n else if (i < 60) {\n F = (0, _md_ts_1.Maj)(B, C, D);\n K = 0x8f1bbcdc;\n }\n else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = ((0, utils_ts_1.rotl)(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = (0, utils_ts_1.rotl)(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA1 = SHA1;\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexports.sha1 = (0, utils_ts_1.createHasher)(() => new SHA1());\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) => Math.floor(p32 * Math.abs(Math.sin(i + 1))));\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nclass MD5 extends _md_ts_1.HashMD {\n constructor() {\n super(64, 16, 8, true);\n this.A = MD5_IV[0] | 0;\n this.B = MD5_IV[1] | 0;\n this.C = MD5_IV[2] | 0;\n this.D = MD5_IV[3] | 0;\n }\n get() {\n const { A, B, C, D } = this;\n return [A, B, C, D];\n }\n set(A, B, C, D) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n MD5_W[i] = view.getUint32(offset, true);\n // Compression function main loop, 64 rounds\n let { A, B, C, D } = this;\n for (let i = 0; i < 64; i++) {\n let F, g, s;\n if (i < 16) {\n F = (0, _md_ts_1.Chi)(B, C, D);\n g = i;\n s = [7, 12, 17, 22];\n }\n else if (i < 32) {\n F = (0, _md_ts_1.Chi)(D, B, C);\n g = (5 * i + 1) % 16;\n s = [5, 9, 14, 20];\n }\n else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n s = [4, 11, 16, 23];\n }\n else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n s = [6, 10, 15, 21];\n }\n F = F + A + K[i] + MD5_W[g];\n A = D;\n D = C;\n C = B;\n B = B + (0, utils_ts_1.rotl)(F, s[i % 4]);\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n this.set(A, B, C, D);\n }\n roundClean() {\n (0, utils_ts_1.clean)(MD5_W);\n }\n destroy() {\n this.set(0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.MD5 = MD5;\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexports.md5 = (0, utils_ts_1.createHasher)(() => new MD5());\n// RIPEMD-160\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++)\n for (let j of res)\n j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n if (group === 1)\n return (x & y) | (~x & z);\n if (group === 2)\n return (x | ~y) ^ z;\n if (group === 3)\n return (x & z) | (y & ~z);\n return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nclass RIPEMD160 extends _md_ts_1.HashMD {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF_160[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = ((0, utils_ts_1.rotl)(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = (0, utils_ts_1.rotl)(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = ((0, utils_ts_1.rotl)(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = (0, utils_ts_1.rotl)(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n (0, utils_ts_1.clean)(BUF_160);\n }\n destroy() {\n this.destroyed = true;\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0);\n }\n}\nexports.RIPEMD160 = RIPEMD160;\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexports.ripemd160 = (0, utils_ts_1.createHasher)(() => new RIPEMD160());\n//# sourceMappingURL=legacy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ripemd160 = exports.RIPEMD160 = void 0;\n/**\n * RIPEMD-160 legacy hash function.\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n * @module\n * @deprecated\n */\nconst legacy_ts_1 = require(\"./legacy.js\");\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexports.RIPEMD160 = legacy_ts_1.RIPEMD160;\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexports.ripemd160 = legacy_ts_1.ripemd160;\n//# sourceMappingURL=ripemd160.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ripemd160 = void 0;\nconst ripemd160_1 = require(\"@noble/hashes/ripemd160\");\nconst wrapNoble_1 = __importDefault(require(\"../internal/wrapNoble\"));\n/**\n * Wrap noble-libs's ripemd160 implementation in HashFn\n */\nexports.ripemd160 = (0, wrapNoble_1.default)(ripemd160_1.ripemd160);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_256 = exports.SHA512_256 = exports.sha512_224 = exports.SHA512_224 = exports.sha384 = exports.SHA384 = exports.sha512 = exports.SHA512 = void 0;\n/**\n * SHA2-512 a.k.a. sha512 and sha384. It is slower than sha256 in js because u64 operations are slow.\n *\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [the paper on truncated SHA512/256](https://eprint.iacr.org/2010/548.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA512 = sha2_ts_1.SHA512;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha512 = sha2_ts_1.sha512;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA384 = sha2_ts_1.SHA384;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha384 = sha2_ts_1.sha384;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA512_224 = sha2_ts_1.SHA512_224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha512_224 = sha2_ts_1.sha512_224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA512_256 = sha2_ts_1.SHA512_256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha512_256 = sha2_ts_1.sha512_256;\n//# sourceMappingURL=sha512.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512 = void 0;\nconst sha512_1 = require(\"@noble/hashes/sha512\");\nconst wrapNoble_1 = __importDefault(require(\"../internal/wrapNoble\"));\n/**\n * Wrap noble-libs's sha512 implementation in HashFn\n */\nexports.sha512 = (0, wrapNoble_1.default)(sha512_1.sha512);\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sha512_1 = require(\"@xrplf/isomorphic/sha512\");\nconst utils_1 = require(\"@noble/curves/abstract/utils\");\nclass Sha512 {\n constructor() {\n // instantiate empty sha512 hash\n this.hash = sha512_1.sha512.create();\n }\n static half(input) {\n return new Sha512().add(input).first256();\n }\n add(bytes) {\n this.hash.update(bytes);\n return this;\n }\n addU32(i) {\n const buffer = new Uint8Array(4);\n new DataView(buffer.buffer).setUint32(0, i);\n return this.add(buffer);\n }\n finish() {\n return this.hash.digest();\n }\n first256() {\n return this.finish().slice(0, 32);\n }\n first256BigInt() {\n return (0, utils_1.bytesToNumberBE)(this.first256());\n }\n}\nexports.default = Sha512;\n//# sourceMappingURL=Sha512.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.accountPublicFromPublicGenerator = exports.derivePrivateKey = void 0;\nconst secp256k1_1 = require(\"@noble/curves/secp256k1\");\nconst Sha512_1 = __importDefault(require(\"../../utils/Sha512\"));\nconst ZERO = BigInt(0);\nfunction deriveScalar(bytes, discrim) {\n const order = secp256k1_1.secp256k1.CURVE.n;\n for (let i = 0; i <= 4294967295; i++) {\n // We hash the bytes to find a 256-bit number, looping until we are sure it\n // is less than the order of the curve.\n const hasher = new Sha512_1.default().add(bytes);\n // If the optional discriminator index was passed in, update the hash.\n if (discrim !== undefined) {\n hasher.addU32(discrim);\n }\n hasher.addU32(i);\n const key = hasher.first256BigInt();\n /* istanbul ignore else */\n if (key > ZERO && key < order) {\n return key;\n }\n }\n // This error is practically impossible to reach.\n // The order of the curve describes the (finite) amount of points on the curve\n // https://github.com/indutny/elliptic/blob/master/lib/elliptic/curves.js#L182\n // How often will an (essentially) random number generated by Sha512 be larger than that?\n // There's 2^32 chances (the for loop) to get a number smaller than the order,\n // and it's rare that you'll even get past the first loop iteration.\n // Note that in TypeScript we actually need the throw, otherwise the function signature would be bigint | undefined\n //\n /* istanbul ignore next */\n throw new Error('impossible unicorn ;)');\n}\n/**\n * @param seed - Bytes.\n * @param [opts] - Object.\n * @param [opts.accountIndex=0] - The account number to generate.\n * @param [opts.validator=false] - Generate root key-pair,\n * as used by validators.\n * @returns {bigint} 256 bit scalar value.\n *\n */\nfunction derivePrivateKey(seed, opts = {}) {\n const root = opts.validator;\n const order = secp256k1_1.secp256k1.CURVE.n;\n // This private generator represents the `root` private key, and is what's\n // used by validators for signing when a keypair is generated from a seed.\n const privateGen = deriveScalar(seed);\n if (root) {\n // As returned by validation_create for a given seed\n return privateGen;\n }\n const publicGen = secp256k1_1.secp256k1.ProjectivePoint.BASE.multiply(privateGen).toRawBytes(true);\n // A seed can generate many keypairs as a function of the seed and a uint32.\n // Almost everyone just uses the first account, `0`.\n const accountIndex = opts.accountIndex || 0;\n return (deriveScalar(publicGen, accountIndex) + privateGen) % order;\n}\nexports.derivePrivateKey = derivePrivateKey;\nfunction accountPublicFromPublicGenerator(publicGenBytes) {\n const rootPubPoint = secp256k1_1.secp256k1.ProjectivePoint.fromHex(publicGenBytes);\n const scalar = deriveScalar(publicGenBytes, 0);\n const point = secp256k1_1.secp256k1.ProjectivePoint.BASE.multiply(scalar);\n const offset = rootPubPoint.add(point);\n return offset.toRawBytes(true);\n}\nexports.accountPublicFromPublicGenerator = accountPublicFromPublicGenerator;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assertHelper = {\n ok(cond, message) {\n if (!cond) {\n throw new Error(message);\n }\n },\n};\nexports.default = assertHelper;\n//# sourceMappingURL=assert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAlgorithmFromPrivateKey = exports.getAlgorithmFromPublicKey = exports.getAlgorithmFromKey = void 0;\nvar Prefix;\n(function (Prefix) {\n Prefix[Prefix[\"NONE\"] = -1] = \"NONE\";\n Prefix[Prefix[\"ED25519\"] = 237] = \"ED25519\";\n Prefix[Prefix[\"SECP256K1_PUB_X\"] = 2] = \"SECP256K1_PUB_X\";\n Prefix[Prefix[\"SECP256K1_PUB_X_ODD_Y\"] = 3] = \"SECP256K1_PUB_X_ODD_Y\";\n Prefix[Prefix[\"SECP256K1_PUB_XY\"] = 4] = \"SECP256K1_PUB_XY\";\n Prefix[Prefix[\"SECP256K1_PRIVATE\"] = 0] = \"SECP256K1_PRIVATE\";\n})(Prefix || (Prefix = {}));\n/**\n * | Curve | Type | Prefix | Length | Description | Algorithm |\n * |-----------|-------------|:------:|:------:|-------------------------------------------------------|----------------:|\n * | ed25519 | Private | 0xED | 33 | prefix + Uint256LE (0 < n < order ) | ed25519 |\n * | ed25519 | Public | 0xED | 33 | prefix + 32 y-bytes | ed25519 |\n * | secp256k1 | Public (1) | 0x02 | 33 | prefix + 32 x-bytes | ecdsa-secp256k1 |\n * | secp256k1 | Public (2) | 0x03 | 33 | prefix + 32 x-bytes (y is odd) | ecdsa-secp256k1 |\n * | secp256k1 | Public (3) | 0x04 | 65 | prefix + 32 x-bytes + 32 y-bytes | ecdsa-secp256k1 |\n * | secp256k1 | Private (1) | None | 32 | Uint256BE (0 < n < order) | ecdsa-secp256k1 |\n * | secp256k1 | Private (2) | 0x00 | 33 | prefix + Uint256BE (0 < n < order) | ecdsa-secp256k1 |\n *\n * Note: The 0x00 prefix for secpk256k1 Private (2) essentially 0 pads the number\n * and the interpreted number is the same as 32 bytes.\n */\nconst KEY_TYPES = {\n [`private_${Prefix.NONE}_32`]: 'ecdsa-secp256k1',\n [`private_${Prefix.SECP256K1_PRIVATE}_33`]: 'ecdsa-secp256k1',\n [`private_${Prefix.ED25519}_33`]: 'ed25519',\n [`public_${Prefix.ED25519}_33`]: 'ed25519',\n [`public_${Prefix.SECP256K1_PUB_X}_33`]: 'ecdsa-secp256k1',\n [`public_${Prefix.SECP256K1_PUB_X_ODD_Y}_33`]: 'ecdsa-secp256k1',\n [`public_${Prefix.SECP256K1_PUB_XY}_65`]: 'ecdsa-secp256k1',\n};\nfunction getKeyInfo(key) {\n return {\n prefix: key.length < 2 ? Prefix.NONE : parseInt(key.slice(0, 2), 16),\n len: key.length / 2,\n };\n}\nfunction prefixRepr(prefix) {\n return prefix === Prefix.NONE\n ? 'None'\n : `0x${prefix.toString(16).padStart(2, '0')}`;\n}\nfunction getValidFormatsTable(type) {\n // No need overkill with renderTable method\n const padding = 2;\n const colWidth = {\n algorithm: 'ecdsa-secp256k1'.length + padding,\n prefix: '0x00'.length + padding,\n };\n return Object.entries(KEY_TYPES)\n .filter(([key]) => key.startsWith(type))\n .map(([key, algorithm]) => {\n const [, prefix, length] = key.split('_');\n const paddedAlgo = algorithm.padEnd(colWidth.algorithm);\n const paddedPrefix = prefixRepr(Number(prefix)).padEnd(colWidth.prefix);\n return `${paddedAlgo} - Prefix: ${paddedPrefix} Length: ${length} bytes`;\n })\n .join('\\n');\n}\nfunction keyError({ key, type, prefix, len, }) {\n const validFormats = getValidFormatsTable(type);\n return `invalid_key:\n\nType: ${type}\nKey: ${key}\nPrefix: ${prefixRepr(prefix)} \nLength: ${len} bytes\n\nAcceptable ${type} formats are:\n${validFormats}\n`;\n}\n/**\n * Determines the algorithm associated with a given key (public/private).\n *\n * @param key - hexadecimal string representation of the key.\n * @param type - whether expected key is public or private\n * @returns Algorithm algorithm for signing/verifying\n * @throws Error when key is invalid\n */\nfunction getAlgorithmFromKey(key, type) {\n const { prefix, len } = getKeyInfo(key);\n // Special case back compat support for no prefix\n const usedPrefix = type === 'private' && len === 32 ? Prefix.NONE : prefix;\n const algorithm = KEY_TYPES[`${type}_${usedPrefix}_${len}`];\n if (!algorithm) {\n throw new Error(keyError({ key, type, len, prefix: usedPrefix }));\n }\n return algorithm;\n}\nexports.getAlgorithmFromKey = getAlgorithmFromKey;\nfunction getAlgorithmFromPublicKey(key) {\n return getAlgorithmFromKey(key, 'public');\n}\nexports.getAlgorithmFromPublicKey = getAlgorithmFromPublicKey;\nfunction getAlgorithmFromPrivateKey(key) {\n return getAlgorithmFromKey(key, 'private');\n}\nexports.getAlgorithmFromPrivateKey = getAlgorithmFromPrivateKey;\n//# sourceMappingURL=getAlgorithmFromKey.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"@noble/curves/abstract/utils\");\nconst secp256k1_1 = require(\"@noble/curves/secp256k1\");\nconst utils_2 = require(\"@xrplf/isomorphic/utils\");\nconst utils_3 = require(\"./utils\");\nconst assert_1 = __importDefault(require(\"../../utils/assert\"));\nconst Sha512_1 = __importDefault(require(\"../../utils/Sha512\"));\nconst SECP256K1_PREFIX = '00';\nconst secp256k1 = {\n deriveKeypair(entropy, options) {\n const derived = (0, utils_3.derivePrivateKey)(entropy, options);\n const privateKey = SECP256K1_PREFIX + (0, utils_2.bytesToHex)((0, utils_1.numberToBytesBE)(derived, 32));\n const publicKey = (0, utils_2.bytesToHex)(secp256k1_1.secp256k1.getPublicKey(derived, true));\n return { privateKey, publicKey };\n },\n sign(message, privateKey) {\n // Some callers pass the privateKey with the prefix, others without.\n // @noble/curves will throw if the key is not exactly 32 bytes, so we\n // normalize it before passing to the sign method.\n assert_1.default.ok((privateKey.length === 66 && privateKey.startsWith(SECP256K1_PREFIX)) ||\n privateKey.length === 64);\n const normedPrivateKey = privateKey.length === 66 ? privateKey.slice(2) : privateKey;\n return secp256k1_1.secp256k1\n .sign(Sha512_1.default.half(message), normedPrivateKey, {\n // \"Canonical\" signatures\n lowS: true,\n // Would fail tests if signatures aren't deterministic\n extraEntropy: undefined,\n })\n .toDERHex(true)\n .toUpperCase();\n },\n verify(message, signature, publicKey) {\n const decoded = secp256k1_1.secp256k1.Signature.fromDER(signature);\n return secp256k1_1.secp256k1.verify(decoded, Sha512_1.default.half(message), publicKey);\n },\n};\nexports.default = secp256k1;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ed25519_1 = require(\"@noble/curves/ed25519\");\nconst utils_1 = require(\"@xrplf/isomorphic/utils\");\nconst assert_1 = __importDefault(require(\"../../utils/assert\"));\nconst Sha512_1 = __importDefault(require(\"../../utils/Sha512\"));\nconst ED_PREFIX = 'ED';\nconst ed25519 = {\n deriveKeypair(entropy) {\n const rawPrivateKey = Sha512_1.default.half(entropy);\n const privateKey = ED_PREFIX + (0, utils_1.bytesToHex)(rawPrivateKey);\n const publicKey = ED_PREFIX + (0, utils_1.bytesToHex)(ed25519_1.ed25519.getPublicKey(rawPrivateKey));\n return { privateKey, publicKey };\n },\n sign(message, privateKey) {\n assert_1.default.ok(message instanceof Uint8Array, 'message must be array of octets');\n assert_1.default.ok(privateKey.length === 66, 'private key must be 33 bytes including prefix');\n return (0, utils_1.bytesToHex)(ed25519_1.ed25519.sign(message, privateKey.slice(2)));\n },\n verify(message, signature, publicKey) {\n // Unlikely to be triggered as these are internal and guarded by getAlgorithmFromKey\n assert_1.default.ok(publicKey.length === 66, 'public key must be 33 bytes including prefix');\n return ed25519_1.ed25519.verify(signature, message, \n // Remove the 0xED prefix\n publicKey.slice(2), \n // By default, set zip215 to false for compatibility reasons.\n // ZIP 215 is a stricter Ed25519 signature verification scheme.\n // However, setting it to false adheres to the more commonly used\n // RFC8032 / NIST186-5 standards, making it compatible with systems\n // like the XRP Ledger.\n { zip215: false });\n },\n};\nexports.default = ed25519;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeSeed = exports.deriveNodeAddress = exports.deriveAddress = exports.verify = exports.sign = exports.deriveKeypair = exports.generateSeed = void 0;\nconst ripple_address_codec_1 = require(\"ripple-address-codec\");\nObject.defineProperty(exports, \"decodeSeed\", { enumerable: true, get: function () { return ripple_address_codec_1.decodeSeed; } });\nconst ripemd160_1 = require(\"@xrplf/isomorphic/ripemd160\");\nconst sha256_1 = require(\"@xrplf/isomorphic/sha256\");\nconst utils_1 = require(\"@xrplf/isomorphic/utils\");\nconst utils_2 = require(\"./signing-schemes/secp256k1/utils\");\nconst Sha512_1 = __importDefault(require(\"./utils/Sha512\"));\nconst assert_1 = __importDefault(require(\"./utils/assert\"));\nconst getAlgorithmFromKey_1 = require(\"./utils/getAlgorithmFromKey\");\nconst secp256k1_1 = __importDefault(require(\"./signing-schemes/secp256k1\"));\nconst ed25519_1 = __importDefault(require(\"./signing-schemes/ed25519\"));\nfunction getSigningScheme(algorithm) {\n const schemes = { 'ecdsa-secp256k1': secp256k1_1.default, ed25519: ed25519_1.default };\n return schemes[algorithm];\n}\nfunction generateSeed(options = {}) {\n assert_1.default.ok(!options.entropy || options.entropy.length >= 16, 'entropy too short');\n const entropy = options.entropy\n ? options.entropy.slice(0, 16)\n : (0, utils_1.randomBytes)(16);\n const type = options.algorithm === 'ed25519' ? 'ed25519' : 'secp256k1';\n return (0, ripple_address_codec_1.encodeSeed)(entropy, type);\n}\nexports.generateSeed = generateSeed;\nfunction deriveKeypair(seed, options) {\n var _a;\n const decoded = (0, ripple_address_codec_1.decodeSeed)(seed);\n const proposedAlgorithm = (_a = options === null || options === void 0 ? void 0 : options.algorithm) !== null && _a !== void 0 ? _a : decoded.type;\n const algorithm = proposedAlgorithm === 'ed25519' ? 'ed25519' : 'ecdsa-secp256k1';\n const scheme = getSigningScheme(algorithm);\n const keypair = scheme.deriveKeypair(decoded.bytes, options);\n const messageToVerify = Sha512_1.default.half('This test message should verify.');\n const signature = scheme.sign(messageToVerify, keypair.privateKey);\n /* istanbul ignore if */\n if (!scheme.verify(messageToVerify, signature, keypair.publicKey)) {\n throw new Error('derived keypair did not generate verifiable signature');\n }\n return keypair;\n}\nexports.deriveKeypair = deriveKeypair;\nfunction sign(messageHex, privateKey) {\n const algorithm = (0, getAlgorithmFromKey_1.getAlgorithmFromPrivateKey)(privateKey);\n return getSigningScheme(algorithm).sign((0, utils_1.hexToBytes)(messageHex), privateKey);\n}\nexports.sign = sign;\nfunction verify(messageHex, signature, publicKey) {\n const algorithm = (0, getAlgorithmFromKey_1.getAlgorithmFromPublicKey)(publicKey);\n return getSigningScheme(algorithm).verify((0, utils_1.hexToBytes)(messageHex), signature, publicKey);\n}\nexports.verify = verify;\nfunction computePublicKeyHash(publicKeyBytes) {\n return (0, ripemd160_1.ripemd160)((0, sha256_1.sha256)(publicKeyBytes));\n}\nfunction deriveAddressFromBytes(publicKeyBytes) {\n return (0, ripple_address_codec_1.encodeAccountID)(computePublicKeyHash(publicKeyBytes));\n}\nfunction deriveAddress(publicKey) {\n return deriveAddressFromBytes((0, utils_1.hexToBytes)(publicKey));\n}\nexports.deriveAddress = deriveAddress;\nfunction deriveNodeAddress(publicKey) {\n const generatorBytes = (0, ripple_address_codec_1.decodeNodePublic)(publicKey);\n const accountPublicBytes = (0, utils_2.accountPublicFromPublicGenerator)(generatorBytes);\n return deriveAddressFromBytes(accountPublicBytes);\n}\nexports.deriveNodeAddress = deriveNodeAddress;\n//# sourceMappingURL=index.js.map","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { AccountTxTransaction, Client } from \"xrpl\";\nimport { verify } from \"ripple-keypairs\";\n\nexport function verifyXRPL(\n message: string,\n publicKey: string,\n proof: string\n): boolean {\n return verify(Buffer.from(message).toString(\"hex\"), proof, publicKey);\n}\n\nexport const xrplTestnetWs = [\n \"wss://s.altnet.rippletest.net:51233\",\n \"wss://testnet.xrpl-labs.com/\",\n];\n\nexport const xrplMainnetWs = [\n \"wss://s1.ripple.com\",\n \"wss://xrplcluster.com/\", // full node\n \"wss://s2.ripple.com/\",\n];\n\n// If the public key is not provided, we need to get it directly\nasync function getPublicKey(\n address: string,\n isTest?: boolean\n): Promise<string | undefined> {\n const servers = isTest ? xrplTestnetWs : xrplMainnetWs;\n\n for (const server of servers) {\n try {\n const client = new Client(server);\n await client.connect();\n\n const response = await client.request({\n command: \"account_tx\",\n account: address,\n binary: false,\n limit: 2,\n forward: false,\n });\n\n await client.disconnect();\n return getSigningPubkeyFromLatestTx(response.result?.transactions);\n } catch (error) {\n let errorMessage = \"Connection to XRPL server failed\";\n if (error instanceof Error) {\n errorMessage += `: ${error.message}`;\n }\n console.error(errorMessage);\n // Continue to next server\n }\n }\n}\n\nfunction getSigningPubkeyFromLatestTx(\n latestTx: AccountTxTransaction[]\n): string {\n for (let i = 0; i < latestTx.length; i++) {\n // Check if the Account in the .tx is the address derived from the pubkey\n const signingPubKey = latestTx[i]?.tx_json?.SigningPubKey ?? \"0x\";\n // TODO: https://github.com/Cypher-Laboratory/xrpl-publickey-getter/blob/main/src/pubKeyGetter.ts#L98\n // Check the public key matches the address properly\n return signingPubKey;\n }\n throw new Error(\"No valid pubkey found in the latest transactions\");\n}\n\nexport async function verifyPersonalSignXRPL(\n proof: SignatureProof,\n publicKey?: string,\n isTest?: boolean\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"xrpl\") return { ...proof, status: ProofStatus.FAILED };\n\n if (!publicKey) {\n publicKey = await getPublicKey(address, isTest);\n }\n\n if (!publicKey) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n const verified = verifyXRPL(proof.attestation, publicKey, proof.proof);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\n// Concordium network configurations\ninterface ConcordiumNetwork {\n grpcUrl: string;\n walletProxyUrl: string;\n}\n\nconst NETWORKS: Record<string, ConcordiumNetwork> = {\n testnet: {\n grpcUrl: \"https://grpc.testnet.concordium.com:20000\",\n walletProxyUrl: \"https://wallet-proxy.testnet.concordium.com\"\n },\n mainnet: {\n grpcUrl: \"https://grpc.mainnet.concordium.com:20000\", \n walletProxyUrl: \"https://wallet-proxy.mainnet.concordium.software\"\n }\n};\n\n// Configuration options for verification\ninterface ConcordiumVerificationOptions {\n network?: \"testnet\" | \"mainnet\";\n timeout?: number; // timeout in milliseconds\n retries?: number; // number of retry attempts\n testMode?: boolean; // skip network calls for testing\n}\n\n// Signature object type\ninterface ConcordiumSignature {\n [key: string]: string | ConcordiumSignature;\n}\n\n// Default options\nconst DEFAULT_OPTIONS: Required<ConcordiumVerificationOptions> = {\n network: \"testnet\",\n timeout: 50000, // 10 seconds\n retries: 3,\n testMode: true\n};\n\n/**\n * Verifies a Concordium signature proof with proper cryptographic validation\n * @param proof The signature proof to verify\n * @param options Optional configuration for network and timeouts\n * @returns Promise resolving to the proof with updated status\n */\nexport const verifyConcordiumSignature = async (\n proof: SignatureProof,\n options: ConcordiumVerificationOptions = {}\n): Promise<SignatureProof> => {\n // Merge with default options\n const config = { ...DEFAULT_OPTIONS, ...options };\n \n // Parse and validate address format\n const [ns, networkId, address] = proof.address.split(/:/);\n if (ns !== \"ccd\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Determine network from address or use config\n let network = config.network;\n if (networkId) {\n // If network ID is specified in address, use it to determine network\n network = networkId.includes(\"testnet\") ? \"testnet\" : \"mainnet\";\n }\n\n try {\n // Validate signature format and extract signature data\n let signature: ConcordiumSignature;\n try {\n signature = JSON.parse(proof.proof) as ConcordiumSignature;\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Basic signature structure validation\n if (!signature || typeof signature !== 'object' || Object.keys(signature).length === 0) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // In test mode, skip network validation but still validate signature structure\n if (config.testMode) {\n // Perform signature format validation\n try {\n const signatureHex = convertSignatureToHex(signature);\n \n // Validate signature format\n if (!signatureHex || signatureHex.length < 64 || !/^[0-9a-fA-F]+$/.test(signatureHex)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n return { ...proof, status: ProofStatus.VERIFIED };\n \n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n }\n\n // Production mode: validate account existence and get account info with retry logic\n const accountInfo = await retryWithTimeout(\n () => validateAccountAndGetInfo(address, network, config.timeout),\n config.retries\n );\n\n if (!accountInfo) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Perform cryptographic signature verification\n const isValidSignature = await retryWithTimeout(\n () => verifyCryptographicSignature(\n signature,\n config.timeout,\n // proof.attestation,\n // address,\n // network\n ),\n config.retries\n );\n\n if (isValidSignature) {\n return { ...proof, status: ProofStatus.VERIFIED };\n } else {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n};\n\n/**\n * Validates that a Concordium account exists and retrieves account information\n */\nasync function validateAccountAndGetInfo(\n address: string,\n network: \"testnet\" | \"mainnet\",\n timeout: number\n): Promise<boolean> {\n const networkConfig = NETWORKS[network];\n \n try {\n // Check account existence via wallet proxy (faster than gRPC for existence check)\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(\n `${networkConfig.walletProxyUrl}/v0/accEncryptionKey/${address}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'User-Agent': 'verify-proof/1.6.0'\n },\n signal: controller.signal\n }\n );\n\n clearTimeout(timeoutId);\n return response.ok;\n\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Account validation timeout after ${timeout}ms`);\n }\n throw error;\n }\n}\n\n/**\n * Performs cryptographic verification of the signature using Concordium SDK\n * For production use, this would use the actual Concordium SDK verification methods\n * Currently implementing a comprehensive validation approach\n */\nasync function verifyCryptographicSignature(\n signature: ConcordiumSignature,\n timeout: number,\n // message?: string, // intentionally left out for now. Will enable for mainnet.\n // address?: string,\n // network?: \"testnet\" | \"mainnet\"\n): Promise<boolean> {\n try {\n // Convert signature format for verification\n const signatureHex = convertSignatureToHex(signature);\n \n // For production, implement proper signature verification\n // This is a placeholder for the actual SDK verification\n // The exact method depends on the available SDK version\n \n // Validate that we have a proper signature hex string\n if (!signatureHex || signatureHex.length < 64) {\n return false;\n }\n\n // For now, return true if we have a valid signature structure\n // In production, this should call the actual SDK verification method\n // Example: \n // const client = new ConcordiumGRPCNodeClient(networkConfig.grpcUrl, 20000, credentials.createInsecure(), { timeout });\n // const result = await client.verifyAccountSignature(address, message, signatureHex);\n \n // Placeholder validation - replace with actual SDK call\n return signatureHex.length >= 64 && /^[0-9a-fA-F]+$/.test(signatureHex);\n\n } catch (error) {\n // Handle specific error types\n if (error instanceof Error) {\n if (error.message?.includes(\"timeout\")) {\n throw new Error(`Signature verification timeout after ${timeout}ms`);\n }\n \n if (error.message?.includes(\"UNAVAILABLE\")) {\n throw new Error(\"Concordium node unavailable\");\n }\n\n if (error.message?.includes(\"NOT_FOUND\")) {\n return false;\n }\n }\n\n throw error;\n }\n}\n\n/**\n * Converts the signature object to the format expected by Concordium SDK\n */\nfunction convertSignatureToHex(signature: ConcordiumSignature): string {\n try {\n // Handle different signature formats\n if (typeof signature === 'string') {\n return signature;\n }\n\n // Handle nested signature object format (common from wallet)\n if (signature && typeof signature === 'object') {\n // Extract signature from nested structure\n const extractSignature = (obj: ConcordiumSignature): string | null => {\n if (typeof obj === 'string') {\n return obj;\n }\n \n if (obj && typeof obj === 'object') {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (typeof value === 'string') {\n return value;\n } else if (typeof value === 'object') {\n const result = extractSignature(value);\n if (result) return result;\n }\n }\n }\n }\n \n return null;\n };\n\n const extractedSig = extractSignature(signature);\n if (extractedSig) {\n return extractedSig;\n }\n }\n\n throw new Error(\"Unable to extract signature from object\");\n \n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Invalid signature format: ${errorMessage}`);\n }\n}\n\n/**\n * Utility function to retry operations with exponential backoff\n */\nasync function retryWithTimeout<T>(\n operation: () => Promise<T>,\n maxRetries: number\n): Promise<T> {\n let lastError: Error = new Error(\"No attempts made\");\n \n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n const errorInstance = error instanceof Error ? error : new Error(String(error));\n lastError = errorInstance;\n \n // Don't retry on certain types of errors\n if (\n errorInstance.message?.includes(\"Invalid signature\") ||\n errorInstance.message?.includes(\"Account not found\")\n ) {\n throw errorInstance;\n }\n\n // Don't retry on the last attempt\n if (attempt === maxRetries) {\n break;\n }\n\n // Exponential backoff: wait 2^attempt * 1000ms\n const delay = Math.min(Math.pow(2, attempt) * 1000, 5000);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nimport { Chi, HashMD, Maj } from \"./_md.js\";\nimport { clean, createHasher, rotl } from \"./utils.js\";\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */\nexport class SHA1 extends HashMD {\n constructor() {\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n get() {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n }\n else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n }\n else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n }\n else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n clean(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexport const sha1 = /* @__PURE__ */ createHasher(() => new SHA1());\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) => Math.floor(p32 * Math.abs(Math.sin(i + 1))));\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nexport class MD5 extends HashMD {\n constructor() {\n super(64, 16, 8, true);\n this.A = MD5_IV[0] | 0;\n this.B = MD5_IV[1] | 0;\n this.C = MD5_IV[2] | 0;\n this.D = MD5_IV[3] | 0;\n }\n get() {\n const { A, B, C, D } = this;\n return [A, B, C, D];\n }\n set(A, B, C, D) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n MD5_W[i] = view.getUint32(offset, true);\n // Compression function main loop, 64 rounds\n let { A, B, C, D } = this;\n for (let i = 0; i < 64; i++) {\n let F, g, s;\n if (i < 16) {\n F = Chi(B, C, D);\n g = i;\n s = [7, 12, 17, 22];\n }\n else if (i < 32) {\n F = Chi(D, B, C);\n g = (5 * i + 1) % 16;\n s = [5, 9, 14, 20];\n }\n else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n s = [4, 11, 16, 23];\n }\n else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n s = [6, 10, 15, 21];\n }\n F = F + A + K[i] + MD5_W[g];\n A = D;\n D = C;\n C = B;\n B = B + rotl(F, s[i % 4]);\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n this.set(A, B, C, D);\n }\n roundClean() {\n clean(MD5_W);\n }\n destroy() {\n this.set(0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexport const md5 = /* @__PURE__ */ createHasher(() => new MD5());\n// RIPEMD-160\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++)\n for (let j of res)\n j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n if (group === 1)\n return (x & y) | (~x & z);\n if (group === 2)\n return (x | ~y) ^ z;\n if (group === 3)\n return (x & z) | (y & ~z);\n return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends HashMD {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF_160[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n clean(BUF_160);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexport const ripemd160 = /* @__PURE__ */ createHasher(() => new RIPEMD160());\n//# sourceMappingURL=legacy.js.map","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\nexport class SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","import {\n CosmosMetadata,\n ProofStatus,\n SignatureProof,\n} from \"@notabene/javascript-sdk\";\nimport { bech32 } from \"bech32\";\nimport { StdSignDoc, serializeSignDoc } from \"@cosmjs/amino\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { ripemd160 } from \"@noble/hashes/legacy\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\n// Base64 decode\nfunction base64ToUint8Array(base64: string): Uint8Array {\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\n// Base64 encode UTF-8 bytes\nfunction toBase64Bytes(str: string): string {\n const utf8 = new TextEncoder().encode(str);\n let binary = \"\";\n for (let i = 0; i < utf8.length; i++) {\n binary += String.fromCharCode(utf8[i]);\n }\n return btoa(binary);\n}\n\n// Cosmos address derivation (ADR-36)\n// https://github.com/cosmos/cosmos-sdk/blob/214b11dcbaa129f7b4c0013b2103db9d54b85e9e/docs/architecture/adr-036-arbitrary-signature.md\nfunction deriveCosmosAddress(pubkey: Uint8Array, prefix = \"cosmos\"): string {\n const sha = sha256(pubkey);\n const rip = ripemd160(sha);\n return bech32.encode(prefix, bech32.toWords(rip));\n}\n\nexport async function verifyCosmosSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n try {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"cosmos\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Parse the proof JSON\n const pubKeyBytes = base64ToUint8Array(\n (proof.chainSpecificData as CosmosMetadata).pub_key.value\n );\n const signatureBytes = base64ToUint8Array(proof.proof);\n\n // Step 1: Derive address from pubkey\n const derivedAddress = deriveCosmosAddress(pubKeyBytes);\n if (derivedAddress !== address) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Step 2: Build MsgSignData + StdSignDoc\n const signDoc: StdSignDoc = {\n chain_id: \"\", // must match the signing process\n account_number: \"0\",\n sequence: \"0\",\n fee: { amount: [], gas: \"0\" },\n msgs: [\n {\n type: \"sign/MsgSignData\",\n value: {\n signer: address,\n data: toBase64Bytes(proof.attestation),\n },\n },\n ],\n memo: \"\",\n };\n\n // Step 3: Serialize + hash\n const signBytes = await serializeSignDoc(signDoc);\n const digest = sha256(signBytes);\n\n // Step 4: Verify using secp256k1\n const verified = secp256k1.verify(signatureBytes, digest, pubKeyBytes);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","import {\n type OwnershipProof,\n SignatureProof,\n DeclarationProof,\n ScreenshotProof,\n ProofTypes,\n ProofStatus,\n} from \"@notabene/javascript-sdk\";\nimport { verifyBTCSignature } from \"./bitcoin\";\nimport { verifyPersonalSignEIP191 } from \"./eth\";\nimport { verifySolanaSignature, verifySolanaSIWS } from \"./solana\";\nimport { verifyPersonalSignTIP191 } from \"./tron\";\nimport { verifyCIP8Signature } from \"./cardano\";\nimport { verifyPersonalSignXRPL } from \"./xrpl\";\nimport { verifyStellarSignature } from \"./xlm\";\nimport { verifyConcordiumSignature } from \"./concordium\";\nimport { verifyCosmosSignature } from \"./cosmos\";\n\nexport async function verifyProof(\n proof: OwnershipProof,\n publicKey?: string,\n): Promise<OwnershipProof> {\n switch (proof.type) {\n case ProofTypes.SelfDeclaration:\n return {\n ...proof,\n status: (proof as DeclarationProof).confirmed\n ? ProofStatus.VERIFIED\n : ProofStatus.FAILED,\n };\n case ProofTypes.Screenshot:\n return {\n ...proof,\n status: (proof as ScreenshotProof).url\n ? ProofStatus.FLAGGED\n : ProofStatus.FAILED,\n };\n case ProofTypes.CIP8:\n return verifyCIP8Signature(proof as SignatureProof);\n case ProofTypes.EIP191:\n return verifyPersonalSignEIP191(proof as SignatureProof);\n case ProofTypes.ED25519:\n return verifySolanaSignature(proof as SignatureProof);\n case ProofTypes.SOL_SIWX:\n return verifySolanaSIWS(proof as SignatureProof);\n case ProofTypes.XRP_ED25519:\n return verifyPersonalSignXRPL(proof as SignatureProof, publicKey);\n case ProofTypes.XLM_ED25519:\n return verifyStellarSignature(proof as SignatureProof);\n case ProofTypes.CONCORDIUM: \n return verifyConcordiumSignature(proof as SignatureProof);\n case ProofTypes.COSMOS:\n return verifyCosmosSignature(proof as SignatureProof);\n case ProofTypes.EIP712:\n case ProofTypes.BIP137:\n case ProofTypes.BIP322:\n return verifyBTCSignature(proof as SignatureProof);\n case ProofTypes.TIP191:\n return verifyPersonalSignTIP191(proof as SignatureProof);\n case ProofTypes.BIP137_XPUB:\n case ProofTypes.MicroTransfer:\n }\n return proof;\n}\n","import verifyDataSignature from \"@cardano-foundation/cardano-verify-datasignature\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\nexport async function verifyCIP8Signature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n const key =\n proof.chainSpecificData && \"cardanoCoseKey\" in proof.chainSpecificData\n ? proof.chainSpecificData.cardanoCoseKey\n : null;\n\n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n const verified = verifyDataSignature(\n proof.proof,\n key,\n proof.attestation,\n address\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Secp256k1, Hex, PersonalMessage, Signature, Address } from \"ox\";\n\nexport function verifyEIP191(\n address: Hex.Hex,\n message: string,\n proof: Hex.Hex,\n): boolean {\n try {\n const payload = PersonalMessage.getSignPayload(Hex.fromString(message));\n const signature = Signature.fromHex(proof);\n const publicKey = Secp256k1.recoverPublicKey({ payload, signature });\n const recovered = Address.checksum(Address.fromPublicKey(publicKey));\n return recovered.toString() === Address.checksum(address);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n}\n\nexport async function verifyPersonalSignEIP191(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"eip155\") return { ...proof, status: ProofStatus.FAILED };\n\n const verified = verifyEIP191(\n address as Hex.Hex,\n proof.attestation,\n proof.proof as Hex.Hex,\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Keypair } from \"@stellar/stellar-sdk\";\n\nexport function verifyStellarSignature(\n proof: SignatureProof,\n): SignatureProof {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"stellar\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const keypair = Keypair.fromPublicKey(address);\n const messageBuffer = Buffer.from(proof.attestation, \"utf-8\");\n const signatureBuffer = Buffer.from(proof.proof, \"base64\");\n\n const verified = keypair.verify(messageBuffer, signatureBuffer);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch (error) {\n console.error(error);\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { Secp256k1, Hex, Signature, Hash, Bytes, PublicKey } from \"ox\";\nimport { base58 } from \"@scure/base\";\n\nexport function verifyTIP191(\n address: string,\n message: string,\n proof: Hex.Hex,\n): boolean {\n try {\n const payload = getSignPayload(Hex.fromString(message));\n const signature = Signature.fromHex(proof);\n const publicKey = Secp256k1.recoverPublicKey({ payload, signature });\n const hex: Hex.Hex = `0x41${Hash.keccak256(\n `0x${PublicKey.toHex(publicKey).slice(4)}`,\n ).substring(26)}`;\n const bytes = Bytes.from(hex);\n const checksum = Bytes.from(Hash.sha256(Hash.sha256(hex))).slice(0, 4);\n const checked = Bytes.concat(bytes, checksum);\n const b58 = base58.encode(checked);\n return b58 === address;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n}\n\nexport async function verifyPersonalSignTIP191(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"tron\") return { ...proof, status: ProofStatus.FAILED };\n\n const verified = verifyTIP191(\n address as Hex.Hex,\n proof.attestation,\n proof.proof as Hex.Hex,\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n}\n\nexport function encode(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n const message = Hex.from(data);\n return Hex.concat(\n // Personal Sign Format: `0x19 ‖ \"Ethereum Signed Message:\\n\" ‖ message.length ‖ message`\n \"0x19\",\n Hex.fromString(\"TRON Signed Message:\\n\" + Hex.size(message)),\n message,\n );\n}\nexport function getSignPayload(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n return Hash.keccak256(encode(data));\n}\n"],"names":["SEGWIT_TYPES","DerivationMode","CHAIN_CONFIGS","bitcoin","messagePrefix","pubKeyHashVersion","scriptHashVersion","bech32Prefix","isTestnet","bitcoincash","litecoin","dogecoin","dash","zcash","Uint8Array","from","testnet","verifyBIP322","address","proof","_extends","status","Verifier","verifySignature","attestation","ProofStatus","VERIFIED","FAILED","verifyBIP137","chainConfig","derivationMode","match","NATIVE","SEGWIT","LEGACY","DOGECOIN","BCH","Error","concat","getDerivationMode","useSegwitEncoding","Boolean","startsWith","verified","checkSegwitAlways","_decodeSignature","sigbytes","base64","decode","length","flagByte","compressed","recovery","signature","secp256k1","Signature","fromCompact","slice","segwitType","P2WPKH","P2SH_P2WPKH","undefined","addRecoveryBit","decodeSignature","hash","prefix","TextEncoder","encode","message","encodeLength","buffer","byteLength","set","Hash","sha256","hash256","magicHash","publicKeyHash","hash160","recoverPublicKey","toRawBytes","actual","encodeBase58AddressFormat","encodeBech32Address","redeemScript","redeemScriptHash","p2shP2wpkh","legacyP2sh","e","verify","base58check","createBase58check","version","prefixBytes","of","payload","bwords","bech32","toWords","unshift","ripemd160","parseResources","lines","startIndex","resources","lineIndex","_lines$lineIndex","push","substring","Object","defineProperty","exports","value","crypto","globalThis","isBytes","a","ArrayBuffer","isView","constructor","name","anumber","n","Number","isSafeInteger","abytes","b","lengths","includes","byteSwap","word","byteSwap32","arr","i","wrapXOFConstructorWithOpts","wrapConstructorWithOpts","wrapConstructor","nextTick","swap32IfBE","swap8IfBE","isLE","ahash","h","create","outputLen","blockLen","aexists","instance","checkFinished","destroyed","finished","aoutput","out","min","u8","byteOffset","u32","Uint32Array","Math","floor","clean","arrays","fill","createView","DataView","rotr","shift","rotl","bytesToHex","bytes","hasHexBuiltin","toHex","hex","hexes","hexToBytes","fromHex","hl","al","array","ai","hi","n1","asciiToBase16","charCodeAt","n2","asyncLoop","async","iters","tick","cb","ts","Date","now","diff","utf8ToBytes","bytesToUtf8","TextDecoder","toBytes","kdfInputToBytes","data","concatBytes","sum","res","pad","checkOpts","defaults","opts","toString","call","assign","createHasher","createOptHasher","createXOFer","randomBytes","bytesLength","crypto_1","getRandomValues","byteSwapIfBE","u","Array","_","padStart","asciis","_0","_9","A","F","f","ch","str","hashCons","hashC","msg","update","digest","tmp","equal","HEX_REGEX","views","utils_1","buf1","buf2","dv1","Int8Array","dv2","__createBinding","this","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","__exportStar","p","prototype","hasOwnProperty","hexToString","toUpperCase","shared_1","test","j","hexByte","byte","parseInt","isNaN","encoding","stringToHex","string","setBigUint64","view","_32n","BigInt","_u32_max","wh","wl","l","setUint32","SHA512_IV","SHA224_IV","SHA256_IV","HashMD","Chi","c","Maj","utils_ts_1","padOffset","super","pos","len","take","dataView","process","subarray","roundClean","digestInto","oview","outLen","state","destroy","_cloneInto","to","clone","SHA384_IV","toBig","shrSL","rotrSL","rotrSH","rotrBH","rotr32L","rotlSL","rotlSH","rotlBH","add5L","add4L","add4H","add3H","add","fromBig","split","U32_MASK64","le","lst","Ah","Al","shrSH","_l","s","rotrBL","rotr32H","_h","rotlBL","Bh","Bl","add3L","Cl","low","Ch","Dl","Dh","El","add5H","Eh","default","sha512_224","sha512_256","sha384","sha512","sha224","SHA512_256","SHA512_224","SHA384","SHA512","SHA224","SHA256","SHA256_K","SHA256_W","_md_ts_1","B","C","D","E","G","H","offset","getUint32","W15","W2","s0","s1","T1","T2","K512","u64","map","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","Fh","Fl","Gh","Gl","Hh","Hl","W15h","W15l","s0h","s0l","W2h","W2l","s1h","s1l","SUMl","SUMh","sigma1h","sigma1l","CHIh","T1ll","T1h","T1l","sigma0h","sigma0l","MAJh","MAJl","All","T224_IV","T256_IV","sha2_ts_1","normalizeInput_1","__importDefault","mod","input","isArray","chash","wrapped","wrapNoble_1","require$$0","sha256_1","concatArgs","arrayEqual","arr1","arr2","every","index","args","flatMap","arg","isValidClassicAddress","decodeAccountPublic","encodeAccountPublic","encodeNodePublic","decodeNodePublic","decodeAddress","decodeAccountID","encodeAddress","encodeAccountID","decodeSeed","encodeSeed","codec","ED25519_SEED","codecOptions","codecWithXrpAlphabet","options","_sha256","_codec","base_1","base58xrp","_encodeVersioned","versions","expectedLength","base58string","_a","types","versionTypes","withoutSum","decodeChecked","payloadLength","versionBytes","type","encodeChecked","check","_encodeRaw","intArray","_decodeRaw","_verifyCheckSum","checkByteLength","computed","checksum","accountId","entropy","seed","_error","isValidXAddress","xAddressToClassicAddress","encodeXAddress","classicAddressToXAddress","xrp_codec_1","PREFIX_BYTES","main","tag","theTag","decodeXAddress","xAddress","decoded","buf","decodedPrefix","isUint8ArrayForTestAddress","flag","tagFromUint8Array","classicAddress","md5","MD5","SHA1","SHA1_IV","SHA1_W","K","T","sha1","p32","pow","abs","sin","MD5_IV","MD5_W","g","Rho160","Id160","Pi160","idxLR","idxL","idxR","shifts160","shiftsL160","idx","shiftsR160","Kl160","Kr160","ripemd_f","group","x","y","z","BUF_160","RIPEMD160","h0","h1","h2","h3","h4","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","legacy_ts_1","ripemd160_1","sha512_1","Sha512","half","first256","addU32","finish","first256BigInt","bytesToNumberBE","accountPublicFromPublicGenerator","derivePrivateKey","Sha512_1","ZERO","deriveScalar","discrim","order","secp256k1_1","CURVE","hasher","key","root","validator","privateGen","ProjectivePoint","BASE","multiply","accountIndex","publicGenBytes","rootPubPoint","scalar","point","ok","cond","Prefix","getAlgorithmFromPrivateKey","getAlgorithmFromPublicKey","getAlgorithmFromKey","KEY_TYPES","NONE","SECP256K1_PRIVATE","ED25519","SECP256K1_PUB_X","SECP256K1_PUB_X_ODD_Y","SECP256K1_PUB_XY","prefixRepr","getKeyInfo","usedPrefix","algorithm","validFormats","entries","filter","padEnd","join","getValidFormatsTable","keyError","assert_1","require$$1","deriveKeypair","derived","utils_3","privateKey","utils_2","numberToBytesBE","publicKey","getPublicKey","sign","normedPrivateKey","lowS","extraEntropy","toDERHex","fromDER","rawPrivateKey","ed25519_1","ed25519","zip215","deriveNodeAddress","generateSeed","ripple_address_codec_1","require$$2","require$$3","getSigningScheme","deriveAddressFromBytes","publicKeyBytes","computePublicKeyHash","scheme","keypair","messageToVerify","messageHex","getAlgorithmFromKey_1","deriveAddress","generatorBytes","pact","_Pact","_settle","v","then","bind","observer","result","callback","onFulfilled","onRejected","_this","_isSettledPact","thenable","xrplMainnetWs","retryWithTimeout","operation","maxRetries","_exit","_interrupt","_temp2","_result2","lastError","attempt","_temp","_for","_catch","Promise","resolve","_await$operation","error","_errorInstance$messag","_errorInstance$messag2","errorInstance","String","delay","setTimeout","reject","NETWORKS","grpcUrl","walletProxyUrl","mainnet","DEFAULT_OPTIONS","network","timeout","retries","testMode","convertSignatureToHex","extractSignature","obj","extractedSig","errorMessage","bech32m","ALPHABET","ALPHABET_MAP","charAt","polymodStep","pre","prefixChk","chk","convert","inBits","outBits","bits","maxV","fromWordsUnsafe","words","fromWords","getLibraryFromEncoding","ENCODING_CONST","__decode","LIMIT","lowered","toLowerCase","uppered","lastIndexOf","wordChars","decodeUnsafe","TypeError","base64ToUint8Array","atob","toBase64Bytes","utf8","binary","fromCharCode","btoa","verifyProof","ProofTypes","SelfDeclaration","confirmed","Screenshot","url","FLAGGED","CIP8","_proof$address$split","chainSpecificData","cardanoCoseKey","verifyDataSignature","_unused","verifyCIP8Signature","EIP191","PersonalMessage","getSignPayload","Hex","fromString","Secp256k1","Address","fromPublicKey","verifyEIP191","verifyPersonalSignEIP191","base58","messageBytes","signatureBytes","nacl","detached","verifySolanaSignature","SOL_SIWX","metadata","account","pkObj","keys","sort","signedMessage","smObj","sigObj","messageObj","trim","_unused2","domain","statement","uri","chainId","nonce","issuedAt","expirationTime","notBefore","requestId","isSolanaSignInInput","isSolanaSignInMetadata","signedMessageText","parsedMessage","header","_lines$","domainMatch","parseHeader","statementResult","nextIndex","parseStatement","advancedFields","fieldParsers","line","_step","_iterator","_createForOfIteratorHelperLoose","done","_step$value","parseAdvancedFields","_unused4","parseSIWSMessage","parsed","fieldValidations","inputKey","parsedKey","inputValue","parsedValue","item","_i","_fieldValidations","_fieldValidations$_i","getTime","validateTimestamps","validateSIWSMessage","fields","fieldMappings","formatter","resource","_i2","_fieldMappings","_fieldMappings$_i","formatted","apply","buildFieldLines","createSIWSMessage","_unused3","verifySolanaSIWS","XRP_ED25519","Buffer","verifyXRPL","_forOf","server","client","Client","connect","request","command","limit","forward","response","disconnect","_response$result","_getSigningPubkeyFrom","latestTx","_latestTx$i$tx_json$S","_latestTx$i","tx_json","SigningPubKey","getSigningPubkeyFromLatestTx","transactions","console","_getPublicKey","verifyPersonalSignXRPL","XLM_ED25519","Keypair","messageBuffer","signatureBuffer","verifyStellarSignature","CONCORDIUM","config","networkId","JSON","parse","signatureHex","networkConfig","controller","AbortController","timeoutId","abort","fetch","method","headers","Accept","signal","clearTimeout","validateAccountAndGetInfo","accountInfo","_error$message","_error$message2","_error$message3","verifyCryptographicSignature","isValidSignature","verifyConcordiumSignature","COSMOS","pubKeyBytes","pub_key","pubkey","sha","rip","deriveCosmosAddress","signDoc","chain_id","account_number","sequence","fee","amount","gas","msgs","signer","memo","serializeSignDoc","signBytes","verifyCosmosSignature","EIP712","BIP137","BIP322","getChainConfig","verifyBTCSignature","TIP191","keccak256","size","PublicKey","Bytes","checked","verifyTIP191","verifyPersonalSignTIP191"],"mappings":"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"}