@notabene/verify-proof 1.2.0-next.1 → 1.3.0-next.1
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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +1 -1
- package/dist/index.modern.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/tests/xrpl.test.d.ts +1 -0
- package/dist/xrpl.d.ts +5 -0
- package/package.json +3 -2
- package/src/index.ts +7 -2
- package/src/tests/index.test.ts +41 -0
- package/src/tests/xrpl.test.ts +87 -0
- package/src/xrpl.ts +94 -0
package/dist/index.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/bitcoin.ts","../src/index.ts","../src/cardano.ts","../src/eth.ts","../src/solana.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;\n scriptHashVersion: number;\n bech32Prefix?: string;\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 },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\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 },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1E, // D...\n scriptHashVersion: 0x16, // A...\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4C, // X...\n scriptHashVersion: 0x10, // 7...\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 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(\"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\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, publicKeyHash: Uint8Array) {\n const payload = new Uint8Array([version, ...publicKeyHash]);\n return base58check.encode(payload);\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 {\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 } from \"./solana\";\nimport { verifyPersonalSignTIP191 } from \"./tron\";\nimport { verifyCIP8Signature } from \"./cardano\";\n\nexport async function verifyProof(\n proof: OwnershipProof\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.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 = proof.chainSpecificData?.cardanoCoseKey;\n \n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n try {\n const verified = verifyDataSignature(proof.proof, key, proof.attestation, address);\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 nacl from \"tweetnacl\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { base64, base58 } from \"@scure/base\";\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 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (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","bitcoincash","litecoin","dogecoin","dash","base58check","createBase58check","Hash","sha256","encodeBase58AddressFormat","version","publicKeyHash","payload","Uint8Array","concat","encode","encodeBech32Address","prefix","bwords","bech32","toWords","unshift","proof","type","ProofTypes","SelfDeclaration","Promise","resolve","_extends","status","confirmed","ProofStatus","VERIFIED","FAILED","Screenshot","url","FLAGGED","CIP8","_proof$chainSpecificD","_proof$address$split","address","split","key","chainSpecificData","cardanoCoseKey","verified","verifyDataSignature","attestation","_unused","e","reject","verifyCIP8Signature","EIP191","message","PersonalMessage","getSignPayload","Hex","fromString","signature","Signature","fromHex","publicKey","Secp256k1","recoverPublicKey","Address","checksum","fromPublicKey","toString","error","verifyEIP191","verifyPersonalSignEIP191","ED25519","base58","decode","messageBytes","TextEncoder","signatureBytes","base64","nacl","sign","detached","verify","verifySolanaSignature","EIP712","BIP137","BIP322","chainConfig","startsWith","getChainConfig","segwit","Boolean","SEGWIT","NATIVE","includes","match","LEGACY","DOGECOIN","BCH","Error","getDerivationMode","checkSegwitAlways","_decodeSignature","sigbytes","length","flagByte","compressed","recovery","secp256k1","fromCompact","slice","segwitType","P2WPKH","P2SH_P2WPKH","undefined","addRecoveryBit","decodeSignature","buffer","hash","encodeLength","byteLength","set","hash256","magicHash","toRawBytes","ripemd160","actual","verifyBIP137","Verifier","verifySignature","verifyBIP322","verifyBTCSignature","TIP191","data","keccak256","from","size","hex","PublicKey","toHex","substring","bytes","Bytes","checked","verifyTIP191","verifyPersonalSignTIP191"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/bitcoin.ts","../src/eth.ts","../node_modules/@noble/hashes/crypto.js","../node_modules/@noble/hashes/_assert.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/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/ripemd160.js","../node_modules/@xrplf/isomorphic/dist/ripemd160/browser.js","../node_modules/@noble/hashes/_u64.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/index.ts","../src/cardano.ts","../src/solana.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;\n scriptHashVersion: number;\n bech32Prefix?: string;\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 },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\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 },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1E, // D...\n scriptHashVersion: 0x16, // A...\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4C, // X...\n scriptHashVersion: 0x10, // 7...\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 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(\"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\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, publicKeyHash: Uint8Array) {\n const payload = new Uint8Array([version, ...publicKeyHash]);\n return base58check.encode(payload);\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 { 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","\"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 * Internal assertion helpers.\n * @module\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\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/** Is number an Uint8Array? Copied from utils for perf. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\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.wrapConstructor');\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//# sourceMappingURL=_assert.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.Hash = exports.nextTick = exports.byteSwapIfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.u8 = u8;\nexports.u32 = u32;\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.toBytes = toBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.wrapConstructor = wrapConstructor;\nexports.wrapConstructorWithOpts = wrapConstructorWithOpts;\nexports.wrapXOFConstructorWithOpts = wrapXOFConstructorWithOpts;\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\");\nconst _assert_js_1 = require(\"./_assert.js\");\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n// Cast array to different type\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n// Cast array to view\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.byteSwapIfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\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}\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.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n (0, _assert_js_1.abytes)(bytes);\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.\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 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 * Convert JS string to byte array.\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('utf8ToBytes expected string, got ' + typeof str);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\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 (0, _assert_js_1.abytes)(data);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n (0, _assert_js_1.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}\n/** For runtime check if class implements interface */\nclass Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nexports.Hash = Hash;\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/** Wraps hash function, creating an interface on top of it */\nfunction wrapConstructor(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 wrapConstructorWithOpts(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 wrapXOFConstructorWithOpts(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}\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 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.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst _assert_js_1 = require(\"./_assert.js\");\nconst utils_js_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_js_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_js_1.createView)(this.buffer);\n }\n update(data) {\n (0, _assert_js_1.aexists)(this);\n const { view, buffer, blockLen } = this;\n data = (0, utils_js_1.toBytes)(data);\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_js_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, _assert_js_1.aexists)(this);\n (0, _assert_js_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 this.buffer.subarray(pos).fill(0);\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_js_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.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\nexports.HashMD = HashMD;\n//# sourceMappingURL=_md.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.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 */\nconst _md_js_1 = require(\"./_md.js\");\nconst utils_js_1 = require(\"./utils.js\");\n/** Round constants: first 32 bits of fractional parts of the cube roots of the first 64 primes 2..311). */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\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/** Initial state: first 32 bits of fractional parts of the square roots of the first 8 primes 2..19. */\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n/**\n * Temporary buffer, not used to store anything between runs.\n * Named this way because it matches specification.\n */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_js_1.HashMD {\n constructor() {\n super(64, 32, 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 = (0, utils_js_1.rotr)(W15, 7) ^ (0, utils_js_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_js_1.rotr)(W2, 17) ^ (0, utils_js_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_js_1.rotr)(E, 6) ^ (0, utils_js_1.rotr)(E, 11) ^ (0, utils_js_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_js_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_js_1.rotr)(A, 2) ^ (0, utils_js_1.rotr)(A, 13) ^ (0, utils_js_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_js_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 SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\nexports.SHA256 = SHA256;\n/**\n * Constants taken from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf.\n */\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/** SHA2-256 hash function */\nexports.sha256 = (0, utils_js_1.wrapConstructor)(() => new SHA256());\n/** SHA2-224 hash function */\nexports.sha224 = (0, utils_js_1.wrapConstructor)(() => new 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 = 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 */\nconst _md_js_1 = require(\"./_md.js\");\nconst utils_js_1 = require(\"./utils.js\");\nconst Rho = /* @__PURE__ */ new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = /* @__PURE__ */ new Uint8Array(new Array(16).fill(0).map((_, i) => i));\nconst Pi = /* @__PURE__ */ Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++)\n for (let j of [idxL, idxR])\n j.push(j[i].map((k) => Rho[k]));\nconst shifts = /* @__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) => new Uint8Array(i));\nconst shiftsL = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = /* @__PURE__ */ new Uint32Array([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr = /* @__PURE__ */ new Uint32Array([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n else if (group === 1)\n return (x & y) | (~x & z);\n else if (group === 2)\n return (x | ~y) ^ z;\n else if (group === 3)\n return (x & z) | (y & ~z);\n else\n return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst R_BUF = /* @__PURE__ */ new Uint32Array(16);\nclass RIPEMD160 extends _md_js_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 R_BUF[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 = Kl[group], hbr = Kr[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = ((0, utils_js_1.rotl)(al + f(group, bl, cl, dl) + R_BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = (0, utils_js_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_js_1.rotl)(ar + f(rGroup, br, cr, dr) + R_BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = (0, utils_js_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 R_BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0);\n }\n}\nexports.RIPEMD160 = RIPEMD160;\n/** RIPEMD-160 - a legacy hash function from 1990s. */\nexports.ripemd160 = (0, utils_js_1.wrapConstructor)(() => new 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.add5L = exports.add5H = exports.add4H = exports.add4L = exports.add3H = exports.add3L = exports.rotlBL = exports.rotlBH = exports.rotlSL = exports.rotlSH = exports.rotr32L = exports.rotr32H = exports.rotrBL = exports.rotrBH = exports.rotrSL = exports.rotrSH = exports.shrSL = exports.shrSH = exports.toBig = void 0;\nexports.fromBig = fromBig;\nexports.split = split;\nexports.add = add;\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 let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; 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.sha384 = exports.sha512_256 = exports.sha512_224 = exports.sha512 = exports.SHA384 = exports.SHA512_256 = exports.SHA512_224 = 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 */\nconst _md_js_1 = require(\"./_md.js\");\nconst _u64_js_1 = require(\"./_u64.js\");\nconst utils_js_1 = require(\"./utils.js\");\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => _u64_js_1.default.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))))();\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_js_1.HashMD {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 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_js_1.default.rotrSH(W15h, W15l, 1) ^ _u64_js_1.default.rotrSH(W15h, W15l, 8) ^ _u64_js_1.default.shrSH(W15h, W15l, 7);\n const s0l = _u64_js_1.default.rotrSL(W15h, W15l, 1) ^ _u64_js_1.default.rotrSL(W15h, W15l, 8) ^ _u64_js_1.default.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_js_1.default.rotrSH(W2h, W2l, 19) ^ _u64_js_1.default.rotrBH(W2h, W2l, 61) ^ _u64_js_1.default.shrSH(W2h, W2l, 6);\n const s1l = _u64_js_1.default.rotrSL(W2h, W2l, 19) ^ _u64_js_1.default.rotrBL(W2h, W2l, 61) ^ _u64_js_1.default.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = _u64_js_1.default.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = _u64_js_1.default.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_js_1.default.rotrSH(Eh, El, 14) ^ _u64_js_1.default.rotrSH(Eh, El, 18) ^ _u64_js_1.default.rotrBH(Eh, El, 41);\n const sigma1l = _u64_js_1.default.rotrSL(Eh, El, 14) ^ _u64_js_1.default.rotrSL(Eh, El, 18) ^ _u64_js_1.default.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_js_1.default.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = _u64_js_1.default.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_js_1.default.rotrSH(Ah, Al, 28) ^ _u64_js_1.default.rotrBH(Ah, Al, 34) ^ _u64_js_1.default.rotrBH(Ah, Al, 39);\n const sigma0l = _u64_js_1.default.rotrSL(Ah, Al, 28) ^ _u64_js_1.default.rotrBL(Ah, Al, 34) ^ _u64_js_1.default.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_js_1.default.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_js_1.default.add3L(T1l, sigma0l, MAJl);\n Ah = _u64_js_1.default.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_js_1.default.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = _u64_js_1.default.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = _u64_js_1.default.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = _u64_js_1.default.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = _u64_js_1.default.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = _u64_js_1.default.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = _u64_js_1.default.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = _u64_js_1.default.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 SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\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 SHA512_224 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x8c3d37c8 | 0;\n this.Al = 0x19544da2 | 0;\n this.Bh = 0x73e19966 | 0;\n this.Bl = 0x89dcd4d6 | 0;\n this.Ch = 0x1dfab7ae | 0;\n this.Cl = 0x32ff9c82 | 0;\n this.Dh = 0x679dd514 | 0;\n this.Dl = 0x582f9fcf | 0;\n this.Eh = 0x0f6d2b69 | 0;\n this.El = 0x7bd44da8 | 0;\n this.Fh = 0x77e36f73 | 0;\n this.Fl = 0x04c48942 | 0;\n this.Gh = 0x3f9d85a8 | 0;\n this.Gl = 0x6a1d36c8 | 0;\n this.Hh = 0x1112e6ad | 0;\n this.Hl = 0x91d692a1 | 0;\n this.outputLen = 28;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nexports.SHA512_256 = SHA512_256;\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexports.SHA384 = SHA384;\n/** SHA2-512 hash function. */\nexports.sha512 = (0, utils_js_1.wrapConstructor)(() => new SHA512());\n/** SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks. */\nexports.sha512_224 = (0, utils_js_1.wrapConstructor)(() => new SHA512_224());\n/** SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks. */\nexports.sha512_256 = (0, utils_js_1.wrapConstructor)(() => new SHA512_256());\n/** SHA2-384 hash function. */\nexports.sha384 = (0, utils_js_1.wrapConstructor)(() => new SHA384());\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 throw new Error(\"Failed to connect to any XRPL server\");\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 {\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 } from \"./solana\";\nimport { verifyPersonalSignTIP191 } from \"./tron\";\nimport { verifyCIP8Signature } from \"./cardano\";\nimport { verifyPersonalSignXRPL } from \"./xrpl\";\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 if (proof.address.startsWith(\"solana\")) {\n return verifySolanaSignature(proof as SignatureProof);\n }\n return verifyPersonalSignXRPL(proof as SignatureProof, publicKey);\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 = proof.chainSpecificData?.cardanoCoseKey;\n \n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n try {\n const verified = verifyDataSignature(proof.proof, key, proof.attestation, address);\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","import nacl from \"tweetnacl\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { base64, base58 } from \"@scure/base\";\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 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (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","bitcoincash","litecoin","dogecoin","dash","base58check","createBase58check","Hash","sha256","encodeBase58AddressFormat","version","publicKeyHash","payload","Uint8Array","concat","encode","encodeBech32Address","prefix","bwords","bech32","toWords","unshift","Object","defineProperty","exports","value","crypto","globalThis","undefined","anumber","n","Number","isSafeInteger","Error","abytes","b","lengths","a","ArrayBuffer","isView","constructor","name","length","includes","h","create","outputLen","blockLen","instance","checkFinished","destroyed","finished","out","min","byteSwap","word","nextTick","byteSwapIfBE","isLE","isBytes","u8","arr","buffer","byteOffset","byteLength","u32","Uint32Array","Math","floor","createView","DataView","rotr","shift","rotl","byteSwap32","i","bytesToHex","bytes","_assert_js_1","hex","hexes","hexToBytes","hl","al","array","ai","hi","n1","asciiToBase16","charCodeAt","n2","asyncLoop","async","iters","tick","cb","ts","Date","now","diff","utf8ToBytes","toBytes","concatBytes","arrays","sum","res","pad","set","checkOpts","defaults","opts","toString","call","assign","wrapConstructor","hashCons","hashC","msg","update","digest","tmp","wrapConstructorWithOpts","wrapXOFConstructorWithOpts","randomBytes","bytesLength","crypto_1","getRandomValues","Array","from","_","padStart","asciis","_0","_9","A","F","f","ch","str","TextEncoder","data","clone","this","_cloneInto","equal","HEX_REGEX","views","utils_1","buf1","buf2","dv1","Int8Array","dv2","__createBinding","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","__exportStar","p","prototype","hasOwnProperty","hexToString","toUpperCase","shared_1","test","j","hexByte","slice","byte","parseInt","isNaN","encoding","TextDecoder","decode","stringToHex","string","setBigUint64","view","_32n","BigInt","_u32_max","wh","wl","l","setUint32","HashMD","Chi","c","Maj","utils_js_1","padOffset","super","pos","aexists","len","take","subarray","process","dataView","roundClean","digestInto","aoutput","fill","oview","outLen","state","destroy","to","sha224","SHA256","SHA256_K","SHA256_IV","SHA256_W","_md_js_1","B","C","D","E","G","H","offset","getUint32","W15","W2","s0","s1","T1","T2","SHA224","normalizeInput_1","__importDefault","mod","default","input","isArray","chash","wrapped","hash","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","address","_error","isValidXAddress","xAddressToClassicAddress","encodeXAddress","classicAddressToXAddress","xrp_codec_1","PREFIX_BYTES","main","tag","theTag","decodeXAddress","xAddress","decoded","buf","decodedPrefix","isUint8ArrayForTestAddress","flag","tagFromUint8Array","classicAddress","ripemd160","RIPEMD160","Rho","Id","map","idxL","idxR","push","shifts","shiftsL","idx","shiftsR","Kl","Kr","group","x","y","z","R_BUF","h0","h1","h2","h3","h4","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sl","sr","tl","tr","ripemd160_1","add5L","add5H","add4L","add3H","rotlBL","rotlBH","rotlSH","rotr32L","rotrBL","rotrBH","rotrSH","shrSL","toBig","fromBig","split","add","U32_MASK64","le","lst","Ah","Al","shrSH","_l","s","rotrSL","rotr32H","_h","rotlSL","Bh","Bl","add3L","Cl","low","Ch","Dl","add4H","Dh","El","Eh","sha384","sha512_256","sha512","SHA384","SHA512_224","SHA512","SHA512_Kh","SHA512_Kl","_u64_js_1","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","SHA512_256","sha512_224","sha512_1","Sha512","half","first256","addU32","finish","first256BigInt","bytesToNumberBE","accountPublicFromPublicGenerator","derivePrivateKey","Sha512_1","ZERO","deriveScalar","discrim","order","secp256k1_1","secp256k1","CURVE","hasher","key","root","validator","privateGen","ProjectivePoint","BASE","multiply","toRawBytes","accountIndex","publicGenBytes","rootPubPoint","fromHex","scalar","point","ok","cond","message","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","startsWith","padEnd","join","getValidFormatsTable","keyError","assert_1","require$$1","deriveKeypair","derived","utils_3","privateKey","utils_2","numberToBytesBE","publicKey","getPublicKey","sign","normedPrivateKey","lowS","extraEntropy","toDERHex","verify","signature","Signature","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","bind","v","then","observer","result","callback","onFulfilled","onRejected","e","_this","_isSettledPact","thenable","xrplMainnetWs","proof","ProofTypes","SelfDeclaration","Promise","resolve","_extends","status","confirmed","ProofStatus","VERIFIED","FAILED","Screenshot","url","FLAGGED","CIP8","_proof$chainSpecificD","_proof$address$split","chainSpecificData","cardanoCoseKey","verified","verifyDataSignature","attestation","_unused","reject","verifyCIP8Signature","EIP191","PersonalMessage","getSignPayload","Hex","fromString","Secp256k1","recoverPublicKey","Address","fromPublicKey","error","verifyEIP191","verifyPersonalSignEIP191","base58","messageBytes","signatureBytes","base64","nacl","detached","verifySolanaSignature","_temp2","Buffer","verifyXRPL","_temp","_exit","_temp4","_result2","_temp3","_forOf","server","client","Client","connect","request","command","account","binary","limit","forward","response","disconnect","_response$result","_getSigningPubkeyFrom","latestTx","_latestTx$i$tx_json$S","_latestTx$i","tx_json","SigningPubKey","getSigningPubkeyFromLatestTx","transactions","_catch","errorMessage","console","_getPublicKey","verifyPersonalSignXRPL","EIP712","BIP137","BIP322","chainConfig","getChainConfig","segwit","Boolean","SEGWIT","NATIVE","match","LEGACY","DOGECOIN","BCH","getDerivationMode","checkSegwitAlways","_decodeSignature","sigbytes","flagByte","compressed","recovery","fromCompact","segwitType","P2WPKH","P2SH_P2WPKH","addRecoveryBit","decodeSignature","encodeLength","hash256","magicHash","actual","verifyBIP137","Verifier","verifySignature","verifyBIP322","verifyBTCSignature","TIP191","keccak256","size","PublicKey","toHex","substring","Bytes","checked","verifyTIP191","verifyPersonalSignTIP191"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
import { type OwnershipProof } from "@notabene/javascript-sdk";
|
2
|
-
export declare function verifyProof(proof: OwnershipProof): Promise<OwnershipProof>;
|
2
|
+
export declare function verifyProof(proof: OwnershipProof, publicKey?: string): Promise<OwnershipProof>;
|