@ghostspeak/sdk 2.0.5 → 2.0.7

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 (121) hide show
  1. package/README.md +152 -30
  2. package/dist/GhostSpeakClient-CWmGaM9Q.d.ts +1007 -0
  3. package/dist/StakingModule-C5rzuOWb.d.ts +2526 -0
  4. package/dist/{agent-M74TCRON.js → agent-5YLZ7DAC.js} +4 -4
  5. package/dist/{agent-M74TCRON.js.map → agent-5YLZ7DAC.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.d.ts +45 -554
  9. package/dist/browser.js +15 -842
  10. package/dist/browser.js.map +1 -1
  11. package/dist/chunk-AL3HQN73.js +754 -0
  12. package/dist/chunk-AL3HQN73.js.map +1 -0
  13. package/dist/chunk-BF3IQ35I.js +284 -0
  14. package/dist/chunk-BF3IQ35I.js.map +1 -0
  15. package/dist/chunk-BQDGRTVP.js +168 -0
  16. package/dist/chunk-BQDGRTVP.js.map +1 -0
  17. package/dist/chunk-C5CDA3WX.js +7314 -0
  18. package/dist/chunk-C5CDA3WX.js.map +1 -0
  19. package/dist/chunk-E3FD2CNY.js +1869 -0
  20. package/dist/chunk-E3FD2CNY.js.map +1 -0
  21. package/dist/{chunk-V3SOFUAZ.js → chunk-G7S6B6WB.js} +327 -493
  22. package/dist/chunk-G7S6B6WB.js.map +1 -0
  23. package/dist/chunk-IHVDQ4YI.js +4231 -0
  24. package/dist/chunk-IHVDQ4YI.js.map +1 -0
  25. package/dist/chunk-JV2SWONF.js +98 -0
  26. package/dist/chunk-JV2SWONF.js.map +1 -0
  27. package/dist/chunk-KB6CKIUK.js +231 -0
  28. package/dist/chunk-KB6CKIUK.js.map +1 -0
  29. package/dist/chunk-RIZZPLLB.js +343 -0
  30. package/dist/chunk-RIZZPLLB.js.map +1 -0
  31. package/dist/chunk-S74EH3KD.js +7890 -0
  32. package/dist/chunk-S74EH3KD.js.map +1 -0
  33. package/dist/chunk-SFTSZ3LC.js +156 -0
  34. package/dist/chunk-SFTSZ3LC.js.map +1 -0
  35. package/dist/chunk-SKMJJ3Q6.js +125 -0
  36. package/dist/chunk-SKMJJ3Q6.js.map +1 -0
  37. package/dist/chunk-SZGFSCNU.js +3682 -0
  38. package/dist/chunk-SZGFSCNU.js.map +1 -0
  39. package/dist/chunk-TTB4OS2D.js +69 -0
  40. package/dist/chunk-TTB4OS2D.js.map +1 -0
  41. package/dist/chunk-UP2VWCW5.js +33 -0
  42. package/dist/{chunk-NSBPE2FW.js.map → chunk-UP2VWCW5.js.map} +1 -1
  43. package/dist/{chunk-UJUGGLMT.js → chunk-VQZQCHUT.js} +5 -5
  44. package/dist/{chunk-UJUGGLMT.js.map → chunk-VQZQCHUT.js.map} +1 -1
  45. package/dist/client.d.ts +6 -4
  46. package/dist/client.js +12 -10
  47. package/dist/createAgentAuthorization-ULG47ZJI.js +5 -0
  48. package/dist/createAgentAuthorization-ULG47ZJI.js.map +1 -0
  49. package/dist/credentials.d.ts +155 -0
  50. package/dist/credentials.js +4 -0
  51. package/dist/credentials.js.map +1 -0
  52. package/dist/crypto.js +2 -2
  53. package/dist/errors.js +1 -1
  54. package/dist/feature-flags-B1g0DCPe.d.ts +1181 -0
  55. package/dist/generated-EG5USUFG.js +9 -0
  56. package/dist/{generated-VNLHMR6Y.js.map → generated-EG5USUFG.js.map} +1 -1
  57. package/dist/{ghostspeak_wasm-SB2RPJ3D.js → ghostspeak_wasm-F227HOSM.js} +3 -3
  58. package/dist/{ghostspeak_wasm-SB2RPJ3D.js.map → ghostspeak_wasm-F227HOSM.js.map} +1 -1
  59. package/dist/index.d.ts +1210 -1506
  60. package/dist/index.js +601 -3532
  61. package/dist/index.js.map +1 -1
  62. package/dist/metafile-esm.json +1 -1
  63. package/dist/minimal/core-minimal.d.ts +2383 -1264
  64. package/dist/minimal/core-minimal.js +9 -9
  65. package/dist/minimal/core-minimal.js.map +1 -1
  66. package/dist/nacl-fast-W5BJ3KZ2.js +2229 -0
  67. package/dist/nacl-fast-W5BJ3KZ2.js.map +1 -0
  68. package/dist/pda-4KP7CURF.js +4 -0
  69. package/dist/pda-4KP7CURF.js.map +1 -0
  70. package/dist/pda-Ce7VYg4T.d.ts +25 -0
  71. package/dist/reputation-types-Yebf0Rm_.d.ts +1071 -0
  72. package/dist/revokeAuthorization-OK7E7OK3.js +5 -0
  73. package/dist/revokeAuthorization-OK7E7OK3.js.map +1 -0
  74. package/dist/signature-verification-DGxR4aYQ.d.ts +448 -0
  75. package/dist/types.js +1 -1
  76. package/dist/updateReputationWithAuth-Y4ONEVSP.js +5 -0
  77. package/dist/updateReputationWithAuth-Y4ONEVSP.js.map +1 -0
  78. package/dist/utils.d.ts +69 -203
  79. package/dist/utils.js +15 -153
  80. package/dist/utils.js.map +1 -1
  81. package/package.json +28 -31
  82. package/dist/.tsbuildinfo +0 -1
  83. package/dist/GhostSpeakClient-hsGuGg__.d.ts +0 -860
  84. package/dist/GovernanceModule-DQYYys-H.d.ts +0 -1766
  85. package/dist/chunk-ASQXX4IT.js +0 -572
  86. package/dist/chunk-ASQXX4IT.js.map +0 -1
  87. package/dist/chunk-COGZFWOT.js +0 -19657
  88. package/dist/chunk-COGZFWOT.js.map +0 -1
  89. package/dist/chunk-FKRN4PW5.js +0 -1667
  90. package/dist/chunk-FKRN4PW5.js.map +0 -1
  91. package/dist/chunk-GMHIUK2R.js +0 -7526
  92. package/dist/chunk-GMHIUK2R.js.map +0 -1
  93. package/dist/chunk-IAWBZYPE.js +0 -356
  94. package/dist/chunk-IAWBZYPE.js.map +0 -1
  95. package/dist/chunk-NSBPE2FW.js +0 -15
  96. package/dist/chunk-OWYHJG6H.js +0 -13311
  97. package/dist/chunk-OWYHJG6H.js.map +0 -1
  98. package/dist/chunk-RDDPOFR5.js +0 -3
  99. package/dist/chunk-RDDPOFR5.js.map +0 -1
  100. package/dist/chunk-RERCHKZP.js +0 -35
  101. package/dist/chunk-RERCHKZP.js.map +0 -1
  102. package/dist/chunk-TVVGXYCI.js +0 -2887
  103. package/dist/chunk-TVVGXYCI.js.map +0 -1
  104. package/dist/chunk-V3SOFUAZ.js.map +0 -1
  105. package/dist/chunk-ZGP5552B.js +0 -377
  106. package/dist/chunk-ZGP5552B.js.map +0 -1
  107. package/dist/chunk-ZWOYNHVK.js +0 -196
  108. package/dist/chunk-ZWOYNHVK.js.map +0 -1
  109. package/dist/dist/.tsbuildinfo +0 -1
  110. package/dist/elgamal-VZLWB3XK.js +0 -5
  111. package/dist/elgamal-VZLWB3XK.js.map +0 -1
  112. package/dist/feature-flags-V722ZuXO.d.ts +0 -3512
  113. package/dist/generated-VNLHMR6Y.js +0 -5
  114. package/dist/ipfs-types-BOt9ZNg4.d.ts +0 -592
  115. package/dist/multisigConfig-BzEhy6jy.d.ts +0 -58
  116. package/dist/pda-B_nS8SbD.d.ts +0 -114
  117. package/dist/pda-S4BFJVGE.js +0 -4
  118. package/dist/pda-S4BFJVGE.js.map +0 -1
  119. package/dist/system-addresses-BFNLEbFx.d.ts +0 -857
  120. package/dist/token-2022-rpc-RALH4RK7.js +0 -593
  121. package/dist/token-2022-rpc-RALH4RK7.js.map +0 -1
@@ -0,0 +1,69 @@
1
+ import { address } from '@solana/addresses';
2
+
3
+ // src/modules/reputation/adapters/ReputationSourceAdapter.ts
4
+ var ReputationSource = /* @__PURE__ */ ((ReputationSource2) => {
5
+ ReputationSource2["PayAI"] = "payai";
6
+ ReputationSource2["DirectSolana"] = "direct-solana";
7
+ ReputationSource2["GitHub"] = "github";
8
+ ReputationSource2["Twitter"] = "twitter";
9
+ ReputationSource2["CustomWebhook"] = "custom-webhook";
10
+ ReputationSource2["OnChainHistory"] = "onchain-history";
11
+ return ReputationSource2;
12
+ })(ReputationSource || {});
13
+ var BaseReputationAdapter = class {
14
+ config;
15
+ constructor(config) {
16
+ this.config = config;
17
+ }
18
+ /**
19
+ * Default reliability calculation uses configured reliability
20
+ */
21
+ calculateReliability(_data) {
22
+ return this.config.reliability / 1e4;
23
+ }
24
+ /**
25
+ * Check if adapter is enabled
26
+ */
27
+ isEnabled() {
28
+ return this.config.enabled;
29
+ }
30
+ /**
31
+ * Get adapter weight in basis points
32
+ */
33
+ getWeight() {
34
+ return this.config.weight;
35
+ }
36
+ /**
37
+ * Validate score is in valid range (0-1000)
38
+ */
39
+ validateScoreRange(score) {
40
+ return score >= 0 && score <= 1e3;
41
+ }
42
+ /**
43
+ * Clamp score to valid range
44
+ */
45
+ clampScore(score) {
46
+ return Math.max(0, Math.min(1e3, score));
47
+ }
48
+ };
49
+ var GHOSTSPEAK_PROGRAM_ID = address("4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB");
50
+ var NETWORK_CONFIG = {
51
+ devnet: {
52
+ programId: "4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB",
53
+ rpcUrl: "https://api.devnet.solana.com"
54
+ },
55
+ testnet: {
56
+ programId: "4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB",
57
+ rpcUrl: "https://api.testnet.solana.com"
58
+ },
59
+ mainnet: {
60
+ programId: "4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB",
61
+ // TODO: Update with mainnet deployment
62
+ rpcUrl: "https://api.mainnet-beta.solana.com"
63
+ }
64
+ };
65
+ address("DFQ9ejBt1T192Xnru1J21bFq9FSU7gjRRRYJkehvpump");
66
+
67
+ export { BaseReputationAdapter, GHOSTSPEAK_PROGRAM_ID, NETWORK_CONFIG, ReputationSource };
68
+ //# sourceMappingURL=chunk-TTB4OS2D.js.map
69
+ //# sourceMappingURL=chunk-TTB4OS2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/reputation/adapters/ReputationSourceAdapter.ts","../src/constants/ghostspeak.ts"],"names":["ReputationSource"],"mappings":";;;AAYO,IAAK,gBAAA,qBAAAA,iBAAAA,KAAL;AACL,EAAAA,kBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,kBAAA,cAAA,CAAA,GAAe,eAAA;AACf,EAAAA,kBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,kBAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,kBAAA,gBAAA,CAAA,GAAiB,iBAAA;AANP,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAsFL,IAAe,wBAAf,MAAwE;AAAA,EACnE,MAAA;AAAA,EAEV,YAAY,MAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAUA,qBAAqB,KAAA,EAAoB;AACvC,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,GAAc,GAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAqB;AACnB,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAoB;AAClB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKU,mBAAmB,KAAA,EAAwB;AACnD,IAAA,OAAO,KAAA,IAAS,KAAK,KAAA,IAAS,GAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKU,WAAW,KAAA,EAAuB;AAC1C,IAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EAC1C;AACF;ACpIO,IAAM,qBAAA,GAAwB,QAAQ,8CAA8C;AAKpF,IAAM,cAAA,GAAiB;AAAA,EAC5B,MAAA,EAAQ;AAAA,IACN,SAAA,EAAW,8CAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAW,8CAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAW,8CAAA;AAAA;AAAA,IACX,MAAA,EAAQ;AAAA;AAEZ;AAwBgC,QAAQ,8CAA8C","file":"chunk-TTB4OS2D.js","sourcesContent":["/**\n * Reputation Source Adapter Interface\n *\n * Base interface for all reputation data sources (PayAI, GitHub, custom webhooks, etc.)\n * Each adapter normalizes external data to a standard format for aggregation.\n */\n\nimport type { Address } from '@solana/addresses'\n\n/**\n * Supported reputation sources\n */\nexport enum ReputationSource {\n PayAI = 'payai',\n DirectSolana = 'direct-solana',\n GitHub = 'github',\n Twitter = 'twitter',\n CustomWebhook = 'custom-webhook',\n OnChainHistory = 'onchain-history',\n}\n\n/**\n * Configuration for a reputation source\n */\nexport interface ReputationSourceConfig {\n /** Source identifier */\n source: ReputationSource\n /** Weight in basis points (0-10000) */\n weight: number\n /** Reliability score in basis points (0-10000) */\n reliability: number\n /** Source-specific configuration (API keys, URLs, etc.) */\n config: Record<string, any>\n /** Whether this source is enabled */\n enabled: boolean\n}\n\n/**\n * Normalized reputation data from a source\n */\nexport interface SourceReputationData {\n /** Source identifier */\n source: ReputationSource\n /** Reputation score (0-1000) */\n score: number\n /** Number of data points contributing to score */\n dataPoints: number\n /** Reliability of this data (0-1) */\n reliability: number\n /** Raw data from source (for debugging/audit) */\n rawData: any\n /** Timestamp when data was fetched */\n timestamp: Date\n}\n\n/**\n * Base interface for reputation source adapters\n */\nexport interface ReputationSourceAdapter {\n /** Source identifier */\n readonly source: ReputationSource\n\n /**\n * Fetch reputation data for an agent\n *\n * @param agentId - Agent identifier (public key or external ID)\n * @returns Normalized reputation data\n */\n fetchReputationData(agentId: string): Promise<SourceReputationData>\n\n /**\n * Validate raw data from source\n *\n * @param data - Raw data to validate\n * @returns True if data is valid\n */\n validateData(data: any): boolean\n\n /**\n * Normalize raw score to 0-1000 scale\n *\n * @param rawScore - Raw score from source\n * @returns Normalized score (0-1000)\n */\n normalizeScore(rawScore: any): number\n\n /**\n * Calculate reliability score for this data point\n *\n * @param data - Source data\n * @returns Reliability (0-1)\n */\n calculateReliability(data: any): number\n}\n\n/**\n * Abstract base class for reputation adapters\n */\nexport abstract class BaseReputationAdapter implements ReputationSourceAdapter {\n protected config: ReputationSourceConfig\n\n constructor(config: ReputationSourceConfig) {\n this.config = config\n }\n\n abstract get source(): ReputationSource\n abstract fetchReputationData(agentId: string): Promise<SourceReputationData>\n abstract validateData(data: any): boolean\n abstract normalizeScore(rawScore: any): number\n\n /**\n * Default reliability calculation uses configured reliability\n */\n calculateReliability(_data: any): number {\n return this.config.reliability / 10000 // Convert basis points to 0-1\n }\n\n /**\n * Check if adapter is enabled\n */\n isEnabled(): boolean {\n return this.config.enabled\n }\n\n /**\n * Get adapter weight in basis points\n */\n getWeight(): number {\n return this.config.weight\n }\n\n /**\n * Validate score is in valid range (0-1000)\n */\n protected validateScoreRange(score: number): boolean {\n return score >= 0 && score <= 1000\n }\n\n /**\n * Clamp score to valid range\n */\n protected clampScore(score: number): number {\n return Math.max(0, Math.min(1000, score))\n }\n}\n","/**\n * GhostSpeak Protocol Constants\n * July 2025 Implementation\n */\n\nimport { address } from '@solana/addresses'\n\n/**\n * Program ID for GhostSpeak Marketplace on Solana\n * Deployed on devnet - December 30, 2025\n * Deployment signature: 5zdU8HdtenhgwDmeEJu2ZPrQwoG9gztHHM5Ft6URxCzTj7m4y9ZkvmVKrpvMK41skcHvh8xa7ckNuUkQwPsierJr\n */\nexport const GHOSTSPEAK_PROGRAM_ID = address('4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB')\n\n/**\n * Network-specific configurations\n */\nexport const NETWORK_CONFIG = {\n devnet: {\n programId: '4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB',\n rpcUrl: 'https://api.devnet.solana.com'\n },\n testnet: {\n programId: '4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB',\n rpcUrl: 'https://api.testnet.solana.com'\n },\n mainnet: {\n programId: '4wHjA2a5YC4twZb4NQpwZpixo5FgxxzuJUrCG7UnF9pB', // TODO: Update with mainnet deployment\n rpcUrl: 'https://api.mainnet-beta.solana.com'\n }\n} as const\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG = {\n network: 'devnet' as keyof typeof NETWORK_CONFIG,\n confirmations: 1,\n timeout: 30000,\n maxRetries: 3\n} as const\n\n/**\n * GHOST Token Configuration\n * Official GhostSpeak utility token launched December 26, 2025\n * Deployed on pump.fun with immutable supply\n */\n\n/**\n * GHOST Token Mint Address (Solana Mainnet)\n * - Mint Authority: REVOKED (immutable supply)\n * - Freeze Authority: REVOKED (decentralized)\n * - Supply: ~999.75M GHOST (fixed)\n */\nexport const GHOST_TOKEN_MINT = address('DFQ9ejBt1T192Xnru1J21bFq9FSU7gjRRRYJkehvpump')\n\n/**\n * GHOST Token Metadata\n */\nexport const GHOST_TOKEN_CONFIG = {\n /** Token mint address */\n mint: GHOST_TOKEN_MINT,\n /** Token symbol */\n symbol: 'GHOST',\n /** Token name */\n name: 'Ghostspeak',\n /** Token decimals (1 GHOST = 1_000_000 lamports) */\n decimals: 6,\n /** Total supply in lamports */\n supplyLamports: 999753007258579n,\n /** Total supply in tokens */\n supplyTokens: 999753007.258579,\n /** Mint authority (null = immutable) */\n mintAuthority: null,\n /** Freeze authority (null = decentralized) */\n freezeAuthority: null,\n /** Primary DEX pair */\n dexPair: 'https://dexscreener.com/solana/e44xj7jyjxyermlqqwrpu4nekcphawfjf3ppn2uokgdb',\n /** Launch date */\n launchedAt: new Date('2025-12-26'),\n} as const\n\n/**\n * Staking Tier Requirements (in GHOST tokens with 6 decimals)\n */\nexport const STAKING_TIERS = {\n /** Basic Staker: 1,000 GHOST */\n BASIC: {\n name: 'Basic Staker',\n required: 1_000_000_000_000n, // 1,000 GHOST (6 decimals)\n multiplier: 1.0,\n benefits: [\n 'Proportional revenue share',\n 'Vote on protocol parameters',\n 'Public staking dashboard access'\n ]\n },\n /** Verified Staker: 5,000 GHOST */\n VERIFIED: {\n name: 'Verified Staker',\n required: 5_000_000_000_000n, // 5,000 GHOST (6 decimals)\n multiplier: 1.5,\n benefits: [\n 'All Basic benefits',\n 'Unlimited agent verifications',\n '\"Verified Reviewer\" badge (2x review weight)',\n 'Early feature access'\n ]\n },\n /** Pro Staker: 50,000 GHOST */\n PRO: {\n name: 'Pro Staker',\n required: 50_000_000_000_000n, // 50,000 GHOST (6 decimals)\n multiplier: 2.0,\n benefits: [\n 'All Verified benefits',\n 'API access (100K requests/month)',\n 'Webhook notifications',\n 'Priority support',\n 'Governance voting power (2x)'\n ]\n },\n /** Whale Staker: 500,000 GHOST */\n WHALE: {\n name: 'Whale Staker',\n required: 500_000_000_000_000n, // 500,000 GHOST (6 decimals)\n multiplier: 3.0,\n benefits: [\n 'All Pro benefits',\n 'Unlimited API requests',\n 'White-label options',\n 'Direct line to core team',\n 'Protocol fee discounts (20%)'\n ]\n }\n} as const\n\n/**\n * Payment Options with GHOST Burning\n */\nexport const PAYMENT_OPTIONS = {\n /** Standard USDC payment */\n USDC: {\n amount: 1_000_000n, // 1 USDC (6 decimals)\n token: 'USDC',\n discount: 0\n },\n /** Burn GHOST for 25% discount */\n GHOST_BURN: {\n amount: 75_000_000n, // 75 GHOST (6 decimals)\n token: 'GHOST',\n discount: 0.25, // 25% discount (equivalent to 1 USDC)\n note: 'Tokens are permanently burned (deflationary)'\n }\n} as const"]}
@@ -0,0 +1,33 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
6
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
7
+ }) : x)(function(x) {
8
+ if (typeof require !== "undefined") return require.apply(this, arguments);
9
+ throw Error('Dynamic require of "' + x + '" is not supported');
10
+ });
11
+ var __esm = (fn, res) => function __init() {
12
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
13
+ };
14
+ var __commonJS = (cb, mod) => function __require2() {
15
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
16
+ };
17
+ var __export = (target, all) => {
18
+ for (var name in all)
19
+ __defProp(target, name, { get: all[name], enumerable: true });
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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ export { __commonJS, __esm, __export, __require, __toCommonJS };
32
+ //# sourceMappingURL=chunk-UP2VWCW5.js.map
33
+ //# sourceMappingURL=chunk-UP2VWCW5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-NSBPE2FW.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-UP2VWCW5.js"}
@@ -1,4 +1,4 @@
1
- import { __export } from './chunk-NSBPE2FW.js';
1
+ import { __export } from './chunk-UP2VWCW5.js';
2
2
  import { ed25519 } from '@noble/curves/ed25519';
3
3
  import { sha256 } from '@noble/hashes/sha256';
4
4
  import { randomBytes, bytesToNumberLE, numberToBytesBE } from '@noble/curves/abstract/utils';
@@ -512,7 +512,7 @@ async function loadWasmModule() {
512
512
  try {
513
513
  let wasmModule2;
514
514
  try {
515
- wasmModule2 = await import('./ghostspeak_wasm-SB2RPJ3D.js');
515
+ wasmModule2 = await import('./ghostspeak_wasm-F227HOSM.js');
516
516
  } catch {
517
517
  throw new Error("WASM module not built");
518
518
  }
@@ -565,7 +565,7 @@ async function loadWasmModuleInternal() {
565
565
  try {
566
566
  let wasmImport;
567
567
  try {
568
- wasmImport = await import('./ghostspeak_wasm-SB2RPJ3D.js');
568
+ wasmImport = await import('./ghostspeak_wasm-F227HOSM.js');
569
569
  } catch {
570
570
  throw new Error("WASM module not built");
571
571
  }
@@ -651,5 +651,5 @@ var wasm_bridge_default = {
651
651
  };
652
652
 
653
653
  export { decrypt, elgamal_exports, encrypt, generateKeypair, generateTransferProof, generateWithdrawProof, isWasmAvailable, loadWasmModule2 as loadWasmModule, wasm_bridge_exports };
654
- //# sourceMappingURL=chunk-UJUGGLMT.js.map
655
- //# sourceMappingURL=chunk-UJUGGLMT.js.map
654
+ //# sourceMappingURL=chunk-VQZQCHUT.js.map
655
+ //# sourceMappingURL=chunk-VQZQCHUT.js.map
@@ -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,7 +1,9 @@
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-hsGuGg__.js';
4
+ import './StakingModule-C5rzuOWb.js';
5
+ export { G as GhostSpeakClient, G as default, l as lamportsToSol, s as sol } from './GhostSpeakClient-CWmGaM9Q.js';
6
+ import 'node:events';
6
7
  import './types.js';
7
- import './multisigConfig-BzEhy6jy.js';
8
+ import './credentials.js';
9
+ import './signature-verification-DGxR4aYQ.js';
package/dist/client.js CHANGED
@@ -1,13 +1,15 @@
1
- export { GhostSpeakClient, GhostSpeakClient_default as default, lamportsToSol, sol } from './chunk-FKRN4PW5.js';
2
- import './chunk-TVVGXYCI.js';
3
- import './chunk-ZGP5552B.js';
4
- import './chunk-OWYHJG6H.js';
5
- import './chunk-COGZFWOT.js';
6
- import './chunk-ASQXX4IT.js';
7
- import './chunk-RERCHKZP.js';
8
- import './chunk-RDDPOFR5.js';
1
+ export { GhostSpeakClient, GhostSpeakClient_default as default, lamportsToSol, sol } from './chunk-E3FD2CNY.js';
2
+ import './chunk-SZGFSCNU.js';
3
+ import './chunk-BQDGRTVP.js';
4
+ import './chunk-C5CDA3WX.js';
5
+ import './chunk-S74EH3KD.js';
6
+ import './chunk-IHVDQ4YI.js';
7
+ import './chunk-SFTSZ3LC.js';
8
+ import './chunk-JV2SWONF.js';
9
+ import './chunk-KB6CKIUK.js';
10
+ import './chunk-AL3HQN73.js';
9
11
  import './chunk-SRS2SKFS.js';
10
- import './chunk-GMHIUK2R.js';
11
- import './chunk-NSBPE2FW.js';
12
+ import './chunk-RIZZPLLB.js';
13
+ import './chunk-UP2VWCW5.js';
12
14
  //# sourceMappingURL=client.js.map
13
15
  //# sourceMappingURL=client.js.map
@@ -0,0 +1,5 @@
1
+ export { CREATE_AGENT_AUTHORIZATION_DISCRIMINATOR, getCreateAgentAuthorizationDiscriminatorBytes, getCreateAgentAuthorizationInstruction, getCreateAgentAuthorizationInstructionAsync, getCreateAgentAuthorizationInstructionDataCodec, getCreateAgentAuthorizationInstructionDataDecoder, getCreateAgentAuthorizationInstructionDataEncoder, parseCreateAgentAuthorizationInstruction } from './chunk-SFTSZ3LC.js';
2
+ import './chunk-AL3HQN73.js';
3
+ import './chunk-UP2VWCW5.js';
4
+ //# sourceMappingURL=createAgentAuthorization-ULG47ZJI.js.map
5
+ //# sourceMappingURL=createAgentAuthorization-ULG47ZJI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"createAgentAuthorization-ULG47ZJI.js"}