@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.
- package/CHANGELOG.md +67 -0
- package/LICENSE +190 -0
- package/README.md +305 -181
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +86 -4
- package/dist/api/server.js.map +1 -1
- package/dist/basis/parser.d.ts +210 -210
- package/dist/basis/parser.js.map +1 -1
- package/dist/chain/index.d.ts +147 -0
- package/dist/chain/index.d.ts.map +1 -0
- package/dist/chain/index.js +219 -0
- package/dist/chain/index.js.map +1 -0
- package/dist/common/adapters.d.ts +9 -9
- package/dist/common/adapters.d.ts.map +1 -1
- package/dist/common/adapters.js +6 -6
- package/dist/common/config.d.ts +152 -152
- package/dist/common/types.d.ts +35 -15
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/types.js.map +1 -1
- package/dist/enforce/index.d.ts +226 -16
- package/dist/enforce/index.d.ts.map +1 -1
- package/dist/enforce/index.js +196 -49
- package/dist/enforce/index.js.map +1 -1
- package/dist/governance/index.d.ts +2 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +1 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/proof-bridge.d.ts +86 -0
- package/dist/governance/proof-bridge.d.ts.map +1 -0
- package/dist/governance/proof-bridge.js +139 -0
- package/dist/governance/proof-bridge.js.map +1 -0
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -4
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +127 -10
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +121 -16
- package/dist/intent/index.js.map +1 -1
- package/dist/langchain/executor.d.ts +19 -5
- package/dist/langchain/executor.d.ts.map +1 -1
- package/dist/langchain/executor.js +287 -36
- package/dist/langchain/executor.js.map +1 -1
- package/dist/langchain/index.d.ts +2 -1
- package/dist/langchain/index.d.ts.map +1 -1
- package/dist/langchain/index.js +3 -1
- package/dist/langchain/index.js.map +1 -1
- package/dist/langchain/tools.d.ts.map +1 -1
- package/dist/langchain/tools.js +2 -1
- package/dist/langchain/tools.js.map +1 -1
- package/dist/langchain/types.d.ts +41 -0
- package/dist/langchain/types.d.ts.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/persistence/file.d.ts +35 -3
- package/dist/persistence/file.d.ts.map +1 -1
- package/dist/persistence/file.js +138 -11
- package/dist/persistence/file.js.map +1 -1
- package/dist/persistence/index.d.ts +10 -1
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +15 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +135 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +372 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/phase6/ceiling.d.ts +177 -0
- package/dist/phase6/ceiling.d.ts.map +1 -0
- package/dist/phase6/ceiling.js +463 -0
- package/dist/phase6/ceiling.js.map +1 -0
- package/dist/phase6/context.d.ts +207 -0
- package/dist/phase6/context.d.ts.map +1 -0
- package/dist/phase6/context.js +603 -0
- package/dist/phase6/context.js.map +1 -0
- package/dist/phase6/index.d.ts +79 -0
- package/dist/phase6/index.d.ts.map +1 -0
- package/dist/phase6/index.js +152 -0
- package/dist/phase6/index.js.map +1 -0
- package/dist/phase6/presets.d.ts +148 -0
- package/dist/phase6/presets.d.ts.map +1 -0
- package/dist/phase6/presets.js +467 -0
- package/dist/phase6/presets.js.map +1 -0
- package/dist/phase6/provenance.d.ts +148 -0
- package/dist/phase6/provenance.d.ts.map +1 -0
- package/dist/phase6/provenance.js +545 -0
- package/dist/phase6/provenance.js.map +1 -0
- package/dist/phase6/role-gates/index.d.ts +7 -0
- package/dist/phase6/role-gates/index.d.ts.map +1 -0
- package/dist/phase6/role-gates/index.js +7 -0
- package/dist/phase6/role-gates/index.js.map +1 -0
- package/dist/phase6/role-gates/kernel.d.ts +84 -0
- package/dist/phase6/role-gates/kernel.d.ts.map +1 -0
- package/dist/phase6/role-gates/kernel.js +258 -0
- package/dist/phase6/role-gates/kernel.js.map +1 -0
- package/dist/phase6/role-gates/policy.d.ts +110 -0
- package/dist/phase6/role-gates/policy.d.ts.map +1 -0
- package/dist/phase6/role-gates/policy.js +157 -0
- package/dist/phase6/role-gates/policy.js.map +1 -0
- package/dist/phase6/role-gates.d.ts +164 -0
- package/dist/phase6/role-gates.d.ts.map +1 -0
- package/dist/phase6/role-gates.js +536 -0
- package/dist/phase6/role-gates.js.map +1 -0
- package/dist/phase6/types.d.ts +1829 -0
- package/dist/phase6/types.d.ts.map +1 -0
- package/dist/phase6/types.js +452 -0
- package/dist/phase6/types.js.map +1 -0
- package/dist/phase6/weight-presets/canonical.d.ts +93 -0
- package/dist/phase6/weight-presets/canonical.d.ts.map +1 -0
- package/dist/phase6/weight-presets/canonical.js +122 -0
- package/dist/phase6/weight-presets/canonical.js.map +1 -0
- package/dist/phase6/weight-presets/deltas.d.ts +144 -0
- package/dist/phase6/weight-presets/deltas.d.ts.map +1 -0
- package/dist/phase6/weight-presets/deltas.js +184 -0
- package/dist/phase6/weight-presets/deltas.js.map +1 -0
- package/dist/phase6/weight-presets/index.d.ts +8 -0
- package/dist/phase6/weight-presets/index.d.ts.map +1 -0
- package/dist/phase6/weight-presets/index.js +8 -0
- package/dist/phase6/weight-presets/index.js.map +1 -0
- package/dist/phase6/weight-presets/merger.d.ts +79 -0
- package/dist/phase6/weight-presets/merger.d.ts.map +1 -0
- package/dist/phase6/weight-presets/merger.js +161 -0
- package/dist/phase6/weight-presets/merger.js.map +1 -0
- package/dist/proof/index.d.ts +6 -0
- package/dist/proof/index.d.ts.map +1 -1
- package/dist/proof/index.js +56 -6
- package/dist/proof/index.js.map +1 -1
- package/dist/proof/merkle.d.ts +195 -0
- package/dist/proof/merkle.d.ts.map +1 -0
- package/dist/proof/merkle.js +412 -0
- package/dist/proof/merkle.js.map +1 -0
- package/dist/proof/zk-proofs.d.ts +218 -0
- package/dist/proof/zk-proofs.d.ts.map +1 -0
- package/dist/proof/zk-proofs.js +531 -0
- package/dist/proof/zk-proofs.js.map +1 -0
- package/dist/sandbox-training/challenges.d.ts +16 -0
- package/dist/sandbox-training/challenges.d.ts.map +1 -0
- package/dist/sandbox-training/challenges.js +561 -0
- package/dist/sandbox-training/challenges.js.map +1 -0
- package/dist/sandbox-training/graduation.d.ts +25 -0
- package/dist/sandbox-training/graduation.d.ts.map +1 -0
- package/dist/sandbox-training/graduation.js +143 -0
- package/dist/sandbox-training/graduation.js.map +1 -0
- package/dist/sandbox-training/index.d.ts +19 -0
- package/dist/sandbox-training/index.d.ts.map +1 -0
- package/dist/sandbox-training/index.js +22 -0
- package/dist/sandbox-training/index.js.map +1 -0
- package/dist/sandbox-training/promotion-service.d.ts +76 -0
- package/dist/sandbox-training/promotion-service.d.ts.map +1 -0
- package/dist/sandbox-training/promotion-service.js +117 -0
- package/dist/sandbox-training/promotion-service.js.map +1 -0
- package/dist/sandbox-training/runner.d.ts +58 -0
- package/dist/sandbox-training/runner.d.ts.map +1 -0
- package/dist/sandbox-training/runner.js +388 -0
- package/dist/sandbox-training/runner.js.map +1 -0
- package/dist/sandbox-training/scorer.d.ts +40 -0
- package/dist/sandbox-training/scorer.d.ts.map +1 -0
- package/dist/sandbox-training/scorer.js +79 -0
- package/dist/sandbox-training/scorer.js.map +1 -0
- package/dist/sandbox-training/types.d.ts +162 -0
- package/dist/sandbox-training/types.d.ts.map +1 -0
- package/dist/sandbox-training/types.js +32 -0
- package/dist/sandbox-training/types.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts +98 -0
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js +160 -0
- package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/index.js +6 -0
- package/dist/trust-engine/ceiling-enforcement/index.js.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +112 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js +158 -0
- package/dist/trust-engine/ceiling-enforcement/kernel.js.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts +62 -0
- package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/enforcement.js +104 -0
- package/dist/trust-engine/context-policy/enforcement.js.map +1 -0
- package/dist/trust-engine/context-policy/factory.d.ts +75 -0
- package/dist/trust-engine/context-policy/factory.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/factory.js +130 -0
- package/dist/trust-engine/context-policy/factory.js.map +1 -0
- package/dist/trust-engine/context-policy/index.d.ts +6 -0
- package/dist/trust-engine/context-policy/index.d.ts.map +1 -0
- package/dist/trust-engine/context-policy/index.js +6 -0
- package/dist/trust-engine/context-policy/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts +5 -0
- package/dist/trust-engine/creation-modifiers/index.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/index.js +5 -0
- package/dist/trust-engine/creation-modifiers/index.js.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts +112 -0
- package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -0
- package/dist/trust-engine/creation-modifiers/types.js +166 -0
- package/dist/trust-engine/creation-modifiers/types.js.map +1 -0
- package/dist/trust-engine/index.d.ts +54 -1
- package/dist/trust-engine/index.d.ts.map +1 -1
- package/dist/trust-engine/index.js +118 -1
- package/dist/trust-engine/index.js.map +1 -1
- package/dist/trust-engine/phase6-types.d.ts +123 -0
- package/dist/trust-engine/phase6-types.d.ts.map +1 -0
- package/dist/trust-engine/phase6-types.js +88 -0
- package/dist/trust-engine/phase6-types.js.map +1 -0
- package/package.json +42 -12
- package/dist/audit/key-manager.d.ts +0 -118
- package/dist/audit/key-manager.d.ts.map +0 -1
- package/dist/audit/key-manager.js +0 -565
- package/dist/audit/key-manager.js.map +0 -1
- package/dist/carbon-aware/carbon-metrics.d.ts +0 -151
- package/dist/carbon-aware/carbon-metrics.d.ts.map +0 -1
- package/dist/carbon-aware/carbon-metrics.js +0 -370
- package/dist/carbon-aware/carbon-metrics.js.map +0 -1
- package/dist/carbon-aware/carbon-router.d.ts +0 -101
- package/dist/carbon-aware/carbon-router.d.ts.map +0 -1
- package/dist/carbon-aware/carbon-router.js +0 -400
- 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"}
|