@notabene/verify-proof 1.12.0-next.7 → 1.12.0-next.8

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.
Files changed (68) hide show
  1. package/dist/{bitcoin-J22QFAA6.cjs → cjs/bitcoin-6D3KI2GL.cjs} +2 -2
  2. package/dist/cjs/bitcoin-6D3KI2GL.cjs.map +1 -0
  3. package/dist/{cardano-DYBYEAAF.cjs → cjs/cardano-I4TIXDXN.cjs} +5 -21
  4. package/dist/cjs/cardano-I4TIXDXN.cjs.map +1 -0
  5. package/dist/{concordium-5FMO6ONK.cjs → cjs/concordium-Y2CDDEFN.cjs} +2 -2
  6. package/dist/cjs/concordium-Y2CDDEFN.cjs.map +1 -0
  7. package/dist/{cosmos-64MKE5FJ.cjs → cjs/cosmos-S4V4EGEW.cjs} +2 -2
  8. package/dist/cjs/cosmos-S4V4EGEW.cjs.map +1 -0
  9. package/dist/{eth-3DX3PXDU.cjs → cjs/eth-V2XIDQ5K.cjs} +2 -2
  10. package/dist/cjs/eth-V2XIDQ5K.cjs.map +1 -0
  11. package/dist/{index.cjs → cjs/index.cjs} +10 -10
  12. package/dist/cjs/index.cjs.map +1 -0
  13. package/dist/{solana-PQ5K4NGO.cjs → cjs/solana-34EDY5SS.cjs} +6 -22
  14. package/dist/cjs/solana-34EDY5SS.cjs.map +1 -0
  15. package/dist/{tron-F5AARBY4.cjs → cjs/tron-EVR3X3SN.cjs} +2 -2
  16. package/dist/cjs/tron-EVR3X3SN.cjs.map +1 -0
  17. package/dist/{xlm-5GODWWL2.cjs → cjs/xlm-NLK5LUTE.cjs} +2 -2
  18. package/dist/cjs/xlm-NLK5LUTE.cjs.map +1 -0
  19. package/dist/{xrpl-7HQLIDAK.cjs → cjs/xrpl-ANNWPM6W.cjs} +2 -2
  20. package/dist/cjs/xrpl-ANNWPM6W.cjs.map +1 -0
  21. package/dist/{bitcoin-ISUCDKFR.js → esm/bitcoin-QNH3XKWQ.js} +2 -2
  22. package/dist/esm/bitcoin-QNH3XKWQ.js.map +1 -0
  23. package/dist/{cardano-WE6YXYLW.js → esm/cardano-PRKJ672B.js} +4 -4
  24. package/dist/esm/cardano-PRKJ672B.js.map +1 -0
  25. package/dist/{concordium-55YCWLCX.js → esm/concordium-WPUFXEMG.js} +2 -2
  26. package/dist/esm/concordium-WPUFXEMG.js.map +1 -0
  27. package/dist/{cosmos-QMH7BK7S.js → esm/cosmos-72GGSOW5.js} +2 -2
  28. package/dist/esm/cosmos-72GGSOW5.js.map +1 -0
  29. package/dist/{eth-ICLGRJE5.js → esm/eth-O6PU6LLD.js} +2 -2
  30. package/dist/esm/eth-O6PU6LLD.js.map +1 -0
  31. package/dist/{index.js → esm/index.js} +10 -10
  32. package/dist/{index.cjs.map → esm/index.js.map} +1 -1
  33. package/dist/{solana-4KQFLZUC.js → esm/solana-SBGOQBKM.js} +3 -3
  34. package/dist/esm/solana-SBGOQBKM.js.map +1 -0
  35. package/dist/{tron-OBLPB2LN.js → esm/tron-OZWJ7KBW.js} +2 -2
  36. package/dist/esm/tron-OZWJ7KBW.js.map +1 -0
  37. package/dist/{xlm-GX2QGFLI.js → esm/xlm-WD63A2O3.js} +2 -2
  38. package/dist/esm/xlm-WD63A2O3.js.map +1 -0
  39. package/dist/{xrpl-YCDFXBGQ.js → esm/xrpl-XMNIEWXL.js} +2 -2
  40. package/dist/esm/xrpl-XMNIEWXL.js.map +1 -0
  41. package/package.json +13 -8
  42. package/src/cardano.ts +2 -2
  43. package/src/solana.ts +1 -1
  44. package/dist/bitcoin-ISUCDKFR.js.map +0 -1
  45. package/dist/bitcoin-J22QFAA6.cjs.map +0 -1
  46. package/dist/cardano-DYBYEAAF.cjs.map +0 -1
  47. package/dist/cardano-WE6YXYLW.js.map +0 -1
  48. package/dist/concordium-55YCWLCX.js.map +0 -1
  49. package/dist/concordium-5FMO6ONK.cjs.map +0 -1
  50. package/dist/cosmos-64MKE5FJ.cjs.map +0 -1
  51. package/dist/cosmos-QMH7BK7S.js.map +0 -1
  52. package/dist/eth-3DX3PXDU.cjs.map +0 -1
  53. package/dist/eth-ICLGRJE5.js.map +0 -1
  54. package/dist/index.js.map +0 -1
  55. package/dist/solana-4KQFLZUC.js.map +0 -1
  56. package/dist/solana-PQ5K4NGO.cjs.map +0 -1
  57. package/dist/tron-F5AARBY4.cjs.map +0 -1
  58. package/dist/tron-OBLPB2LN.js.map +0 -1
  59. package/dist/xlm-5GODWWL2.cjs.map +0 -1
  60. package/dist/xlm-GX2QGFLI.js.map +0 -1
  61. package/dist/xrpl-7HQLIDAK.cjs.map +0 -1
  62. package/dist/xrpl-YCDFXBGQ.js.map +0 -1
  63. /package/dist/{chunk-OAXNH5XR.cjs → cjs/chunk-OAXNH5XR.cjs} +0 -0
  64. /package/dist/{chunk-OAXNH5XR.cjs.map → cjs/chunk-OAXNH5XR.cjs.map} +0 -0
  65. /package/dist/{index.d.cts → cjs/index.d.cts} +0 -0
  66. /package/dist/{chunk-E3V5ATTC.js → esm/chunk-E3V5ATTC.js} +0 -0
  67. /package/dist/{chunk-E3V5ATTC.js.map → esm/chunk-E3V5ATTC.js.map} +0 -0
  68. /package/dist/{index.d.ts → esm/index.d.ts} +0 -0
@@ -400,5 +400,5 @@ function hash160(buffer) {
400
400
  }
401
401
 
402
402
  exports.verifyBTCSignature = verifyBTCSignature;
403
- //# sourceMappingURL=bitcoin-J22QFAA6.cjs.map
404
- //# sourceMappingURL=bitcoin-J22QFAA6.cjs.map
403
+ //# sourceMappingURL=bitcoin-6D3KI2GL.cjs.map
404
+ //# sourceMappingURL=bitcoin-6D3KI2GL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cashaddr.ts","../../src/bitcoin.ts"],"names":["bech32","ProofStatus","ProofTypes","Verifier","base64","secp256k1","createBase58check","Hash","encodeLength"],"mappings":"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","file":"bitcoin-6D3KI2GL.cjs","sourcesContent":["import { bech32 } from \"@scure/base\";\n\n/**\n * CashAddr base32 character set.\n * Each character maps to its 5-bit index value (0–31).\n * Spec: https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/cashaddr.md\n */\nconst CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\n\n/**\n * Generator polynomials for the CashAddr BCH checksum.\n * These five constants define the GF(2^32) polynomial used to compute\n * and validate the 40-bit checksum appended to every CashAddr string.\n */\nconst GENERATOR = [\n BigInt(\"0x98f2bc8e61\"),\n BigInt(\"0x79b76d99e2\"),\n BigInt(\"0xf33e5fb3c4\"),\n BigInt(\"0xae2eabe2a8\"),\n BigInt(\"0x1e4f43e470\"),\n];\n\n/**\n * Computes the CashAddr BCH checksum over an array of 5-bit values.\n *\n * The input should be the concatenation of:\n * - the prefix expansion (see {@link prefixExpand})\n * - all payload words including the 8 checksum words\n *\n * A valid address produces a result of `0n`; any other value indicates\n * a corrupt or invalid address.\n *\n * @param values - Array of 5-bit integers covering prefix + full payload\n * @returns The 40-bit checksum residue as a bigint (0n = valid)\n */\nfunction polymod(values: number[]): bigint {\n let c = BigInt(1);\n for (const d of values) {\n // Extract the top 5 bits before shifting\n const c0 = c >> BigInt(35);\n // Shift the accumulator left by 5 bits and XOR in the next data word\n c = ((c & BigInt(\"0x07ffffffff\")) << BigInt(5)) ^ BigInt(d);\n // Apply each generator polynomial for set bits in c0\n for (let i = 0; i < 5; i++) {\n if ((c0 >> BigInt(i)) & BigInt(1)) {\n c ^= GENERATOR[i];\n }\n }\n }\n // Final XOR with 1 so a valid address yields 0\n return c ^ BigInt(1);\n}\n\n/**\n * Expands a CashAddr prefix into the form required by the checksum algorithm.\n *\n * Each character of the prefix is reduced to its lower 5 bits, then a zero\n * byte is appended as a separator between the prefix and the payload words.\n *\n * @param prefix - The human-readable prefix (e.g. `\"bitcoincash\"`)\n * @returns Array of 5-bit integers representing the expanded prefix\n */\nfunction prefixExpand(prefix: string): number[] {\n const result: number[] = [];\n for (let i = 0; i < prefix.length; i++) {\n // Keep only the lower 5 bits of each character's ASCII code\n result.push(prefix.charCodeAt(i) & 0x1f);\n }\n // Zero separator between prefix and payload\n result.push(0);\n return result;\n}\n\n/**\n * Decodes a CashAddr string into its prefix, address type, and raw hash.\n *\n * Supports both prefixed (`bitcoincash:q...`) and prefix-less (`q...`) forms.\n * Validates the BCH checksum and rejects non-P2PKH types or malformed input.\n *\n * Address type values (upper nibble of the version byte):\n * - `0` — P2PKH (pay-to-public-key-hash)\n * - `1` — P2SH (pay-to-script-hash)\n *\n * @param address - The CashAddr string to decode\n * @param defaultPrefix - Prefix to assume when none is present in the address (default: `\"bitcoincash\"`)\n * @returns An object with:\n * - `prefix` — the decoded human-readable prefix\n * - `type` — the address type (0 = P2PKH, 1 = P2SH, …)\n * - `hash` — the raw public-key or script hash bytes\n * @throws If the address contains invalid characters, fails the checksum, has a mismatched hash length,\n * contains mixed upper/lower case, or if the payload contains invalid 5-to-8-bit padding\n * (thrown by {@link bech32.fromWords} from `@scure/base`)\n */\nexport function decodeCashAddr(\n address: string,\n defaultPrefix = \"bitcoincash\"\n): { prefix: string; type: number; hash: Uint8Array } {\n let prefix: string;\n\n // Split on \":\" to separate an explicit prefix from the payload\n const colonIndex = address.indexOf(\":\");\n if (colonIndex !== -1) {\n prefix = address.slice(0, colonIndex).toLowerCase();\n } else {\n prefix = defaultPrefix;\n }\n\n // CashAddr spec forbids mixed upper/lower case\n const rawPayload = colonIndex !== -1 ? address.slice(colonIndex + 1) : address;\n if (/[A-Z]/.test(rawPayload) && /[a-z]/.test(rawPayload)) {\n throw new Error(\"Invalid CashAddr: mixed case\");\n }\n const payload = rawPayload.toLowerCase();\n\n // Map each character to its 5-bit index in the CashAddr alphabet\n const words: number[] = [];\n for (const ch of payload) {\n const idx = CHARSET.indexOf(ch);\n if (idx === -1) throw new Error(\"Invalid CashAddr character: \" + ch);\n words.push(idx);\n }\n\n // Minimum length: at least 1 data word + 8 checksum words\n if (words.length < 8) throw new Error(\"CashAddr too short\");\n\n // Verify the BCH checksum over prefix expansion + all payload words\n const checksumData = [...prefixExpand(prefix), ...words];\n if (polymod(checksumData) !== BigInt(0)) {\n throw new Error(\"Invalid CashAddr checksum\");\n }\n\n // Strip the 8 trailing checksum words; the remainder encodes (version_byte || hash)\n const dataWords = words.slice(0, -8);\n // Convert from 5-bit words to 8-bit bytes using bech32.fromWords (equivalent to convertBits(data, 5, 8))\n const payloadBytes = bech32.fromWords(dataWords);\n if (payloadBytes.length === 0) {\n throw new Error(\"Invalid CashAddr padding\");\n }\n\n // The first byte is the version byte: upper nibble = type, lower 3 bits = hash size index\n const versionByte = payloadBytes[0];\n const type = (versionByte >> 3) & 0x0f;\n const hashSizeBits = versionByte & 0x07;\n\n // Look up the expected hash length in bytes from the size index\n const expectedSizes = [20, 24, 28, 32, 40, 48, 56, 64];\n const expectedSize = expectedSizes[hashSizeBits];\n\n const hashBytes = payloadBytes.slice(1);\n if (hashBytes.length !== expectedSize) {\n throw new Error(\n `Hash length mismatch: expected ${expectedSize}, got ${hashBytes.length}`\n );\n }\n\n return { prefix, type, hash: Uint8Array.from(hashBytes) };\n}\n","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\";\nimport { decodeCashAddr } from \"./cashaddr\";\n\nenum SEGWIT_TYPES {\n P2WPKH = \"p2wpkh\",\n P2SH_P2WPKH = \"p2sh(p2wpkh)\",\n}\n\ninterface ChainConfig {\n messagePrefix: string;\n pubKeyHashVersion: number | Uint8Array;\n scriptHashVersion: number | Uint8Array;\n bech32Prefix?: string;\n isTestnet?: boolean;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n bitcoin: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n litecoin: {\n messagePrefix: \"\\u0019Litecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x30, // L... or M...\n scriptHashVersion: 0x32, // 3... or M...\n bech32Prefix: \"ltc\",\n isTestnet: false,\n },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1e, // D...\n scriptHashVersion: 0x16, // A...\n isTestnet: false,\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4c, // X...\n scriptHashVersion: 0x10, // 7...\n isTestnet: false,\n },\n zcash: {\n messagePrefix: \"\\u0018Zcash Signed Message:\\n\",\n pubKeyHashVersion: Uint8Array.from([0x1c, 0xb8]), // <-- FIXED\n scriptHashVersion: Uint8Array.from([0x1c, 0xbd]),\n isTestnet: false,\n },\n\n testnet: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x6f, // m or n\n scriptHashVersion: 0xc4, // 2\n bech32Prefix: \"tb\",\n isTestnet: true,\n },\n};\n\nenum DerivationMode {\n LEGACY = \"Legacy\",\n NATIVE = \"Native SegWit\",\n SEGWIT = \"SegWit\",\n P2SH_SEGWIT = \"p2sh\",\n BCH = \"Bitcoin Cash\",\n ETHEREUM = \"Ethereum\",\n DOGECOIN = \"Dogecoin\",\n UNKNOWN = \"Unknown\",\n}\n\nexport async function verifyBTCSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n // Split on \":\" but rejoin from index 2 onwards so that a prefixed CashAddr\n // like \"bitcoincash:qr...\" in the third segment is preserved whole.\n // e.g. \"bip122:<chainId>:bitcoincash:qr...\" → address = \"bitcoincash:qr...\"\n const parts = proof.address.split(\":\");\n const ns = parts[0];\n const address = parts.slice(2).join(\":\");\n if (ns !== \"bip122\") return { ...proof, status: ProofStatus.FAILED };\n\n // Map chainId to our chain configuration\n const chainConfig = getChainConfig(address);\n if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };\n\n const isZcash = address.startsWith(\"t1\") || address.startsWith(\"t3\");\n if (isZcash) {\n return verifyBIP137(address, proof, chainConfig);\n }\n\n // Use BIP322 for testnet addresses\n if (chainConfig.isTestnet) {\n try {\n return verifyBIP322(address, proof);\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n }\n\n // Check if this is a Taproot address (bc1p or tb1p)\n const isTaproot = address.startsWith(\"bc1p\") || address.startsWith(\"tb1p\");\n\n // For Taproot addresses with BIP-137 proof type, use BIP-322 verification\n // since BIP-137 doesn't officially support Taproot\n if (isTaproot && proof.type === ProofTypes.BIP137) {\n return verifyBIP322(address, proof);\n }\n\n try {\n switch (proof.type) {\n case ProofTypes.BIP137:\n return verifyBIP137(address, proof, chainConfig);\n case ProofTypes.BIP322:\n return verifyBIP322(address, proof);\n default:\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n } catch {\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n}\n\nfunction getChainConfig(address: string): ChainConfig {\n if (\n address.startsWith(\"1\") ||\n address.startsWith(\"3\") ||\n address.startsWith(\"bc1\")\n ) {\n return CHAIN_CONFIGS[\"bitcoin\"];\n }\n if (address.startsWith(\"t1\") || address.startsWith(\"t3\")) {\n return CHAIN_CONFIGS[\"zcash\"];\n }\n if (\n address.startsWith(\"L\") ||\n address.startsWith(\"M\") ||\n address.startsWith(\"ltc1\")\n ) {\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\") || address.startsWith(\"bitcoincash:\")) {\n return CHAIN_CONFIGS[\"bitcoincash\"];\n }\n // Bitcoin testnet addresses can start with \"m\", \"n\", \"2\", or \"tb1\"\n if (\n address.startsWith(\"m\") ||\n address.startsWith(\"n\") ||\n address.startsWith(\"2\") ||\n address.startsWith(\"tb1\")\n ) {\n return CHAIN_CONFIGS[\"testnet\"]\n }\n\n return CHAIN_CONFIGS[\"bitcoin\"];\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(\n address: string,\n proof: SignatureProof,\n chainConfig: ChainConfig\n) {\n const derivationMode = getDerivationMode(address);\n\n // For legacy addresses (starting with \"1\"), never use SegWit encoding\n // For P2SH addresses (starting with \"3\"), use SegWit encoding if they have bech32 support\n // For native SegWit addresses (bc1, tb1, ltc1), always use SegWit encoding\n const useSegwitEncoding = Boolean(\n chainConfig.bech32Prefix &&\n (derivationMode === DerivationMode.NATIVE ||\n (derivationMode === DerivationMode.SEGWIT && !address.startsWith(\"1\")))\n );\n\n const verified = verify(\n proof.attestation,\n address,\n proof.proof,\n useSegwitEncoding,\n chainConfig\n );\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).*\") || address.startsWith(\"bitcoincash:\")) {\n return DerivationMode.BCH;\n } else if (address.match(\"^(t1|t3).*\")) {\n return DerivationMode.LEGACY; // Zcash addresses\n } else if (address.match(\"^[X7].*\")) {\n return DerivationMode.LEGACY; // Dash addresses\n } else {\n throw new Error(\n \"INVALID ADDRESS: \"\n .concat(address)\n .concat(\" is not a valid or a supported address\")\n );\n }\n}\n\ntype DecodedSignature = {\n compressed: boolean;\n segwitType?: SEGWIT_TYPES;\n signature: SignatureType;\n};\n\nfunction decodeSignature(proof: string): DecodedSignature {\n const sigbytes = base64.decode(proof);\n if (sigbytes.length !== 65) throw new Error(\"Invalid signature length\");\n const flagByte = sigbytes[0] - 27;\n if (flagByte > 15 || flagByte < 0) {\n throw new Error(\"Invalid signature parameter\");\n }\n const compressed = !!(flagByte & 12); // Are there cases that aren't compressed?\n const recovery = flagByte & 3;\n const signature = secp256k1.Signature.fromCompact(sigbytes.slice(1));\n\n return {\n compressed,\n segwitType: !(flagByte & 8)\n ? undefined\n : !(flagByte & 4)\n ? SEGWIT_TYPES.P2SH_P2WPKH\n : SEGWIT_TYPES.P2WPKH,\n signature: signature.addRecoveryBit(recovery),\n };\n}\n\nfunction verify(\n attestation: string,\n address: string,\n proof: string,\n checkSegwitAlways: boolean,\n chainConfig: ChainConfig\n) {\n const { compressed, segwitType, signature } = decodeSignature(proof);\n if (checkSegwitAlways && !compressed) {\n throw new Error(\n \"checkSegwitAlways can only be used with a compressed pubkey signature flagbyte\"\n );\n }\n const hash = magicHash(attestation, chainConfig.messagePrefix);\n const publicKey = signature.recoverPublicKey(hash);\n const publicKeyBytes = publicKey.toRawBytes(compressed);\n const publicKeyHash = hash160(publicKeyBytes);\n // Special handling for Bitcoin Cash addresses\n if (address.startsWith(\"q\") || address.startsWith(\"bitcoincash:\")) {\n try {\n const decoded = decodeCashAddr(address);\n if (decoded.type !== 0) return false; // Must be P2PKH\n if (decoded.hash.length !== publicKeyHash.length) return false;\n for (let i = 0; i < decoded.hash.length; i++) {\n if (decoded.hash[i] !== publicKeyHash[i]) return false;\n }\n return true;\n } catch {\n return false;\n }\n }\n\n let actual: string = \"\";\n\n if (segwitType) {\n if (segwitType === SEGWIT_TYPES.P2SH_P2WPKH) {\n // P2SH-P2WPKH: address is hash160 of the witness redeem script, not the raw pubkey hash\n const redeemScript = new Uint8Array(22);\n redeemScript[0] = 0x00; // OP_0\n redeemScript[1] = 0x14; // push 20 bytes\n redeemScript.set(publicKeyHash, 2);\n const redeemScriptHash = hash160(redeemScript);\n actual = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n redeemScriptHash\n );\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(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n }\n } else {\n // For addresses starting with \"3\" (P2SH), try both P2SH-P2WPKH and legacy P2SH encodings if segwitType is undefined\n if (address.startsWith(\"3\") && !segwitType) {\n // P2SH-P2WPKH: script hash of the redeem script (OP_0 <pubkeyhash>)\n const redeemScript = new Uint8Array(22);\n redeemScript[0] = 0x00; // OP_0\n redeemScript[1] = 0x14; // push 20 bytes\n redeemScript.set(publicKeyHash, 2);\n const redeemScriptHash = hash160(redeemScript);\n const p2shP2wpkh = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n redeemScriptHash\n );\n // Legacy P2SH: script hash of the public key\n const legacyP2sh = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n if (address === p2shP2wpkh || address === legacyP2sh) {\n return true;\n }\n actual = legacyP2sh; // fallback for error reporting\n } else if (address.startsWith(\"bc1q\") || address.startsWith(\"tb1q\") || address.startsWith(\"ltc1q\")) {\n // For native SegWit P2WPKH addresses (bc1q/tb1q/ltc1q), always encode as bech32\n // This handles Ledger wallets that sign without segwit flags\n if (chainConfig.bech32Prefix) {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n } else {\n actual = encodeBase58AddressFormat(\n chainConfig.pubKeyHashVersion,\n publicKeyHash\n );\n }\n } else if (checkSegwitAlways && chainConfig.bech32Prefix) {\n try {\n actual = encodeBech32Address(publicKeyHash, chainConfig.bech32Prefix);\n // if address is bech32 it is not p2sh\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n actual = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\n );\n // base58 can be p2pkh or p2sh-p2wpkh\n }\n } else {\n actual = encodeBase58AddressFormat(\n chainConfig.pubKeyHashVersion,\n publicKeyHash\n );\n }\n }\n\n return actual === address;\n}\n\nconst base58check = createBase58check(Hash.sha256);\n\nfunction encodeBase58AddressFormat(\n version: number | Uint8Array,\n publicKeyHash: Uint8Array\n) {\n const prefixBytes =\n typeof version === \"number\" ? Uint8Array.of(version) : version; // Accept raw Uint8Array for Zcash\n\n const payload = new Uint8Array(prefixBytes.length + publicKeyHash.length);\n payload.set(prefixBytes);\n payload.set(publicKeyHash, prefixBytes.length);\n return base58check.encode(payload);\n}\n\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(\n publicKeyHash: Uint8Array,\n prefix: string = \"bc\"\n): 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}\n"]}
@@ -5,25 +5,9 @@ require('./chunk-OAXNH5XR.cjs');
5
5
  var verifyDataSignature = require('@cardano-foundation/cardano-verify-datasignature');
6
6
  var javascriptSdk = require('@notabene/javascript-sdk');
7
7
 
8
- function _interopNamespace(e) {
9
- if (e && e.__esModule) return e;
10
- var n = Object.create(null);
11
- if (e) {
12
- Object.keys(e).forEach(function (k) {
13
- if (k !== 'default') {
14
- var d = Object.getOwnPropertyDescriptor(e, k);
15
- Object.defineProperty(n, k, d.get ? d : {
16
- enumerable: true,
17
- get: function () { return e[k]; }
18
- });
19
- }
20
- });
21
- }
22
- n.default = e;
23
- return Object.freeze(n);
24
- }
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
25
9
 
26
- var verifyDataSignature__namespace = /*#__PURE__*/_interopNamespace(verifyDataSignature);
10
+ var verifyDataSignature__default = /*#__PURE__*/_interopDefault(verifyDataSignature);
27
11
 
28
12
  if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
29
13
  async function verifyCIP8Signature(proof) {
@@ -33,7 +17,7 @@ async function verifyCIP8Signature(proof) {
33
17
  return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
34
18
  }
35
19
  try {
36
- const verified = verifyDataSignature__namespace.default(
20
+ const verified = verifyDataSignature__default.default(
37
21
  proof.proof,
38
22
  key,
39
23
  proof.attestation,
@@ -49,5 +33,5 @@ async function verifyCIP8Signature(proof) {
49
33
  }
50
34
 
51
35
  exports.verifyCIP8Signature = verifyCIP8Signature;
52
- //# sourceMappingURL=cardano-DYBYEAAF.cjs.map
53
- //# sourceMappingURL=cardano-DYBYEAAF.cjs.map
36
+ //# sourceMappingURL=cardano-I4TIXDXN.cjs.map
37
+ //# sourceMappingURL=cardano-I4TIXDXN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cardano.ts"],"names":["ProofStatus","verifyDataSignature"],"mappings":";;;;;;;;;;;;AAGA,eAAsB,oBACpB,KAAA,EACyB;AACzB,EAAA,MAAM,CAAC,MAAM,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/C,EAAA,MAAM,GAAA,GACJ,MAAM,iBAAA,IAAqB,gBAAA,IAAoB,MAAM,iBAAA,GACjD,KAAA,CAAM,kBAAkB,cAAA,GACxB,IAAA;AAEN,EAAA,IAAI,EAAA,KAAO,SAAA,IAAa,CAAC,GAAA,EAAK;AAC5B,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAWC,oCAAA;AAAA,MACf,KAAA,CAAM,KAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA,CAAM,WAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,QAAA,GAAWD,yBAAA,CAAY,QAAA,GAAWA,yBAAA,CAAY;AAAA,KACxD;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AACF","file":"cardano-I4TIXDXN.cjs","sourcesContent":["import verifyDataSignature from \"@cardano-foundation/cardano-verify-datasignature\";\nimport { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\nexport async function verifyCIP8Signature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n const key =\n proof.chainSpecificData && \"cardanoCoseKey\" in proof.chainSpecificData\n ? proof.chainSpecificData.cardanoCoseKey\n : null;\n\n if (ns !== \"cardano\" || !key) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n const verified = verifyDataSignature(\n proof.proof,\n key,\n proof.attestation,\n address\n );\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n"]}
@@ -41,5 +41,5 @@ var verifyConcordiumSignature = async (proof) => {
41
41
  };
42
42
 
43
43
  exports.verifyConcordiumSignature = verifyConcordiumSignature;
44
- //# sourceMappingURL=concordium-5FMO6ONK.cjs.map
45
- //# sourceMappingURL=concordium-5FMO6ONK.cjs.map
44
+ //# sourceMappingURL=concordium-Y2CDDEFN.cjs.map
45
+ //# sourceMappingURL=concordium-Y2CDDEFN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/concordium.ts"],"names":["ProofStatus"],"mappings":";;;;;;;AAGA,IAAM,uBAAA,GACJ,qDAAA;AAOK,IAAM,yBAAA,GAA4B,OACvC,KAAA,KAC4B;AAC5B,EAAA,MAAM,CAAC,EAAE,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAEpC,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAG/C,IAAA,IAAI,gBAAA,CAAiB,mBAAA,KAAwB,KAAA,CAAM,WAAA,EAAa;AAC9D,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AAGA,IAAA,IACE,CAAC,gBAAA,CAAiB,oBAAA,IAClB,gBAAA,CAAiB,oBAAA,CAAqB,WAAW,CAAA,EACjD;AACA,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,uBAAuB,CAAA,UAAA,CAAA,EAAc;AAAA,MACnE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,gBAAgB;AAAA,KACtC,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,EAAK;AACtC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA;AAAA,IACtE;AAGA,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAQA,yBAAA,CAAY;AAAA,KACtB;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAQA,yBAAA,CAAY;AAAA,KACtB;AAAA,EACF;AACF","file":"concordium-Y2CDDEFN.cjs","sourcesContent":["import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\nimport { VerifiablePresentation } from \"@concordium/web-sdk\";\n\nconst CONCORDIUM_VERIFIER_URL =\n \"https://web3id-verifier.mainnet.concordium.software\";\n\n/**\n * Verifies a Concordium signature proof using Concordium's hosted verifier service\n * @param proof The signature proof to verify\n * @returns Promise resolving to the proof with updated status\n */\nexport const verifyConcordiumSignature = async (\n proof: SignatureProof,\n): Promise<SignatureProof> => {\n const [ns] = proof.address.split(/:/);\n\n if (ns !== \"ccd\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n const presentationJson = JSON.parse(proof.proof) as VerifiablePresentation;\n\n // Validate presentation context matches attestation\n if (presentationJson.presentationContext !== proof.attestation) {\n throw new Error(\"Presentation context does not match attestation\");\n }\n\n // Validate verifiableCredential exists and is not empty\n if (\n !presentationJson.verifiableCredential ||\n presentationJson.verifiableCredential.length === 0\n ) {\n throw new Error(\"Verifiable credential is missing or empty\");\n }\n\n // Use Concordium's hosted verifier instead of gRPC\n const response = await fetch(`${CONCORDIUM_VERIFIER_URL}/v0/verify`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(presentationJson),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Verifier returned ${response.status}: ${errorText}`);\n }\n\n // If we get here, the proof is valid\n return {\n ...proof,\n status: ProofStatus.VERIFIED,\n };\n } catch {\n return {\n ...proof,\n status: ProofStatus.FAILED,\n };\n }\n};\n"]}
@@ -679,5 +679,5 @@ async function verifyCosmosSignature(proof) {
679
679
  */
680
680
 
681
681
  exports.verifyCosmosSignature = verifyCosmosSignature;
682
- //# sourceMappingURL=cosmos-64MKE5FJ.cjs.map
683
- //# sourceMappingURL=cosmos-64MKE5FJ.cjs.map
682
+ //# sourceMappingURL=cosmos-S4V4EGEW.cjs.map
683
+ //# sourceMappingURL=cosmos-S4V4EGEW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../node_modules/bech32/dist/index.js","../../src/cosmos.ts","../../node_modules/@noble/hashes/src/utils.ts","../../node_modules/@noble/hashes/src/_md.ts","../../node_modules/@noble/hashes/src/legacy.ts","../../node_modules/@noble/hashes/src/sha2.ts"],"names":["__commonJS","__toESM","ProofStatus","serializeSignDoc","secp256k1"],"mappings":"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","file":"cosmos-S4V4EGEW.cjs","sourcesContent":["'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n","import {\n CosmosMetadata,\n ProofStatus,\n SignatureProof,\n} from \"@notabene/javascript-sdk\";\nimport { bech32 } from \"bech32\";\nimport { StdSignDoc, serializeSignDoc } from \"@cosmjs/amino\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { ripemd160 } from \"@noble/hashes/legacy\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\n// Base64 decode\nfunction base64ToUint8Array(base64: string): Uint8Array {\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\n// Base64 encode UTF-8 bytes\nfunction toBase64Bytes(str: string): string {\n const utf8 = new TextEncoder().encode(str);\n let binary = \"\";\n for (let i = 0; i < utf8.length; i++) {\n binary += String.fromCharCode(utf8[i]);\n }\n return btoa(binary);\n}\n\n// Cosmos address derivation (ADR-36)\n// https://github.com/cosmos/cosmos-sdk/blob/214b11dcbaa129f7b4c0013b2103db9d54b85e9e/docs/architecture/adr-036-arbitrary-signature.md\nfunction deriveCosmosAddress(pubkey: Uint8Array, prefix = \"cosmos\"): string {\n const sha = sha256(pubkey);\n const rip = ripemd160(sha);\n return bech32.encode(prefix, bech32.toWords(rip));\n}\n\nexport async function verifyCosmosSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n try {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"cosmos\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Parse the proof JSON\n const pubKeyBytes = base64ToUint8Array(\n (proof.chainSpecificData as CosmosMetadata).pub_key.value\n );\n const signatureBytes = base64ToUint8Array(proof.proof);\n\n // Step 1: Derive address from pubkey\n const derivedAddress = deriveCosmosAddress(pubKeyBytes);\n if (derivedAddress !== address) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Step 2: Build MsgSignData + StdSignDoc\n const signDoc: StdSignDoc = {\n chain_id: \"\", // must match the signing process\n account_number: \"0\",\n sequence: \"0\",\n fee: { amount: [], gas: \"0\" },\n msgs: [\n {\n type: \"sign/MsgSignData\",\n value: {\n signer: address,\n data: toBase64Bytes(proof.attestation),\n },\n },\n ],\n memo: \"\",\n };\n\n // Step 3: Serialize + hash\n const signBytes = await serializeSignDoc(signDoc);\n const digest = sha256(signBytes);\n\n // Step 4: Verify using secp256k1\n const verified = secp256k1.verify(signatureBytes, digest, pubKeyBytes);\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) 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\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\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\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\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 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) 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/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\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) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\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 as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => 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}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') 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\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) 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: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) 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) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\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?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nimport { Chi, HashMD, Maj } from './_md.ts';\nimport { type CHash, clean, createHasher, rotl } from './utils.ts';\n\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n\n/** SHA1 legacy hash class. */\nexport class SHA1 extends HashMD<SHA1> {\n private A = SHA1_IV[0] | 0;\n private B = SHA1_IV[1] | 0;\n private C = SHA1_IV[2] | 0;\n private D = SHA1_IV[3] | 0;\n private E = SHA1_IV[4] | 0;\n\n constructor() {\n super(64, 20, 8, false);\n }\n protected get(): [number, number, number, number, number] {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n protected set(A: number, B: number, C: number, D: number, E: number): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n protected process(view: DataView, offset: number): void {\n for (let i = 0; i < 16; i++, offset += 4) SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n } else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n } else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n } else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n protected roundClean(): void {\n clean(SHA1_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexport const sha1: CHash = /* @__PURE__ */ createHasher(() => new SHA1());\n\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) =>\n Math.floor(p32 * Math.abs(Math.sin(i + 1)))\n);\n\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nexport class MD5 extends HashMD<MD5> {\n private A = MD5_IV[0] | 0;\n private B = MD5_IV[1] | 0;\n private C = MD5_IV[2] | 0;\n private D = MD5_IV[3] | 0;\n\n constructor() {\n super(64, 16, 8, true);\n }\n protected get(): [number, number, number, number] {\n const { A, B, C, D } = this;\n return [A, B, C, D];\n }\n protected set(A: number, B: number, C: number, D: number): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n }\n protected process(view: DataView, offset: number): void {\n for (let i = 0; i < 16; i++, offset += 4) MD5_W[i] = view.getUint32(offset, true);\n // Compression function main loop, 64 rounds\n let { A, B, C, D } = this;\n for (let i = 0; i < 64; i++) {\n let F, g, s;\n if (i < 16) {\n F = Chi(B, C, D);\n g = i;\n s = [7, 12, 17, 22];\n } else if (i < 32) {\n F = Chi(D, B, C);\n g = (5 * i + 1) % 16;\n s = [5, 9, 14, 20];\n } else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n s = [4, 11, 16, 23];\n } else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n s = [6, 10, 15, 21];\n }\n F = F + A + K[i] + MD5_W[g];\n A = D;\n D = C;\n C = B;\n B = B + rotl(F, s[i % 4]);\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n this.set(A, B, C, D);\n }\n protected roundClean(): void {\n clean(MD5_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexport const md5: CHash = /* @__PURE__ */ createHasher(() => new MD5());\n\n// RIPEMD-160\n\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++) for (let j of res) j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\n\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group: number, x: number, y: number, z: number): number {\n if (group === 0) return x ^ y ^ z;\n if (group === 1) return (x & y) | (~x & z);\n if (group === 2) return (x | ~y) ^ z;\n if (group === 3) return (x & z) | (y & ~z);\n return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends HashMD<RIPEMD160> {\n private h0 = 0x67452301 | 0;\n private h1 = 0xefcdab89 | 0;\n private h2 = 0x98badcfe | 0;\n private h3 = 0x10325476 | 0;\n private h4 = 0xc3d2e1f0 | 0;\n\n constructor() {\n super(64, 20, 8, true);\n }\n protected get(): [number, number, number, number, number] {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n protected set(h0: number, h1: number, h2: number, h3: number, h4: number): void {\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 protected process(view: DataView, offset: number): void {\n for (let i = 0; i < 16; i++, offset += 4) BUF_160[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al,\n bl = this.h1 | 0, br = bl,\n cl = this.h2 | 0, cr = cl,\n dl = this.h3 | 0, dr = dl,\n el = this.h4 | 0, er = el;\n\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set(\n (this.h1 + cl + dr) | 0,\n (this.h2 + dl + er) | 0,\n (this.h3 + el + ar) | 0,\n (this.h4 + al + br) | 0,\n (this.h0 + bl + cr) | 0\n );\n }\n protected roundClean(): void {\n clean(BUF_160);\n }\n destroy(): void {\n this.destroyed = true;\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0);\n }\n}\n\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexport const ripemd160: CHash = /* @__PURE__ */ createHasher(() => new RIPEMD160());\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor(outputLen: number = 32) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\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 protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\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 protected process(view: DataView, offset: number): void {\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) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\nexport class SHA224 extends SHA256 {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD<SHA512> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor(outputLen: number = 64) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\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 protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\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 protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\nexport class SHA384 extends SHA512 {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\nexport class SHA512_256 extends SHA512 {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n"]}
@@ -33,5 +33,5 @@ async function verifyPersonalSignEIP191(proof) {
33
33
 
34
34
  exports.verifyEIP191 = verifyEIP191;
35
35
  exports.verifyPersonalSignEIP191 = verifyPersonalSignEIP191;
36
- //# sourceMappingURL=eth-3DX3PXDU.cjs.map
37
- //# sourceMappingURL=eth-3DX3PXDU.cjs.map
36
+ //# sourceMappingURL=eth-V2XIDQ5K.cjs.map
37
+ //# sourceMappingURL=eth-V2XIDQ5K.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/eth.ts"],"names":["PersonalMessage","Hex","Signature","Secp256k1","Address","ProofStatus"],"mappings":";;;;;;;;AAGO,SAAS,YAAA,CACd,OAAA,EACA,OAAA,EACA,KAAA,EACS;AACT,EAAA,IAAI;AACF,IAAA,MAAM,UAAUA,kBAAA,CAAgB,cAAA,CAAeC,MAAA,CAAI,UAAA,CAAW,OAAO,CAAC,CAAA;AACtE,IAAA,MAAM,SAAA,GAAYC,YAAA,CAAU,OAAA,CAAQ,KAAK,CAAA;AACzC,IAAA,MAAM,YAAYC,YAAA,CAAU,gBAAA,CAAiB,EAAE,OAAA,EAAS,WAAW,CAAA;AACnE,IAAA,MAAM,YAAYC,UAAA,CAAQ,QAAA,CAASA,UAAA,CAAQ,aAAA,CAAc,SAAS,CAAC,CAAA;AACnE,IAAA,OAAO,SAAA,CAAU,QAAA,EAAS,KAAMA,UAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,EAE1D,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAsB,yBACpB,KAAA,EACyB;AACzB,EAAA,MAAM,CAAC,MAAM,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC/C,EAAA,IAAI,EAAA,KAAO,UAAU,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQC,0BAAY,MAAA,EAAO;AAEnE,EAAA,MAAM,QAAA,GAAW,YAAA;AAAA,IACf,OAAA;AAAA,IACA,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AACA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAA,EAAQ,QAAA,GAAWA,yBAAA,CAAY,QAAA,GAAWA,yBAAA,CAAY;AAAA,GACxD;AACF","file":"eth-V2XIDQ5K.cjs","sourcesContent":["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"]}
@@ -18,45 +18,45 @@ async function verifyProof(proof, publicKey) {
18
18
  status: proof.url ? javascriptSdk.ProofStatus.FLAGGED : javascriptSdk.ProofStatus.FAILED
19
19
  };
20
20
  case javascriptSdk.ProofTypes.CIP8: {
21
- const { verifyCIP8Signature } = await import('./cardano-DYBYEAAF.cjs');
21
+ const { verifyCIP8Signature } = await import('./cardano-I4TIXDXN.cjs');
22
22
  return verifyCIP8Signature(proof);
23
23
  }
24
24
  case javascriptSdk.ProofTypes.EIP191: {
25
- const { verifyPersonalSignEIP191 } = await import('./eth-3DX3PXDU.cjs');
25
+ const { verifyPersonalSignEIP191 } = await import('./eth-V2XIDQ5K.cjs');
26
26
  return verifyPersonalSignEIP191(proof);
27
27
  }
28
28
  case javascriptSdk.ProofTypes.ED25519: {
29
- const { verifySolanaSignature } = await import('./solana-PQ5K4NGO.cjs');
29
+ const { verifySolanaSignature } = await import('./solana-34EDY5SS.cjs');
30
30
  return verifySolanaSignature(proof);
31
31
  }
32
32
  case javascriptSdk.ProofTypes.SOL_SIWX: {
33
- const { verifySolanaSIWS } = await import('./solana-PQ5K4NGO.cjs');
33
+ const { verifySolanaSIWS } = await import('./solana-34EDY5SS.cjs');
34
34
  return verifySolanaSIWS(proof);
35
35
  }
36
36
  case javascriptSdk.ProofTypes.XRP_ED25519: {
37
- const { verifyPersonalSignXRPL } = await import('./xrpl-7HQLIDAK.cjs');
37
+ const { verifyPersonalSignXRPL } = await import('./xrpl-ANNWPM6W.cjs');
38
38
  return verifyPersonalSignXRPL(proof, publicKey);
39
39
  }
40
40
  case javascriptSdk.ProofTypes.XLM_ED25519: {
41
- const { verifyStellarSignature } = await import('./xlm-5GODWWL2.cjs');
41
+ const { verifyStellarSignature } = await import('./xlm-NLK5LUTE.cjs');
42
42
  return verifyStellarSignature(proof);
43
43
  }
44
44
  case javascriptSdk.ProofTypes.CONCORDIUM: {
45
- const { verifyConcordiumSignature } = await import('./concordium-5FMO6ONK.cjs');
45
+ const { verifyConcordiumSignature } = await import('./concordium-Y2CDDEFN.cjs');
46
46
  return verifyConcordiumSignature(proof);
47
47
  }
48
48
  case javascriptSdk.ProofTypes.COSMOS: {
49
- const { verifyCosmosSignature } = await import('./cosmos-64MKE5FJ.cjs');
49
+ const { verifyCosmosSignature } = await import('./cosmos-S4V4EGEW.cjs');
50
50
  return verifyCosmosSignature(proof);
51
51
  }
52
52
  case javascriptSdk.ProofTypes.EIP712:
53
53
  case javascriptSdk.ProofTypes.BIP137:
54
54
  case javascriptSdk.ProofTypes.BIP322: {
55
- const { verifyBTCSignature } = await import('./bitcoin-J22QFAA6.cjs');
55
+ const { verifyBTCSignature } = await import('./bitcoin-6D3KI2GL.cjs');
56
56
  return verifyBTCSignature(proof);
57
57
  }
58
58
  case javascriptSdk.ProofTypes.TIP191: {
59
- const { verifyPersonalSignTIP191 } = await import('./tron-F5AARBY4.cjs');
59
+ const { verifyPersonalSignTIP191 } = await import('./tron-EVR3X3SN.cjs');
60
60
  return verifyPersonalSignTIP191(proof);
61
61
  }
62
62
  case javascriptSdk.ProofTypes.MicroTransfer:
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["ProofTypes","ProofStatus"],"mappings":";;;;;;;AAUA,eAAsB,WAAA,CACpB,OACA,SAAA,EACyB;AACzB,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAKA,wBAAA,CAAW,eAAA;AACd,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAS,KAAA,CAA2B,SAAA,GAChCC,yBAAA,CAAY,WACZA,yBAAA,CAAY;AAAA,OAClB;AAAA,IACF,KAAKD,wBAAA,CAAW,UAAA;AACd,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAS,KAAA,CAA0B,GAAA,GAC/BC,yBAAA,CAAY,UACZA,yBAAA,CAAY;AAAA,OAClB;AAAA,IACF,KAAKD,yBAAW,IAAA,EAAM;AACpB,MAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,OAAO,wBAAW,CAAA;AACxD,MAAA,OAAO,oBAAoB,KAAuB,CAAA;AAAA,IACpD;AAAA,IACA,KAAKA,yBAAW,MAAA,EAAQ;AACtB,MAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,oBAAO,CAAA;AACzD,MAAA,OAAO,yBAAyB,KAAuB,CAAA;AAAA,IACzD;AAAA,IACA,KAAKA,yBAAW,OAAA,EAAS;AACvB,MAAA,MAAM,EAAE,qBAAA,EAAsB,GAAI,MAAM,OAAO,uBAAU,CAAA;AACzD,MAAA,OAAO,sBAAsB,KAAuB,CAAA;AAAA,IACtD;AAAA,IACA,KAAKA,yBAAW,QAAA,EAAU;AACxB,MAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,OAAO,uBAAU,CAAA;AACpD,MAAA,OAAO,iBAAiB,KAAuB,CAAA;AAAA,IACjD;AAAA,IACA,KAAKA,yBAAW,WAAA,EAAa;AAC3B,MAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,qBAAQ,CAAA;AACxD,MAAA,OAAO,sBAAA,CAAuB,OAAyB,SAAS,CAAA;AAAA,IAClE;AAAA,IACA,KAAKA,yBAAW,WAAA,EAAa;AAC3B,MAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,oBAAO,CAAA;AACvD,MAAA,OAAO,uBAAuB,KAAuB,CAAA;AAAA,IACvD;AAAA,IACA,KAAKA,yBAAW,UAAA,EAAY;AAC1B,MAAA,MAAM,EAAE,yBAAA,EAA0B,GAAI,MAAM,OAAO,2BAAc,CAAA;AACjE,MAAA,OAAO,0BAA0B,KAAuB,CAAA;AAAA,IAC1D;AAAA,IACA,KAAKA,yBAAW,MAAA,EAAQ;AACtB,MAAA,MAAM,EAAE,qBAAA,EAAsB,GAAI,MAAM,OAAO,uBAAU,CAAA;AACzD,MAAA,OAAO,sBAAsB,KAAuB,CAAA;AAAA,IACtD;AAAA,IACA,KAAKA,wBAAA,CAAW,MAAA;AAAA,IAChB,KAAKA,wBAAA,CAAW,MAAA;AAAA,IAChB,KAAKA,yBAAW,MAAA,EAAQ;AACtB,MAAA,MAAM,EAAE,kBAAA,EAAmB,GAAI,MAAM,OAAO,wBAAW,CAAA;AACvD,MAAA,OAAO,mBAAmB,KAAuB,CAAA;AAAA,IACnD;AAAA,IACA,KAAKA,yBAAW,MAAA,EAAQ;AACtB,MAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,qBAAQ,CAAA;AAC1D,MAAA,OAAO,yBAAyB,KAAuB,CAAA;AAAA,IACzD;AAAA,IACA,KAAKA,wBAAA,CAAW,aAAA;AAAA;AAElB,EAAA,OAAO,KAAA;AACT","file":"index.cjs","sourcesContent":["import {\n type OwnershipProof,\n SignatureProof,\n DeclarationProof,\n ScreenshotProof,\n ProofTypes,\n ProofStatus,\n} from \"@notabene/javascript-sdk\";\n\n// Use dynamic imports to ensure Buffer is available before loading crypto libraries\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 const { verifyCIP8Signature } = await import(\"./cardano\");\n return verifyCIP8Signature(proof as SignatureProof);\n }\n case ProofTypes.EIP191: {\n const { verifyPersonalSignEIP191 } = await import(\"./eth\");\n return verifyPersonalSignEIP191(proof as SignatureProof);\n }\n case ProofTypes.ED25519: {\n const { verifySolanaSignature } = await import(\"./solana\");\n return verifySolanaSignature(proof as SignatureProof);\n }\n case ProofTypes.SOL_SIWX: {\n const { verifySolanaSIWS } = await import(\"./solana\");\n return verifySolanaSIWS(proof as SignatureProof);\n }\n case ProofTypes.XRP_ED25519: {\n const { verifyPersonalSignXRPL } = await import(\"./xrpl\");\n return verifyPersonalSignXRPL(proof as SignatureProof, publicKey);\n }\n case ProofTypes.XLM_ED25519: {\n const { verifyStellarSignature } = await import(\"./xlm\");\n return verifyStellarSignature(proof as SignatureProof);\n }\n case ProofTypes.CONCORDIUM: {\n const { verifyConcordiumSignature } = await import(\"./concordium\");\n return verifyConcordiumSignature(proof as SignatureProof);\n }\n case ProofTypes.COSMOS: {\n const { verifyCosmosSignature } = await import(\"./cosmos\");\n return verifyCosmosSignature(proof as SignatureProof);\n }\n case ProofTypes.EIP712:\n case ProofTypes.BIP137:\n case ProofTypes.BIP322: {\n const { verifyBTCSignature } = await import(\"./bitcoin\");\n return verifyBTCSignature(proof as SignatureProof);\n }\n case ProofTypes.TIP191: {\n const { verifyPersonalSignTIP191 } = await import(\"./tron\");\n return verifyPersonalSignTIP191(proof as SignatureProof);\n }\n case ProofTypes.MicroTransfer:\n }\n return proof;\n}\n"]}
@@ -6,25 +6,9 @@ var nacl = require('tweetnacl');
6
6
  var javascriptSdk = require('@notabene/javascript-sdk');
7
7
  var base = require('@scure/base');
8
8
 
9
- function _interopNamespace(e) {
10
- if (e && e.__esModule) return e;
11
- var n = Object.create(null);
12
- if (e) {
13
- Object.keys(e).forEach(function (k) {
14
- if (k !== 'default') {
15
- var d = Object.getOwnPropertyDescriptor(e, k);
16
- Object.defineProperty(n, k, d.get ? d : {
17
- enumerable: true,
18
- get: function () { return e[k]; }
19
- });
20
- }
21
- });
22
- }
23
- n.default = e;
24
- return Object.freeze(n);
25
- }
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
10
 
27
- var nacl__namespace = /*#__PURE__*/_interopNamespace(nacl);
11
+ var nacl__default = /*#__PURE__*/_interopDefault(nacl);
28
12
 
29
13
  if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
30
14
  async function verifySolanaSignature(proof) {
@@ -34,7 +18,7 @@ async function verifySolanaSignature(proof) {
34
18
  const publicKey = base.base58.decode(address);
35
19
  const messageBytes = new TextEncoder().encode(proof.attestation);
36
20
  const signatureBytes = base.base64.decode(proof.proof);
37
- const verified = nacl__namespace.sign.detached.verify(
21
+ const verified = nacl__default.default.sign.detached.verify(
38
22
  messageBytes,
39
23
  signatureBytes,
40
24
  publicKey
@@ -142,7 +126,7 @@ async function verifySolanaSIWS(proof) {
142
126
  if (reconstructedMessage !== signedMessageText) {
143
127
  return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
144
128
  }
145
- const verified = nacl__namespace.sign.detached.verify(
129
+ const verified = nacl__default.default.sign.detached.verify(
146
130
  metadata.signedMessage,
147
131
  metadata.signature,
148
132
  metadata.account.publicKey
@@ -361,5 +345,5 @@ function buildFieldLines(input) {
361
345
 
362
346
  exports.verifySolanaSIWS = verifySolanaSIWS;
363
347
  exports.verifySolanaSignature = verifySolanaSignature;
364
- //# sourceMappingURL=solana-PQ5K4NGO.cjs.map
365
- //# sourceMappingURL=solana-PQ5K4NGO.cjs.map
348
+ //# sourceMappingURL=solana-34EDY5SS.cjs.map
349
+ //# sourceMappingURL=solana-34EDY5SS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/solana.ts"],"names":["ProofStatus","base58","base64","nacl"],"mappings":"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","file":"solana-34EDY5SS.cjs","sourcesContent":["import nacl from \"tweetnacl\";\nimport { ProofStatus, SignatureProof, type SIWXInput, type SolanaMetadata } from \"@notabene/javascript-sdk\";\nimport { base64, base58 } from \"@scure/base\";\n\ninterface ParsedSIWSMessage {\n domain: string;\n address: string;\n statement?: string;\n uri?: string;\n version?: string;\n chainId?: string;\n nonce?: string;\n issuedAt?: string;\n expirationTime?: string;\n notBefore?: string;\n requestId?: string;\n resources?: string[];\n}\n\n\n\n/**\n * Verifies a Solana signature proof.\n * \n * This function can verify two types of Solana signatures:\n * 1. Standard Solana signatures\n * \n * @param proof - The signature proof containing the address, attestation, and signature\n * @returns Promise that resolves to a SignatureProof with updated status (VERIFIED or FAILED)\n * \n * @example\n * // Standard Solana signature verification\n * const result = await verifySolanaSignature(proof);\n * \n */\nexport async function verifySolanaSignature(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"solana\") return { ...proof, status: ProofStatus.FAILED };\n\n try {\n const publicKey = base58.decode(address);\n const messageBytes = new TextEncoder().encode(proof.attestation);\n const signatureBytes = base64.decode(proof.proof);\n const verified = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n publicKey,\n );\n\n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\nfunction isSolanaSignInInput(obj: unknown): obj is SIWXInput {\n if (!obj || typeof obj !== 'object') return false;\n \n const input = obj as Record<string, unknown>;\n \n // Check for required properties\n return (\n typeof input.domain === 'string' &&\n typeof input.address === 'string' &&\n (input.statement === undefined || typeof input.statement === 'string') &&\n (input.uri === undefined || typeof input.uri === 'string') &&\n (input.version === undefined || typeof input.version === 'string') &&\n (input.chainId === undefined || typeof input.chainId === 'string') &&\n (input.nonce === undefined || typeof input.nonce === 'string') &&\n (input.issuedAt === undefined || typeof input.issuedAt === 'string') &&\n (input.expirationTime === undefined || typeof input.expirationTime === 'string') &&\n (input.notBefore === undefined || typeof input.notBefore === 'string') &&\n (input.requestId === undefined || typeof input.requestId === 'string') &&\n (input.resources === undefined || Array.isArray(input.resources))\n );\n}\n\nfunction isSolanaSignInMetadata(obj: unknown): obj is SolanaMetadata {\n if (!obj || typeof obj !== 'object') return false;\n \n const metadata = obj as Record<string, unknown>;\n \n // Check account object\n if (!metadata.account || typeof metadata.account !== 'object') return false;\n const account = metadata.account as Record<string, unknown>;\n if (typeof account.address !== 'string') return false;\n \n // Handle publicKey - could be Uint8Array or serialized object with numeric keys\n if (!account.publicKey) return false;\n if (!(account.publicKey instanceof Uint8Array)) {\n // Try to convert from serialized format\n const pkObj = account.publicKey as Record<string, unknown>;\n if (typeof pkObj === 'object') {\n // Convert object with numeric keys to Uint8Array\n const keys = Object.keys(pkObj).filter(key => !isNaN(Number(key))).sort((a, b) => Number(a) - Number(b));\n if (keys.length === 32) { // Solana public keys are 32 bytes\n const bytes = keys.map(key => Number(pkObj[key]));\n if (bytes.every(b => typeof b === 'number' && b >= 0 && b <= 255)) {\n account.publicKey = new Uint8Array(bytes);\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n \n // Handle signedMessage - could be Uint8Array or Buffer-like object\n if (!metadata.signedMessage) return false;\n if (!(metadata.signedMessage instanceof Uint8Array)) {\n const smObj = metadata.signedMessage as Record<string, unknown>;\n if (smObj.type === 'Buffer' && Array.isArray(smObj.data)) {\n metadata.signedMessage = new Uint8Array(smObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Handle signature - could be Uint8Array or Buffer-like object\n if (!metadata.signature) return false;\n if (!(metadata.signature instanceof Uint8Array)) {\n const sigObj = metadata.signature as Record<string, unknown>;\n if (sigObj.type === 'Buffer' && Array.isArray(sigObj.data)) {\n metadata.signature = new Uint8Array(sigObj.data as number[]);\n } else {\n return false;\n }\n }\n \n // Check message field contains valid SolanaSignInInput\n if (!metadata.message || typeof metadata.message !== 'object') {\n return false;\n }\n \n const message = metadata.message as unknown;\n \n // If address is missing from message, try to extract it from signedMessage\n if (typeof message === 'object' && message !== null) {\n const messageObj = message as Record<string, unknown>;\n if (!messageObj.address && metadata.signedMessage instanceof Uint8Array) {\n try {\n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const lines = signedMessageText.split('\\n');\n if (lines.length >= 2) {\n const address = lines[1].trim();\n if (address && /^[a-zA-Z0-9]{32,44}$/.test(address)) {\n messageObj.address = address;\n }\n }\n } catch {\n // Ignore errors in address extraction\n }\n }\n }\n \n if (!isSolanaSignInInput(metadata.message)) {\n return false;\n }\n \n return true;\n}\n\nexport async function verifySolanaSIWS(\n proof: SignatureProof,\n): Promise<SignatureProof> {\n const [ns] = proof.address.split(/:/);\n if (ns !== \"solana\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n // Validate that metadata conforms to SolanaSignInMetadata\n if (!proof.chainSpecificData || !isSolanaSignInMetadata(proof.chainSpecificData)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n try {\n // Now we can safely cast to SolanaMetadata since we validated it\n const metadata = proof.chainSpecificData as SolanaMetadata;\n \n const signedMessageText = new TextDecoder().decode(metadata.signedMessage);\n const parsedMessage = parseSIWSMessage(signedMessageText);\n \n if (!parsedMessage) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Validate the parsed message against the input\n if (!validateSIWSMessage(parsedMessage, metadata.message as SIWXInput)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Reconstruct the message to ensure it matches the signed message\n const reconstructedMessage = createSIWSMessage(parsedMessage);\n if (reconstructedMessage !== signedMessageText) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Verify the signature against the message\n const verified = nacl.sign.detached.verify(\n metadata.signedMessage,\n metadata.signature,\n metadata.account.publicKey as Uint8Array\n );\n \n return {\n ...proof,\n status: verified ? ProofStatus.VERIFIED : ProofStatus.FAILED,\n };\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n}\n\n// Parse SIWS message according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#message-construction\nfunction parseSIWSMessage(message: string): ParsedSIWSMessage | null {\n try {\n const lines = message.split('\\n');\n \n // Parse header (domain and address)\n const header = parseHeader(lines);\n if (!header) return null;\n \n const result: ParsedSIWSMessage = { ...header };\n \n let lineIndex = 2;\n \n // Parse statement if present\n const statementResult = parseStatement(lines, lineIndex);\n if (statementResult.statement !== undefined) {\n result.statement = statementResult.statement;\n lineIndex = statementResult.nextIndex;\n }\n \n // Parse advanced fields\n const advancedFields = parseAdvancedFields(lines, lineIndex);\n Object.assign(result, advancedFields);\n \n return result;\n } catch {\n return null;\n }\n}\n\nfunction parseHeader(lines: string[]): { domain: string; address: string } | null {\n // First line: domain + \" wants you to sign in with your Solana account:\"\n const domainMatch = lines[0]?.match(/^(.+) wants you to sign in with your Solana account:$/);\n if (!domainMatch) return null;\n \n const domain = domainMatch[1];\n \n // Second line: address\n const address = lines[1];\n if (!address || !/^[a-zA-Z0-9]{32,44}$/.test(address)) return null;\n \n return { domain, address };\n}\n\nfunction parseStatement(lines: string[], startIndex: number): { statement?: string; nextIndex: number } {\n let lineIndex = startIndex;\n \n // Check for statement (after empty line)\n if (lines[lineIndex] === '' && lines[lineIndex + 1] && !lines[lineIndex + 1].includes(':')) {\n lineIndex++; // Skip empty line\n const statement = lines[lineIndex];\n lineIndex++;\n \n // Skip another empty line after statement\n if (lines[lineIndex] === '') {\n lineIndex++;\n }\n \n return { statement, nextIndex: lineIndex };\n }\n \n return { nextIndex: lineIndex };\n}\n\nfunction parseAdvancedFields(lines: string[], startIndex: number): Partial<ParsedSIWSMessage> {\n const result: Partial<ParsedSIWSMessage> = {};\n \n // Define field parsers for string fields only\n const fieldParsers: Array<{\n prefix: string;\n key: keyof Omit<ParsedSIWSMessage, 'resources'>;\n }> = [\n { prefix: 'URI: ', key: 'uri' },\n { prefix: 'Version: ', key: 'version' },\n { prefix: 'Chain ID: ', key: 'chainId' },\n { prefix: 'Nonce: ', key: 'nonce' },\n { prefix: 'Issued At: ', key: 'issuedAt' },\n { prefix: 'Expiration Time: ', key: 'expirationTime' },\n { prefix: 'Not Before: ', key: 'notBefore' },\n { prefix: 'Request ID: ', key: 'requestId' }\n ];\n \n let lineIndex = startIndex;\n \n while (lineIndex < lines.length) {\n const line = lines[lineIndex];\n if (!line) {\n lineIndex++;\n continue;\n }\n \n // Check for resources (special case)\n if (line.startsWith('Resources:')) {\n const resources = parseResources(lines, lineIndex + 1);\n if (resources.length > 0) {\n result.resources = resources;\n lineIndex += resources.length + 1; // +1 for the \"Resources:\" line\n continue;\n }\n }\n \n // Check for other fields\n let fieldFound = false;\n for (const { prefix, key } of fieldParsers) {\n if (line.startsWith(prefix)) {\n const value = line.substring(prefix.length);\n result[key] = value;\n fieldFound = true;\n break;\n }\n }\n \n if (!fieldFound) {\n // Unknown field, skip it\n }\n \n lineIndex++;\n }\n \n return result;\n}\n\nfunction parseResources(lines: string[], startIndex: number): string[] {\n const resources: string[] = [];\n let lineIndex = startIndex;\n \n while (lineIndex < lines.length && lines[lineIndex]?.startsWith('- ')) {\n resources.push(lines[lineIndex].substring(2));\n lineIndex++;\n }\n \n return resources;\n}\n\n// Validate parsed SIWS message against input\nfunction validateSIWSMessage(parsed: ParsedSIWSMessage, input: SIWXInput): boolean {\n // Required fields validation\n if (parsed.domain !== input.domain || parsed.address !== input.address) {\n return false;\n }\n \n // Define validation rules for optional fields\n const fieldValidations: Array<{\n inputKey: keyof SIWXInput;\n parsedKey: keyof ParsedSIWSMessage;\n validator?: (inputValue: unknown, parsedValue: unknown) => boolean;\n }> = [\n { inputKey: 'statement', parsedKey: 'statement' },\n { inputKey: 'uri', parsedKey: 'uri' },\n { inputKey: 'version', parsedKey: 'version' },\n { inputKey: 'chainId', parsedKey: 'chainId' },\n { inputKey: 'nonce', parsedKey: 'nonce' },\n { inputKey: 'issuedAt', parsedKey: 'issuedAt' },\n { inputKey: 'expirationTime', parsedKey: 'expirationTime' },\n { inputKey: 'notBefore', parsedKey: 'notBefore' },\n { inputKey: 'requestId', parsedKey: 'requestId' },\n {\n inputKey: 'resources',\n parsedKey: 'resources',\n validator: (inputValue, parsedValue) => {\n if (!Array.isArray(inputValue) || !Array.isArray(parsedValue)) {\n return false;\n }\n return inputValue.length === parsedValue.length && \n inputValue.every((item, index) => item === parsedValue[index]);\n }\n }\n ];\n \n // Validate optional fields\n for (const { inputKey, parsedKey, validator } of fieldValidations) {\n const inputValue = input[inputKey];\n const parsedValue = parsed[parsedKey];\n \n if (inputValue !== undefined) {\n if (validator) {\n if (!validator(inputValue, parsedValue)) {\n return false;\n }\n } else if (inputValue !== parsedValue) {\n return false;\n }\n }\n }\n \n // Validate timestamps\n return validateTimestamps(parsed);\n}\n\n// Separate timestamp validation for better testability and clarity\nfunction validateTimestamps(parsed: ParsedSIWSMessage): boolean {\n const now = Date.now();\n \n // Validate issuedAt (allow 24 hour threshold for testing)\n if (parsed.issuedAt) {\n const issuedAt = new Date(parsed.issuedAt);\n const threshold = 24 * 60 * 60 * 1000; // 24 hours in milliseconds\n const timeDiff = Math.abs(issuedAt.getTime() - now);\n if (timeDiff > threshold) {\n return false;\n }\n }\n \n // Validate expirationTime\n if (parsed.expirationTime) {\n const expirationTime = new Date(parsed.expirationTime);\n if (expirationTime.getTime() <= now) {\n return false; // Message has expired\n }\n }\n \n // Validate notBefore\n if (parsed.notBefore) {\n const notBefore = new Date(parsed.notBefore);\n if (notBefore.getTime() > now) {\n return false; // Message not yet valid\n }\n }\n \n return true;\n}\n\n// Create SIWS message string according to ABNF format\n// https://github.com/phantom/sign-in-with-solana/blob/e4060d2916469116d5080a712feaf81ea1db4f65/README.md#abnf-message-format\nfunction createSIWSMessage(input: ParsedSIWSMessage): string {\n let message = `${input.domain} wants you to sign in with your Solana account:\\n`;\n message += `${input.address}`;\n\n if (input.statement) {\n message += `\\n\\n${input.statement}`;\n }\n\n const fields = buildFieldLines(input);\n \n if (fields.length) {\n message += `\\n\\n${fields.join('\\n')}`;\n }\n\n return message;\n}\n\nfunction buildFieldLines(input: ParsedSIWSMessage): string[] {\n const fields: string[] = [];\n \n // Define field mappings\n const fieldMappings: Array<{\n key: keyof ParsedSIWSMessage;\n prefix: string;\n formatter?: (value: unknown) => string[];\n }> = [\n { key: 'uri', prefix: 'URI: ' },\n { key: 'version', prefix: 'Version: ' },\n { key: 'chainId', prefix: 'Chain ID: ' },\n { key: 'nonce', prefix: 'Nonce: ' },\n { key: 'issuedAt', prefix: 'Issued At: ' },\n { key: 'expirationTime', prefix: 'Expiration Time: ' },\n { key: 'notBefore', prefix: 'Not Before: ' },\n { key: 'requestId', prefix: 'Request ID: ' },\n {\n key: 'resources',\n prefix: 'Resources:',\n formatter: (value) => {\n if (Array.isArray(value) && value.length > 0) {\n return ['Resources:', ...value.map(resource => `- ${resource}`)];\n }\n return [];\n }\n }\n ];\n \n for (const { key, prefix, formatter } of fieldMappings) {\n const value = input[key];\n if (value !== undefined) {\n if (formatter) {\n const formatted = formatter(value);\n fields.push(...formatted);\n } else if (typeof value === 'string') {\n fields.push(`${prefix}${value}`);\n }\n }\n }\n \n return fields;\n}\n"]}
@@ -54,5 +54,5 @@ exports.encode = encode;
54
54
  exports.getSignPayload = getSignPayload;
55
55
  exports.verifyPersonalSignTIP191 = verifyPersonalSignTIP191;
56
56
  exports.verifyTIP191 = verifyTIP191;
57
- //# sourceMappingURL=tron-F5AARBY4.cjs.map
58
- //# sourceMappingURL=tron-F5AARBY4.cjs.map
57
+ //# sourceMappingURL=tron-EVR3X3SN.cjs.map
58
+ //# sourceMappingURL=tron-EVR3X3SN.cjs.map