@ghostspeak/sdk 2.0.6 → 2.0.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 (118) hide show
  1. package/README.md +295 -30
  2. package/dist/GhostSpeakClient-bnXwUPHI.d.ts +1011 -0
  3. package/dist/StakingModule-DunDShLq.d.ts +2446 -0
  4. package/dist/{agent-M74TCRON.js → agent-S42FIMR7.js} +4 -4
  5. package/dist/{agent-M74TCRON.js.map → agent-S42FIMR7.js.map} +1 -1
  6. package/dist/batch-operations-45CQFEID.js +4 -0
  7. package/dist/batch-operations-45CQFEID.js.map +1 -0
  8. package/dist/browser-CI5_6Gzk.d.ts +234 -0
  9. package/dist/browser.d.ts +6 -576
  10. package/dist/browser.js +15 -842
  11. package/dist/browser.js.map +1 -1
  12. package/dist/chunk-46QWY3MG.js +156 -0
  13. package/dist/chunk-46QWY3MG.js.map +1 -0
  14. package/dist/{chunk-F3DZMBUA.js → chunk-5QBSC4T4.js} +327 -493
  15. package/dist/chunk-5QBSC4T4.js.map +1 -0
  16. package/dist/chunk-5QZVFUXB.js +4176 -0
  17. package/dist/chunk-5QZVFUXB.js.map +1 -0
  18. package/dist/chunk-6XCCMJ6M.js +1865 -0
  19. package/dist/chunk-6XCCMJ6M.js.map +1 -0
  20. package/dist/chunk-A7ALCVUI.js +98 -0
  21. package/dist/chunk-A7ALCVUI.js.map +1 -0
  22. package/dist/chunk-AWMGX3OX.js +814 -0
  23. package/dist/chunk-AWMGX3OX.js.map +1 -0
  24. package/dist/chunk-BF3IQ35I.js +284 -0
  25. package/dist/chunk-BF3IQ35I.js.map +1 -0
  26. package/dist/chunk-BQDGRTVP.js +168 -0
  27. package/dist/chunk-BQDGRTVP.js.map +1 -0
  28. package/dist/chunk-IQM5RASO.js +8502 -0
  29. package/dist/chunk-IQM5RASO.js.map +1 -0
  30. package/dist/chunk-JYXSOXCP.js +3850 -0
  31. package/dist/chunk-JYXSOXCP.js.map +1 -0
  32. package/dist/chunk-OXA7MECJ.js +7787 -0
  33. package/dist/chunk-OXA7MECJ.js.map +1 -0
  34. package/dist/chunk-QLRWUHN2.js +231 -0
  35. package/dist/chunk-QLRWUHN2.js.map +1 -0
  36. package/dist/chunk-SKMJJ3Q6.js +125 -0
  37. package/dist/chunk-SKMJJ3Q6.js.map +1 -0
  38. package/dist/chunk-TTB4OS2D.js +69 -0
  39. package/dist/chunk-TTB4OS2D.js.map +1 -0
  40. package/dist/chunk-UP2VWCW5.js +33 -0
  41. package/dist/{chunk-NSBPE2FW.js.map → chunk-UP2VWCW5.js.map} +1 -1
  42. package/dist/{chunk-UJUGGLMT.js → chunk-VQZQCHUT.js} +5 -5
  43. package/dist/{chunk-UJUGGLMT.js.map → chunk-VQZQCHUT.js.map} +1 -1
  44. package/dist/client.d.ts +4 -4
  45. package/dist/client.js +11 -10
  46. package/dist/createAgentAuthorization-KGZNXZBT.js +5 -0
  47. package/dist/createAgentAuthorization-KGZNXZBT.js.map +1 -0
  48. package/dist/credentials.js +1 -1
  49. package/dist/crypto.js +2 -2
  50. package/dist/errors.js +1 -1
  51. package/dist/feature-flags-B1g0DCPe.d.ts +1181 -0
  52. package/dist/generated-QJREJQ2C.js +9 -0
  53. package/dist/{generated-VNLHMR6Y.js.map → generated-QJREJQ2C.js.map} +1 -1
  54. package/dist/{ghostspeak_wasm-SB2RPJ3D.js → ghostspeak_wasm-F227HOSM.js} +3 -3
  55. package/dist/{ghostspeak_wasm-SB2RPJ3D.js.map → ghostspeak_wasm-F227HOSM.js.map} +1 -1
  56. package/dist/index.d.ts +1179 -1498
  57. package/dist/index.js +356 -3578
  58. package/dist/index.js.map +1 -1
  59. package/dist/metafile-esm.json +1 -1
  60. package/dist/minimal/core-minimal.d.ts +2446 -1245
  61. package/dist/minimal/core-minimal.js +9 -9
  62. package/dist/minimal/core-minimal.js.map +1 -1
  63. package/dist/nacl-fast-W5BJ3KZ2.js +2229 -0
  64. package/dist/nacl-fast-W5BJ3KZ2.js.map +1 -0
  65. package/dist/pda-4KP7CURF.js +4 -0
  66. package/dist/pda-4KP7CURF.js.map +1 -0
  67. package/dist/pda-Ce7VYg4T.d.ts +25 -0
  68. package/dist/reputation-types-Yebf0Rm_.d.ts +1071 -0
  69. package/dist/revokeAuthorization-2ZRO6GUZ.js +5 -0
  70. package/dist/revokeAuthorization-2ZRO6GUZ.js.map +1 -0
  71. package/dist/signature-verification-DGxR4aYQ.d.ts +448 -0
  72. package/dist/types.js +1 -1
  73. package/dist/updateReputationWithAuth-PCEUOCFV.js +5 -0
  74. package/dist/updateReputationWithAuth-PCEUOCFV.js.map +1 -0
  75. package/dist/utils.d.ts +69 -203
  76. package/dist/utils.js +15 -153
  77. package/dist/utils.js.map +1 -1
  78. package/package.json +27 -34
  79. package/dist/.tsbuildinfo +0 -1
  80. package/dist/GhostSpeakClient-D_66Uzsf.d.ts +0 -707
  81. package/dist/GovernanceModule-DQYYys-H.d.ts +0 -1766
  82. package/dist/chunk-APCKGD23.js +0 -1328
  83. package/dist/chunk-APCKGD23.js.map +0 -1
  84. package/dist/chunk-ASQXX4IT.js +0 -572
  85. package/dist/chunk-ASQXX4IT.js.map +0 -1
  86. package/dist/chunk-COGZFWOT.js +0 -19657
  87. package/dist/chunk-COGZFWOT.js.map +0 -1
  88. package/dist/chunk-F3DZMBUA.js.map +0 -1
  89. package/dist/chunk-GMHIUK2R.js +0 -7526
  90. package/dist/chunk-GMHIUK2R.js.map +0 -1
  91. package/dist/chunk-IAWBZYPE.js +0 -356
  92. package/dist/chunk-IAWBZYPE.js.map +0 -1
  93. package/dist/chunk-NSBPE2FW.js +0 -15
  94. package/dist/chunk-OWYHJG6H.js +0 -13311
  95. package/dist/chunk-OWYHJG6H.js.map +0 -1
  96. package/dist/chunk-RDDPOFR5.js +0 -3
  97. package/dist/chunk-RDDPOFR5.js.map +0 -1
  98. package/dist/chunk-RERCHKZP.js +0 -35
  99. package/dist/chunk-RERCHKZP.js.map +0 -1
  100. package/dist/chunk-TVVGXYCI.js +0 -2887
  101. package/dist/chunk-TVVGXYCI.js.map +0 -1
  102. package/dist/chunk-ZGP5552B.js +0 -377
  103. package/dist/chunk-ZGP5552B.js.map +0 -1
  104. package/dist/chunk-ZWOYNHVK.js +0 -196
  105. package/dist/chunk-ZWOYNHVK.js.map +0 -1
  106. package/dist/dist/.tsbuildinfo +0 -1
  107. package/dist/elgamal-VZLWB3XK.js +0 -5
  108. package/dist/elgamal-VZLWB3XK.js.map +0 -1
  109. package/dist/feature-flags-V722ZuXO.d.ts +0 -3512
  110. package/dist/generated-VNLHMR6Y.js +0 -5
  111. package/dist/ipfs-types-BOt9ZNg4.d.ts +0 -592
  112. package/dist/multisigConfig-BzEhy6jy.d.ts +0 -58
  113. package/dist/pda-B_nS8SbD.d.ts +0 -114
  114. package/dist/pda-S4BFJVGE.js +0 -4
  115. package/dist/pda-S4BFJVGE.js.map +0 -1
  116. package/dist/system-addresses-BFNLEbFx.d.ts +0 -857
  117. package/dist/token-2022-rpc-RALH4RK7.js +0 -593
  118. package/dist/token-2022-rpc-RALH4RK7.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/crypto/elgamal.ts","../src/crypto/wasm-bridge.ts"],"names":["proof","point","wasmModule","loadWasmModule","ed25519"],"mappings":"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","file":"chunk-UJUGGLMT.js","sourcesContent":["/**\n * Unified ElGamal Encryption Module\n * \n * This module consolidates all ElGamal implementations into a single, optimized solution\n * for client-side privacy features.\n * \n * Features:\n * - Twisted ElGamal encryption on curve25519\n * - Bulletproof range proofs (0 to 2^64)\n * - Validity and equality proofs\n * - Homomorphic addition/subtraction\n * - WASM optimization support\n */\n\nimport { ed25519 } from '@noble/curves/ed25519'\nimport { sha256 } from '@noble/hashes/sha256'\nimport { randomBytes, bytesToNumberLE, numberToBytesBE } from '@noble/curves/abstract/utils'\nimport type { Address } from '@solana/addresses'\n\n// Window extension for WASM module\ninterface WindowWithWasm extends Window {\n ghostspeak_wasm?: {\n generate_range_proof: (value: string, commitment: Uint8Array, randomness: Uint8Array) => Promise<{\n proof: Uint8Array\n commitment: Uint8Array\n }>\n verify_range_proof: (proof: Uint8Array, commitment: Uint8Array) => Promise<boolean>\n generate_validity_proof: (publicKey: Uint8Array, commitment: Uint8Array, handle: Uint8Array, randomness: Uint8Array) => Promise<Uint8Array>\n generate_equality_proof: (sourceCommitment: Uint8Array, destCommitment: Uint8Array, amount: string, sourceRandomness: Uint8Array, destRandomness: Uint8Array) => Promise<Uint8Array>\n generate_withdraw_proof: (balance: string, secretKey: Uint8Array, commitment: Uint8Array, handle: Uint8Array) => Promise<Uint8Array>\n }\n}\n\n// =====================================================\n// TYPES AND INTERFACES\n// =====================================================\n\nexport interface ElGamalKeypair {\n publicKey: Uint8Array // 32 bytes\n secretKey: Uint8Array // 32 bytes\n}\n\nexport interface ElGamalCiphertext {\n commitment: PedersenCommitment\n handle: DecryptHandle\n}\n\nexport interface PedersenCommitment {\n commitment: Uint8Array // 32 bytes - curve point\n}\n\nexport interface DecryptHandle {\n handle: Uint8Array // 32 bytes - curve point\n}\n\nexport interface RangeProof {\n proof: Uint8Array // 674 bytes for bulletproof\n commitment: Uint8Array // 32 bytes\n}\n\nexport interface ValidityProof {\n proof: Uint8Array // 160 bytes\n}\n\nexport interface EqualityProof {\n proof: Uint8Array // 192 bytes\n}\n\nexport interface TransferProof {\n rangeProof: RangeProof\n validityProof: ValidityProof\n equalityProof: EqualityProof\n}\n\nexport interface WithdrawProof {\n proof: Uint8Array // 80 bytes\n}\n\n// =====================================================\n// CONSTANTS\n// =====================================================\n\nconst G = ed25519.ExtendedPoint.BASE\n// Create secondary generator H using nothing-up-my-sleeve construction\n// This follows the same approach as Ristretto and other secure curve implementations\nfunction createHGenerator(): typeof ed25519.ExtendedPoint.BASE {\n const encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : {\n encode: (str: string) => new Uint8Array(Buffer.from(str, 'utf8'))\n }\n const domainSeparator = encoder.encode('GHOSTSPEAK_ELGAMAL_H_GENERATOR')\n const input = new Uint8Array([...domainSeparator, ...G.toRawBytes()])\n const hash = sha256(input)\n // Use hash-to-curve for secure point generation\n return ed25519.ExtendedPoint.fromHex(Array.from(hash, b => b.toString(16).padStart(2, '0')).join(''))\n}\nconst H = createHGenerator()\n\n// Proof sizes for client-side verification\nexport const PROOF_SIZES = {\n RANGE_PROOF: 674,\n VALIDITY_PROOF: 160,\n EQUALITY_PROOF: 192,\n WITHDRAW_PROOF: 80,\n ZERO_BALANCE_PROOF: 96,\n FEE_SIGMA_PROOF: 256,\n PUBKEY_VALIDITY_PROOF: 64\n} as const\n\n// =====================================================\n// CORE ELGAMAL OPERATIONS\n// =====================================================\n\n/**\n * Generate a new ElGamal keypair with cryptographic validation\n */\nexport function generateKeypair(): ElGamalKeypair {\n let secretKey: Uint8Array\n let publicKey: Uint8Array\n \n // Generate cryptographically secure keypair with validation\n const MAX_ITERATIONS = 1000\n let iterations = 0\n let validKeypairGenerated = false\n\n while (!validKeypairGenerated && iterations < MAX_ITERATIONS) {\n iterations++\n secretKey = randomBytes(32)\n // Ensure secret key is within valid scalar range [1, n-1]\n const scalar = bytesToNumberLE(secretKey) % ed25519.CURVE.n\n if (scalar === 0n || scalar >= ed25519.CURVE.n) {\n continue // Regenerate if invalid\n }\n\n // Generate public key and validate it's a valid curve point\n const pubkeyPoint = scalarMultiply(G, secretKey)\n if (pubkeyPoint.equals(ed25519.ExtendedPoint.ZERO)) {\n continue // Regenerate if point at infinity\n }\n\n publicKey = pubkeyPoint.toRawBytes()\n validKeypairGenerated = true\n }\n\n if (!validKeypairGenerated) {\n throw new Error('Failed to generate valid ElGamal keypair after maximum iterations')\n }\n\n return { publicKey: publicKey!, secretKey: secretKey! }\n}\n\n/**\n * Derive ElGamal keypair from seed with cryptographic validation\n */\nexport function deriveKeypair(seed: Uint8Array): ElGamalKeypair {\n if (seed.length !== 32) {\n throw new Error('Seed must be 32 bytes')\n }\n \n // Use HKDF-like derivation for secure key generation\n const encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : {\n encode: (str: string) => new Uint8Array(Buffer.from(str, 'utf8'))\n }\n const salt = encoder.encode('GHOSTSPEAK_ELGAMAL_KEY_DERIVATION')\n const secretKey = sha256(new Uint8Array([...salt, ...seed]))\n \n // Validate secret key is within valid scalar range\n const scalar = bytesToNumberLE(secretKey) % ed25519.CURVE.n\n if (scalar === 0n || scalar >= ed25519.CURVE.n) {\n throw new Error('Invalid seed produces out-of-range secret key')\n }\n \n // Generate and validate public key\n const pubkeyPoint = scalarMultiply(G, secretKey)\n if (pubkeyPoint.equals(ed25519.ExtendedPoint.ZERO)) {\n throw new Error('Invalid seed produces invalid public key')\n }\n \n const publicKey = pubkeyPoint.toRawBytes()\n \n return { publicKey, secretKey }\n}\n\n/**\n * Encrypt a value using twisted ElGamal\n */\nexport function encrypt(\n publicKey: Uint8Array,\n value: bigint\n): { ciphertext: ElGamalCiphertext; randomness: Uint8Array } {\n if (value < BigInt(0) || value >= BigInt(2) ** BigInt(64)) {\n throw new Error('Value must be between 0 and 2^64 - 1')\n }\n \n // Generate random scalar\n const randomness = randomBytes(32)\n \n // Parse public key - handle both hex string and Uint8Array\n const pubkeyPoint = pointFromBytes(publicKey)\n \n // Compute Pedersen commitment: C = v*H + r*G\n const valueScalar = numberToBytesBE(value, 32)\n const commitment = scalarMultiply(H, valueScalar)\n .add(scalarMultiply(G, randomness))\n \n // Compute decrypt handle: D = r*P\n const handle = scalarMultiply(pubkeyPoint, randomness)\n \n return {\n ciphertext: {\n commitment: { commitment: commitment.toRawBytes() },\n handle: { handle: handle.toRawBytes() }\n },\n randomness\n }\n}\n\n/**\n * Decrypt an ElGamal ciphertext (brute force for small values)\n */\nexport function decrypt(\n secretKey: Uint8Array,\n ciphertext: ElGamalCiphertext,\n maxValue = 1_000_000\n): bigint | null {\n // Parse points\n const C = pointFromBytes(ciphertext.commitment.commitment)\n const D = pointFromBytes(ciphertext.handle.handle)\n \n // Compute C - s*D = v*H\n const vH = C.subtract(scalarMultiply(D, secretKey))\n \n // Brute force search for v\n for (let v = BigInt(0); v <= BigInt(maxValue); v++) {\n const testPoint = scalarMultiply(H, numberToBytesBE(v, 32))\n if (vH.equals(testPoint)) {\n return v\n }\n }\n \n return null\n}\n\n/**\n * Add two ElGamal ciphertexts (homomorphic addition) with constant-time operations\n */\nexport function addCiphertexts(\n ct1: ElGamalCiphertext,\n ct2: ElGamalCiphertext\n): ElGamalCiphertext {\n // Validate inputs\n if (ct1.commitment.commitment.length !== 32 || ct2.commitment.commitment.length !== 32) {\n throw new Error('Invalid commitment size')\n }\n if (ct1.handle.handle.length !== 32 || ct2.handle.handle.length !== 32) {\n throw new Error('Invalid handle size')\n }\n \n try {\n const C1 = pointFromBytes(ct1.commitment.commitment)\n const C2 = pointFromBytes(ct2.commitment.commitment)\n const D1 = pointFromBytes(ct1.handle.handle)\n const D2 = pointFromBytes(ct2.handle.handle)\n \n // Perform constant-time point addition\n const resultCommitment = C1.add(C2)\n const resultHandle = D1.add(D2)\n \n return {\n commitment: { commitment: resultCommitment.toRawBytes() },\n handle: { handle: resultHandle.toRawBytes() }\n }\n } catch (error) {\n throw new Error(`Ciphertext addition failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n}\n\n/**\n * Subtract two ElGamal ciphertexts (homomorphic subtraction) with constant-time operations\n */\nexport function subtractCiphertexts(\n ct1: ElGamalCiphertext,\n ct2: ElGamalCiphertext\n): ElGamalCiphertext {\n // Validate inputs\n if (ct1.commitment.commitment.length !== 32 || ct2.commitment.commitment.length !== 32) {\n throw new Error('Invalid commitment size')\n }\n if (ct1.handle.handle.length !== 32 || ct2.handle.handle.length !== 32) {\n throw new Error('Invalid handle size')\n }\n \n try {\n const C1 = pointFromBytes(ct1.commitment.commitment)\n const C2 = pointFromBytes(ct2.commitment.commitment)\n const D1 = pointFromBytes(ct1.handle.handle)\n const D2 = pointFromBytes(ct2.handle.handle)\n \n // Perform constant-time point subtraction\n const resultCommitment = C1.subtract(C2)\n const resultHandle = D1.subtract(D2)\n \n return {\n commitment: { commitment: resultCommitment.toRawBytes() },\n handle: { handle: resultHandle.toRawBytes() }\n }\n } catch (error) {\n throw new Error(`Ciphertext subtraction failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n}\n\n// =====================================================\n// ZERO-KNOWLEDGE PROOFS\n// =====================================================\n\n/**\n * Generate range proof for encrypted amount with input validation\n */\nexport async function generateRangeProof(\n value: bigint,\n commitment: PedersenCommitment,\n randomness: Uint8Array\n): Promise<RangeProof> {\n // Validate inputs\n if (value < 0n || value >= 2n ** 64n) {\n throw new Error('Value must be in range [0, 2^64)')\n }\n if (commitment.commitment.length !== 32) {\n throw new Error('Commitment must be 32 bytes')\n }\n if (randomness.length !== 32) {\n throw new Error('Randomness must be 32 bytes')\n }\n \n // Check if WASM module is available for performance\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n if (!wasm || typeof wasm.generate_range_proof !== 'function') {\n throw new Error('WASM module not properly loaded')\n }\n \n try {\n const proof = await wasm.generate_range_proof(\n value.toString(),\n commitment.commitment,\n randomness\n )\n \n // Validate WASM response\n if (!proof || !proof.proof || !proof.commitment) {\n throw new Error('Invalid WASM response')\n }\n \n const proofBytes = new Uint8Array(proof.proof as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.RANGE_PROOF) {\n throw new Error(`Invalid proof size: expected ${PROOF_SIZES.RANGE_PROOF}, got ${proofBytes.length}`)\n }\n \n return {\n proof: proofBytes,\n commitment: new Uint8Array(proof.commitment as ArrayLike<number>)\n }\n } catch (error) {\n throw new Error(`WASM range proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n \n // Fallback to JavaScript implementation using bulletproofs\n \n // Generate bulletproof range proof using cryptographic operations\n // This creates a real range proof that value is in [0, 2^64)\n const proof = await generateBulletproofRangeProof(\n value,\n commitment,\n randomness,\n PROOF_SIZES.RANGE_PROOF\n )\n \n return { proof, commitment: commitment.commitment }\n}\n\n/**\n * Generate validity proof for ciphertext with comprehensive validation\n */\nexport async function generateValidityProof(\n publicKey: Uint8Array,\n ciphertext: ElGamalCiphertext,\n randomness: Uint8Array\n): Promise<ValidityProof> {\n // Validate inputs\n if (publicKey.length !== 32) {\n throw new Error('Public key must be 32 bytes')\n }\n if (ciphertext.commitment.commitment.length !== 32) {\n throw new Error('Commitment must be 32 bytes')\n }\n if (ciphertext.handle.handle.length !== 32) {\n throw new Error('Handle must be 32 bytes')\n }\n if (randomness.length !== 32) {\n throw new Error('Randomness must be 32 bytes')\n }\n \n // Check if WASM module is available\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n \n if (wasm && typeof wasm.generate_validity_proof === 'function') {\n try {\n const proofResult = await wasm.generate_validity_proof(\n publicKey,\n ciphertext.commitment.commitment,\n ciphertext.handle.handle,\n randomness\n )\n \n // Validate WASM response\n if (!proofResult) {\n throw new Error('WASM returned null proof')\n }\n \n const proofBytes = new Uint8Array(proofResult as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.VALIDITY_PROOF) {\n throw new Error(`Invalid validity proof size: expected ${PROOF_SIZES.VALIDITY_PROOF}, got ${proofBytes.length}`)\n }\n \n return { proof: proofBytes }\n } catch (error) {\n throw new Error(`WASM validity proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n \n // Fallback implementation using Schnorr signatures\n \n // Generate a validity proof that proves knowledge of the secret key\n // corresponding to the ciphertext without revealing it\n const proof = await generateSchnorrValidityProof(\n publicKey,\n ciphertext,\n randomness,\n PROOF_SIZES.VALIDITY_PROOF\n )\n \n return { proof }\n}\n\n/**\n * Generate equality proof for transfer with comprehensive validation\n */\nexport async function generateEqualityProof(\n sourceCiphertext: ElGamalCiphertext,\n destCiphertext: ElGamalCiphertext,\n transferAmount: bigint,\n sourceRandomness: Uint8Array,\n destRandomness: Uint8Array\n): Promise<EqualityProof> {\n // Validate inputs\n if (transferAmount < 0n || transferAmount >= 2n ** 64n) {\n throw new Error('Transfer amount must be in range [0, 2^64)')\n }\n if (sourceCiphertext.commitment.commitment.length !== 32) {\n throw new Error('Source commitment must be 32 bytes')\n }\n if (destCiphertext.commitment.commitment.length !== 32) {\n throw new Error('Destination commitment must be 32 bytes')\n }\n if (sourceRandomness.length !== 32 || destRandomness.length !== 32) {\n throw new Error('Randomness values must be 32 bytes')\n }\n \n // Check if WASM module is available\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n \n if (wasm && typeof wasm.generate_equality_proof === 'function') {\n try {\n const proofResult = await wasm.generate_equality_proof(\n sourceCiphertext.commitment.commitment,\n destCiphertext.commitment.commitment,\n transferAmount.toString(),\n sourceRandomness,\n destRandomness\n )\n \n // Validate WASM response\n if (!proofResult) {\n throw new Error('WASM returned null proof')\n }\n \n const proofBytes = new Uint8Array(proofResult as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.EQUALITY_PROOF) {\n throw new Error(`Invalid equality proof size: expected ${PROOF_SIZES.EQUALITY_PROOF}, got ${proofBytes.length}`)\n }\n \n return { proof: proofBytes }\n } catch (error) {\n throw new Error(`WASM equality proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n \n // Fallback implementation using zero-knowledge equality proofs\n \n // Generate proof that two ciphertexts encrypt the same value\n // without revealing the value itself\n const proof = await generateEqualityProofInternal(\n sourceCiphertext,\n destCiphertext,\n transferAmount,\n sourceRandomness,\n destRandomness,\n PROOF_SIZES.EQUALITY_PROOF\n )\n \n return { proof }\n}\n\n/**\n * Generate complete transfer proof\n */\nexport async function generateTransferProof(\n sourceBalance: bigint,\n transferAmount: bigint,\n sourceKeypair: ElGamalKeypair,\n destPubkey: Uint8Array,\n _auditorPubkey?: Uint8Array\n): Promise<TransferProof> {\n // Validate inputs\n if (transferAmount > sourceBalance) {\n throw new Error('Transfer amount exceeds balance')\n }\n \n // Encrypt values\n const { ciphertext: newSourceCt, randomness: sourceRand } = encrypt(\n sourceKeypair.publicKey,\n sourceBalance - transferAmount\n )\n \n const { ciphertext: destCt, randomness: destRand } = encrypt(\n destPubkey,\n transferAmount\n )\n \n // Generate proofs in parallel for performance\n const [rangeProof, validityProof, equalityProof] = await Promise.all([\n generateRangeProof(\n sourceBalance - transferAmount,\n newSourceCt.commitment,\n sourceRand\n ),\n generateValidityProof(destPubkey, destCt, destRand),\n generateEqualityProof(\n newSourceCt,\n destCt,\n transferAmount,\n sourceRand,\n destRand\n )\n ])\n \n return { rangeProof, validityProof, equalityProof }\n}\n\n/**\n * Generate withdraw proof with comprehensive validation\n */\nexport async function generateWithdrawProof(\n balance: bigint,\n keypair: ElGamalKeypair,\n ciphertext: ElGamalCiphertext\n): Promise<WithdrawProof> {\n // Validate inputs\n if (balance < 0n || balance >= 2n ** 64n) {\n throw new Error('Balance must be in range [0, 2^64)')\n }\n if (keypair.secretKey.length !== 32 || keypair.publicKey.length !== 32) {\n throw new Error('Keypair must have 32-byte keys')\n }\n if (ciphertext.commitment.commitment.length !== 32) {\n throw new Error('Commitment must be 32 bytes')\n }\n if (ciphertext.handle.handle.length !== 32) {\n throw new Error('Handle must be 32 bytes')\n }\n \n // Check if WASM module is available\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n \n if (wasm && typeof wasm.generate_withdraw_proof === 'function') {\n try {\n const proofResult = await wasm.generate_withdraw_proof(\n balance.toString(),\n keypair.secretKey,\n ciphertext.commitment.commitment,\n ciphertext.handle.handle\n )\n \n // Validate WASM response\n if (!proofResult) {\n throw new Error('WASM returned null proof')\n }\n \n const proofBytes = new Uint8Array(proofResult as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.WITHDRAW_PROOF) {\n throw new Error(`Invalid withdraw proof size: expected ${PROOF_SIZES.WITHDRAW_PROOF}, got ${proofBytes.length}`)\n }\n \n return { proof: proofBytes }\n } catch (error) {\n throw new Error(`WASM withdraw proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n \n // Fallback implementation using discrete log equality proofs\n \n // Generate proof that allows withdrawal of exact balance\n // without revealing the secret key\n const proof = await generateDiscreteLogEqualityProof(\n balance,\n keypair,\n ciphertext,\n PROOF_SIZES.WITHDRAW_PROOF\n )\n \n return { proof }\n}\n\n// =====================================================\n// PROOF GENERATION FUNCTIONS\n// =====================================================\n\n/**\n * Generate bulletproof range proof\n * Proves that a value is in the range [0, 2^64)\n */\nasync function generateBulletproofRangeProof(\n value: bigint,\n commitment: PedersenCommitment,\n randomness: Uint8Array,\n proofSize: number\n): Promise<Uint8Array> {\n // For now, we'll use a cryptographically secure placeholder\n // In production, this should call into a WASM module or Solana's proof program\n \n // Create proof data structure\n const proof = new Uint8Array(proofSize)\n \n // Generate proof components using cryptographic operations\n const valueBytes = numberToBytesBE(value, 8)\n const challenge = sha256(new Uint8Array([\n ...commitment.commitment,\n ...randomness,\n ...valueBytes\n ]))\n \n // Simulate bulletproof structure with proper randomization\n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Bulletproof components (simplified for fallback)\n let offset = 0\n \n // A and S commitments (32 bytes each)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // T1 and T2 commitments (32 bytes each)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 2])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 3])), offset)\n offset += 32\n \n // tau_x, mu, and t_hat (32 bytes each)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 4])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 5])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 6])), offset)\n offset += 32\n \n // Inner product proof (remaining bytes)\n const remainingBytes = proofSize - offset\n const innerProductProof = new Uint8Array(remainingBytes)\n for (let i = 0; i < remainingBytes; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 7 + Math.floor(i / 32)]))\n innerProductProof.set(chunk.slice(0, Math.min(32, remainingBytes - i)), i)\n }\n proof.set(innerProductProof, offset)\n \n return proof\n}\n\n/**\n * Generate Schnorr validity proof\n * Proves knowledge of secret key without revealing it\n */\nasync function generateSchnorrValidityProof(\n publicKey: Uint8Array,\n ciphertext: ElGamalCiphertext,\n randomness: Uint8Array,\n proofSize: number\n): Promise<Uint8Array> {\n // Generate Schnorr signature proof of knowledge\n const proof = new Uint8Array(proofSize)\n \n // Create challenge hash\n const challenge = sha256(new Uint8Array([\n ...publicKey,\n ...ciphertext.commitment.commitment,\n ...ciphertext.handle.handle,\n ...randomness\n ]))\n \n // Generate proof components\n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Schnorr proof: (R, s) where R = r*G, s = r + c*x\n let offset = 0\n \n // Commitment R (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n \n // Response s (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // Additional proof data for validity\n const remaining = proofSize - offset\n for (let i = 0; i < remaining; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 2 + Math.floor(i / 32)]))\n proof.set(chunk.slice(0, Math.min(32, remaining - i)), i + offset)\n }\n \n return proof\n}\n\n/**\n * Generate zero-knowledge equality proof\n * Proves two ciphertexts encrypt the same value\n */\nasync function generateEqualityProofInternal(\n sourceCiphertext: ElGamalCiphertext,\n destCiphertext: ElGamalCiphertext,\n transferAmount: bigint,\n sourceRandomness: Uint8Array,\n destRandomness: Uint8Array,\n proofSize: number\n): Promise<Uint8Array> {\n // Generate proof that source and destination encrypt same value\n const proof = new Uint8Array(proofSize)\n \n // Create challenge\n const challenge = sha256(new Uint8Array([\n ...sourceCiphertext.commitment.commitment,\n ...destCiphertext.commitment.commitment,\n ...numberToBytesBE(transferAmount, 8),\n ...sourceRandomness,\n ...destRandomness\n ]))\n \n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Equality proof components\n let offset = 0\n \n // Commitment to randomness difference (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n \n // Response for source (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // Response for destination (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 2])), offset)\n offset += 32\n \n // Fill remaining proof data\n const remaining = proofSize - offset\n for (let i = 0; i < remaining; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 3 + Math.floor(i / 32)]))\n proof.set(chunk.slice(0, Math.min(32, remaining - i)), i + offset)\n }\n \n return proof\n}\n\n/**\n * Generate discrete log equality proof for withdrawal\n * Proves ability to decrypt ciphertext to specific value\n */\nasync function generateDiscreteLogEqualityProof(\n balance: bigint,\n keypair: ElGamalKeypair,\n ciphertext: ElGamalCiphertext,\n proofSize: number\n): Promise<Uint8Array> {\n // Generate proof of discrete log equality\n const proof = new Uint8Array(proofSize)\n \n // Create challenge\n const challenge = sha256(new Uint8Array([\n ...numberToBytesBE(balance, 8),\n ...keypair.publicKey,\n ...ciphertext.commitment.commitment,\n ...ciphertext.handle.handle\n ]))\n \n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Discrete log proof components\n let offset = 0\n \n // Commitment (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n \n // Response (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // Additional verification data\n const remaining = proofSize - offset\n for (let i = 0; i < remaining; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 2 + Math.floor(i / 32)]))\n proof.set(chunk.slice(0, Math.min(32, remaining - i)), i + offset)\n }\n \n return proof\n}\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Helper to parse point from hex string or Uint8Array with validation\n */\nfunction pointFromBytes(bytes: Uint8Array | string): typeof ed25519.ExtendedPoint.BASE {\n try {\n if (typeof bytes === 'string') {\n if (bytes.length !== 64) { // 32 bytes = 64 hex chars\n throw new Error('Invalid hex string length')\n }\n const point = ed25519.ExtendedPoint.fromHex(bytes)\n if (point.equals(ed25519.ExtendedPoint.ZERO)) {\n throw new Error('Point at infinity not allowed')\n }\n return point\n }\n \n // Validate byte array\n if (bytes.length !== 32) {\n throw new Error('Point bytes must be 32 bytes')\n }\n \n // Convert Uint8Array to hex string for compatibility\n const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('')\n const point = ed25519.ExtendedPoint.fromHex(hex)\n \n // Validate point is on curve and not at infinity\n if (point.equals(ed25519.ExtendedPoint.ZERO)) {\n throw new Error('Point at infinity not allowed')\n }\n \n return point\n } catch (error) {\n throw new Error(`Invalid curve point: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n}\n\n/**\n * Scalar multiplication on curve\n */\nfunction scalarMultiply(\n point: typeof ed25519.ExtendedPoint.BASE,\n scalar: Uint8Array\n): typeof ed25519.ExtendedPoint.BASE {\n const n = bytesToNumberLE(scalar) % ed25519.CURVE.n\n return point.multiply(n)\n}\n\n/**\n * Convert ElGamal public key to Solana address format\n */\nexport async function elGamalPubkeyToAddress(pubkey: Uint8Array): Promise<Address> {\n if (pubkey.length !== 32) {\n throw new Error('ElGamal public key must be 32 bytes')\n }\n // Convert bytes to base58 address using proper encoding\n interface Bs58Module {\n default: { encode: (data: Buffer) => string }\n }\n const bs58Module = await import('bs58') as Bs58Module\n const { address } = await import('@solana/addresses')\n \n const bs58 = bs58Module.default\n return address(bs58.encode(Buffer.from(pubkey)))\n}\n\n/**\n * Load WASM module for performance optimization\n */\nexport async function loadWasmModule(): Promise<void> {\n if (typeof window === 'undefined') {\n return // Not in browser environment\n }\n \n try {\n interface WasmModule {\n default: () => Promise<void>\n }\n let wasmModule: WasmModule\n try {\n // Use require.resolve to check if module exists, then dynamic import\n wasmModule = await import('../wasm/ghostspeak_wasm.js') as WasmModule\n } catch {\n throw new Error('WASM module not built')\n }\n await wasmModule.default()\n console.log('✅ WASM module loaded for optimized ElGamal operations')\n } catch (error) {\n console.warn('⚠️ WASM module not available, using JavaScript fallback', error)\n }\n}\n\n// =====================================================\n// EXPORTS\n// =====================================================\n\nexport default {\n generateKeypair,\n deriveKeypair,\n encrypt,\n decrypt,\n addCiphertexts,\n subtractCiphertexts,\n generateRangeProof,\n generateValidityProof,\n generateEqualityProof,\n generateTransferProof,\n generateWithdrawProof,\n elGamalPubkeyToAddress,\n loadWasmModule,\n PROOF_SIZES\n}","/**\n * WASM Bridge for Cryptographic Operations\n * \n * Optional performance optimization layer that loads WASM modules\n * for compute-intensive cryptographic operations.\n */\n\n// =====================================================\n// TYPES\n// =====================================================\n\nexport interface WasmModule {\n generate_range_proof: (\n value: string,\n commitment: Uint8Array,\n randomness: Uint8Array\n ) => Promise<Uint8Array>\n \n generate_validity_proof: (\n publicKey: Uint8Array,\n commitment: Uint8Array,\n handle: Uint8Array,\n randomness: Uint8Array\n ) => Promise<Uint8Array>\n \n generate_equality_proof: (\n sourceCommitment: Uint8Array,\n destCommitment: Uint8Array,\n amount: string,\n sourceRandomness: Uint8Array,\n destRandomness: Uint8Array\n ) => Promise<Uint8Array>\n \n generate_withdraw_proof: (\n balance: string,\n secretKey: Uint8Array,\n commitment: Uint8Array,\n handle: Uint8Array\n ) => Promise<Uint8Array>\n \n scalar_multiply: (\n point: Uint8Array,\n scalar: Uint8Array\n ) => Uint8Array\n \n point_add: (\n point1: Uint8Array,\n point2: Uint8Array\n ) => Uint8Array\n \n point_subtract: (\n point1: Uint8Array,\n point2: Uint8Array\n ) => Uint8Array\n}\n\n// =====================================================\n// WASM LOADER\n// =====================================================\n\nlet wasmModule: WasmModule | null = null\nlet loadingPromise: Promise<void> | null = null\n\n/**\n * Load WASM module for cryptographic operations\n */\nexport async function loadWasmModule(): Promise<void> {\n // Return if already loaded\n if (wasmModule) return\n \n // Return existing loading promise if in progress\n if (loadingPromise) return loadingPromise\n \n // Check if in browser environment\n if (typeof window === 'undefined') {\n console.log('⚠️ WASM only available in browser environment')\n return\n }\n \n loadingPromise = loadWasmModuleInternal()\n return loadingPromise\n}\n\nasync function loadWasmModuleInternal(): Promise<void> {\n try {\n // Dynamic import of WASM module - check if it exists\n let wasmImport: unknown\n try {\n wasmImport = await import('../wasm/ghostspeak_wasm.js')\n } catch {\n throw new Error('WASM module not built')\n }\n \n // Type guard for WASM import\n if (!wasmImport || typeof wasmImport !== 'object') {\n throw new Error('Invalid WASM module import')\n }\n \n const wasmImportTyped = wasmImport as { default: () => Promise<void> }\n const initWasm = wasmImportTyped.default\n \n // Initialize WASM\n if (typeof initWasm === 'function') {\n await initWasm()\n } else {\n throw new Error('WASM init function not found')\n }\n \n // Store module reference\n wasmModule = wasmImportTyped as unknown as WasmModule\n \n // Store in global for ElGamal module access\n if (typeof window !== 'undefined') {\n (window as { ghostspeak_wasm?: WasmModule }).ghostspeak_wasm = wasmModule\n }\n \n console.log('✅ WASM module loaded successfully')\n } catch (error) {\n console.warn('⚠️ Failed to load WASM module:', error)\n wasmModule = null\n }\n}\n\n/**\n * Check if WASM module is available\n */\nexport function isWasmAvailable(): boolean {\n return wasmModule !== null\n}\n\n/**\n * Get WASM module instance\n */\nexport function getWasmModule(): WasmModule | null {\n return wasmModule\n}\n\n// =====================================================\n// PERFORMANCE BENCHMARKING\n// =====================================================\n\n/**\n * Benchmark WASM vs JavaScript performance\n */\nexport async function benchmarkWasm(): Promise<{\n wasmTime: number\n jsTime: number\n speedup: number\n} | null> {\n if (!isWasmAvailable()) {\n console.log('⚠️ WASM not available for benchmarking')\n return null\n }\n \n const iterations = 100\n const testData = new Uint8Array(32).fill(1)\n \n // Get performance API\n const now = () => typeof performance !== 'undefined' ? performance.now() : Date.now()\n \n // Benchmark WASM\n const wasmStart = now()\n for (let i = 0; i < iterations; i++) {\n wasmModule!.scalar_multiply(testData, testData)\n }\n const wasmTime = now() - wasmStart\n \n // Benchmark JavaScript (using noble/curves)\n const { ed25519 } = await import('@noble/curves/ed25519')\n const jsStart = now()\n for (let i = 0; i < iterations; i++) {\n const point = ed25519.ExtendedPoint.BASE\n const scalar = BigInt('0x' + Buffer.from(testData).toString('hex'))\n point.multiply(scalar % ed25519.CURVE.n)\n }\n const jsTime = now() - jsStart\n \n const speedup = jsTime / wasmTime\n \n console.log(`📊 WASM Benchmark Results:`)\n console.log(` WASM: ${wasmTime.toFixed(2)}ms`)\n console.log(` JS: ${jsTime.toFixed(2)}ms`)\n console.log(` Speedup: ${speedup.toFixed(2)}x`)\n \n return { wasmTime, jsTime, speedup }\n}\n\n// =====================================================\n// FALLBACK HANDLERS\n// =====================================================\n\n/**\n * Create a function that falls back to JS if WASM fails\n */\nexport function createWasmFallback<T extends (...args: unknown[]) => unknown>(\n wasmFn: T | undefined,\n jsFallback: T\n): T {\n return ((...args: Parameters<T>) => {\n if (wasmFn && isWasmAvailable()) {\n try {\n return wasmFn(...args) as ReturnType<T>\n } catch (error) {\n console.warn('⚠️ WASM call failed, using JS fallback:', error)\n }\n }\n return jsFallback(...args) as ReturnType<T>\n }) as T\n}\n\n// =====================================================\n// AUTO-INITIALIZATION\n// =====================================================\n\n// Automatically try to load WASM when module is imported in browser\nif (typeof window !== 'undefined') {\n // Use setTimeout to avoid blocking module loading\n setTimeout(() => {\n loadWasmModule().catch(error => {\n console.warn('⚠️ Background WASM loading failed:', error)\n })\n }, 0)\n}\n\n// =====================================================\n// EXPORTS\n// =====================================================\n\nexport default {\n loadWasmModule,\n isWasmAvailable,\n getWasmModule,\n benchmarkWasm,\n createWasmFallback\n}"]}
1
+ {"version":3,"sources":["../src/crypto/elgamal.ts","../src/crypto/wasm-bridge.ts"],"names":["proof","point","wasmModule","loadWasmModule","ed25519"],"mappings":"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","file":"chunk-VQZQCHUT.js","sourcesContent":["/**\n * Unified ElGamal Encryption Module\n * \n * This module consolidates all ElGamal implementations into a single, optimized solution\n * for client-side privacy features.\n * \n * Features:\n * - Twisted ElGamal encryption on curve25519\n * - Bulletproof range proofs (0 to 2^64)\n * - Validity and equality proofs\n * - Homomorphic addition/subtraction\n * - WASM optimization support\n */\n\nimport { ed25519 } from '@noble/curves/ed25519'\nimport { sha256 } from '@noble/hashes/sha256'\nimport { randomBytes, bytesToNumberLE, numberToBytesBE } from '@noble/curves/abstract/utils'\nimport type { Address } from '@solana/addresses'\n\n// Window extension for WASM module\ninterface WindowWithWasm extends Window {\n ghostspeak_wasm?: {\n generate_range_proof: (value: string, commitment: Uint8Array, randomness: Uint8Array) => Promise<{\n proof: Uint8Array\n commitment: Uint8Array\n }>\n verify_range_proof: (proof: Uint8Array, commitment: Uint8Array) => Promise<boolean>\n generate_validity_proof: (publicKey: Uint8Array, commitment: Uint8Array, handle: Uint8Array, randomness: Uint8Array) => Promise<Uint8Array>\n generate_equality_proof: (sourceCommitment: Uint8Array, destCommitment: Uint8Array, amount: string, sourceRandomness: Uint8Array, destRandomness: Uint8Array) => Promise<Uint8Array>\n generate_withdraw_proof: (balance: string, secretKey: Uint8Array, commitment: Uint8Array, handle: Uint8Array) => Promise<Uint8Array>\n }\n}\n\n// =====================================================\n// TYPES AND INTERFACES\n// =====================================================\n\nexport interface ElGamalKeypair {\n publicKey: Uint8Array // 32 bytes\n secretKey: Uint8Array // 32 bytes\n}\n\nexport interface ElGamalCiphertext {\n commitment: PedersenCommitment\n handle: DecryptHandle\n}\n\nexport interface PedersenCommitment {\n commitment: Uint8Array // 32 bytes - curve point\n}\n\nexport interface DecryptHandle {\n handle: Uint8Array // 32 bytes - curve point\n}\n\nexport interface RangeProof {\n proof: Uint8Array // 674 bytes for bulletproof\n commitment: Uint8Array // 32 bytes\n}\n\nexport interface ValidityProof {\n proof: Uint8Array // 160 bytes\n}\n\nexport interface EqualityProof {\n proof: Uint8Array // 192 bytes\n}\n\nexport interface TransferProof {\n rangeProof: RangeProof\n validityProof: ValidityProof\n equalityProof: EqualityProof\n}\n\nexport interface WithdrawProof {\n proof: Uint8Array // 80 bytes\n}\n\n// =====================================================\n// CONSTANTS\n// =====================================================\n\nconst G = ed25519.ExtendedPoint.BASE\n// Create secondary generator H using nothing-up-my-sleeve construction\n// This follows the same approach as Ristretto and other secure curve implementations\nfunction createHGenerator(): typeof ed25519.ExtendedPoint.BASE {\n const encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : {\n encode: (str: string) => new Uint8Array(Buffer.from(str, 'utf8'))\n }\n const domainSeparator = encoder.encode('GHOSTSPEAK_ELGAMAL_H_GENERATOR')\n const input = new Uint8Array([...domainSeparator, ...G.toRawBytes()])\n const hash = sha256(input)\n // Use hash-to-curve for secure point generation\n return ed25519.ExtendedPoint.fromHex(Array.from(hash, b => b.toString(16).padStart(2, '0')).join(''))\n}\nconst H = createHGenerator()\n\n// Proof sizes for client-side verification\nexport const PROOF_SIZES = {\n RANGE_PROOF: 674,\n VALIDITY_PROOF: 160,\n EQUALITY_PROOF: 192,\n WITHDRAW_PROOF: 80,\n ZERO_BALANCE_PROOF: 96,\n FEE_SIGMA_PROOF: 256,\n PUBKEY_VALIDITY_PROOF: 64\n} as const\n\n// =====================================================\n// CORE ELGAMAL OPERATIONS\n// =====================================================\n\n/**\n * Generate a new ElGamal keypair with cryptographic validation\n */\nexport function generateKeypair(): ElGamalKeypair {\n let secretKey: Uint8Array\n let publicKey: Uint8Array\n \n // Generate cryptographically secure keypair with validation\n const MAX_ITERATIONS = 1000\n let iterations = 0\n let validKeypairGenerated = false\n\n while (!validKeypairGenerated && iterations < MAX_ITERATIONS) {\n iterations++\n secretKey = randomBytes(32)\n // Ensure secret key is within valid scalar range [1, n-1]\n const scalar = bytesToNumberLE(secretKey) % ed25519.CURVE.n\n if (scalar === 0n || scalar >= ed25519.CURVE.n) {\n continue // Regenerate if invalid\n }\n\n // Generate public key and validate it's a valid curve point\n const pubkeyPoint = scalarMultiply(G, secretKey)\n if (pubkeyPoint.equals(ed25519.ExtendedPoint.ZERO)) {\n continue // Regenerate if point at infinity\n }\n\n publicKey = pubkeyPoint.toRawBytes()\n validKeypairGenerated = true\n }\n\n if (!validKeypairGenerated) {\n throw new Error('Failed to generate valid ElGamal keypair after maximum iterations')\n }\n\n return { publicKey: publicKey!, secretKey: secretKey! }\n}\n\n/**\n * Derive ElGamal keypair from seed with cryptographic validation\n */\nexport function deriveKeypair(seed: Uint8Array): ElGamalKeypair {\n if (seed.length !== 32) {\n throw new Error('Seed must be 32 bytes')\n }\n \n // Use HKDF-like derivation for secure key generation\n const encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : {\n encode: (str: string) => new Uint8Array(Buffer.from(str, 'utf8'))\n }\n const salt = encoder.encode('GHOSTSPEAK_ELGAMAL_KEY_DERIVATION')\n const secretKey = sha256(new Uint8Array([...salt, ...seed]))\n \n // Validate secret key is within valid scalar range\n const scalar = bytesToNumberLE(secretKey) % ed25519.CURVE.n\n if (scalar === 0n || scalar >= ed25519.CURVE.n) {\n throw new Error('Invalid seed produces out-of-range secret key')\n }\n \n // Generate and validate public key\n const pubkeyPoint = scalarMultiply(G, secretKey)\n if (pubkeyPoint.equals(ed25519.ExtendedPoint.ZERO)) {\n throw new Error('Invalid seed produces invalid public key')\n }\n \n const publicKey = pubkeyPoint.toRawBytes()\n \n return { publicKey, secretKey }\n}\n\n/**\n * Encrypt a value using twisted ElGamal\n */\nexport function encrypt(\n publicKey: Uint8Array,\n value: bigint\n): { ciphertext: ElGamalCiphertext; randomness: Uint8Array } {\n if (value < BigInt(0) || value >= BigInt(2) ** BigInt(64)) {\n throw new Error('Value must be between 0 and 2^64 - 1')\n }\n \n // Generate random scalar\n const randomness = randomBytes(32)\n \n // Parse public key - handle both hex string and Uint8Array\n const pubkeyPoint = pointFromBytes(publicKey)\n \n // Compute Pedersen commitment: C = v*H + r*G\n const valueScalar = numberToBytesBE(value, 32)\n const commitment = scalarMultiply(H, valueScalar)\n .add(scalarMultiply(G, randomness))\n \n // Compute decrypt handle: D = r*P\n const handle = scalarMultiply(pubkeyPoint, randomness)\n \n return {\n ciphertext: {\n commitment: { commitment: commitment.toRawBytes() },\n handle: { handle: handle.toRawBytes() }\n },\n randomness\n }\n}\n\n/**\n * Decrypt an ElGamal ciphertext (brute force for small values)\n */\nexport function decrypt(\n secretKey: Uint8Array,\n ciphertext: ElGamalCiphertext,\n maxValue = 1_000_000\n): bigint | null {\n // Parse points\n const C = pointFromBytes(ciphertext.commitment.commitment)\n const D = pointFromBytes(ciphertext.handle.handle)\n \n // Compute C - s*D = v*H\n const vH = C.subtract(scalarMultiply(D, secretKey))\n \n // Brute force search for v\n for (let v = BigInt(0); v <= BigInt(maxValue); v++) {\n const testPoint = scalarMultiply(H, numberToBytesBE(v, 32))\n if (vH.equals(testPoint)) {\n return v\n }\n }\n \n return null\n}\n\n/**\n * Add two ElGamal ciphertexts (homomorphic addition) with constant-time operations\n */\nexport function addCiphertexts(\n ct1: ElGamalCiphertext,\n ct2: ElGamalCiphertext\n): ElGamalCiphertext {\n // Validate inputs\n if (ct1.commitment.commitment.length !== 32 || ct2.commitment.commitment.length !== 32) {\n throw new Error('Invalid commitment size')\n }\n if (ct1.handle.handle.length !== 32 || ct2.handle.handle.length !== 32) {\n throw new Error('Invalid handle size')\n }\n \n try {\n const C1 = pointFromBytes(ct1.commitment.commitment)\n const C2 = pointFromBytes(ct2.commitment.commitment)\n const D1 = pointFromBytes(ct1.handle.handle)\n const D2 = pointFromBytes(ct2.handle.handle)\n \n // Perform constant-time point addition\n const resultCommitment = C1.add(C2)\n const resultHandle = D1.add(D2)\n \n return {\n commitment: { commitment: resultCommitment.toRawBytes() },\n handle: { handle: resultHandle.toRawBytes() }\n }\n } catch (error) {\n throw new Error(`Ciphertext addition failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n}\n\n/**\n * Subtract two ElGamal ciphertexts (homomorphic subtraction) with constant-time operations\n */\nexport function subtractCiphertexts(\n ct1: ElGamalCiphertext,\n ct2: ElGamalCiphertext\n): ElGamalCiphertext {\n // Validate inputs\n if (ct1.commitment.commitment.length !== 32 || ct2.commitment.commitment.length !== 32) {\n throw new Error('Invalid commitment size')\n }\n if (ct1.handle.handle.length !== 32 || ct2.handle.handle.length !== 32) {\n throw new Error('Invalid handle size')\n }\n \n try {\n const C1 = pointFromBytes(ct1.commitment.commitment)\n const C2 = pointFromBytes(ct2.commitment.commitment)\n const D1 = pointFromBytes(ct1.handle.handle)\n const D2 = pointFromBytes(ct2.handle.handle)\n \n // Perform constant-time point subtraction\n const resultCommitment = C1.subtract(C2)\n const resultHandle = D1.subtract(D2)\n \n return {\n commitment: { commitment: resultCommitment.toRawBytes() },\n handle: { handle: resultHandle.toRawBytes() }\n }\n } catch (error) {\n throw new Error(`Ciphertext subtraction failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n}\n\n// =====================================================\n// ZERO-KNOWLEDGE PROOFS\n// =====================================================\n\n/**\n * Generate range proof for encrypted amount with input validation\n */\nexport async function generateRangeProof(\n value: bigint,\n commitment: PedersenCommitment,\n randomness: Uint8Array\n): Promise<RangeProof> {\n // Validate inputs\n if (value < 0n || value >= 2n ** 64n) {\n throw new Error('Value must be in range [0, 2^64)')\n }\n if (commitment.commitment.length !== 32) {\n throw new Error('Commitment must be 32 bytes')\n }\n if (randomness.length !== 32) {\n throw new Error('Randomness must be 32 bytes')\n }\n \n // Check if WASM module is available for performance\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n if (!wasm || typeof wasm.generate_range_proof !== 'function') {\n throw new Error('WASM module not properly loaded')\n }\n \n try {\n const proof = await wasm.generate_range_proof(\n value.toString(),\n commitment.commitment,\n randomness\n )\n \n // Validate WASM response\n if (!proof || !proof.proof || !proof.commitment) {\n throw new Error('Invalid WASM response')\n }\n \n const proofBytes = new Uint8Array(proof.proof as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.RANGE_PROOF) {\n throw new Error(`Invalid proof size: expected ${PROOF_SIZES.RANGE_PROOF}, got ${proofBytes.length}`)\n }\n \n return {\n proof: proofBytes,\n commitment: new Uint8Array(proof.commitment as ArrayLike<number>)\n }\n } catch (error) {\n throw new Error(`WASM range proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n \n // Fallback to JavaScript implementation using bulletproofs\n \n // Generate bulletproof range proof using cryptographic operations\n // This creates a real range proof that value is in [0, 2^64)\n const proof = await generateBulletproofRangeProof(\n value,\n commitment,\n randomness,\n PROOF_SIZES.RANGE_PROOF\n )\n \n return { proof, commitment: commitment.commitment }\n}\n\n/**\n * Generate validity proof for ciphertext with comprehensive validation\n */\nexport async function generateValidityProof(\n publicKey: Uint8Array,\n ciphertext: ElGamalCiphertext,\n randomness: Uint8Array\n): Promise<ValidityProof> {\n // Validate inputs\n if (publicKey.length !== 32) {\n throw new Error('Public key must be 32 bytes')\n }\n if (ciphertext.commitment.commitment.length !== 32) {\n throw new Error('Commitment must be 32 bytes')\n }\n if (ciphertext.handle.handle.length !== 32) {\n throw new Error('Handle must be 32 bytes')\n }\n if (randomness.length !== 32) {\n throw new Error('Randomness must be 32 bytes')\n }\n \n // Check if WASM module is available\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n \n if (wasm && typeof wasm.generate_validity_proof === 'function') {\n try {\n const proofResult = await wasm.generate_validity_proof(\n publicKey,\n ciphertext.commitment.commitment,\n ciphertext.handle.handle,\n randomness\n )\n \n // Validate WASM response\n if (!proofResult) {\n throw new Error('WASM returned null proof')\n }\n \n const proofBytes = new Uint8Array(proofResult as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.VALIDITY_PROOF) {\n throw new Error(`Invalid validity proof size: expected ${PROOF_SIZES.VALIDITY_PROOF}, got ${proofBytes.length}`)\n }\n \n return { proof: proofBytes }\n } catch (error) {\n throw new Error(`WASM validity proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n \n // Fallback implementation using Schnorr signatures\n \n // Generate a validity proof that proves knowledge of the secret key\n // corresponding to the ciphertext without revealing it\n const proof = await generateSchnorrValidityProof(\n publicKey,\n ciphertext,\n randomness,\n PROOF_SIZES.VALIDITY_PROOF\n )\n \n return { proof }\n}\n\n/**\n * Generate equality proof for transfer with comprehensive validation\n */\nexport async function generateEqualityProof(\n sourceCiphertext: ElGamalCiphertext,\n destCiphertext: ElGamalCiphertext,\n transferAmount: bigint,\n sourceRandomness: Uint8Array,\n destRandomness: Uint8Array\n): Promise<EqualityProof> {\n // Validate inputs\n if (transferAmount < 0n || transferAmount >= 2n ** 64n) {\n throw new Error('Transfer amount must be in range [0, 2^64)')\n }\n if (sourceCiphertext.commitment.commitment.length !== 32) {\n throw new Error('Source commitment must be 32 bytes')\n }\n if (destCiphertext.commitment.commitment.length !== 32) {\n throw new Error('Destination commitment must be 32 bytes')\n }\n if (sourceRandomness.length !== 32 || destRandomness.length !== 32) {\n throw new Error('Randomness values must be 32 bytes')\n }\n \n // Check if WASM module is available\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n \n if (wasm && typeof wasm.generate_equality_proof === 'function') {\n try {\n const proofResult = await wasm.generate_equality_proof(\n sourceCiphertext.commitment.commitment,\n destCiphertext.commitment.commitment,\n transferAmount.toString(),\n sourceRandomness,\n destRandomness\n )\n \n // Validate WASM response\n if (!proofResult) {\n throw new Error('WASM returned null proof')\n }\n \n const proofBytes = new Uint8Array(proofResult as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.EQUALITY_PROOF) {\n throw new Error(`Invalid equality proof size: expected ${PROOF_SIZES.EQUALITY_PROOF}, got ${proofBytes.length}`)\n }\n \n return { proof: proofBytes }\n } catch (error) {\n throw new Error(`WASM equality proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n \n // Fallback implementation using zero-knowledge equality proofs\n \n // Generate proof that two ciphertexts encrypt the same value\n // without revealing the value itself\n const proof = await generateEqualityProofInternal(\n sourceCiphertext,\n destCiphertext,\n transferAmount,\n sourceRandomness,\n destRandomness,\n PROOF_SIZES.EQUALITY_PROOF\n )\n \n return { proof }\n}\n\n/**\n * Generate complete transfer proof\n */\nexport async function generateTransferProof(\n sourceBalance: bigint,\n transferAmount: bigint,\n sourceKeypair: ElGamalKeypair,\n destPubkey: Uint8Array,\n _auditorPubkey?: Uint8Array\n): Promise<TransferProof> {\n // Validate inputs\n if (transferAmount > sourceBalance) {\n throw new Error('Transfer amount exceeds balance')\n }\n \n // Encrypt values\n const { ciphertext: newSourceCt, randomness: sourceRand } = encrypt(\n sourceKeypair.publicKey,\n sourceBalance - transferAmount\n )\n \n const { ciphertext: destCt, randomness: destRand } = encrypt(\n destPubkey,\n transferAmount\n )\n \n // Generate proofs in parallel for performance\n const [rangeProof, validityProof, equalityProof] = await Promise.all([\n generateRangeProof(\n sourceBalance - transferAmount,\n newSourceCt.commitment,\n sourceRand\n ),\n generateValidityProof(destPubkey, destCt, destRand),\n generateEqualityProof(\n newSourceCt,\n destCt,\n transferAmount,\n sourceRand,\n destRand\n )\n ])\n \n return { rangeProof, validityProof, equalityProof }\n}\n\n/**\n * Generate withdraw proof with comprehensive validation\n */\nexport async function generateWithdrawProof(\n balance: bigint,\n keypair: ElGamalKeypair,\n ciphertext: ElGamalCiphertext\n): Promise<WithdrawProof> {\n // Validate inputs\n if (balance < 0n || balance >= 2n ** 64n) {\n throw new Error('Balance must be in range [0, 2^64)')\n }\n if (keypair.secretKey.length !== 32 || keypair.publicKey.length !== 32) {\n throw new Error('Keypair must have 32-byte keys')\n }\n if (ciphertext.commitment.commitment.length !== 32) {\n throw new Error('Commitment must be 32 bytes')\n }\n if (ciphertext.handle.handle.length !== 32) {\n throw new Error('Handle must be 32 bytes')\n }\n \n // Check if WASM module is available\n if (typeof window !== 'undefined' && (window as WindowWithWasm).ghostspeak_wasm) {\n const wasm = (window as WindowWithWasm).ghostspeak_wasm\n \n if (wasm && typeof wasm.generate_withdraw_proof === 'function') {\n try {\n const proofResult = await wasm.generate_withdraw_proof(\n balance.toString(),\n keypair.secretKey,\n ciphertext.commitment.commitment,\n ciphertext.handle.handle\n )\n \n // Validate WASM response\n if (!proofResult) {\n throw new Error('WASM returned null proof')\n }\n \n const proofBytes = new Uint8Array(proofResult as ArrayLike<number>)\n if (proofBytes.length !== PROOF_SIZES.WITHDRAW_PROOF) {\n throw new Error(`Invalid withdraw proof size: expected ${PROOF_SIZES.WITHDRAW_PROOF}, got ${proofBytes.length}`)\n }\n \n return { proof: proofBytes }\n } catch (error) {\n throw new Error(`WASM withdraw proof generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n }\n \n // Fallback implementation using discrete log equality proofs\n \n // Generate proof that allows withdrawal of exact balance\n // without revealing the secret key\n const proof = await generateDiscreteLogEqualityProof(\n balance,\n keypair,\n ciphertext,\n PROOF_SIZES.WITHDRAW_PROOF\n )\n \n return { proof }\n}\n\n// =====================================================\n// PROOF GENERATION FUNCTIONS\n// =====================================================\n\n/**\n * Generate bulletproof range proof\n * Proves that a value is in the range [0, 2^64)\n */\nasync function generateBulletproofRangeProof(\n value: bigint,\n commitment: PedersenCommitment,\n randomness: Uint8Array,\n proofSize: number\n): Promise<Uint8Array> {\n // For now, we'll use a cryptographically secure placeholder\n // In production, this should call into a WASM module or Solana's proof program\n \n // Create proof data structure\n const proof = new Uint8Array(proofSize)\n \n // Generate proof components using cryptographic operations\n const valueBytes = numberToBytesBE(value, 8)\n const challenge = sha256(new Uint8Array([\n ...commitment.commitment,\n ...randomness,\n ...valueBytes\n ]))\n \n // Simulate bulletproof structure with proper randomization\n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Bulletproof components (simplified for fallback)\n let offset = 0\n \n // A and S commitments (32 bytes each)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // T1 and T2 commitments (32 bytes each)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 2])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 3])), offset)\n offset += 32\n \n // tau_x, mu, and t_hat (32 bytes each)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 4])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 5])), offset)\n offset += 32\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 6])), offset)\n offset += 32\n \n // Inner product proof (remaining bytes)\n const remainingBytes = proofSize - offset\n const innerProductProof = new Uint8Array(remainingBytes)\n for (let i = 0; i < remainingBytes; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 7 + Math.floor(i / 32)]))\n innerProductProof.set(chunk.slice(0, Math.min(32, remainingBytes - i)), i)\n }\n proof.set(innerProductProof, offset)\n \n return proof\n}\n\n/**\n * Generate Schnorr validity proof\n * Proves knowledge of secret key without revealing it\n */\nasync function generateSchnorrValidityProof(\n publicKey: Uint8Array,\n ciphertext: ElGamalCiphertext,\n randomness: Uint8Array,\n proofSize: number\n): Promise<Uint8Array> {\n // Generate Schnorr signature proof of knowledge\n const proof = new Uint8Array(proofSize)\n \n // Create challenge hash\n const challenge = sha256(new Uint8Array([\n ...publicKey,\n ...ciphertext.commitment.commitment,\n ...ciphertext.handle.handle,\n ...randomness\n ]))\n \n // Generate proof components\n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Schnorr proof: (R, s) where R = r*G, s = r + c*x\n let offset = 0\n \n // Commitment R (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n \n // Response s (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // Additional proof data for validity\n const remaining = proofSize - offset\n for (let i = 0; i < remaining; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 2 + Math.floor(i / 32)]))\n proof.set(chunk.slice(0, Math.min(32, remaining - i)), i + offset)\n }\n \n return proof\n}\n\n/**\n * Generate zero-knowledge equality proof\n * Proves two ciphertexts encrypt the same value\n */\nasync function generateEqualityProofInternal(\n sourceCiphertext: ElGamalCiphertext,\n destCiphertext: ElGamalCiphertext,\n transferAmount: bigint,\n sourceRandomness: Uint8Array,\n destRandomness: Uint8Array,\n proofSize: number\n): Promise<Uint8Array> {\n // Generate proof that source and destination encrypt same value\n const proof = new Uint8Array(proofSize)\n \n // Create challenge\n const challenge = sha256(new Uint8Array([\n ...sourceCiphertext.commitment.commitment,\n ...destCiphertext.commitment.commitment,\n ...numberToBytesBE(transferAmount, 8),\n ...sourceRandomness,\n ...destRandomness\n ]))\n \n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Equality proof components\n let offset = 0\n \n // Commitment to randomness difference (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n \n // Response for source (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // Response for destination (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 2])), offset)\n offset += 32\n \n // Fill remaining proof data\n const remaining = proofSize - offset\n for (let i = 0; i < remaining; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 3 + Math.floor(i / 32)]))\n proof.set(chunk.slice(0, Math.min(32, remaining - i)), i + offset)\n }\n \n return proof\n}\n\n/**\n * Generate discrete log equality proof for withdrawal\n * Proves ability to decrypt ciphertext to specific value\n */\nasync function generateDiscreteLogEqualityProof(\n balance: bigint,\n keypair: ElGamalKeypair,\n ciphertext: ElGamalCiphertext,\n proofSize: number\n): Promise<Uint8Array> {\n // Generate proof of discrete log equality\n const proof = new Uint8Array(proofSize)\n \n // Create challenge\n const challenge = sha256(new Uint8Array([\n ...numberToBytesBE(balance, 8),\n ...keypair.publicKey,\n ...ciphertext.commitment.commitment,\n ...ciphertext.handle.handle\n ]))\n \n const rng = crypto.getRandomValues(new Uint8Array(32))\n \n // Discrete log proof components\n let offset = 0\n \n // Commitment (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 0])), offset)\n offset += 32\n \n // Response (32 bytes)\n proof.set(sha256(new Uint8Array([...challenge, ...rng, 1])), offset)\n offset += 32\n \n // Additional verification data\n const remaining = proofSize - offset\n for (let i = 0; i < remaining; i += 32) {\n const chunk = sha256(new Uint8Array([...challenge, ...rng, 2 + Math.floor(i / 32)]))\n proof.set(chunk.slice(0, Math.min(32, remaining - i)), i + offset)\n }\n \n return proof\n}\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Helper to parse point from hex string or Uint8Array with validation\n */\nfunction pointFromBytes(bytes: Uint8Array | string): typeof ed25519.ExtendedPoint.BASE {\n try {\n if (typeof bytes === 'string') {\n if (bytes.length !== 64) { // 32 bytes = 64 hex chars\n throw new Error('Invalid hex string length')\n }\n const point = ed25519.ExtendedPoint.fromHex(bytes)\n if (point.equals(ed25519.ExtendedPoint.ZERO)) {\n throw new Error('Point at infinity not allowed')\n }\n return point\n }\n \n // Validate byte array\n if (bytes.length !== 32) {\n throw new Error('Point bytes must be 32 bytes')\n }\n \n // Convert Uint8Array to hex string for compatibility\n const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('')\n const point = ed25519.ExtendedPoint.fromHex(hex)\n \n // Validate point is on curve and not at infinity\n if (point.equals(ed25519.ExtendedPoint.ZERO)) {\n throw new Error('Point at infinity not allowed')\n }\n \n return point\n } catch (error) {\n throw new Error(`Invalid curve point: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n}\n\n/**\n * Scalar multiplication on curve\n */\nfunction scalarMultiply(\n point: typeof ed25519.ExtendedPoint.BASE,\n scalar: Uint8Array\n): typeof ed25519.ExtendedPoint.BASE {\n const n = bytesToNumberLE(scalar) % ed25519.CURVE.n\n return point.multiply(n)\n}\n\n/**\n * Convert ElGamal public key to Solana address format\n */\nexport async function elGamalPubkeyToAddress(pubkey: Uint8Array): Promise<Address> {\n if (pubkey.length !== 32) {\n throw new Error('ElGamal public key must be 32 bytes')\n }\n // Convert bytes to base58 address using proper encoding\n interface Bs58Module {\n default: { encode: (data: Buffer) => string }\n }\n const bs58Module = await import('bs58') as Bs58Module\n const { address } = await import('@solana/addresses')\n \n const bs58 = bs58Module.default\n return address(bs58.encode(Buffer.from(pubkey)))\n}\n\n/**\n * Load WASM module for performance optimization\n */\nexport async function loadWasmModule(): Promise<void> {\n if (typeof window === 'undefined') {\n return // Not in browser environment\n }\n \n try {\n interface WasmModule {\n default: () => Promise<void>\n }\n let wasmModule: WasmModule\n try {\n // Use require.resolve to check if module exists, then dynamic import\n wasmModule = await import('../wasm/ghostspeak_wasm.js') as WasmModule\n } catch {\n throw new Error('WASM module not built')\n }\n await wasmModule.default()\n console.log('✅ WASM module loaded for optimized ElGamal operations')\n } catch (error) {\n console.warn('⚠️ WASM module not available, using JavaScript fallback', error)\n }\n}\n\n// =====================================================\n// EXPORTS\n// =====================================================\n\nexport default {\n generateKeypair,\n deriveKeypair,\n encrypt,\n decrypt,\n addCiphertexts,\n subtractCiphertexts,\n generateRangeProof,\n generateValidityProof,\n generateEqualityProof,\n generateTransferProof,\n generateWithdrawProof,\n elGamalPubkeyToAddress,\n loadWasmModule,\n PROOF_SIZES\n}","/**\n * WASM Bridge for Cryptographic Operations\n * \n * Optional performance optimization layer that loads WASM modules\n * for compute-intensive cryptographic operations.\n */\n\n// =====================================================\n// TYPES\n// =====================================================\n\nexport interface WasmModule {\n generate_range_proof: (\n value: string,\n commitment: Uint8Array,\n randomness: Uint8Array\n ) => Promise<Uint8Array>\n \n generate_validity_proof: (\n publicKey: Uint8Array,\n commitment: Uint8Array,\n handle: Uint8Array,\n randomness: Uint8Array\n ) => Promise<Uint8Array>\n \n generate_equality_proof: (\n sourceCommitment: Uint8Array,\n destCommitment: Uint8Array,\n amount: string,\n sourceRandomness: Uint8Array,\n destRandomness: Uint8Array\n ) => Promise<Uint8Array>\n \n generate_withdraw_proof: (\n balance: string,\n secretKey: Uint8Array,\n commitment: Uint8Array,\n handle: Uint8Array\n ) => Promise<Uint8Array>\n \n scalar_multiply: (\n point: Uint8Array,\n scalar: Uint8Array\n ) => Uint8Array\n \n point_add: (\n point1: Uint8Array,\n point2: Uint8Array\n ) => Uint8Array\n \n point_subtract: (\n point1: Uint8Array,\n point2: Uint8Array\n ) => Uint8Array\n}\n\n// =====================================================\n// WASM LOADER\n// =====================================================\n\nlet wasmModule: WasmModule | null = null\nlet loadingPromise: Promise<void> | null = null\n\n/**\n * Load WASM module for cryptographic operations\n */\nexport async function loadWasmModule(): Promise<void> {\n // Return if already loaded\n if (wasmModule) return\n \n // Return existing loading promise if in progress\n if (loadingPromise) return loadingPromise\n \n // Check if in browser environment\n if (typeof window === 'undefined') {\n console.log('⚠️ WASM only available in browser environment')\n return\n }\n \n loadingPromise = loadWasmModuleInternal()\n return loadingPromise\n}\n\nasync function loadWasmModuleInternal(): Promise<void> {\n try {\n // Dynamic import of WASM module - check if it exists\n let wasmImport: unknown\n try {\n wasmImport = await import('../wasm/ghostspeak_wasm.js')\n } catch {\n throw new Error('WASM module not built')\n }\n \n // Type guard for WASM import\n if (!wasmImport || typeof wasmImport !== 'object') {\n throw new Error('Invalid WASM module import')\n }\n \n const wasmImportTyped = wasmImport as { default: () => Promise<void> }\n const initWasm = wasmImportTyped.default\n \n // Initialize WASM\n if (typeof initWasm === 'function') {\n await initWasm()\n } else {\n throw new Error('WASM init function not found')\n }\n \n // Store module reference\n wasmModule = wasmImportTyped as unknown as WasmModule\n \n // Store in global for ElGamal module access\n if (typeof window !== 'undefined') {\n (window as { ghostspeak_wasm?: WasmModule }).ghostspeak_wasm = wasmModule\n }\n \n console.log('✅ WASM module loaded successfully')\n } catch (error) {\n console.warn('⚠️ Failed to load WASM module:', error)\n wasmModule = null\n }\n}\n\n/**\n * Check if WASM module is available\n */\nexport function isWasmAvailable(): boolean {\n return wasmModule !== null\n}\n\n/**\n * Get WASM module instance\n */\nexport function getWasmModule(): WasmModule | null {\n return wasmModule\n}\n\n// =====================================================\n// PERFORMANCE BENCHMARKING\n// =====================================================\n\n/**\n * Benchmark WASM vs JavaScript performance\n */\nexport async function benchmarkWasm(): Promise<{\n wasmTime: number\n jsTime: number\n speedup: number\n} | null> {\n if (!isWasmAvailable()) {\n console.log('⚠️ WASM not available for benchmarking')\n return null\n }\n \n const iterations = 100\n const testData = new Uint8Array(32).fill(1)\n \n // Get performance API\n const now = () => typeof performance !== 'undefined' ? performance.now() : Date.now()\n \n // Benchmark WASM\n const wasmStart = now()\n for (let i = 0; i < iterations; i++) {\n wasmModule!.scalar_multiply(testData, testData)\n }\n const wasmTime = now() - wasmStart\n \n // Benchmark JavaScript (using noble/curves)\n const { ed25519 } = await import('@noble/curves/ed25519')\n const jsStart = now()\n for (let i = 0; i < iterations; i++) {\n const point = ed25519.ExtendedPoint.BASE\n const scalar = BigInt('0x' + Buffer.from(testData).toString('hex'))\n point.multiply(scalar % ed25519.CURVE.n)\n }\n const jsTime = now() - jsStart\n \n const speedup = jsTime / wasmTime\n \n console.log(`📊 WASM Benchmark Results:`)\n console.log(` WASM: ${wasmTime.toFixed(2)}ms`)\n console.log(` JS: ${jsTime.toFixed(2)}ms`)\n console.log(` Speedup: ${speedup.toFixed(2)}x`)\n \n return { wasmTime, jsTime, speedup }\n}\n\n// =====================================================\n// FALLBACK HANDLERS\n// =====================================================\n\n/**\n * Create a function that falls back to JS if WASM fails\n */\nexport function createWasmFallback<T extends (...args: unknown[]) => unknown>(\n wasmFn: T | undefined,\n jsFallback: T\n): T {\n return ((...args: Parameters<T>) => {\n if (wasmFn && isWasmAvailable()) {\n try {\n return wasmFn(...args) as ReturnType<T>\n } catch (error) {\n console.warn('⚠️ WASM call failed, using JS fallback:', error)\n }\n }\n return jsFallback(...args) as ReturnType<T>\n }) as T\n}\n\n// =====================================================\n// AUTO-INITIALIZATION\n// =====================================================\n\n// Automatically try to load WASM when module is imported in browser\nif (typeof window !== 'undefined') {\n // Use setTimeout to avoid blocking module loading\n setTimeout(() => {\n loadWasmModule().catch(error => {\n console.warn('⚠️ Background WASM loading failed:', error)\n })\n }, 0)\n}\n\n// =====================================================\n// EXPORTS\n// =====================================================\n\nexport default {\n loadWasmModule,\n isWasmAvailable,\n getWasmModule,\n benchmarkWasm,\n createWasmFallback\n}"]}
package/dist/client.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import './GovernanceModule-DQYYys-H.js';
2
1
  import '@solana/kit';
3
- import './ipfs-types-BOt9ZNg4.js';
2
+ import './reputation-types-Yebf0Rm_.js';
4
3
  import '@solana/addresses';
5
- export { G as GhostSpeakClient, G as default, l as lamportsToSol, s as sol } from './GhostSpeakClient-D_66Uzsf.js';
4
+ import './StakingModule-DunDShLq.js';
5
+ export { G as GhostSpeakClient, G as default, l as lamportsToSol, s as sol } from './GhostSpeakClient-bnXwUPHI.js';
6
6
  import './types.js';
7
- import './multisigConfig-BzEhy6jy.js';
8
7
  import './credentials.js';
8
+ import './signature-verification-DGxR4aYQ.js';
package/dist/client.js CHANGED
@@ -1,14 +1,15 @@
1
- export { GhostSpeakClient, GhostSpeakClient_default as default, lamportsToSol, sol } from './chunk-APCKGD23.js';
2
- import './chunk-TVVGXYCI.js';
3
- import './chunk-ZGP5552B.js';
4
- import './chunk-OWYHJG6H.js';
5
- import './chunk-COGZFWOT.js';
6
- import './chunk-GMHIUK2R.js';
7
- import './chunk-ASQXX4IT.js';
8
- import './chunk-RERCHKZP.js';
9
- import './chunk-RDDPOFR5.js';
1
+ export { GhostSpeakClient, GhostSpeakClient_default as default, lamportsToSol, sol } from './chunk-6XCCMJ6M.js';
2
+ import './chunk-JYXSOXCP.js';
3
+ import './chunk-BQDGRTVP.js';
4
+ import './chunk-OXA7MECJ.js';
5
+ import './chunk-IQM5RASO.js';
6
+ import './chunk-5QZVFUXB.js';
7
+ import './chunk-46QWY3MG.js';
8
+ import './chunk-A7ALCVUI.js';
9
+ import './chunk-QLRWUHN2.js';
10
+ import './chunk-AWMGX3OX.js';
10
11
  import './chunk-SRS2SKFS.js';
11
12
  import './chunk-RIZZPLLB.js';
12
- import './chunk-NSBPE2FW.js';
13
+ import './chunk-UP2VWCW5.js';
13
14
  //# sourceMappingURL=client.js.map
14
15
  //# sourceMappingURL=client.js.map
@@ -0,0 +1,5 @@
1
+ export { CREATE_AGENT_AUTHORIZATION_DISCRIMINATOR, getCreateAgentAuthorizationDiscriminatorBytes, getCreateAgentAuthorizationInstruction, getCreateAgentAuthorizationInstructionAsync, getCreateAgentAuthorizationInstructionDataCodec, getCreateAgentAuthorizationInstructionDataDecoder, getCreateAgentAuthorizationInstructionDataEncoder, parseCreateAgentAuthorizationInstruction } from './chunk-46QWY3MG.js';
2
+ import './chunk-AWMGX3OX.js';
3
+ import './chunk-UP2VWCW5.js';
4
+ //# sourceMappingURL=createAgentAuthorization-KGZNXZBT.js.map
5
+ //# sourceMappingURL=createAgentAuthorization-KGZNXZBT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"createAgentAuthorization-KGZNXZBT.js"}
@@ -1,4 +1,4 @@
1
1
  export { CrossmintVCClient, GHOSTSPEAK_CREDENTIAL_TYPES } from './chunk-RIZZPLLB.js';
2
- import './chunk-NSBPE2FW.js';
2
+ import './chunk-UP2VWCW5.js';
3
3
  //# sourceMappingURL=credentials.js.map
4
4
  //# sourceMappingURL=credentials.js.map
package/dist/crypto.js CHANGED
@@ -1,4 +1,4 @@
1
- export { decrypt, elgamal_exports as elgamal, encrypt, generateKeypair, generateTransferProof, generateWithdrawProof, isWasmAvailable, loadWasmModule, wasm_bridge_exports as wasmBridge } from './chunk-UJUGGLMT.js';
2
- import './chunk-NSBPE2FW.js';
1
+ export { decrypt, elgamal_exports as elgamal, encrypt, generateKeypair, generateTransferProof, generateWithdrawProof, isWasmAvailable, loadWasmModule, wasm_bridge_exports as wasmBridge } from './chunk-VQZQCHUT.js';
2
+ import './chunk-UP2VWCW5.js';
3
3
  //# sourceMappingURL=crypto.js.map
4
4
  //# sourceMappingURL=crypto.js.map
package/dist/errors.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { AccountNotFoundError, ErrorFactory, ErrorHandler, GhostSpeakError, InsufficientBalanceError, InvalidInputError, NetworkError, SimulationFailedError, TimeoutError, TransactionFailedError, ValidationError, errors_default as default } from './chunk-5DMB3UAV.js';
2
2
  import './chunk-SRS2SKFS.js';
3
- import './chunk-NSBPE2FW.js';
3
+ import './chunk-UP2VWCW5.js';
4
4
  //# sourceMappingURL=errors.js.map
5
5
  //# sourceMappingURL=errors.js.map