@ibgib/web-gib 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-texts/common-agent-texts.d.mts +0 -6
- package/dist/agent-texts/common-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/common-agent-texts.mjs +34 -35
- package/dist/agent-texts/common-agent-texts.mjs.map +1 -1
- package/dist/agent-texts/primary-agent-texts.d.mts +1 -15
- package/dist/agent-texts/primary-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/primary-agent-texts.mjs +21 -26
- package/dist/agent-texts/primary-agent-texts.mjs.map +1 -1
- package/dist/agent-texts/project-agent-texts.d.mts +1 -7
- package/dist/agent-texts/project-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/project-agent-texts.mjs +28 -28
- package/dist/agent-texts/project-agent-texts.mjs.map +1 -1
- package/dist/agent-texts/project-child-text-agent-texts.d.mts +1 -4
- package/dist/agent-texts/project-child-text-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/project-child-text-agent-texts.mjs +30 -25
- package/dist/agent-texts/project-child-text-agent-texts.mjs.map +1 -1
- package/dist/agent-texts/projects-agent-texts.d.mts +1 -3
- package/dist/agent-texts/projects-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/projects-agent-texts.mjs +15 -14
- package/dist/agent-texts/projects-agent-texts.mjs.map +1 -1
- package/dist/agent-texts/raw-agent-texts.d.mts +1 -3
- package/dist/agent-texts/raw-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/raw-agent-texts.mjs +17 -16
- package/dist/agent-texts/raw-agent-texts.mjs.map +1 -1
- package/dist/agent-texts/text-editor-agent-texts.d.mts +1 -5
- package/dist/agent-texts/text-editor-agent-texts.d.mts.map +1 -1
- package/dist/agent-texts/text-editor-agent-texts.mjs +19 -18
- package/dist/agent-texts/text-editor-agent-texts.mjs.map +1 -1
- package/dist/common/project/project-constants.d.mts +1 -0
- package/dist/common/project/project-constants.d.mts.map +1 -1
- package/dist/common/project/project-constants.mjs +1 -0
- package/dist/common/project/project-constants.mjs.map +1 -1
- package/dist/common/project/project-helper.d.mts.map +1 -1
- package/dist/common/project/project-helper.mjs +1 -2
- package/dist/common/project/project-helper.mjs.map +1 -1
- package/dist/keystone/keystone-config-builder.d.mts +77 -0
- package/dist/keystone/keystone-config-builder.d.mts.map +1 -0
- package/dist/keystone/keystone-config-builder.mjs +156 -0
- package/dist/keystone/keystone-config-builder.mjs.map +1 -0
- package/dist/keystone/keystone-constants.d.mts +15 -0
- package/dist/keystone/keystone-constants.d.mts.map +1 -0
- package/dist/keystone/keystone-constants.mjs +15 -0
- package/dist/keystone/keystone-constants.mjs.map +1 -0
- package/dist/keystone/keystone-helpers.d.mts +54 -0
- package/dist/keystone/keystone-helpers.d.mts.map +1 -0
- package/dist/keystone/keystone-helpers.mjs +155 -0
- package/dist/keystone/keystone-helpers.mjs.map +1 -0
- package/dist/keystone/keystone-service-v1.d.mts +81 -0
- package/dist/keystone/keystone-service-v1.d.mts.map +1 -0
- package/dist/keystone/keystone-service-v1.mjs +606 -0
- package/dist/keystone/keystone-service-v1.mjs.map +1 -0
- package/dist/keystone/keystone-service-v1.respec.d.mts +2 -0
- package/dist/keystone/keystone-service-v1.respec.d.mts.map +1 -0
- package/dist/keystone/keystone-service-v1.respec.mjs +443 -0
- package/dist/keystone/keystone-service-v1.respec.mjs.map +1 -0
- package/dist/keystone/keystone-types.d.mts +231 -0
- package/dist/keystone/keystone-types.d.mts.map +1 -0
- package/dist/keystone/keystone-types.mjs +50 -0
- package/dist/keystone/keystone-types.mjs.map +1 -0
- package/dist/keystone/strategy/hash-reveal-v1/hash-reveal-v1.d.mts +35 -0
- package/dist/keystone/strategy/hash-reveal-v1/hash-reveal-v1.d.mts.map +1 -0
- package/dist/keystone/strategy/hash-reveal-v1/hash-reveal-v1.mjs +106 -0
- package/dist/keystone/strategy/hash-reveal-v1/hash-reveal-v1.mjs.map +1 -0
- package/dist/keystone/strategy/keystone-strategy-factory.d.mts +15 -0
- package/dist/keystone/strategy/keystone-strategy-factory.d.mts.map +1 -0
- package/dist/keystone/strategy/keystone-strategy-factory.mjs +26 -0
- package/dist/keystone/strategy/keystone-strategy-factory.mjs.map +1 -0
- package/dist/keystone/strategy/keystone-strategy.d.mts +48 -0
- package/dist/keystone/strategy/keystone-strategy.d.mts.map +1 -0
- package/dist/keystone/strategy/keystone-strategy.mjs +14 -0
- package/dist/keystone/strategy/keystone-strategy.mjs.map +1 -0
- package/dist/witness/agent/agent-constants.d.mts +9 -0
- package/dist/witness/agent/agent-constants.d.mts.map +1 -1
- package/dist/witness/agent/agent-constants.mjs +9 -0
- package/dist/witness/agent/agent-constants.mjs.map +1 -1
- package/dist/witness/agent/agent-one-file.d.mts.map +1 -1
- package/dist/witness/agent/agent-one-file.mjs.map +1 -1
- package/dist/witness/agent/agent-types.d.mts +4 -4
- package/dist/witness/agent/agent-types.d.mts.map +1 -1
- package/dist/witness/agent/agent-types.mjs +2 -3
- package/dist/witness/agent/agent-types.mjs.map +1 -1
- package/package.json +1 -1
- package/src/agent-texts/common-agent-texts.mts +35 -37
- package/src/agent-texts/primary-agent-texts.mts +20 -29
- package/src/agent-texts/project-agent-texts.mts +27 -28
- package/src/agent-texts/project-child-text-agent-texts.mts +29 -29
- package/src/agent-texts/projects-agent-texts.mts +14 -14
- package/src/agent-texts/raw-agent-texts.mts +16 -16
- package/src/agent-texts/text-editor-agent-texts.mts +18 -18
- package/src/common/project/project-constants.mts +2 -0
- package/src/common/project/project-helper.mts +2 -3
- package/src/keystone/keystone-config-builder.mts +186 -0
- package/src/keystone/keystone-constants.mts +16 -0
- package/src/keystone/keystone-helpers.mts +207 -0
- package/src/keystone/keystone-service-v1.mts +725 -0
- package/src/keystone/keystone-service-v1.respec.mts +540 -0
- package/src/keystone/keystone-types.mts +295 -0
- package/src/keystone/strategy/hash-reveal-v1/hash-reveal-v1.mts +145 -0
- package/src/keystone/strategy/keystone-strategy-factory.mts +35 -0
- package/src/keystone/strategy/keystone-strategy.mts +71 -0
- package/src/witness/agent/agent-constants.mts +10 -0
- package/src/witness/agent/agent-one-file.mts +0 -1
- package/src/witness/agent/agent-types.mts +9 -7
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
import { extractErrorMsg, hash, pretty } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
2
|
+
import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
3
|
+
import { mut8 } from '@ibgib/ts-gib/dist/V1/transforms/mut8.mjs';
|
|
4
|
+
import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
|
|
5
|
+
import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
|
|
6
|
+
import { validateIbGibIntrinsically } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
|
|
7
|
+
import { GLOBAL_LOG_A_LOT } from '../constants.mjs';
|
|
8
|
+
import { KeystoneReplenishStrategy, KEYSTONE_REPLENISH_STRATEGY_VALID_VALUES, } from './keystone-types.mjs';
|
|
9
|
+
import { KeystoneStrategyFactory } from './strategy/keystone-strategy-factory.mjs';
|
|
10
|
+
import { KEYSTONE_ATOM, POOL_ID_REVOKE, VERB_REVOKE } from './keystone-constants.mjs';
|
|
11
|
+
import { addToBindingMap, getDeterministicRequirements, getKeystoneIb, removeFromBindingMap, } from './keystone-helpers.mjs';
|
|
12
|
+
import { getDependencyGraph } from '@ibgib/core-gib/dist/common/other/graph-helper.mjs';
|
|
13
|
+
const logalot = GLOBAL_LOG_A_LOT;
|
|
14
|
+
/**
|
|
15
|
+
* Facade for managing Keystone Identities.
|
|
16
|
+
*
|
|
17
|
+
* Handles Genesis, Authorized Evolution (Signing), and Validation.
|
|
18
|
+
*/
|
|
19
|
+
export class KeystoneService_V1 {
|
|
20
|
+
lc = `[${KeystoneService_V1.name}]`;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a brand new Keystone Identity Timeline.
|
|
23
|
+
*/
|
|
24
|
+
async genesis({ masterSecret, configs, metaspace, space, }) {
|
|
25
|
+
const lc = `${this.lc}[${this.genesis.name}]`;
|
|
26
|
+
try {
|
|
27
|
+
if (logalot) {
|
|
28
|
+
console.log(`${lc} starting... (I: c98ae8adbc5888dbf84c5aced7610b25)`);
|
|
29
|
+
}
|
|
30
|
+
const challengePools = [];
|
|
31
|
+
for (const config of configs) {
|
|
32
|
+
const strategy = KeystoneStrategyFactory.create({ config });
|
|
33
|
+
const poolSecret = await strategy.derivePoolSecret({ masterSecret });
|
|
34
|
+
const challenges = {};
|
|
35
|
+
const bindingMap = {}; // <--- New
|
|
36
|
+
const targetSize = config.behavior.size;
|
|
37
|
+
const timestamp = Date.now().toString();
|
|
38
|
+
for (let i = 0; i < targetSize; i++) {
|
|
39
|
+
const challengeId = await this.generateOpaqueChallengeId({
|
|
40
|
+
salt: config.salt, timestamp, index: i
|
|
41
|
+
});
|
|
42
|
+
const solution = await strategy.generateSolution({
|
|
43
|
+
poolSecret, poolId: config.salt, challengeId,
|
|
44
|
+
});
|
|
45
|
+
const challenge = await strategy.generateChallenge({ solution });
|
|
46
|
+
challenges[challengeId] = challenge;
|
|
47
|
+
// Populate Binding Map
|
|
48
|
+
addToBindingMap(bindingMap, challengeId);
|
|
49
|
+
}
|
|
50
|
+
// TODO: Check for empty buckets in bindingMap if config.targetBindingChars > 0?
|
|
51
|
+
// For V1, we assume statistical probability of SHA256 is sufficient for size > 50.
|
|
52
|
+
challengePools.push({
|
|
53
|
+
id: config.salt,
|
|
54
|
+
config,
|
|
55
|
+
challenges,
|
|
56
|
+
bindingMap
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const data = { challengePools, proofs: [] };
|
|
60
|
+
const keystoneIbGib = await this.createKeystoneIbGibImpl({ data, metaspace, space });
|
|
61
|
+
return keystoneIbGib;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
if (logalot) {
|
|
69
|
+
console.log(`${lc} complete.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Signs a claim using a hybrid selection strategy.
|
|
75
|
+
* Supports: Mandatory IDs (Alice) + Sequential (FIFO) + Random (Stochastic).
|
|
76
|
+
*/
|
|
77
|
+
async sign({ latestKeystone, masterSecret, claim, poolId, requiredChallengeIds = [], frameDetails, metaspace, space, }) {
|
|
78
|
+
const lc = `${this.lc}[${this.sign.name}]`;
|
|
79
|
+
try {
|
|
80
|
+
if (logalot) {
|
|
81
|
+
console.log(`${lc} starting... (I: 519e0810cce8647ce83bdb3b5019a825)`);
|
|
82
|
+
}
|
|
83
|
+
const prevData = latestKeystone.data;
|
|
84
|
+
if (prevData.revocationInfo) {
|
|
85
|
+
throw new Error(`keystone has been revoked (latestKeystone.data.revocationInfo is truthy). (E: 4f2198c39116d15c48ba191940316825)`);
|
|
86
|
+
}
|
|
87
|
+
let pool;
|
|
88
|
+
// ---------------------------------------------------------------
|
|
89
|
+
// 0. POOL RESOLUTION (Deterministic Mapping)
|
|
90
|
+
// ---------------------------------------------------------------
|
|
91
|
+
if (poolId) {
|
|
92
|
+
// Explicit selection
|
|
93
|
+
pool = prevData.challengePools.find(p => p.id === poolId);
|
|
94
|
+
if (!pool) {
|
|
95
|
+
throw new Error(`Pool not found: ${poolId} (E: genuuid)`);
|
|
96
|
+
}
|
|
97
|
+
// Enforce Policy on Explicit Selection
|
|
98
|
+
// FIX: Check length > 0. If empty, it's a default pool (allow all).
|
|
99
|
+
if (pool.config.allowedVerbs && pool.config.allowedVerbs.length > 0 && claim.verb) {
|
|
100
|
+
if (!pool.config.allowedVerbs.includes(claim.verb)) {
|
|
101
|
+
throw new Error(`Pool ${poolId} is not authorized for verb: ${claim.verb} (E: genuuid)`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Automatic Resolution based on Verb
|
|
107
|
+
if (!claim.verb) {
|
|
108
|
+
throw new Error(`Cannot auto-resolve pool without a verb in the claim. (E: genuuid)`);
|
|
109
|
+
}
|
|
110
|
+
// 1. Look for Specific Match
|
|
111
|
+
pool = prevData.challengePools.find(p => p.config.allowedVerbs && p.config.allowedVerbs.includes(claim.verb));
|
|
112
|
+
// 2. Look for General/Default (No restrictions)
|
|
113
|
+
if (!pool) {
|
|
114
|
+
pool = prevData.challengePools.find(p => !p.config.allowedVerbs || p.config.allowedVerbs.length === 0);
|
|
115
|
+
}
|
|
116
|
+
if (!pool) {
|
|
117
|
+
throw new Error(`No suitable pool found for verb: ${claim.verb} (E: genuuid)`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// 1. Get Deterministic Requirements (Demands -> Binding -> FIFO)
|
|
121
|
+
const { mandatoryIds, availableIds } = getDeterministicRequirements({
|
|
122
|
+
pool,
|
|
123
|
+
requiredChallengeIds,
|
|
124
|
+
targetAddr: claim.target
|
|
125
|
+
});
|
|
126
|
+
// 2. Stochastic Selection
|
|
127
|
+
const randomCount = pool.config.behavior.selectRandomly;
|
|
128
|
+
const randomIds = [];
|
|
129
|
+
if (randomCount > 0) {
|
|
130
|
+
if (availableIds.length < randomCount) {
|
|
131
|
+
throw new Error(`Insufficient challenges for random requirement. Need ${randomCount}, have ${availableIds.length}`);
|
|
132
|
+
}
|
|
133
|
+
// Shuffle & Pick
|
|
134
|
+
const shuffled = availableIds.sort(() => 0.5 - Math.random());
|
|
135
|
+
randomIds.push(...shuffled.slice(0, randomCount));
|
|
136
|
+
}
|
|
137
|
+
// 3. Combine & Solve
|
|
138
|
+
const finalSelectedIds = [...mandatoryIds, ...randomIds];
|
|
139
|
+
const strategy = KeystoneStrategyFactory.create({ config: pool.config });
|
|
140
|
+
const poolSecret = await strategy.derivePoolSecret({ masterSecret });
|
|
141
|
+
const solutions = [];
|
|
142
|
+
for (const id of finalSelectedIds) {
|
|
143
|
+
const solution = await strategy.generateSolution({
|
|
144
|
+
poolSecret, poolId: pool.id, challengeId: id,
|
|
145
|
+
});
|
|
146
|
+
solutions.push(solution);
|
|
147
|
+
}
|
|
148
|
+
// 4. Replenish
|
|
149
|
+
const nextPools = await this.applyReplenishmentStrategy({
|
|
150
|
+
prevPools: prevData.challengePools,
|
|
151
|
+
targetPoolId: pool.id,
|
|
152
|
+
consumedIds: finalSelectedIds,
|
|
153
|
+
masterSecret,
|
|
154
|
+
strategy,
|
|
155
|
+
config: pool.config
|
|
156
|
+
});
|
|
157
|
+
// 5. Build Proof (Include requiredChallengeIds!)
|
|
158
|
+
const proof = {
|
|
159
|
+
claim,
|
|
160
|
+
solutions,
|
|
161
|
+
requiredChallengeIds: requiredChallengeIds.length > 0 ? requiredChallengeIds : undefined
|
|
162
|
+
};
|
|
163
|
+
const newData = {
|
|
164
|
+
challengePools: nextPools,
|
|
165
|
+
proofs: [proof],
|
|
166
|
+
frameDetails,
|
|
167
|
+
// isTjp: false,
|
|
168
|
+
};
|
|
169
|
+
const newIbGib = await this.evolveKeystoneIbGibImpl({ prevIbGib: latestKeystone, newData, metaspace, space });
|
|
170
|
+
return newIbGib;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
if (logalot) {
|
|
178
|
+
console.log(`${lc} complete.`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Validates the transition from Prev -> Curr.
|
|
184
|
+
* Enforces Cryptography AND Behavioral Policy.
|
|
185
|
+
*
|
|
186
|
+
* @returns Array of validation error strings. Empty array means Valid.
|
|
187
|
+
*/
|
|
188
|
+
async validate({ currentIbGib, prevIbGib, }) {
|
|
189
|
+
const lc = `${this.lc}[${this.validate.name}]`;
|
|
190
|
+
const errors = [];
|
|
191
|
+
try {
|
|
192
|
+
if (!currentIbGib) {
|
|
193
|
+
throw new Error(`(UNEXPECTED) currentIbGib falsy? (E: 3c0f02655fa8279e386a079ebb604b25)`);
|
|
194
|
+
}
|
|
195
|
+
if (!prevIbGib) {
|
|
196
|
+
throw new Error(`(UNEXPECTED) prevIbGib falsy? (E: 0d07c812634d839c784f31b8848ba825)`);
|
|
197
|
+
}
|
|
198
|
+
validateIbGibIntrinsically;
|
|
199
|
+
getDependencyGraph;
|
|
200
|
+
const currData = currentIbGib.data;
|
|
201
|
+
const prevData = prevIbGib.data;
|
|
202
|
+
for (const proof of currData.proofs) {
|
|
203
|
+
if (proof.solutions.length === 0) {
|
|
204
|
+
errors.push(`Proof ${proof.id || 'unknown'} has no solutions.`);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
const poolId = proof.solutions[0].poolId;
|
|
208
|
+
const pool = prevData.challengePools.find(p => p.id === poolId);
|
|
209
|
+
if (!pool) {
|
|
210
|
+
errors.push(`Proof references unknown pool: ${poolId}`);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
// -----------------------------------------------------------
|
|
214
|
+
// 0. VALIDATE VERB AUTHORIZATION
|
|
215
|
+
// -----------------------------------------------------------
|
|
216
|
+
if (pool.config.allowedVerbs && pool.config.allowedVerbs.length > 0) {
|
|
217
|
+
if (!proof.claim.verb || !pool.config.allowedVerbs.includes(proof.claim.verb)) {
|
|
218
|
+
errors.push(`Policy Violation: Pool ${poolId} used for unauthorized verb ${proof.claim.verb}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// 1. Reconstruct Deterministic Requirements
|
|
222
|
+
const { mandatoryIds, availableIds } = getDeterministicRequirements({
|
|
223
|
+
pool,
|
|
224
|
+
requiredChallengeIds: proof.requiredChallengeIds,
|
|
225
|
+
targetAddr: proof.claim.target
|
|
226
|
+
});
|
|
227
|
+
const proofIds = new Set(proof.solutions.map(s => s.challengeId));
|
|
228
|
+
// 2. Verify Mandatory Compliance
|
|
229
|
+
for (const id of mandatoryIds) {
|
|
230
|
+
if (!proofIds.has(id)) {
|
|
231
|
+
errors.push(`Policy Violation: Missing mandatory challenge ${id}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// 3. Verify Stochastic Compliance
|
|
235
|
+
const randomCandidates = [...proofIds].filter(id => !mandatoryIds.has(id));
|
|
236
|
+
const requiredRandomCount = pool.config.behavior.selectRandomly;
|
|
237
|
+
if (randomCandidates.length < requiredRandomCount) {
|
|
238
|
+
errors.push(`Policy Violation: Insufficient random count. Need ${requiredRandomCount}, got ${randomCandidates.length}`);
|
|
239
|
+
}
|
|
240
|
+
// 4. Verify Validity (Existence & Double-Dip Check)
|
|
241
|
+
for (const id of randomCandidates) {
|
|
242
|
+
if (!availableIds.includes(id)) {
|
|
243
|
+
errors.push(`Policy Violation: ID ${id} is invalid or double-dipped.`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// 5. Verify Crypto
|
|
247
|
+
const strategy = KeystoneStrategyFactory.create({ config: pool.config });
|
|
248
|
+
for (const solution of proof.solutions) {
|
|
249
|
+
const challenge = pool.challenges[solution.challengeId];
|
|
250
|
+
if (!challenge) {
|
|
251
|
+
errors.push(`Crypto Violation: Challenge ${solution.challengeId} not found in pool.`);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
const isValid = await strategy.validateSolution({ solution, challenge });
|
|
255
|
+
if (!isValid) {
|
|
256
|
+
errors.push(`Crypto Violation: Solution for ${solution.challengeId} is invalid.`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Revocation Logic
|
|
262
|
+
if (currData.revocationInfo) {
|
|
263
|
+
const target = currData.revocationInfo.proof.claim.target;
|
|
264
|
+
const expectedTarget = getIbGibAddr({ ibGib: prevIbGib });
|
|
265
|
+
if (target !== expectedTarget) {
|
|
266
|
+
errors.push(`Revocation target mismatch. Expected ${expectedTarget}, got ${target}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return errors;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
273
|
+
throw error; // System errors still throw
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
if (logalot) {
|
|
277
|
+
console.log(`${lc} complete.`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Permanently revokes the Identity.
|
|
283
|
+
*
|
|
284
|
+
* Logic:
|
|
285
|
+
* 1. Locates the 'revoke' pool.
|
|
286
|
+
* 2. Consumes ALL available challenges in that pool (Scorched Earth).
|
|
287
|
+
* 3. Sets the revocationInfo on the new frame.
|
|
288
|
+
*/
|
|
289
|
+
async revoke({ latestKeystone, masterSecret, reason = "User initiated revocation", frameDetails, metaspace, space, }) {
|
|
290
|
+
const lc = `${this.lc}[${this.revoke.name}]`;
|
|
291
|
+
try {
|
|
292
|
+
const prevData = latestKeystone.data;
|
|
293
|
+
space ??= await metaspace.getLocalUserSpace({ lock: false });
|
|
294
|
+
if (!space) {
|
|
295
|
+
throw new Error(`(UNEXPECTED) space falsy and couldn't get default local user space from the metaspace? (E: 73c8bfc0e7383a540ea1d6b14b020125)`);
|
|
296
|
+
}
|
|
297
|
+
// 1. Find Revocation Pool
|
|
298
|
+
const pool = prevData.challengePools.find(p => p.id === POOL_ID_REVOKE);
|
|
299
|
+
if (!pool) {
|
|
300
|
+
throw new Error(`Revocation pool not found (E: 8c4f18c5461c1d601283108878c79825)`);
|
|
301
|
+
}
|
|
302
|
+
// 2. Select Challenges (Standard Policy, NOT ALL)
|
|
303
|
+
// We want to satisfy the security policy (e.g. 10 sequential + 10 random)
|
|
304
|
+
// without revealing the all of the keys in the pool.
|
|
305
|
+
const claim = {
|
|
306
|
+
verb: VERB_REVOKE,
|
|
307
|
+
target: getIbGibAddr({ ibGib: latestKeystone })
|
|
308
|
+
};
|
|
309
|
+
const { mandatoryIds, availableIds } = getDeterministicRequirements({
|
|
310
|
+
pool,
|
|
311
|
+
requiredChallengeIds: [],
|
|
312
|
+
targetAddr: claim.target
|
|
313
|
+
});
|
|
314
|
+
// Stochastic Selection
|
|
315
|
+
const randomCount = pool.config.behavior.selectRandomly;
|
|
316
|
+
const randomIds = [];
|
|
317
|
+
if (randomCount > 0) {
|
|
318
|
+
if (availableIds.length < randomCount) {
|
|
319
|
+
throw new Error(`Insufficient challenges. availableIds.length (${availableIds.length}) is less than required random count (${randomCount}) (E: b2e3570ab998dfdbab5fbdda1e43d825)`);
|
|
320
|
+
}
|
|
321
|
+
const shuffled = availableIds.sort(() => 0.5 - Math.random());
|
|
322
|
+
randomIds.push(...shuffled.slice(0, randomCount));
|
|
323
|
+
}
|
|
324
|
+
const selectedIds = [...mandatoryIds, ...randomIds];
|
|
325
|
+
if (selectedIds.length === 0) {
|
|
326
|
+
throw new Error(`Revocation policy selected 0 challenges? Check config for pool. id: ${pool.id}. pool.config: ${pretty(pool.config)} (E: 97e5a8356d241ae7b882db791cb1f825)`);
|
|
327
|
+
}
|
|
328
|
+
// 3. Solve Selected
|
|
329
|
+
const strategy = KeystoneStrategyFactory.create({ config: pool.config });
|
|
330
|
+
const poolSecret = await strategy.derivePoolSecret({ masterSecret });
|
|
331
|
+
const solutions = [];
|
|
332
|
+
for (const id of selectedIds) {
|
|
333
|
+
const solution = await strategy.generateSolution({
|
|
334
|
+
poolSecret, poolId: pool.id, challengeId: id,
|
|
335
|
+
});
|
|
336
|
+
solutions.push(solution);
|
|
337
|
+
}
|
|
338
|
+
// 4. The default revocation behavior is to delete all of the
|
|
339
|
+
// challenges so that the challenge pool is empty.
|
|
340
|
+
// see KeystoneReplenishStrategy.scorchedEarth
|
|
341
|
+
const nextPools = await this.applyReplenishmentStrategy({
|
|
342
|
+
prevPools: prevData.challengePools,
|
|
343
|
+
targetPoolId: pool.id,
|
|
344
|
+
consumedIds: selectedIds,
|
|
345
|
+
masterSecret,
|
|
346
|
+
strategy,
|
|
347
|
+
config: pool.config
|
|
348
|
+
});
|
|
349
|
+
// 5. Construct Proof
|
|
350
|
+
const proof = {
|
|
351
|
+
claim,
|
|
352
|
+
solutions,
|
|
353
|
+
};
|
|
354
|
+
const revocationInfo = { reason, proof };
|
|
355
|
+
const newData = {
|
|
356
|
+
challengePools: nextPools,
|
|
357
|
+
proofs: [proof],
|
|
358
|
+
revocationInfo,
|
|
359
|
+
frameDetails
|
|
360
|
+
};
|
|
361
|
+
return await this.evolveKeystoneIbGibImpl({
|
|
362
|
+
prevIbGib: latestKeystone,
|
|
363
|
+
newData,
|
|
364
|
+
metaspace,
|
|
365
|
+
space,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
370
|
+
throw error;
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
if (logalot) {
|
|
374
|
+
console.log(`${lc} complete.`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Generates an opaque, collision-resistant ID for a challenge.
|
|
380
|
+
* Hash(Salt + Timestamp + Index)
|
|
381
|
+
*/
|
|
382
|
+
async generateOpaqueChallengeId({ salt, timestamp, index }) {
|
|
383
|
+
// Use full SHA-256 hash, or slice it?
|
|
384
|
+
// User suggested substring is fine for pool uniqueness.
|
|
385
|
+
// Let's use first 16 chars of hex (64 bits) for brevity + safety.
|
|
386
|
+
const raw = await hash({ s: `${salt}${timestamp}${index}` });
|
|
387
|
+
return raw.substring(0, 16);
|
|
388
|
+
}
|
|
389
|
+
async applyReplenishmentStrategy({ prevPools, targetPoolId, consumedIds, masterSecret, strategy, config }) {
|
|
390
|
+
const newPools = JSON.parse(JSON.stringify(prevPools));
|
|
391
|
+
const pool = newPools.find((p) => p.id === targetPoolId);
|
|
392
|
+
const poolSecret = await strategy.derivePoolSecret({ masterSecret });
|
|
393
|
+
const timestamp = Date.now().toString();
|
|
394
|
+
const strategyType = config.behavior.replenish;
|
|
395
|
+
// Clean up Binding Map for consumed IDs
|
|
396
|
+
consumedIds.forEach(id => {
|
|
397
|
+
if (pool.bindingMap) {
|
|
398
|
+
removeFromBindingMap(pool.bindingMap, id);
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
if (strategyType === KeystoneReplenishStrategy.topUp) {
|
|
402
|
+
// Remove consumed
|
|
403
|
+
consumedIds.forEach(id => delete pool.challenges[id]);
|
|
404
|
+
// Add New
|
|
405
|
+
for (let i = 0; i < consumedIds.length; i++) {
|
|
406
|
+
const newId = await this.generateOpaqueChallengeId({
|
|
407
|
+
salt: config.salt, timestamp, index: i
|
|
408
|
+
});
|
|
409
|
+
// Collision Check? No. Better than this is the configuration
|
|
410
|
+
// that requires multiple challenges. So we should assume that a
|
|
411
|
+
// very small number of repeats is going to happen, but that the
|
|
412
|
+
// overall security remains intact due to multiple layers of
|
|
413
|
+
// challenges (multiple FIFO, Stochastic, Binding, etc.).
|
|
414
|
+
const solution = await strategy.generateSolution({
|
|
415
|
+
poolSecret, poolId: pool.id, challengeId: newId
|
|
416
|
+
});
|
|
417
|
+
pool.challenges[newId] = await strategy.generateChallenge({ solution });
|
|
418
|
+
// Update Binding Map
|
|
419
|
+
if (!pool.bindingMap) {
|
|
420
|
+
pool.bindingMap = {};
|
|
421
|
+
}
|
|
422
|
+
addToBindingMap(pool.bindingMap, newId);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
else if (strategyType === KeystoneReplenishStrategy.replaceAll) {
|
|
426
|
+
pool.challenges = {};
|
|
427
|
+
pool.bindingMap = {};
|
|
428
|
+
for (let i = 0; i < config.behavior.size; i++) {
|
|
429
|
+
const newId = await this.generateOpaqueChallengeId({
|
|
430
|
+
salt: config.salt, timestamp, index: i
|
|
431
|
+
});
|
|
432
|
+
const solution = await strategy.generateSolution({
|
|
433
|
+
poolSecret, poolId: pool.id, challengeId: newId
|
|
434
|
+
});
|
|
435
|
+
pool.challenges[newId] = await strategy.generateChallenge({ solution });
|
|
436
|
+
addToBindingMap(pool.bindingMap, newId);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
else if (strategyType === KeystoneReplenishStrategy.consume) {
|
|
440
|
+
consumedIds.forEach(id => delete pool.challenges[id]);
|
|
441
|
+
}
|
|
442
|
+
else if (strategyType === KeystoneReplenishStrategy.scorchedEarth) {
|
|
443
|
+
// SCORCHED EARTH: Delete EVERYTHING.
|
|
444
|
+
pool.challenges = {};
|
|
445
|
+
pool.bindingMap = {};
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
throw new Error(`Unknown replenish strategy: ${strategyType}. Valid list: ${pretty(KEYSTONE_REPLENISH_STRATEGY_VALID_VALUES)} (E: 0acf56f1e1486240080e11e8046d0825)`);
|
|
449
|
+
}
|
|
450
|
+
return newPools;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Creates a new keystone ibgib that has no dna and no past.
|
|
454
|
+
*/
|
|
455
|
+
async createKeystoneIbGibImpl({ data, metaspace, space, }) {
|
|
456
|
+
const lc = `${this.lc}[${this.createKeystoneIbGibImpl.name}]`;
|
|
457
|
+
try {
|
|
458
|
+
if (logalot) {
|
|
459
|
+
console.log(`${lc} starting... (I: 5e32389700e9899e788cbefacef7c825)`);
|
|
460
|
+
}
|
|
461
|
+
space ??= await metaspace.getLocalUserSpace({ lock: false });
|
|
462
|
+
if (!space) {
|
|
463
|
+
throw new Error(`(UNEXPECTED) space was falsy and we couldn't get default local user space from metaspace? (E: 9a6498cf16a8801f19ec376749742225)`);
|
|
464
|
+
}
|
|
465
|
+
// create the actual keystoneIbGib
|
|
466
|
+
const resFirstGen = await Factory_V1.firstGen({
|
|
467
|
+
parentIbGib: Factory_V1.primitive({ ib: KEYSTONE_ATOM }),
|
|
468
|
+
ib: await getKeystoneIb({ keystoneData: data }),
|
|
469
|
+
data,
|
|
470
|
+
// just showing rel8ns for completeness. in the future when we have
|
|
471
|
+
// composite keystones, this will probably change to a truthy value
|
|
472
|
+
// rel8ns: undefined,
|
|
473
|
+
dna: false,
|
|
474
|
+
nCounter: true,
|
|
475
|
+
tjp: {
|
|
476
|
+
timestamp: true,
|
|
477
|
+
uuid: true,
|
|
478
|
+
},
|
|
479
|
+
});
|
|
480
|
+
const keystoneIbGib = resFirstGen.newIbGib;
|
|
481
|
+
// at this point, the first gen result has an interstitial ibgib and
|
|
482
|
+
// its past is not empty. We need to change this so that the past is
|
|
483
|
+
// indeed empty. We then will drop the interstitial and re-calculate
|
|
484
|
+
// the gib (hash).
|
|
485
|
+
// console.error(`${lc} PART 1 - NOT AN ERROR. JUST A TEMP LOG MSG TO BE REMOVED. I WANT TO SEE WHAT THIS LOOKS LIKE IN DEBUGGING. specifically, I am looking at n & isTjp and whether we need to manually adjust them.\nkeystoneIbGib... (I: 2ce3b821ba739cd3e821625811315525)`);
|
|
486
|
+
// console.dir(keystoneIbGib);
|
|
487
|
+
// console.log(pretty(keystoneIbGib)); // uncomment this to see the actual full object (it's big though)
|
|
488
|
+
if (!keystoneIbGib.data) {
|
|
489
|
+
throw new Error(`(UNEXPECTED) keystoneIbGib.data falsy? We expect the data to be populated with real keystone data. (E: 38a358facdb89d16d81d48c8520d3d25)`);
|
|
490
|
+
}
|
|
491
|
+
if (!keystoneIbGib.rel8ns) {
|
|
492
|
+
throw new Error(`(UNEXPECTED) keystoneIbGib.rel8ns falsy? we expect the rel8ns to have ancestor and past. (E: 20cb7723dc33ae1ef808fe76d1bf4b25)`);
|
|
493
|
+
}
|
|
494
|
+
if (!keystoneIbGib.rel8ns.past || keystoneIbGib.rel8ns.past.length === 0) {
|
|
495
|
+
throw new Error(`(UNEXPECTED) keystoneIbGib.rel8ns.past falsy or empty? we expect the firstGen call to generate an interstitial ibgib that we will splice out. (E: 0fd8388d045ab9f37834c27d67e78825)`);
|
|
496
|
+
}
|
|
497
|
+
// reset n
|
|
498
|
+
keystoneIbGib.data.n = 0;
|
|
499
|
+
// reset tjp
|
|
500
|
+
keystoneIbGib.data.isTjp = true;
|
|
501
|
+
delete keystoneIbGib.rel8ns.tjp;
|
|
502
|
+
// reset past
|
|
503
|
+
delete keystoneIbGib.rel8ns.past;
|
|
504
|
+
// recalculate gib
|
|
505
|
+
keystoneIbGib.gib = await getGib({ ibGib: keystoneIbGib });
|
|
506
|
+
// console.error(`${lc} PART 2 - NOT AN ERROR. JUST A TEMP LOG MSG TO BE REMOVED. I WANT TO SEE WHAT THIS LOOKS LIKE IN DEBUGGING. specifically, I am looking at n & isTjp and whether we need to manually adjust them.\nkeystoneIbGib... (I: db9f181938184d9d9832fac8fa25a325)`);
|
|
507
|
+
// console.dir(keystoneIbGib);
|
|
508
|
+
// console.log(pretty(keystoneIbGib)); // uncomment this to see the actual full object (it's big though)
|
|
509
|
+
// save and register
|
|
510
|
+
await metaspace.put({ ibGib: keystoneIbGib, space, });
|
|
511
|
+
await metaspace.registerNewIbGib({ ibGib: keystoneIbGib, space, });
|
|
512
|
+
return keystoneIbGib;
|
|
513
|
+
}
|
|
514
|
+
catch (error) {
|
|
515
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
516
|
+
throw error;
|
|
517
|
+
}
|
|
518
|
+
finally {
|
|
519
|
+
if (logalot) {
|
|
520
|
+
console.log(`${lc} complete.`);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* for signing/revoking, the newData is entirely new per frame, i.e., we
|
|
526
|
+
* replace all relevant keystone information. IOW we are not just patching
|
|
527
|
+
* the data by adding or replacing keys, we are providing all pools, claim,
|
|
528
|
+
* solutions, required, and frameDetails. So this implementation is required
|
|
529
|
+
* to remove each of the old keys in the call to {@link mut8}.
|
|
530
|
+
*/
|
|
531
|
+
async evolveKeystoneIbGibImpl({ prevIbGib, newData, metaspace, space, }) {
|
|
532
|
+
const lc = `${this.lc}[${this.evolveKeystoneIbGibImpl.name}]`;
|
|
533
|
+
try {
|
|
534
|
+
if (logalot) {
|
|
535
|
+
console.log(`${lc} starting... (I: 8b10e8920f08b7842803665834cf8925)`);
|
|
536
|
+
}
|
|
537
|
+
if (!prevIbGib.data) {
|
|
538
|
+
throw new Error(`(UNEXPECTED) prevIbGib.data falsy? (E: 5e84875bf992c585b979e6c8ed5bf225)`);
|
|
539
|
+
}
|
|
540
|
+
if (prevIbGib.data.revocationInfo) {
|
|
541
|
+
throw new Error(`Keystone has already been revoked (prevIbGib.data.revocationInfo truthy), so we cannot evolve the keystone. Keystone addr: ${getIbGibAddr({ ibGib: prevIbGib })} (E: 45d7f846556829de6b2a701838c3f825)`);
|
|
542
|
+
}
|
|
543
|
+
const prevData = prevIbGib.data;
|
|
544
|
+
/**
|
|
545
|
+
* we want to completely replace these keys, so we will remove them
|
|
546
|
+
* from the data. This occurs first in the underlying mut8
|
|
547
|
+
* transform.
|
|
548
|
+
* @see {@link mut8}
|
|
549
|
+
*/
|
|
550
|
+
let dataToRemove = {};
|
|
551
|
+
if (prevData.proofs) {
|
|
552
|
+
dataToRemove.proofs = [];
|
|
553
|
+
}
|
|
554
|
+
if (prevData.challengePools) {
|
|
555
|
+
dataToRemove.challengePools = [];
|
|
556
|
+
}
|
|
557
|
+
if (prevData.frameDetails) {
|
|
558
|
+
dataToRemove.frameDetails = {};
|
|
559
|
+
}
|
|
560
|
+
if (Object.keys(dataToRemove).length === 0) {
|
|
561
|
+
dataToRemove = undefined;
|
|
562
|
+
}
|
|
563
|
+
const resMut8 = await mut8({
|
|
564
|
+
src: prevIbGib,
|
|
565
|
+
dataToRemove,
|
|
566
|
+
dataToAddOrPatch: newData,
|
|
567
|
+
// dna: false, // explicitly set to false just to show
|
|
568
|
+
nCounter: true,
|
|
569
|
+
});
|
|
570
|
+
if (!!resMut8.intermediateIbGibs) {
|
|
571
|
+
throw new Error(`(UNEXPECTED) resMut8.intermediateIbGibs truthy? I'm not sure if we expect there to be intermediateIbGibs, but I feel like we shouldn't. Pretty sure we shouldn't, definitely don't *want* them. (E: ba40d55d7c2d36d438c413886f148625)`);
|
|
572
|
+
}
|
|
573
|
+
if (!!resMut8.dnas) {
|
|
574
|
+
throw new Error(`(UNEXPECTED) resMut8.dnas truthy? We do not want dnas with keystones. (E: 49470513d018f97d28024f4e82da3b25)`);
|
|
575
|
+
}
|
|
576
|
+
const newKeystoneIbGib = resMut8.newIbGib;
|
|
577
|
+
// run validation here? I think we should probably at least for awhile
|
|
578
|
+
// --- VALIDATION UPDATE ---
|
|
579
|
+
const errors = await this.validate({
|
|
580
|
+
currentIbGib: newKeystoneIbGib,
|
|
581
|
+
prevIbGib,
|
|
582
|
+
metaspace,
|
|
583
|
+
space,
|
|
584
|
+
});
|
|
585
|
+
if (errors.length > 0) {
|
|
586
|
+
// console.error(`${lc} invalid keystone immediately after evolution. newKeystoneIbGib:\n${pretty(newKeystoneIbGib)} (E: 466a52230e7ece724fd119f39fbce825)`)
|
|
587
|
+
console.error(`${lc} Validation Failed:\n${errors.join('\n')}`);
|
|
588
|
+
throw new Error(`(UNEXPECTED) invalid keystone after we just evolved it? Errors: ${errors.join('; ')} (E: ae2c58406c1db7687879dfb89fc1f825)`);
|
|
589
|
+
}
|
|
590
|
+
// save and register
|
|
591
|
+
await metaspace.put({ ibGib: newKeystoneIbGib, space, });
|
|
592
|
+
await metaspace.registerNewIbGib({ ibGib: newKeystoneIbGib, space, });
|
|
593
|
+
return newKeystoneIbGib;
|
|
594
|
+
}
|
|
595
|
+
catch (error) {
|
|
596
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
597
|
+
throw error;
|
|
598
|
+
}
|
|
599
|
+
finally {
|
|
600
|
+
if (logalot) {
|
|
601
|
+
console.log(`${lc} complete.`);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
//# sourceMappingURL=keystone-service-v1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystone-service-v1.mjs","sourceRoot":"","sources":["../../src/keystone/keystone-service-v1.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystone-service-v1.respec.d.mts","sourceRoot":"","sources":["../../src/keystone/keystone-service-v1.respec.mts"],"names":[],"mappings":""}
|