@notabene/verify-proof 1.11.1-next.1 → 1.12.0-next.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{bitcoin-3CW4MNAW.cjs → cjs/bitcoin-UIEQV3IM.cjs} +105 -16
- package/dist/cjs/bitcoin-UIEQV3IM.cjs.map +1 -0
- package/dist/{cardano-DYBYEAAF.cjs → cjs/cardano-QG2S452K.cjs} +5 -22
- package/dist/cjs/cardano-QG2S452K.cjs.map +1 -0
- package/dist/cjs/concordium-4B33UJJ5.cjs +44 -0
- package/dist/cjs/concordium-4B33UJJ5.cjs.map +1 -0
- package/dist/cjs/cosmos-JTT3AZCF.cjs +92 -0
- package/dist/cjs/cosmos-JTT3AZCF.cjs.map +1 -0
- package/dist/{eth-3DX3PXDU.cjs → cjs/eth-BVXX47HH.cjs} +2 -3
- package/dist/cjs/eth-BVXX47HH.cjs.map +1 -0
- package/dist/{index.cjs → cjs/index.cjs} +10 -12
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/{solana-PQ5K4NGO.cjs → cjs/solana-4WNBEQSU.cjs} +6 -23
- package/dist/cjs/solana-4WNBEQSU.cjs.map +1 -0
- package/dist/{tron-F5AARBY4.cjs → cjs/tron-IM2O2VLM.cjs} +2 -3
- package/dist/cjs/tron-IM2O2VLM.cjs.map +1 -0
- package/dist/{xlm-5GODWWL2.cjs → cjs/xlm-CHT7RN4Z.cjs} +2 -3
- package/dist/cjs/xlm-CHT7RN4Z.cjs.map +1 -0
- package/dist/cjs/xrpl-HJ2XWSOO.cjs +74 -0
- package/dist/cjs/xrpl-HJ2XWSOO.cjs.map +1 -0
- package/dist/{bitcoin-QK53ILBF.js → esm/bitcoin-BTZ4TXEK.js} +105 -16
- package/dist/esm/bitcoin-BTZ4TXEK.js.map +1 -0
- package/dist/{cardano-WE6YXYLW.js → esm/cardano-OMGAPH5N.js} +4 -5
- package/dist/esm/cardano-OMGAPH5N.js.map +1 -0
- package/dist/esm/concordium-JJ5VEIOA.js +42 -0
- package/dist/esm/concordium-JJ5VEIOA.js.map +1 -0
- package/dist/esm/cosmos-AVIWAIX7.js +90 -0
- package/dist/esm/cosmos-AVIWAIX7.js.map +1 -0
- package/dist/{eth-ICLGRJE5.js → esm/eth-GI4Z5V4T.js} +2 -3
- package/dist/esm/eth-GI4Z5V4T.js.map +1 -0
- package/dist/{index.js → esm/index.js} +10 -12
- package/dist/esm/index.js.map +1 -0
- package/dist/{solana-4KQFLZUC.js → esm/solana-ZARDAF6O.js} +3 -4
- package/dist/esm/solana-ZARDAF6O.js.map +1 -0
- package/dist/{tron-OBLPB2LN.js → esm/tron-FI2B6DRS.js} +2 -3
- package/dist/esm/tron-FI2B6DRS.js.map +1 -0
- package/dist/{xlm-GX2QGFLI.js → esm/xlm-TNRZ5CFC.js} +2 -3
- package/dist/esm/xlm-TNRZ5CFC.js.map +1 -0
- package/dist/esm/xrpl-52IBJ4EW.js +69 -0
- package/dist/esm/xrpl-52IBJ4EW.js.map +1 -0
- package/package.json +21 -9
- package/src/bitcoin.ts +43 -19
- package/src/cardano.ts +2 -2
- package/src/cashaddr.ts +157 -0
- package/src/concordium.ts +34 -283
- package/src/cosmos.ts +44 -6
- package/src/index.ts +0 -1
- package/src/solana.ts +1 -1
- package/src/tests/bitcoin.test.ts +527 -16
- package/src/tests/concordium.test.ts +96 -134
- package/src/tests/cosmos.test.ts +139 -0
- package/src/tests/index.test.ts +7 -7
- package/src/tests/xrpl.test.ts +8 -6
- package/dist/bitcoin-3CW4MNAW.cjs.map +0 -1
- package/dist/bitcoin-QK53ILBF.js.map +0 -1
- package/dist/cardano-DYBYEAAF.cjs.map +0 -1
- package/dist/cardano-WE6YXYLW.js.map +0 -1
- package/dist/chunk-E3V5ATTC.js +0 -38
- package/dist/chunk-E3V5ATTC.js.map +0 -1
- package/dist/chunk-OAXNH5XR.cjs +0 -42
- package/dist/chunk-OAXNH5XR.cjs.map +0 -1
- package/dist/concordium-HQC37GCK.cjs +0 -188
- package/dist/concordium-HQC37GCK.cjs.map +0 -1
- package/dist/concordium-XX4XYLLU.js +0 -186
- package/dist/concordium-XX4XYLLU.js.map +0 -1
- package/dist/cosmos-64MKE5FJ.cjs +0 -683
- package/dist/cosmos-64MKE5FJ.cjs.map +0 -1
- package/dist/cosmos-QMH7BK7S.js +0 -681
- package/dist/cosmos-QMH7BK7S.js.map +0 -1
- package/dist/eth-3DX3PXDU.cjs.map +0 -1
- package/dist/eth-ICLGRJE5.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/solana-4KQFLZUC.js.map +0 -1
- package/dist/solana-PQ5K4NGO.cjs.map +0 -1
- package/dist/tron-F5AARBY4.cjs.map +0 -1
- package/dist/tron-OBLPB2LN.js.map +0 -1
- package/dist/xlm-5GODWWL2.cjs.map +0 -1
- package/dist/xlm-GX2QGFLI.js.map +0 -1
- package/dist/xrpl-7HQLIDAK.cjs +0 -1174
- package/dist/xrpl-7HQLIDAK.cjs.map +0 -1
- package/dist/xrpl-YCDFXBGQ.js +0 -1169
- package/dist/xrpl-YCDFXBGQ.js.map +0 -1
- /package/dist/{index.d.cts → cjs/index.d.cts} +0 -0
- /package/dist/{index.d.ts → esm/index.d.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bitcoin.ts"],"names":["encodeLength"],"mappings":"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","file":"bitcoin-QK53ILBF.js","sourcesContent":["import {\n ProofStatus,\n ProofTypes,\n SignatureProof,\n} from \"@notabene/javascript-sdk\";\n\nimport { encode as encodeLength } from \"varuint-bitcoin\";\nimport { base64, bech32, createBase58check } from \"@scure/base\";\nimport { Hash } from \"ox\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { SignatureType } from \"@noble/curves/abstract/weierstrass\";\nimport { Verifier } from \"bip322-js\";\n\nenum SEGWIT_TYPES {\n P2WPKH = \"p2wpkh\",\n P2SH_P2WPKH = \"p2sh(p2wpkh)\",\n}\n\ninterface ChainConfig {\n messagePrefix: string;\n pubKeyHashVersion: number | Uint8Array;\n scriptHashVersion: number | Uint8Array;\n bech32Prefix?: string;\n isTestnet?: boolean;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n bitcoin: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n bitcoincash: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x00, // 1...\n scriptHashVersion: 0x05, // 3...\n bech32Prefix: \"bc\",\n isTestnet: false,\n },\n litecoin: {\n messagePrefix: \"\\u0019Litecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x30, // L... or M...\n scriptHashVersion: 0x32, // 3... or M...\n bech32Prefix: \"ltc\",\n isTestnet: false,\n },\n dogecoin: {\n messagePrefix: \"\\u0019Dogecoin Signed Message:\\n\",\n pubKeyHashVersion: 0x1e, // D...\n scriptHashVersion: 0x16, // A...\n isTestnet: false,\n },\n dash: {\n messagePrefix: \"\\u0019DarkCoin Signed Message:\\n\",\n pubKeyHashVersion: 0x4c, // X...\n scriptHashVersion: 0x10, // 7...\n isTestnet: false,\n },\n zcash: {\n messagePrefix: \"\\u0018Zcash Signed Message:\\n\",\n pubKeyHashVersion: Uint8Array.from([0x1c, 0xb8]), // <-- FIXED\n scriptHashVersion: Uint8Array.from([0x1c, 0xbd]),\n isTestnet: false,\n },\n\n testnet: {\n messagePrefix: \"\\u0018Bitcoin Signed Message:\\n\",\n pubKeyHashVersion: 0x6f, // m or n\n scriptHashVersion: 0xc4, // 2\n bech32Prefix: \"tb\",\n isTestnet: true,\n },\n};\n\nenum DerivationMode {\n LEGACY = \"Legacy\",\n NATIVE = \"Native SegWit\",\n SEGWIT = \"SegWit\",\n P2SH_SEGWIT = \"p2sh\",\n BCH = \"Bitcoin Cash\",\n ETHEREUM = \"Ethereum\",\n DOGECOIN = \"Dogecoin\",\n UNKNOWN = \"Unknown\",\n}\n\nexport async function verifyBTCSignature(\n proof: SignatureProof\n): Promise<SignatureProof> {\n const [ns, , address] = proof.address.split(/:/);\n if (ns !== \"bip122\") return { ...proof, status: ProofStatus.FAILED };\n\n // Map chainId to our chain configuration\n const chainConfig = getChainConfig(address);\n if (!chainConfig) return { ...proof, status: ProofStatus.FAILED };\n\n const isZcash = address.startsWith(\"t1\") || address.startsWith(\"t3\");\n if (isZcash) {\n return verifyBIP137(address, proof, chainConfig);\n }\n\n // Use BIP322 for testnet addresses\n if (chainConfig.isTestnet) {\n return verifyBIP322(address, proof);\n }\n\n // 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\")) {\n return CHAIN_CONFIGS[\"bitcoincash\"];\n }\n if (address.startsWith(\"tb1\")) {\n return CHAIN_CONFIGS[\"testnet\"];\n }\n\n return CHAIN_CONFIGS[\"bitcoin\"];\n}\n\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).*\")) {\n return DerivationMode.BCH;\n } else if (address.match(\"^(t1|t3).*\")) {\n return DerivationMode.LEGACY; // Zcash addresses\n } else if (address.match(\"^[X7].*\")) {\n return DerivationMode.LEGACY; // Dash addresses\n } else {\n throw new Error(\n \"INVALID ADDRESS: \"\n .concat(address)\n .concat(\" is not a valid or a supported address\")\n );\n }\n}\n\ntype DecodedSignature = {\n compressed: boolean;\n segwitType?: SEGWIT_TYPES;\n signature: SignatureType;\n};\n\nfunction decodeSignature(proof: string): DecodedSignature {\n const sigbytes = base64.decode(proof);\n if (sigbytes.length !== 65) throw new Error(\"Invalid signature length\");\n const flagByte = sigbytes[0] - 27;\n if (flagByte > 15 || flagByte < 0) {\n throw new Error(\"Invalid signature parameter\");\n }\n const compressed = !!(flagByte & 12); // Are there cases that aren't compressed?\n const recovery = flagByte & 3;\n const signature = secp256k1.Signature.fromCompact(sigbytes.slice(1));\n\n return {\n compressed,\n segwitType: !(flagByte & 8)\n ? undefined\n : !(flagByte & 4)\n ? SEGWIT_TYPES.P2SH_P2WPKH\n : SEGWIT_TYPES.P2WPKH,\n signature: signature.addRecoveryBit(recovery),\n };\n}\n\nfunction verify(\n attestation: string,\n address: string,\n proof: string,\n checkSegwitAlways: boolean,\n chainConfig: ChainConfig\n) {\n const { compressed, segwitType, signature } = decodeSignature(proof);\n if (checkSegwitAlways && !compressed) {\n throw new Error(\n \"checkSegwitAlways can only be used with a compressed pubkey signature flagbyte\"\n );\n }\n const hash = magicHash(attestation, chainConfig.messagePrefix);\n const publicKey = signature.recoverPublicKey(hash);\n const publicKeyBytes = publicKey.toRawBytes(compressed);\n const publicKeyHash = hash160(publicKeyBytes);\n let actual: string = \"\";\n\n // Special handling for Bitcoin Cash addresses\n if (address.startsWith(\"q\")) {\n // For BCH, we'll compare the public key hash directly since we're getting a CashAddr\n // Convert the CashAddr to legacy format for comparison\n actual = encodeBase58AddressFormat(\n chainConfig.pubKeyHashVersion,\n publicKeyHash\n );\n // Legacy P2PKH addresses in BCH start with '1' just like BTC\n // Source: https://reference.cash/protocol/blockchain/encoding/cashaddr#legacy-address-format\n return actual.startsWith(\"1\");\n }\n\n if (segwitType) {\n if (segwitType === SEGWIT_TYPES.P2SH_P2WPKH) {\n actual = encodeBase58AddressFormat(\n chainConfig.scriptHashVersion,\n publicKeyHash\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
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,GAA+BC,8BAAA,CAAA,OAAA;AAAA,MACnC,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-DYBYEAAF.cjs","sourcesContent":["import * as 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.default(\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cardano.ts"],"names":[],"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,EAAQ,YAAY,MAAA,EAAO;AAAA,EAChD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAA+B,mBAAA,CAAA,OAAA;AAAA,MACnC,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,GAAW,WAAA,CAAY,QAAA,GAAW,WAAA,CAAY;AAAA,KACxD;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,YAAY,MAAA,EAAO;AAAA,EAChD;AACF","file":"cardano-WE6YXYLW.js","sourcesContent":["import * as 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.default(\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"]}
|
package/dist/chunk-E3V5ATTC.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
|
|
3
|
-
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = Buffer; }
|
|
4
|
-
var __create = Object.create;
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
11
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
12
|
-
}) : x)(function(x) {
|
|
13
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
14
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
15
|
-
});
|
|
16
|
-
var __commonJS = (cb, mod) => function __require2() {
|
|
17
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
18
|
-
};
|
|
19
|
-
var __copyProps = (to, from, except, desc) => {
|
|
20
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
-
for (let key of __getOwnPropNames(from))
|
|
22
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
23
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
24
|
-
}
|
|
25
|
-
return to;
|
|
26
|
-
};
|
|
27
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
28
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
29
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
30
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
31
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
32
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
33
|
-
mod
|
|
34
|
-
));
|
|
35
|
-
|
|
36
|
-
export { __commonJS, __require, __toESM };
|
|
37
|
-
//# sourceMappingURL=chunk-E3V5ATTC.js.map
|
|
38
|
-
//# sourceMappingURL=chunk-E3V5ATTC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-E3V5ATTC.js"}
|
package/dist/chunk-OAXNH5XR.cjs
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var buffer = require('buffer');
|
|
4
|
-
|
|
5
|
-
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
|
|
6
|
-
var __create = Object.create;
|
|
7
|
-
var __defProp = Object.defineProperty;
|
|
8
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
11
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
13
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
14
|
-
}) : x)(function(x) {
|
|
15
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
16
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
17
|
-
});
|
|
18
|
-
var __commonJS = (cb, mod) => function __require2() {
|
|
19
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
20
|
-
};
|
|
21
|
-
var __copyProps = (to, from, except, desc) => {
|
|
22
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
23
|
-
for (let key of __getOwnPropNames(from))
|
|
24
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
25
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
26
|
-
}
|
|
27
|
-
return to;
|
|
28
|
-
};
|
|
29
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
30
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
31
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
32
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
33
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
34
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
35
|
-
mod
|
|
36
|
-
));
|
|
37
|
-
|
|
38
|
-
exports.__commonJS = __commonJS;
|
|
39
|
-
exports.__require = __require;
|
|
40
|
-
exports.__toESM = __toESM;
|
|
41
|
-
//# sourceMappingURL=chunk-OAXNH5XR.cjs.map
|
|
42
|
-
//# sourceMappingURL=chunk-OAXNH5XR.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-OAXNH5XR.cjs"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var buffer = require('buffer');
|
|
4
|
-
require('./chunk-OAXNH5XR.cjs');
|
|
5
|
-
var javascriptSdk = require('@notabene/javascript-sdk');
|
|
6
|
-
|
|
7
|
-
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = buffer.Buffer; }
|
|
8
|
-
var NETWORKS = {
|
|
9
|
-
testnet: {
|
|
10
|
-
grpcUrl: "https://grpc.testnet.concordium.com:20000",
|
|
11
|
-
walletProxyUrl: "https://wallet-proxy.testnet.concordium.com"
|
|
12
|
-
},
|
|
13
|
-
mainnet: {
|
|
14
|
-
grpcUrl: "https://grpc.mainnet.concordium.com:20000",
|
|
15
|
-
walletProxyUrl: "https://wallet-proxy.mainnet.concordium.software"
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
var DEFAULT_OPTIONS = {
|
|
19
|
-
network: "testnet",
|
|
20
|
-
timeout: 5e4,
|
|
21
|
-
// 10 seconds
|
|
22
|
-
retries: 3,
|
|
23
|
-
testMode: true
|
|
24
|
-
};
|
|
25
|
-
var verifyConcordiumSignature = async (proof, options = {}) => {
|
|
26
|
-
const config = { ...DEFAULT_OPTIONS, ...options };
|
|
27
|
-
const [ns, networkId, address] = proof.address.split(/:/);
|
|
28
|
-
if (ns !== "ccd") {
|
|
29
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
30
|
-
}
|
|
31
|
-
let network = config.network;
|
|
32
|
-
if (networkId) {
|
|
33
|
-
network = networkId.includes("testnet") ? "testnet" : "mainnet";
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
let signature;
|
|
37
|
-
try {
|
|
38
|
-
signature = JSON.parse(proof.proof);
|
|
39
|
-
} catch {
|
|
40
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
41
|
-
}
|
|
42
|
-
if (!signature || typeof signature !== "object" || Object.keys(signature).length === 0) {
|
|
43
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
44
|
-
}
|
|
45
|
-
if (config.testMode) {
|
|
46
|
-
try {
|
|
47
|
-
const signatureHex = convertSignatureToHex(signature);
|
|
48
|
-
if (!signatureHex || signatureHex.length < 64 || !/^[0-9a-fA-F]+$/.test(signatureHex)) {
|
|
49
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
50
|
-
}
|
|
51
|
-
return { ...proof, status: javascriptSdk.ProofStatus.VERIFIED };
|
|
52
|
-
} catch {
|
|
53
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const accountInfo = await retryWithTimeout(
|
|
57
|
-
() => validateAccountAndGetInfo(address, network, config.timeout),
|
|
58
|
-
config.retries
|
|
59
|
-
);
|
|
60
|
-
if (!accountInfo) {
|
|
61
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
62
|
-
}
|
|
63
|
-
const isValidSignature = await retryWithTimeout(
|
|
64
|
-
() => verifyCryptographicSignature(
|
|
65
|
-
signature,
|
|
66
|
-
config.timeout
|
|
67
|
-
// proof.attestation,
|
|
68
|
-
// address,
|
|
69
|
-
// network
|
|
70
|
-
),
|
|
71
|
-
config.retries
|
|
72
|
-
);
|
|
73
|
-
if (isValidSignature) {
|
|
74
|
-
return { ...proof, status: javascriptSdk.ProofStatus.VERIFIED };
|
|
75
|
-
} else {
|
|
76
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
77
|
-
}
|
|
78
|
-
} catch {
|
|
79
|
-
return { ...proof, status: javascriptSdk.ProofStatus.FAILED };
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
async function validateAccountAndGetInfo(address, network, timeout) {
|
|
83
|
-
const networkConfig = NETWORKS[network];
|
|
84
|
-
try {
|
|
85
|
-
const controller = new AbortController();
|
|
86
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
87
|
-
const response = await fetch(
|
|
88
|
-
`${networkConfig.walletProxyUrl}/v0/accEncryptionKey/${address}`,
|
|
89
|
-
{
|
|
90
|
-
method: "GET",
|
|
91
|
-
headers: {
|
|
92
|
-
"Accept": "application/json",
|
|
93
|
-
"User-Agent": "verify-proof/1.6.0"
|
|
94
|
-
},
|
|
95
|
-
signal: controller.signal
|
|
96
|
-
}
|
|
97
|
-
);
|
|
98
|
-
clearTimeout(timeoutId);
|
|
99
|
-
return response.ok;
|
|
100
|
-
} catch (error) {
|
|
101
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
102
|
-
throw new Error(`Account validation timeout after ${timeout}ms`);
|
|
103
|
-
}
|
|
104
|
-
throw error;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
async function verifyCryptographicSignature(signature, timeout) {
|
|
108
|
-
try {
|
|
109
|
-
const signatureHex = convertSignatureToHex(signature);
|
|
110
|
-
if (!signatureHex || signatureHex.length < 64) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
return signatureHex.length >= 64 && /^[0-9a-fA-F]+$/.test(signatureHex);
|
|
114
|
-
} catch (error) {
|
|
115
|
-
if (error instanceof Error) {
|
|
116
|
-
if (error.message?.includes("timeout")) {
|
|
117
|
-
throw new Error(`Signature verification timeout after ${timeout}ms`);
|
|
118
|
-
}
|
|
119
|
-
if (error.message?.includes("UNAVAILABLE")) {
|
|
120
|
-
throw new Error("Concordium node unavailable");
|
|
121
|
-
}
|
|
122
|
-
if (error.message?.includes("NOT_FOUND")) {
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
throw error;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
function convertSignatureToHex(signature) {
|
|
130
|
-
try {
|
|
131
|
-
if (typeof signature === "string") {
|
|
132
|
-
return signature;
|
|
133
|
-
}
|
|
134
|
-
if (signature && typeof signature === "object") {
|
|
135
|
-
const extractSignature = (obj) => {
|
|
136
|
-
if (typeof obj === "string") {
|
|
137
|
-
return obj;
|
|
138
|
-
}
|
|
139
|
-
if (obj && typeof obj === "object") {
|
|
140
|
-
for (const key in obj) {
|
|
141
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
142
|
-
const value = obj[key];
|
|
143
|
-
if (typeof value === "string") {
|
|
144
|
-
return value;
|
|
145
|
-
} else if (typeof value === "object") {
|
|
146
|
-
const result = extractSignature(value);
|
|
147
|
-
if (result) return result;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return null;
|
|
153
|
-
};
|
|
154
|
-
const extractedSig = extractSignature(signature);
|
|
155
|
-
if (extractedSig) {
|
|
156
|
-
return extractedSig;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
throw new Error("Unable to extract signature from object");
|
|
160
|
-
} catch (error) {
|
|
161
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
162
|
-
throw new Error(`Invalid signature format: ${errorMessage}`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
async function retryWithTimeout(operation, maxRetries) {
|
|
166
|
-
let lastError = new Error("No attempts made");
|
|
167
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
168
|
-
try {
|
|
169
|
-
return await operation();
|
|
170
|
-
} catch (error) {
|
|
171
|
-
const errorInstance = error instanceof Error ? error : new Error(String(error));
|
|
172
|
-
lastError = errorInstance;
|
|
173
|
-
if (errorInstance.message?.includes("Invalid signature") || errorInstance.message?.includes("Account not found")) {
|
|
174
|
-
throw errorInstance;
|
|
175
|
-
}
|
|
176
|
-
if (attempt === maxRetries) {
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
const delay = Math.min(Math.pow(2, attempt) * 1e3, 5e3);
|
|
180
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
throw lastError;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
exports.verifyConcordiumSignature = verifyConcordiumSignature;
|
|
187
|
-
//# sourceMappingURL=concordium-HQC37GCK.cjs.map
|
|
188
|
-
//# sourceMappingURL=concordium-HQC37GCK.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/concordium.ts"],"names":["ProofStatus"],"mappings":";;;;;;;AAQA,IAAM,QAAA,GAA8C;AAAA,EAClD,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,2CAAA;AAAA,IACT,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,2CAAA;AAAA,IACT,cAAA,EAAgB;AAAA;AAEpB,CAAA;AAgBA,IAAM,eAAA,GAA2D;AAAA,EAC/D,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAQO,IAAM,yBAAA,GAA4B,OACvC,KAAA,EACA,OAAA,GAAyC,EAAC,KACd;AAE5B,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,eAAA,EAAiB,GAAG,OAAA,EAAQ;AAGhD,EAAA,MAAM,CAAC,IAAI,SAAA,EAAW,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA;AACxD,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AAGA,EAAA,IAAI,UAAU,MAAA,CAAO,OAAA;AACrB,EAAA,IAAI,SAAA,EAAW;AAEb,IAAA,OAAA,GAAU,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,GAAI,SAAA,GAAY,SAAA;AAAA,EACxD;AAEA,EAAA,IAAI;AAEF,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,IAChD;AAGA,IAAA,IAAI,CAAC,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,IAAY,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACtF,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,IAChD;AAGA,IAAA,IAAI,OAAO,QAAA,EAAU;AAEnB,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,GAAe,sBAAsB,SAAS,CAAA;AAGpD,QAAA,IAAI,CAAC,gBAAgB,YAAA,CAAa,MAAA,GAAS,MAAM,CAAC,gBAAA,CAAiB,IAAA,CAAK,YAAY,CAAA,EAAG;AACrF,UAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,QAChD;AAEA,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,QAAA,EAAS;AAAA,MAElD,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,MAChD;AAAA,IACF;AAGA,IAAA,MAAM,cAAc,MAAM,gBAAA;AAAA,MACxB,MAAM,yBAAA,CAA0B,OAAA,EAAS,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,MAChE,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,IAChD;AAGA,IAAA,MAAM,mBAAmB,MAAM,gBAAA;AAAA,MAC7B,MAAM,4BAAA;AAAA,QACJ,SAAA;AAAA,QACA,MAAA,CAAO;AAAA;AAAA;AAAA;AAAA,OAIT;AAAA,MACA,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,QAAA,EAAS;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,IAChD;AAAA,EAEF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQA,0BAAY,MAAA,EAAO;AAAA,EAChD;AACF;AAKA,eAAe,yBAAA,CACb,OAAA,EACA,OAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAO,CAAA;AAEtC,EAAA,IAAI;AAEF,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,YAAY,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,OAAO,CAAA;AAE9D,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,CAAA,EAAG,aAAA,CAAc,cAAc,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA;AAAA,MAC9D;AAAA,QACE,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,QAAA,EAAU,kBAAA;AAAA,UACV,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,QAAQ,UAAA,CAAW;AAAA;AACrB,KACF;AAEA,IAAA,YAAA,CAAa,SAAS,CAAA;AACtB,IAAA,OAAO,QAAA,CAAS,EAAA;AAAA,EAElB,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAOA,eAAe,4BAAA,CACb,WACA,OAAA,EAIkB;AAClB,EAAA,IAAI;AAEF,IAAA,MAAM,YAAA,GAAe,sBAAsB,SAAS,CAAA;AAOpD,IAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,CAAa,MAAA,GAAS,EAAA,EAAI;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AASA,IAAA,OAAO,YAAA,CAAa,MAAA,IAAU,EAAA,IAAM,gBAAA,CAAiB,KAAK,YAAY,CAAA;AAAA,EAExE,SAAS,KAAA,EAAO;AAEd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,IAAI,KAAA,CAAM,OAAA,EAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MACrE;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,EAAS,QAAA,CAAS,aAAa,CAAA,EAAG;AAC1C,QAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,EAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AACxC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAKA,SAAS,sBAAsB,SAAA,EAAwC;AACrE,EAAA,IAAI;AAEF,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,OAAO,SAAA;AAAA,IACT;AAGA,IAAA,IAAI,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AAE9C,MAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAA4C;AACpE,QAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,UAAA,OAAO,GAAA;AAAA,QACT;AAEA,QAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,UAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,YAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG;AAClD,cAAA,MAAM,KAAA,GAAQ,IAAI,GAAG,CAAA;AACrB,cAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,gBAAA,OAAO,KAAA;AAAA,cACT,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,gBAAA,MAAM,MAAA,GAAS,iBAAiB,KAAK,CAAA;AACrC,gBAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,cACrB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAEA,MAAA,MAAM,YAAA,GAAe,iBAAiB,SAAS,CAAA;AAC/C,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,OAAO,YAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAE3D,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,YAAA,GAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA;AAC9D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,YAAY,CAAA,CAAE,CAAA;AAAA,EAC7D;AACF;AAKA,eAAe,gBAAA,CACb,WACA,UAAA,EACY;AACZ,EAAA,IAAI,SAAA,GAAmB,IAAI,KAAA,CAAM,kBAAkB,CAAA;AAEnD,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,UAAA,EAAY,OAAA,EAAA,EAAW;AACtD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,SAAA,EAAU;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,aAAA,GAAgB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC9E,MAAA,SAAA,GAAY,aAAA;AAGZ,MAAA,IACE,aAAA,CAAc,SAAS,QAAA,CAAS,mBAAmB,KACnD,aAAA,CAAc,OAAA,EAAS,QAAA,CAAS,mBAAmB,CAAA,EACnD;AACA,QAAA,MAAM,aAAA;AAAA,MACR;AAGA,MAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,CAAA,GAAI,GAAA,EAAM,GAAI,CAAA;AACxD,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,MAAM,SAAA;AACR","file":"concordium-HQC37GCK.cjs","sourcesContent":["import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\n// Concordium network configurations\ninterface ConcordiumNetwork {\n grpcUrl: string;\n walletProxyUrl: string;\n}\n\nconst NETWORKS: Record<string, ConcordiumNetwork> = {\n testnet: {\n grpcUrl: \"https://grpc.testnet.concordium.com:20000\",\n walletProxyUrl: \"https://wallet-proxy.testnet.concordium.com\"\n },\n mainnet: {\n grpcUrl: \"https://grpc.mainnet.concordium.com:20000\", \n walletProxyUrl: \"https://wallet-proxy.mainnet.concordium.software\"\n }\n};\n\n// Configuration options for verification\ninterface ConcordiumVerificationOptions {\n network?: \"testnet\" | \"mainnet\";\n timeout?: number; // timeout in milliseconds\n retries?: number; // number of retry attempts\n testMode?: boolean; // skip network calls for testing\n}\n\n// Signature object type\ninterface ConcordiumSignature {\n [key: string]: string | ConcordiumSignature;\n}\n\n// Default options\nconst DEFAULT_OPTIONS: Required<ConcordiumVerificationOptions> = {\n network: \"testnet\",\n timeout: 50000, // 10 seconds\n retries: 3,\n testMode: true\n};\n\n/**\n * Verifies a Concordium signature proof with proper cryptographic validation\n * @param proof The signature proof to verify\n * @param options Optional configuration for network and timeouts\n * @returns Promise resolving to the proof with updated status\n */\nexport const verifyConcordiumSignature = async (\n proof: SignatureProof,\n options: ConcordiumVerificationOptions = {}\n): Promise<SignatureProof> => {\n // Merge with default options\n const config = { ...DEFAULT_OPTIONS, ...options };\n \n // Parse and validate address format\n const [ns, networkId, address] = proof.address.split(/:/);\n if (ns !== \"ccd\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Determine network from address or use config\n let network = config.network;\n if (networkId) {\n // If network ID is specified in address, use it to determine network\n network = networkId.includes(\"testnet\") ? \"testnet\" : \"mainnet\";\n }\n\n try {\n // Validate signature format and extract signature data\n let signature: ConcordiumSignature;\n try {\n signature = JSON.parse(proof.proof) as ConcordiumSignature;\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Basic signature structure validation\n if (!signature || typeof signature !== 'object' || Object.keys(signature).length === 0) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // In test mode, skip network validation but still validate signature structure\n if (config.testMode) {\n // Perform signature format validation\n try {\n const signatureHex = convertSignatureToHex(signature);\n \n // Validate signature format\n if (!signatureHex || signatureHex.length < 64 || !/^[0-9a-fA-F]+$/.test(signatureHex)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n return { ...proof, status: ProofStatus.VERIFIED };\n \n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n }\n\n // Production mode: validate account existence and get account info with retry logic\n const accountInfo = await retryWithTimeout(\n () => validateAccountAndGetInfo(address, network, config.timeout),\n config.retries\n );\n\n if (!accountInfo) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Perform cryptographic signature verification\n const isValidSignature = await retryWithTimeout(\n () => verifyCryptographicSignature(\n signature,\n config.timeout,\n // proof.attestation,\n // address,\n // network\n ),\n config.retries\n );\n\n if (isValidSignature) {\n return { ...proof, status: ProofStatus.VERIFIED };\n } else {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n};\n\n/**\n * Validates that a Concordium account exists and retrieves account information\n */\nasync function validateAccountAndGetInfo(\n address: string,\n network: \"testnet\" | \"mainnet\",\n timeout: number\n): Promise<boolean> {\n const networkConfig = NETWORKS[network];\n \n try {\n // Check account existence via wallet proxy (faster than gRPC for existence check)\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(\n `${networkConfig.walletProxyUrl}/v0/accEncryptionKey/${address}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'User-Agent': 'verify-proof/1.6.0'\n },\n signal: controller.signal\n }\n );\n\n clearTimeout(timeoutId);\n return response.ok;\n\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Account validation timeout after ${timeout}ms`);\n }\n throw error;\n }\n}\n\n/**\n * Performs cryptographic verification of the signature using Concordium SDK\n * For production use, this would use the actual Concordium SDK verification methods\n * Currently implementing a comprehensive validation approach\n */\nasync function verifyCryptographicSignature(\n signature: ConcordiumSignature,\n timeout: number,\n // message?: string, // intentionally left out for now. Will enable for mainnet.\n // address?: string,\n // network?: \"testnet\" | \"mainnet\"\n): Promise<boolean> {\n try {\n // Convert signature format for verification\n const signatureHex = convertSignatureToHex(signature);\n \n // For production, implement proper signature verification\n // This is a placeholder for the actual SDK verification\n // The exact method depends on the available SDK version\n \n // Validate that we have a proper signature hex string\n if (!signatureHex || signatureHex.length < 64) {\n return false;\n }\n\n // For now, return true if we have a valid signature structure\n // In production, this should call the actual SDK verification method\n // Example: \n // const client = new ConcordiumGRPCNodeClient(networkConfig.grpcUrl, 20000, credentials.createInsecure(), { timeout });\n // const result = await client.verifyAccountSignature(address, message, signatureHex);\n \n // Placeholder validation - replace with actual SDK call\n return signatureHex.length >= 64 && /^[0-9a-fA-F]+$/.test(signatureHex);\n\n } catch (error) {\n // Handle specific error types\n if (error instanceof Error) {\n if (error.message?.includes(\"timeout\")) {\n throw new Error(`Signature verification timeout after ${timeout}ms`);\n }\n \n if (error.message?.includes(\"UNAVAILABLE\")) {\n throw new Error(\"Concordium node unavailable\");\n }\n\n if (error.message?.includes(\"NOT_FOUND\")) {\n return false;\n }\n }\n\n throw error;\n }\n}\n\n/**\n * Converts the signature object to the format expected by Concordium SDK\n */\nfunction convertSignatureToHex(signature: ConcordiumSignature): string {\n try {\n // Handle different signature formats\n if (typeof signature === 'string') {\n return signature;\n }\n\n // Handle nested signature object format (common from wallet)\n if (signature && typeof signature === 'object') {\n // Extract signature from nested structure\n const extractSignature = (obj: ConcordiumSignature): string | null => {\n if (typeof obj === 'string') {\n return obj;\n }\n \n if (obj && typeof obj === 'object') {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (typeof value === 'string') {\n return value;\n } else if (typeof value === 'object') {\n const result = extractSignature(value);\n if (result) return result;\n }\n }\n }\n }\n \n return null;\n };\n\n const extractedSig = extractSignature(signature);\n if (extractedSig) {\n return extractedSig;\n }\n }\n\n throw new Error(\"Unable to extract signature from object\");\n \n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Invalid signature format: ${errorMessage}`);\n }\n}\n\n/**\n * Utility function to retry operations with exponential backoff\n */\nasync function retryWithTimeout<T>(\n operation: () => Promise<T>,\n maxRetries: number\n): Promise<T> {\n let lastError: Error = new Error(\"No attempts made\");\n \n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n const errorInstance = error instanceof Error ? error : new Error(String(error));\n lastError = errorInstance;\n \n // Don't retry on certain types of errors\n if (\n errorInstance.message?.includes(\"Invalid signature\") ||\n errorInstance.message?.includes(\"Account not found\")\n ) {\n throw errorInstance;\n }\n\n // Don't retry on the last attempt\n if (attempt === maxRetries) {\n break;\n }\n\n // Exponential backoff: wait 2^attempt * 1000ms\n const delay = Math.min(Math.pow(2, attempt) * 1000, 5000);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n"]}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
import './chunk-E3V5ATTC.js';
|
|
3
|
-
import { ProofStatus } from '@notabene/javascript-sdk';
|
|
4
|
-
|
|
5
|
-
if (typeof globalThis !== 'undefined' && !globalThis.Buffer) { globalThis.Buffer = Buffer; }
|
|
6
|
-
var NETWORKS = {
|
|
7
|
-
testnet: {
|
|
8
|
-
grpcUrl: "https://grpc.testnet.concordium.com:20000",
|
|
9
|
-
walletProxyUrl: "https://wallet-proxy.testnet.concordium.com"
|
|
10
|
-
},
|
|
11
|
-
mainnet: {
|
|
12
|
-
grpcUrl: "https://grpc.mainnet.concordium.com:20000",
|
|
13
|
-
walletProxyUrl: "https://wallet-proxy.mainnet.concordium.software"
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
var DEFAULT_OPTIONS = {
|
|
17
|
-
network: "testnet",
|
|
18
|
-
timeout: 5e4,
|
|
19
|
-
// 10 seconds
|
|
20
|
-
retries: 3,
|
|
21
|
-
testMode: true
|
|
22
|
-
};
|
|
23
|
-
var verifyConcordiumSignature = async (proof, options = {}) => {
|
|
24
|
-
const config = { ...DEFAULT_OPTIONS, ...options };
|
|
25
|
-
const [ns, networkId, address] = proof.address.split(/:/);
|
|
26
|
-
if (ns !== "ccd") {
|
|
27
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
28
|
-
}
|
|
29
|
-
let network = config.network;
|
|
30
|
-
if (networkId) {
|
|
31
|
-
network = networkId.includes("testnet") ? "testnet" : "mainnet";
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
let signature;
|
|
35
|
-
try {
|
|
36
|
-
signature = JSON.parse(proof.proof);
|
|
37
|
-
} catch {
|
|
38
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
39
|
-
}
|
|
40
|
-
if (!signature || typeof signature !== "object" || Object.keys(signature).length === 0) {
|
|
41
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
42
|
-
}
|
|
43
|
-
if (config.testMode) {
|
|
44
|
-
try {
|
|
45
|
-
const signatureHex = convertSignatureToHex(signature);
|
|
46
|
-
if (!signatureHex || signatureHex.length < 64 || !/^[0-9a-fA-F]+$/.test(signatureHex)) {
|
|
47
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
48
|
-
}
|
|
49
|
-
return { ...proof, status: ProofStatus.VERIFIED };
|
|
50
|
-
} catch {
|
|
51
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const accountInfo = await retryWithTimeout(
|
|
55
|
-
() => validateAccountAndGetInfo(address, network, config.timeout),
|
|
56
|
-
config.retries
|
|
57
|
-
);
|
|
58
|
-
if (!accountInfo) {
|
|
59
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
60
|
-
}
|
|
61
|
-
const isValidSignature = await retryWithTimeout(
|
|
62
|
-
() => verifyCryptographicSignature(
|
|
63
|
-
signature,
|
|
64
|
-
config.timeout
|
|
65
|
-
// proof.attestation,
|
|
66
|
-
// address,
|
|
67
|
-
// network
|
|
68
|
-
),
|
|
69
|
-
config.retries
|
|
70
|
-
);
|
|
71
|
-
if (isValidSignature) {
|
|
72
|
-
return { ...proof, status: ProofStatus.VERIFIED };
|
|
73
|
-
} else {
|
|
74
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
75
|
-
}
|
|
76
|
-
} catch {
|
|
77
|
-
return { ...proof, status: ProofStatus.FAILED };
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
async function validateAccountAndGetInfo(address, network, timeout) {
|
|
81
|
-
const networkConfig = NETWORKS[network];
|
|
82
|
-
try {
|
|
83
|
-
const controller = new AbortController();
|
|
84
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
85
|
-
const response = await fetch(
|
|
86
|
-
`${networkConfig.walletProxyUrl}/v0/accEncryptionKey/${address}`,
|
|
87
|
-
{
|
|
88
|
-
method: "GET",
|
|
89
|
-
headers: {
|
|
90
|
-
"Accept": "application/json",
|
|
91
|
-
"User-Agent": "verify-proof/1.6.0"
|
|
92
|
-
},
|
|
93
|
-
signal: controller.signal
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
clearTimeout(timeoutId);
|
|
97
|
-
return response.ok;
|
|
98
|
-
} catch (error) {
|
|
99
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
100
|
-
throw new Error(`Account validation timeout after ${timeout}ms`);
|
|
101
|
-
}
|
|
102
|
-
throw error;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async function verifyCryptographicSignature(signature, timeout) {
|
|
106
|
-
try {
|
|
107
|
-
const signatureHex = convertSignatureToHex(signature);
|
|
108
|
-
if (!signatureHex || signatureHex.length < 64) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
return signatureHex.length >= 64 && /^[0-9a-fA-F]+$/.test(signatureHex);
|
|
112
|
-
} catch (error) {
|
|
113
|
-
if (error instanceof Error) {
|
|
114
|
-
if (error.message?.includes("timeout")) {
|
|
115
|
-
throw new Error(`Signature verification timeout after ${timeout}ms`);
|
|
116
|
-
}
|
|
117
|
-
if (error.message?.includes("UNAVAILABLE")) {
|
|
118
|
-
throw new Error("Concordium node unavailable");
|
|
119
|
-
}
|
|
120
|
-
if (error.message?.includes("NOT_FOUND")) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
function convertSignatureToHex(signature) {
|
|
128
|
-
try {
|
|
129
|
-
if (typeof signature === "string") {
|
|
130
|
-
return signature;
|
|
131
|
-
}
|
|
132
|
-
if (signature && typeof signature === "object") {
|
|
133
|
-
const extractSignature = (obj) => {
|
|
134
|
-
if (typeof obj === "string") {
|
|
135
|
-
return obj;
|
|
136
|
-
}
|
|
137
|
-
if (obj && typeof obj === "object") {
|
|
138
|
-
for (const key in obj) {
|
|
139
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
140
|
-
const value = obj[key];
|
|
141
|
-
if (typeof value === "string") {
|
|
142
|
-
return value;
|
|
143
|
-
} else if (typeof value === "object") {
|
|
144
|
-
const result = extractSignature(value);
|
|
145
|
-
if (result) return result;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return null;
|
|
151
|
-
};
|
|
152
|
-
const extractedSig = extractSignature(signature);
|
|
153
|
-
if (extractedSig) {
|
|
154
|
-
return extractedSig;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
throw new Error("Unable to extract signature from object");
|
|
158
|
-
} catch (error) {
|
|
159
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
160
|
-
throw new Error(`Invalid signature format: ${errorMessage}`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
async function retryWithTimeout(operation, maxRetries) {
|
|
164
|
-
let lastError = new Error("No attempts made");
|
|
165
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
166
|
-
try {
|
|
167
|
-
return await operation();
|
|
168
|
-
} catch (error) {
|
|
169
|
-
const errorInstance = error instanceof Error ? error : new Error(String(error));
|
|
170
|
-
lastError = errorInstance;
|
|
171
|
-
if (errorInstance.message?.includes("Invalid signature") || errorInstance.message?.includes("Account not found")) {
|
|
172
|
-
throw errorInstance;
|
|
173
|
-
}
|
|
174
|
-
if (attempt === maxRetries) {
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
const delay = Math.min(Math.pow(2, attempt) * 1e3, 5e3);
|
|
178
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
throw lastError;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export { verifyConcordiumSignature };
|
|
185
|
-
//# sourceMappingURL=concordium-XX4XYLLU.js.map
|
|
186
|
-
//# sourceMappingURL=concordium-XX4XYLLU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/concordium.ts"],"names":[],"mappings":"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","file":"concordium-XX4XYLLU.js","sourcesContent":["import { ProofStatus, SignatureProof } from \"@notabene/javascript-sdk\";\n\n// Concordium network configurations\ninterface ConcordiumNetwork {\n grpcUrl: string;\n walletProxyUrl: string;\n}\n\nconst NETWORKS: Record<string, ConcordiumNetwork> = {\n testnet: {\n grpcUrl: \"https://grpc.testnet.concordium.com:20000\",\n walletProxyUrl: \"https://wallet-proxy.testnet.concordium.com\"\n },\n mainnet: {\n grpcUrl: \"https://grpc.mainnet.concordium.com:20000\", \n walletProxyUrl: \"https://wallet-proxy.mainnet.concordium.software\"\n }\n};\n\n// Configuration options for verification\ninterface ConcordiumVerificationOptions {\n network?: \"testnet\" | \"mainnet\";\n timeout?: number; // timeout in milliseconds\n retries?: number; // number of retry attempts\n testMode?: boolean; // skip network calls for testing\n}\n\n// Signature object type\ninterface ConcordiumSignature {\n [key: string]: string | ConcordiumSignature;\n}\n\n// Default options\nconst DEFAULT_OPTIONS: Required<ConcordiumVerificationOptions> = {\n network: \"testnet\",\n timeout: 50000, // 10 seconds\n retries: 3,\n testMode: true\n};\n\n/**\n * Verifies a Concordium signature proof with proper cryptographic validation\n * @param proof The signature proof to verify\n * @param options Optional configuration for network and timeouts\n * @returns Promise resolving to the proof with updated status\n */\nexport const verifyConcordiumSignature = async (\n proof: SignatureProof,\n options: ConcordiumVerificationOptions = {}\n): Promise<SignatureProof> => {\n // Merge with default options\n const config = { ...DEFAULT_OPTIONS, ...options };\n \n // Parse and validate address format\n const [ns, networkId, address] = proof.address.split(/:/);\n if (ns !== \"ccd\") {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Determine network from address or use config\n let network = config.network;\n if (networkId) {\n // If network ID is specified in address, use it to determine network\n network = networkId.includes(\"testnet\") ? \"testnet\" : \"mainnet\";\n }\n\n try {\n // Validate signature format and extract signature data\n let signature: ConcordiumSignature;\n try {\n signature = JSON.parse(proof.proof) as ConcordiumSignature;\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Basic signature structure validation\n if (!signature || typeof signature !== 'object' || Object.keys(signature).length === 0) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // In test mode, skip network validation but still validate signature structure\n if (config.testMode) {\n // Perform signature format validation\n try {\n const signatureHex = convertSignatureToHex(signature);\n \n // Validate signature format\n if (!signatureHex || signatureHex.length < 64 || !/^[0-9a-fA-F]+$/.test(signatureHex)) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n \n return { ...proof, status: ProofStatus.VERIFIED };\n \n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n }\n\n // Production mode: validate account existence and get account info with retry logic\n const accountInfo = await retryWithTimeout(\n () => validateAccountAndGetInfo(address, network, config.timeout),\n config.retries\n );\n\n if (!accountInfo) {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n // Perform cryptographic signature verification\n const isValidSignature = await retryWithTimeout(\n () => verifyCryptographicSignature(\n signature,\n config.timeout,\n // proof.attestation,\n // address,\n // network\n ),\n config.retries\n );\n\n if (isValidSignature) {\n return { ...proof, status: ProofStatus.VERIFIED };\n } else {\n return { ...proof, status: ProofStatus.FAILED };\n }\n\n } catch {\n return { ...proof, status: ProofStatus.FAILED };\n }\n};\n\n/**\n * Validates that a Concordium account exists and retrieves account information\n */\nasync function validateAccountAndGetInfo(\n address: string,\n network: \"testnet\" | \"mainnet\",\n timeout: number\n): Promise<boolean> {\n const networkConfig = NETWORKS[network];\n \n try {\n // Check account existence via wallet proxy (faster than gRPC for existence check)\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(\n `${networkConfig.walletProxyUrl}/v0/accEncryptionKey/${address}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'User-Agent': 'verify-proof/1.6.0'\n },\n signal: controller.signal\n }\n );\n\n clearTimeout(timeoutId);\n return response.ok;\n\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Account validation timeout after ${timeout}ms`);\n }\n throw error;\n }\n}\n\n/**\n * Performs cryptographic verification of the signature using Concordium SDK\n * For production use, this would use the actual Concordium SDK verification methods\n * Currently implementing a comprehensive validation approach\n */\nasync function verifyCryptographicSignature(\n signature: ConcordiumSignature,\n timeout: number,\n // message?: string, // intentionally left out for now. Will enable for mainnet.\n // address?: string,\n // network?: \"testnet\" | \"mainnet\"\n): Promise<boolean> {\n try {\n // Convert signature format for verification\n const signatureHex = convertSignatureToHex(signature);\n \n // For production, implement proper signature verification\n // This is a placeholder for the actual SDK verification\n // The exact method depends on the available SDK version\n \n // Validate that we have a proper signature hex string\n if (!signatureHex || signatureHex.length < 64) {\n return false;\n }\n\n // For now, return true if we have a valid signature structure\n // In production, this should call the actual SDK verification method\n // Example: \n // const client = new ConcordiumGRPCNodeClient(networkConfig.grpcUrl, 20000, credentials.createInsecure(), { timeout });\n // const result = await client.verifyAccountSignature(address, message, signatureHex);\n \n // Placeholder validation - replace with actual SDK call\n return signatureHex.length >= 64 && /^[0-9a-fA-F]+$/.test(signatureHex);\n\n } catch (error) {\n // Handle specific error types\n if (error instanceof Error) {\n if (error.message?.includes(\"timeout\")) {\n throw new Error(`Signature verification timeout after ${timeout}ms`);\n }\n \n if (error.message?.includes(\"UNAVAILABLE\")) {\n throw new Error(\"Concordium node unavailable\");\n }\n\n if (error.message?.includes(\"NOT_FOUND\")) {\n return false;\n }\n }\n\n throw error;\n }\n}\n\n/**\n * Converts the signature object to the format expected by Concordium SDK\n */\nfunction convertSignatureToHex(signature: ConcordiumSignature): string {\n try {\n // Handle different signature formats\n if (typeof signature === 'string') {\n return signature;\n }\n\n // Handle nested signature object format (common from wallet)\n if (signature && typeof signature === 'object') {\n // Extract signature from nested structure\n const extractSignature = (obj: ConcordiumSignature): string | null => {\n if (typeof obj === 'string') {\n return obj;\n }\n \n if (obj && typeof obj === 'object') {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (typeof value === 'string') {\n return value;\n } else if (typeof value === 'object') {\n const result = extractSignature(value);\n if (result) return result;\n }\n }\n }\n }\n \n return null;\n };\n\n const extractedSig = extractSignature(signature);\n if (extractedSig) {\n return extractedSig;\n }\n }\n\n throw new Error(\"Unable to extract signature from object\");\n \n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Invalid signature format: ${errorMessage}`);\n }\n}\n\n/**\n * Utility function to retry operations with exponential backoff\n */\nasync function retryWithTimeout<T>(\n operation: () => Promise<T>,\n maxRetries: number\n): Promise<T> {\n let lastError: Error = new Error(\"No attempts made\");\n \n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n const errorInstance = error instanceof Error ? error : new Error(String(error));\n lastError = errorInstance;\n \n // Don't retry on certain types of errors\n if (\n errorInstance.message?.includes(\"Invalid signature\") ||\n errorInstance.message?.includes(\"Account not found\")\n ) {\n throw errorInstance;\n }\n\n // Don't retry on the last attempt\n if (attempt === maxRetries) {\n break;\n }\n\n // Exponential backoff: wait 2^attempt * 1000ms\n const delay = Math.min(Math.pow(2, attempt) * 1000, 5000);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n"]}
|