@vorionsys/atsf-core 0.2.0 → 0.2.2

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 (215) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/LICENSE +190 -0
  3. package/README.md +305 -181
  4. package/dist/api/server.d.ts.map +1 -1
  5. package/dist/api/server.js +86 -4
  6. package/dist/api/server.js.map +1 -1
  7. package/dist/basis/parser.d.ts +210 -210
  8. package/dist/basis/parser.js.map +1 -1
  9. package/dist/chain/index.d.ts +147 -0
  10. package/dist/chain/index.d.ts.map +1 -0
  11. package/dist/chain/index.js +219 -0
  12. package/dist/chain/index.js.map +1 -0
  13. package/dist/common/adapters.d.ts +9 -9
  14. package/dist/common/adapters.d.ts.map +1 -1
  15. package/dist/common/adapters.js +6 -6
  16. package/dist/common/config.d.ts +152 -152
  17. package/dist/common/types.d.ts +35 -15
  18. package/dist/common/types.d.ts.map +1 -1
  19. package/dist/common/types.js.map +1 -1
  20. package/dist/enforce/index.d.ts +226 -16
  21. package/dist/enforce/index.d.ts.map +1 -1
  22. package/dist/enforce/index.js +196 -49
  23. package/dist/enforce/index.js.map +1 -1
  24. package/dist/governance/index.d.ts +2 -0
  25. package/dist/governance/index.d.ts.map +1 -1
  26. package/dist/governance/index.js +1 -0
  27. package/dist/governance/index.js.map +1 -1
  28. package/dist/governance/proof-bridge.d.ts +86 -0
  29. package/dist/governance/proof-bridge.d.ts.map +1 -0
  30. package/dist/governance/proof-bridge.js +139 -0
  31. package/dist/governance/proof-bridge.js.map +1 -0
  32. package/dist/index.d.ts +11 -4
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +17 -4
  35. package/dist/index.js.map +1 -1
  36. package/dist/intent/index.d.ts +127 -10
  37. package/dist/intent/index.d.ts.map +1 -1
  38. package/dist/intent/index.js +121 -16
  39. package/dist/intent/index.js.map +1 -1
  40. package/dist/langchain/executor.d.ts +19 -5
  41. package/dist/langchain/executor.d.ts.map +1 -1
  42. package/dist/langchain/executor.js +287 -36
  43. package/dist/langchain/executor.js.map +1 -1
  44. package/dist/langchain/index.d.ts +2 -1
  45. package/dist/langchain/index.d.ts.map +1 -1
  46. package/dist/langchain/index.js +3 -1
  47. package/dist/langchain/index.js.map +1 -1
  48. package/dist/langchain/tools.d.ts.map +1 -1
  49. package/dist/langchain/tools.js +2 -1
  50. package/dist/langchain/tools.js.map +1 -1
  51. package/dist/langchain/types.d.ts +41 -0
  52. package/dist/langchain/types.d.ts.map +1 -1
  53. package/dist/layers/index.d.ts +1 -1
  54. package/dist/layers/index.d.ts.map +1 -1
  55. package/dist/persistence/file.d.ts +35 -3
  56. package/dist/persistence/file.d.ts.map +1 -1
  57. package/dist/persistence/file.js +138 -11
  58. package/dist/persistence/file.js.map +1 -1
  59. package/dist/persistence/index.d.ts +10 -1
  60. package/dist/persistence/index.d.ts.map +1 -1
  61. package/dist/persistence/index.js +15 -1
  62. package/dist/persistence/index.js.map +1 -1
  63. package/dist/persistence/sqlite.d.ts +135 -0
  64. package/dist/persistence/sqlite.d.ts.map +1 -0
  65. package/dist/persistence/sqlite.js +372 -0
  66. package/dist/persistence/sqlite.js.map +1 -0
  67. package/dist/phase6/ceiling.d.ts +177 -0
  68. package/dist/phase6/ceiling.d.ts.map +1 -0
  69. package/dist/phase6/ceiling.js +463 -0
  70. package/dist/phase6/ceiling.js.map +1 -0
  71. package/dist/phase6/context.d.ts +207 -0
  72. package/dist/phase6/context.d.ts.map +1 -0
  73. package/dist/phase6/context.js +603 -0
  74. package/dist/phase6/context.js.map +1 -0
  75. package/dist/phase6/index.d.ts +79 -0
  76. package/dist/phase6/index.d.ts.map +1 -0
  77. package/dist/phase6/index.js +152 -0
  78. package/dist/phase6/index.js.map +1 -0
  79. package/dist/phase6/presets.d.ts +148 -0
  80. package/dist/phase6/presets.d.ts.map +1 -0
  81. package/dist/phase6/presets.js +467 -0
  82. package/dist/phase6/presets.js.map +1 -0
  83. package/dist/phase6/provenance.d.ts +148 -0
  84. package/dist/phase6/provenance.d.ts.map +1 -0
  85. package/dist/phase6/provenance.js +545 -0
  86. package/dist/phase6/provenance.js.map +1 -0
  87. package/dist/phase6/role-gates/index.d.ts +7 -0
  88. package/dist/phase6/role-gates/index.d.ts.map +1 -0
  89. package/dist/phase6/role-gates/index.js +7 -0
  90. package/dist/phase6/role-gates/index.js.map +1 -0
  91. package/dist/phase6/role-gates/kernel.d.ts +84 -0
  92. package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
  93. package/dist/phase6/role-gates/kernel.js +258 -0
  94. package/dist/phase6/role-gates/kernel.js.map +1 -0
  95. package/dist/phase6/role-gates/policy.d.ts +110 -0
  96. package/dist/phase6/role-gates/policy.d.ts.map +1 -0
  97. package/dist/phase6/role-gates/policy.js +157 -0
  98. package/dist/phase6/role-gates/policy.js.map +1 -0
  99. package/dist/phase6/role-gates.d.ts +164 -0
  100. package/dist/phase6/role-gates.d.ts.map +1 -0
  101. package/dist/phase6/role-gates.js +536 -0
  102. package/dist/phase6/role-gates.js.map +1 -0
  103. package/dist/phase6/types.d.ts +1829 -0
  104. package/dist/phase6/types.d.ts.map +1 -0
  105. package/dist/phase6/types.js +452 -0
  106. package/dist/phase6/types.js.map +1 -0
  107. package/dist/phase6/weight-presets/canonical.d.ts +93 -0
  108. package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
  109. package/dist/phase6/weight-presets/canonical.js +122 -0
  110. package/dist/phase6/weight-presets/canonical.js.map +1 -0
  111. package/dist/phase6/weight-presets/deltas.d.ts +144 -0
  112. package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
  113. package/dist/phase6/weight-presets/deltas.js +184 -0
  114. package/dist/phase6/weight-presets/deltas.js.map +1 -0
  115. package/dist/phase6/weight-presets/index.d.ts +8 -0
  116. package/dist/phase6/weight-presets/index.d.ts.map +1 -0
  117. package/dist/phase6/weight-presets/index.js +8 -0
  118. package/dist/phase6/weight-presets/index.js.map +1 -0
  119. package/dist/phase6/weight-presets/merger.d.ts +79 -0
  120. package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
  121. package/dist/phase6/weight-presets/merger.js +161 -0
  122. package/dist/phase6/weight-presets/merger.js.map +1 -0
  123. package/dist/proof/index.d.ts +6 -0
  124. package/dist/proof/index.d.ts.map +1 -1
  125. package/dist/proof/index.js +56 -6
  126. package/dist/proof/index.js.map +1 -1
  127. package/dist/proof/merkle.d.ts +195 -0
  128. package/dist/proof/merkle.d.ts.map +1 -0
  129. package/dist/proof/merkle.js +412 -0
  130. package/dist/proof/merkle.js.map +1 -0
  131. package/dist/proof/zk-proofs.d.ts +218 -0
  132. package/dist/proof/zk-proofs.d.ts.map +1 -0
  133. package/dist/proof/zk-proofs.js +531 -0
  134. package/dist/proof/zk-proofs.js.map +1 -0
  135. package/dist/sandbox-training/challenges.d.ts +16 -0
  136. package/dist/sandbox-training/challenges.d.ts.map +1 -0
  137. package/dist/sandbox-training/challenges.js +561 -0
  138. package/dist/sandbox-training/challenges.js.map +1 -0
  139. package/dist/sandbox-training/graduation.d.ts +25 -0
  140. package/dist/sandbox-training/graduation.d.ts.map +1 -0
  141. package/dist/sandbox-training/graduation.js +143 -0
  142. package/dist/sandbox-training/graduation.js.map +1 -0
  143. package/dist/sandbox-training/index.d.ts +19 -0
  144. package/dist/sandbox-training/index.d.ts.map +1 -0
  145. package/dist/sandbox-training/index.js +22 -0
  146. package/dist/sandbox-training/index.js.map +1 -0
  147. package/dist/sandbox-training/promotion-service.d.ts +76 -0
  148. package/dist/sandbox-training/promotion-service.d.ts.map +1 -0
  149. package/dist/sandbox-training/promotion-service.js +117 -0
  150. package/dist/sandbox-training/promotion-service.js.map +1 -0
  151. package/dist/sandbox-training/runner.d.ts +58 -0
  152. package/dist/sandbox-training/runner.d.ts.map +1 -0
  153. package/dist/sandbox-training/runner.js +388 -0
  154. package/dist/sandbox-training/runner.js.map +1 -0
  155. package/dist/sandbox-training/scorer.d.ts +40 -0
  156. package/dist/sandbox-training/scorer.d.ts.map +1 -0
  157. package/dist/sandbox-training/scorer.js +79 -0
  158. package/dist/sandbox-training/scorer.js.map +1 -0
  159. package/dist/sandbox-training/types.d.ts +162 -0
  160. package/dist/sandbox-training/types.d.ts.map +1 -0
  161. package/dist/sandbox-training/types.js +32 -0
  162. package/dist/sandbox-training/types.js.map +1 -0
  163. package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
  164. package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
  165. package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
  166. package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
  167. package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
  168. package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
  169. package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
  170. package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
  171. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
  172. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
  173. package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
  174. package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
  175. package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
  176. package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
  177. package/dist/trust-engine/context-policy/enforcement.js +104 -0
  178. package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
  179. package/dist/trust-engine/context-policy/factory.d.ts +75 -0
  180. package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
  181. package/dist/trust-engine/context-policy/factory.js +130 -0
  182. package/dist/trust-engine/context-policy/factory.js.map +1 -0
  183. package/dist/trust-engine/context-policy/index.d.ts +6 -0
  184. package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
  185. package/dist/trust-engine/context-policy/index.js +6 -0
  186. package/dist/trust-engine/context-policy/index.js.map +1 -0
  187. package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
  188. package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
  189. package/dist/trust-engine/creation-modifiers/index.js +5 -0
  190. package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
  191. package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
  192. package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
  193. package/dist/trust-engine/creation-modifiers/types.js +166 -0
  194. package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
  195. package/dist/trust-engine/index.d.ts +54 -1
  196. package/dist/trust-engine/index.d.ts.map +1 -1
  197. package/dist/trust-engine/index.js +118 -1
  198. package/dist/trust-engine/index.js.map +1 -1
  199. package/dist/trust-engine/phase6-types.d.ts +123 -0
  200. package/dist/trust-engine/phase6-types.d.ts.map +1 -0
  201. package/dist/trust-engine/phase6-types.js +88 -0
  202. package/dist/trust-engine/phase6-types.js.map +1 -0
  203. package/package.json +42 -12
  204. package/dist/audit/key-manager.d.ts +0 -118
  205. package/dist/audit/key-manager.d.ts.map +0 -1
  206. package/dist/audit/key-manager.js +0 -565
  207. package/dist/audit/key-manager.js.map +0 -1
  208. package/dist/carbon-aware/carbon-metrics.d.ts +0 -151
  209. package/dist/carbon-aware/carbon-metrics.d.ts.map +0 -1
  210. package/dist/carbon-aware/carbon-metrics.js +0 -370
  211. package/dist/carbon-aware/carbon-metrics.js.map +0 -1
  212. package/dist/carbon-aware/carbon-router.d.ts +0 -101
  213. package/dist/carbon-aware/carbon-router.d.ts.map +0 -1
  214. package/dist/carbon-aware/carbon-router.js +0 -400
  215. package/dist/carbon-aware/carbon-router.js.map +0 -1
@@ -0,0 +1,531 @@
1
+ /**
2
+ * Zero-Knowledge Proof Service for Privacy-Preserving Trust Verification
3
+ *
4
+ * Implements ZK proofs to enable:
5
+ * - Trust tier verification without revealing exact score
6
+ * - Action authorization without exposing full context
7
+ * - Compliance attestation without disclosing sensitive data
8
+ *
9
+ * Proof Types:
10
+ * - Range proofs (score in tier range)
11
+ * - Membership proofs (role in allowed set)
12
+ * - Threshold proofs (score >= minimum)
13
+ *
14
+ * Implementation uses Bulletproofs-style commitments for range proofs.
15
+ * For production deployment, integrate with full ZK library (snarkjs, circom).
16
+ *
17
+ * @packageDocumentation
18
+ */
19
+ import * as nodeCrypto from 'node:crypto';
20
+ import { createLogger } from '../common/logger.js';
21
+ const logger = createLogger({ component: 'proof:zk' });
22
+ /**
23
+ * Trust tier boundaries
24
+ */
25
+ const TIER_BOUNDARIES = {
26
+ T0: [0, 99],
27
+ T1: [100, 299],
28
+ T2: [300, 499],
29
+ T3: [500, 699],
30
+ T4: [700, 899],
31
+ T5: [900, 1000],
32
+ };
33
+ // =============================================================================
34
+ // CRYPTOGRAPHIC PRIMITIVES
35
+ // =============================================================================
36
+ /**
37
+ * Generate random 256-bit scalar
38
+ */
39
+ function randomScalar() {
40
+ return nodeCrypto.randomBytes(32).toString('hex');
41
+ }
42
+ /**
43
+ * SHA-256 hash
44
+ */
45
+ function hash(...inputs) {
46
+ const hasher = nodeCrypto.createHash('sha256');
47
+ for (const input of inputs) {
48
+ hasher.update(input);
49
+ }
50
+ return hasher.digest('hex');
51
+ }
52
+ /**
53
+ * Create Pedersen commitment
54
+ *
55
+ * In a real implementation, this would use elliptic curve operations.
56
+ * This is a simplified hash-based commitment for demonstration.
57
+ */
58
+ export function createCommitment(value) {
59
+ const blinding = randomScalar();
60
+ // C = H(value || blinding)
61
+ // In real Pedersen: C = value*G + blinding*H
62
+ const commitment = hash(value.toString(), blinding);
63
+ return { commitment, blinding };
64
+ }
65
+ /**
66
+ * Verify a commitment matches a value
67
+ */
68
+ export function verifyCommitment(commitment, value, blinding) {
69
+ const expected = hash(value.toString(), blinding);
70
+ return commitment === expected;
71
+ }
72
+ // =============================================================================
73
+ // RANGE PROOFS
74
+ // =============================================================================
75
+ /**
76
+ * Generate a simplified range proof
77
+ *
78
+ * Uses a commit-and-prove approach where:
79
+ * 1. Commit to the value
80
+ * 2. Prove value is in range using bit decomposition
81
+ *
82
+ * For production, use Bulletproofs library.
83
+ */
84
+ export function generateRangeProof(value, min, max) {
85
+ // Validate range
86
+ if (value < min || value > max) {
87
+ logger.warn({ value, min, max }, 'Value out of range');
88
+ return null;
89
+ }
90
+ // Create commitment
91
+ const commitment = createCommitment(value);
92
+ // Generate proof data
93
+ // In real Bulletproofs, this would be a complex proof of bit decomposition
94
+ // This simplified version proves knowledge of value in range
95
+ const rangeSize = max - min;
96
+ const normalizedValue = value - min;
97
+ // Bit decomposition of normalized value
98
+ const numBits = Math.ceil(Math.log2(rangeSize + 1));
99
+ const bits = [];
100
+ let temp = normalizedValue;
101
+ for (let i = 0; i < numBits; i++) {
102
+ bits.push(temp & 1);
103
+ temp >>= 1;
104
+ }
105
+ // Create bit commitments
106
+ const bitCommitments = [];
107
+ const bitBlindings = [];
108
+ for (let i = 0; i < numBits; i++) {
109
+ const bitCommitment = createCommitment(bits[i]);
110
+ bitCommitments.push(bitCommitment.commitment);
111
+ bitBlindings.push(bitCommitment.blinding);
112
+ }
113
+ // Challenge (Fiat-Shamir)
114
+ const challenge = hash(commitment.commitment, min.toString(), max.toString(), ...bitCommitments);
115
+ // Response
116
+ const response = hash(challenge, commitment.blinding, ...bitBlindings);
117
+ const proofData = JSON.stringify({
118
+ bitCommitments,
119
+ challenge,
120
+ response,
121
+ });
122
+ const proof = {
123
+ proofId: nodeCrypto.randomUUID(),
124
+ proofType: 'range',
125
+ commitment: commitment.commitment,
126
+ rangeMin: min,
127
+ rangeMax: max,
128
+ proof: Buffer.from(proofData).toString('base64'),
129
+ createdAt: new Date(),
130
+ };
131
+ return { proof, secret: commitment };
132
+ }
133
+ /**
134
+ * Verify a range proof
135
+ *
136
+ * Verifies that the committed value is in [rangeMin, rangeMax]
137
+ */
138
+ export function verifyRangeProof(proof) {
139
+ try {
140
+ const proofData = JSON.parse(Buffer.from(proof.proof, 'base64').toString());
141
+ // Recompute challenge
142
+ const expectedChallenge = hash(proof.commitment, proof.rangeMin.toString(), proof.rangeMax.toString(), ...proofData.bitCommitments);
143
+ if (proofData.challenge !== expectedChallenge) {
144
+ return {
145
+ valid: false,
146
+ proofId: proof.proofId,
147
+ verifiedAt: new Date(),
148
+ reason: 'Challenge mismatch',
149
+ };
150
+ }
151
+ // In a real implementation, we would verify:
152
+ // 1. Each bit commitment is a valid 0 or 1
153
+ // 2. Sum of bits equals the committed value
154
+ // 3. All responses are valid
155
+ return {
156
+ valid: true,
157
+ proofId: proof.proofId,
158
+ verifiedAt: new Date(),
159
+ };
160
+ }
161
+ catch (error) {
162
+ return {
163
+ valid: false,
164
+ proofId: proof.proofId,
165
+ verifiedAt: new Date(),
166
+ reason: `Proof parsing failed: ${error instanceof Error ? error.message : 'Unknown'}`,
167
+ };
168
+ }
169
+ }
170
+ // =============================================================================
171
+ // THRESHOLD PROOFS
172
+ // =============================================================================
173
+ /**
174
+ * Generate a threshold proof (value >= threshold)
175
+ */
176
+ export function generateThresholdProof(value, threshold) {
177
+ if (value < threshold) {
178
+ logger.warn({ value, threshold }, 'Value below threshold');
179
+ return null;
180
+ }
181
+ const commitment = createCommitment(value);
182
+ // Prove value - threshold >= 0 using range proof
183
+ const difference = value - threshold;
184
+ const diffCommitment = createCommitment(difference);
185
+ const challenge = hash(commitment.commitment, threshold.toString(), diffCommitment.commitment);
186
+ const response = hash(challenge, commitment.blinding, diffCommitment.blinding);
187
+ const proofData = JSON.stringify({
188
+ differenceCommitment: diffCommitment.commitment,
189
+ challenge,
190
+ response,
191
+ });
192
+ const proof = {
193
+ proofId: nodeCrypto.randomUUID(),
194
+ proofType: 'threshold',
195
+ commitment: commitment.commitment,
196
+ threshold,
197
+ proof: Buffer.from(proofData).toString('base64'),
198
+ createdAt: new Date(),
199
+ };
200
+ return { proof, secret: commitment };
201
+ }
202
+ /**
203
+ * Verify a threshold proof
204
+ */
205
+ export function verifyThresholdProof(proof) {
206
+ try {
207
+ const proofData = JSON.parse(Buffer.from(proof.proof, 'base64').toString());
208
+ const expectedChallenge = hash(proof.commitment, proof.threshold.toString(), proofData.differenceCommitment);
209
+ if (proofData.challenge !== expectedChallenge) {
210
+ return {
211
+ valid: false,
212
+ proofId: proof.proofId,
213
+ verifiedAt: new Date(),
214
+ reason: 'Challenge mismatch',
215
+ };
216
+ }
217
+ return {
218
+ valid: true,
219
+ proofId: proof.proofId,
220
+ verifiedAt: new Date(),
221
+ };
222
+ }
223
+ catch (error) {
224
+ return {
225
+ valid: false,
226
+ proofId: proof.proofId,
227
+ verifiedAt: new Date(),
228
+ reason: `Proof parsing failed: ${error instanceof Error ? error.message : 'Unknown'}`,
229
+ };
230
+ }
231
+ }
232
+ // =============================================================================
233
+ // MEMBERSHIP PROOFS
234
+ // =============================================================================
235
+ /**
236
+ * Generate a membership proof (value in set)
237
+ *
238
+ * Proves that committed value is in the allowed set without revealing which one.
239
+ * Uses ring signature-style construction.
240
+ */
241
+ export function generateMembershipProof(value, allowedSet) {
242
+ const valueIndex = allowedSet.indexOf(value);
243
+ if (valueIndex === -1) {
244
+ logger.warn({ value }, 'Value not in allowed set');
245
+ return null;
246
+ }
247
+ // Hash the allowed set
248
+ const setHash = hash(...allowedSet.sort());
249
+ // Create commitment to value
250
+ const valueHash = hash(value);
251
+ const blinding = randomScalar();
252
+ const commitment = hash(valueHash, blinding);
253
+ // Ring signature style proof
254
+ // For each element, create a challenge/response pair
255
+ const responses = [];
256
+ for (let i = 0; i < allowedSet.length; i++) {
257
+ if (i === valueIndex) {
258
+ // Real response for our value
259
+ responses.push(hash(blinding, i.toString()));
260
+ }
261
+ else {
262
+ // Simulated response for other values
263
+ responses.push(randomScalar());
264
+ }
265
+ }
266
+ const challenge = hash(commitment, setHash, ...responses);
267
+ const finalResponse = hash(challenge, blinding);
268
+ const proofData = JSON.stringify({
269
+ responses,
270
+ challenge,
271
+ finalResponse,
272
+ });
273
+ const proof = {
274
+ proofId: nodeCrypto.randomUUID(),
275
+ proofType: 'membership',
276
+ commitment,
277
+ setHash,
278
+ proof: Buffer.from(proofData).toString('base64'),
279
+ createdAt: new Date(),
280
+ };
281
+ return { proof, secret: blinding };
282
+ }
283
+ /**
284
+ * Verify a membership proof
285
+ */
286
+ export function verifyMembershipProof(proof, allowedSet) {
287
+ try {
288
+ // Verify set hash
289
+ const expectedSetHash = hash(...allowedSet.sort());
290
+ if (proof.setHash !== expectedSetHash) {
291
+ return {
292
+ valid: false,
293
+ proofId: proof.proofId,
294
+ verifiedAt: new Date(),
295
+ reason: 'Set hash mismatch',
296
+ };
297
+ }
298
+ const proofData = JSON.parse(Buffer.from(proof.proof, 'base64').toString());
299
+ // Verify challenge
300
+ const expectedChallenge = hash(proof.commitment, proof.setHash, ...proofData.responses);
301
+ if (proofData.challenge !== expectedChallenge) {
302
+ return {
303
+ valid: false,
304
+ proofId: proof.proofId,
305
+ verifiedAt: new Date(),
306
+ reason: 'Challenge mismatch',
307
+ };
308
+ }
309
+ return {
310
+ valid: true,
311
+ proofId: proof.proofId,
312
+ verifiedAt: new Date(),
313
+ };
314
+ }
315
+ catch (error) {
316
+ return {
317
+ valid: false,
318
+ proofId: proof.proofId,
319
+ verifiedAt: new Date(),
320
+ reason: `Proof parsing failed: ${error instanceof Error ? error.message : 'Unknown'}`,
321
+ };
322
+ }
323
+ }
324
+ // =============================================================================
325
+ // TRUST TIER PROOFS
326
+ // =============================================================================
327
+ /**
328
+ * Generate a trust tier proof
329
+ *
330
+ * Proves agent is in a specific tier without revealing exact score.
331
+ */
332
+ export function generateTrustTierProof(agentId, score, tier, validityDurationMs = 3600000 // 1 hour
333
+ ) {
334
+ const tierRange = TIER_BOUNDARIES[tier];
335
+ if (!tierRange) {
336
+ logger.warn({ tier }, 'Invalid tier');
337
+ return null;
338
+ }
339
+ const [min, max] = tierRange;
340
+ // Verify score is in tier
341
+ if (score < min || score > max) {
342
+ logger.warn({ score, tier, min, max }, 'Score not in tier range');
343
+ return null;
344
+ }
345
+ // Generate range proof
346
+ const rangeResult = generateRangeProof(score, min, max);
347
+ if (!rangeResult) {
348
+ return null;
349
+ }
350
+ // Create tier commitment
351
+ const tierCommitment = hash(agentId, tier, rangeResult.proof.commitment);
352
+ const proof = {
353
+ proofId: nodeCrypto.randomUUID(),
354
+ proofType: 'trust-tier',
355
+ agentId,
356
+ tierCommitment,
357
+ tier,
358
+ proof: rangeResult.proof.proof,
359
+ validUntil: new Date(Date.now() + validityDurationMs),
360
+ createdAt: new Date(),
361
+ };
362
+ return { proof, secret: rangeResult.secret };
363
+ }
364
+ /**
365
+ * Verify a trust tier proof
366
+ */
367
+ export function verifyTrustTierProof(proof) {
368
+ // Check validity period
369
+ if (new Date() > proof.validUntil) {
370
+ return {
371
+ valid: false,
372
+ proofId: proof.proofId,
373
+ verifiedAt: new Date(),
374
+ reason: 'Proof has expired',
375
+ };
376
+ }
377
+ const tierRange = TIER_BOUNDARIES[proof.tier];
378
+ if (!tierRange) {
379
+ return {
380
+ valid: false,
381
+ proofId: proof.proofId,
382
+ verifiedAt: new Date(),
383
+ reason: 'Invalid tier',
384
+ };
385
+ }
386
+ // Verify the embedded proof data directly
387
+ try {
388
+ const proofData = JSON.parse(Buffer.from(proof.proof, 'base64').toString());
389
+ // Verify challenge is present and properly formed
390
+ if (!proofData.challenge || !proofData.response) {
391
+ return {
392
+ valid: false,
393
+ proofId: proof.proofId,
394
+ verifiedAt: new Date(),
395
+ reason: 'Missing proof components',
396
+ };
397
+ }
398
+ // Verify tier commitment includes agent ID and tier
399
+ const expectedTierCommitment = hash(proof.agentId, proof.tier, proofData.bitCommitments?.[0] ?? '');
400
+ // Note: In a full implementation, we'd verify the commitment chain
401
+ return {
402
+ valid: true,
403
+ proofId: proof.proofId,
404
+ verifiedAt: new Date(),
405
+ };
406
+ }
407
+ catch (error) {
408
+ return {
409
+ valid: false,
410
+ proofId: proof.proofId,
411
+ verifiedAt: new Date(),
412
+ reason: `Proof parsing failed: ${error instanceof Error ? error.message : 'Unknown'}`,
413
+ };
414
+ }
415
+ }
416
+ const DEFAULT_CONFIG = {
417
+ defaultValidityMs: 3600000, // 1 hour
418
+ enableCaching: true,
419
+ maxCacheSize: 1000,
420
+ };
421
+ /**
422
+ * Zero-Knowledge Proof Service
423
+ */
424
+ export class ZKProofService {
425
+ config;
426
+ proofCache = new Map();
427
+ constructor(config = {}) {
428
+ this.config = { ...DEFAULT_CONFIG, ...config };
429
+ logger.info('ZK proof service initialized');
430
+ }
431
+ /**
432
+ * Generate trust tier proof for an agent
433
+ */
434
+ generateTierProof(agentId, score, tier) {
435
+ const result = generateTrustTierProof(agentId, score, tier, this.config.defaultValidityMs);
436
+ if (!result) {
437
+ return null;
438
+ }
439
+ if (this.config.enableCaching) {
440
+ this.cacheProof(result.proof);
441
+ }
442
+ return result.proof;
443
+ }
444
+ /**
445
+ * Verify any ZK proof
446
+ */
447
+ verify(proof, context) {
448
+ switch (proof.proofType) {
449
+ case 'range':
450
+ return verifyRangeProof(proof);
451
+ case 'threshold':
452
+ return verifyThresholdProof(proof);
453
+ case 'membership':
454
+ if (!context?.allowedSet) {
455
+ return {
456
+ valid: false,
457
+ proofId: proof.proofId,
458
+ verifiedAt: new Date(),
459
+ reason: 'Allowed set required for membership proof',
460
+ };
461
+ }
462
+ return verifyMembershipProof(proof, context.allowedSet);
463
+ case 'trust-tier':
464
+ return verifyTrustTierProof(proof);
465
+ default:
466
+ return {
467
+ valid: false,
468
+ proofId: proof.proofId,
469
+ verifiedAt: new Date(),
470
+ reason: 'Unknown proof type',
471
+ };
472
+ }
473
+ }
474
+ /**
475
+ * Get cached proof for agent
476
+ */
477
+ getCachedProof(agentId, tier) {
478
+ const cacheKey = `${agentId}:${tier}`;
479
+ const proof = this.proofCache.get(cacheKey);
480
+ if (proof && new Date() < proof.validUntil) {
481
+ return proof;
482
+ }
483
+ // Remove expired proof
484
+ this.proofCache.delete(cacheKey);
485
+ return undefined;
486
+ }
487
+ /**
488
+ * Cache a proof
489
+ */
490
+ cacheProof(proof) {
491
+ // Enforce cache size limit
492
+ if (this.proofCache.size >= this.config.maxCacheSize) {
493
+ const oldestKey = this.proofCache.keys().next().value;
494
+ if (oldestKey) {
495
+ this.proofCache.delete(oldestKey);
496
+ }
497
+ }
498
+ const cacheKey = `${proof.agentId}:${proof.tier}`;
499
+ this.proofCache.set(cacheKey, proof);
500
+ }
501
+ /**
502
+ * Clear expired proofs from cache
503
+ */
504
+ cleanupCache() {
505
+ const now = new Date();
506
+ let cleaned = 0;
507
+ for (const [key, proof] of this.proofCache) {
508
+ if (now > proof.validUntil) {
509
+ this.proofCache.delete(key);
510
+ cleaned++;
511
+ }
512
+ }
513
+ return cleaned;
514
+ }
515
+ /**
516
+ * Get statistics
517
+ */
518
+ getStats() {
519
+ return {
520
+ cachedProofs: this.proofCache.size,
521
+ cacheHitRate: 0, // Would need request tracking for accurate rate
522
+ };
523
+ }
524
+ }
525
+ /**
526
+ * Create a ZK proof service
527
+ */
528
+ export function createZKProofService(config) {
529
+ return new ZKProofService(config);
530
+ }
531
+ //# sourceMappingURL=zk-proofs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zk-proofs.js","sourceRoot":"","sources":["../../src/proof/zk-proofs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Sandbox Adversarial Training Boot Camp — Challenge Catalog
3
+ *
4
+ * 21 built-in challenges (7 per T1 factor) with escalating difficulty
5
+ * and adversarial injections.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { Challenge, T1Factor, ChallengeDifficulty } from './types.js';
10
+ /** Complete challenge catalog (21 challenges) */
11
+ export declare const CHALLENGE_CATALOG: readonly Challenge[];
12
+ /**
13
+ * Get challenges filtered by factor and/or difficulty.
14
+ */
15
+ export declare function getChallengesByFactor(factor?: T1Factor, difficulty?: ChallengeDifficulty): Challenge[];
16
+ //# sourceMappingURL=challenges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"challenges.d.ts","sourceRoot":"","sources":["../../src/sandbox-training/challenges.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAijB3E,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EAIxC,CAAC;AAEX;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,QAAQ,EACjB,UAAU,CAAC,EAAE,mBAAmB,GAC/B,SAAS,EAAE,CASb"}