@longarc/mdash 3.0.0
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/README.md +278 -0
- package/dist/checkpoint/engine.d.ts +208 -0
- package/dist/checkpoint/engine.d.ts.map +1 -0
- package/dist/checkpoint/engine.js +369 -0
- package/dist/checkpoint/engine.js.map +1 -0
- package/dist/context/engine.d.ts +197 -0
- package/dist/context/engine.d.ts.map +1 -0
- package/dist/context/engine.js +392 -0
- package/dist/context/engine.js.map +1 -0
- package/dist/core/commitment.d.ts +154 -0
- package/dist/core/commitment.d.ts.map +1 -0
- package/dist/core/commitment.js +305 -0
- package/dist/core/commitment.js.map +1 -0
- package/dist/core/crypto.d.ts +100 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +243 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/index.d.ts +121 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +234 -0
- package/dist/index.js.map +1 -0
- package/dist/mcca/engine.d.ts +260 -0
- package/dist/mcca/engine.d.ts.map +1 -0
- package/dist/mcca/engine.js +518 -0
- package/dist/mcca/engine.js.map +1 -0
- package/dist/physics/engine.d.ts +165 -0
- package/dist/physics/engine.d.ts.map +1 -0
- package/dist/physics/engine.js +371 -0
- package/dist/physics/engine.js.map +1 -0
- package/dist/tee/engine.d.ts +285 -0
- package/dist/tee/engine.d.ts.map +1 -0
- package/dist/tee/engine.js +505 -0
- package/dist/tee/engine.js.map +1 -0
- package/dist/warrant/engine.d.ts +195 -0
- package/dist/warrant/engine.d.ts.map +1 -0
- package/dist/warrant/engine.js +409 -0
- package/dist/warrant/engine.js.map +1 -0
- package/dist/zk/engine.d.ts +243 -0
- package/dist/zk/engine.d.ts.map +1 -0
- package/dist/zk/engine.js +489 -0
- package/dist/zk/engine.js.map +1 -0
- package/package.json +25 -0
- package/src/__tests__/phase1.test.ts +1120 -0
- package/src/__tests__/phase2-4.test.ts +898 -0
- package/src/checkpoint/engine.ts +532 -0
- package/src/context/engine.ts +598 -0
- package/src/core/commitment.ts +438 -0
- package/src/core/crypto.ts +304 -0
- package/src/index.ts +320 -0
- package/src/mcca/engine.ts +778 -0
- package/src/physics/engine.ts +563 -0
- package/src/tee/engine.ts +810 -0
- package/src/warrant/engine.ts +625 -0
- package/src/zk/engine.ts +730 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mdash v3.0 - L2 TEE Attestation Layer
|
|
3
|
+
*
|
|
4
|
+
* Hardware-rooted attestation for real-time compliance.
|
|
5
|
+
* Handles 99% of attestation needs with <10ms latency.
|
|
6
|
+
*
|
|
7
|
+
* Supported TEE Platforms:
|
|
8
|
+
* - AWS Nitro Enclaves (primary)
|
|
9
|
+
* - Intel SGX (secondary)
|
|
10
|
+
* - Simulated mode (development/testing)
|
|
11
|
+
*
|
|
12
|
+
* Architecture:
|
|
13
|
+
* - L1 provides instant commitment (<1ms)
|
|
14
|
+
* - L2 adds hardware attestation (<10ms)
|
|
15
|
+
* - L3 provides ZK proofs for disputes (async)
|
|
16
|
+
*
|
|
17
|
+
* @version 3.0.0
|
|
18
|
+
*/
|
|
19
|
+
import { generateTimestamp, sha256, sha256Object, hmacSeal, deriveKey, } from '../core/crypto.js';
|
|
20
|
+
export const PLATFORM_CAPABILITIES = {
|
|
21
|
+
nitro: {
|
|
22
|
+
memoryEncryption: true,
|
|
23
|
+
remoteAttestation: true,
|
|
24
|
+
keySealing: true,
|
|
25
|
+
pcrSupport: true,
|
|
26
|
+
quoteGeneration: false,
|
|
27
|
+
maxEnclaveSize: 8192, // 8GB
|
|
28
|
+
},
|
|
29
|
+
sgx: {
|
|
30
|
+
memoryEncryption: true,
|
|
31
|
+
remoteAttestation: true,
|
|
32
|
+
keySealing: true,
|
|
33
|
+
pcrSupport: false,
|
|
34
|
+
quoteGeneration: true,
|
|
35
|
+
maxEnclaveSize: 256, // 256MB EPC
|
|
36
|
+
},
|
|
37
|
+
simulated: {
|
|
38
|
+
memoryEncryption: false,
|
|
39
|
+
remoteAttestation: true, // Simulated
|
|
40
|
+
keySealing: true, // HMAC-based
|
|
41
|
+
pcrSupport: true, // Simulated
|
|
42
|
+
quoteGeneration: true, // Simulated
|
|
43
|
+
maxEnclaveSize: Infinity,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const DEFAULT_CONFIG = {
|
|
47
|
+
platform: 'simulated',
|
|
48
|
+
attestationTTL: 60 * 1000, // 1 minute
|
|
49
|
+
enableCache: true,
|
|
50
|
+
cacheTTL: 30 * 1000, // 30 seconds
|
|
51
|
+
rateLimit: 1000, // 1000/sec
|
|
52
|
+
nitro: {
|
|
53
|
+
pcrs: [0, 1, 2, 4, 8],
|
|
54
|
+
nsmDevice: '/dev/nsm',
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
class AttestationCache {
|
|
58
|
+
cache = new Map();
|
|
59
|
+
ttl;
|
|
60
|
+
constructor(ttlMs) {
|
|
61
|
+
this.ttl = ttlMs;
|
|
62
|
+
}
|
|
63
|
+
set(key, document) {
|
|
64
|
+
this.cache.set(key, {
|
|
65
|
+
document,
|
|
66
|
+
cachedAt: Date.now(),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
get(key) {
|
|
70
|
+
const entry = this.cache.get(key);
|
|
71
|
+
if (!entry)
|
|
72
|
+
return null;
|
|
73
|
+
if (Date.now() - entry.cachedAt > this.ttl) {
|
|
74
|
+
this.cache.delete(key);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return entry.document;
|
|
78
|
+
}
|
|
79
|
+
invalidate(key) {
|
|
80
|
+
this.cache.delete(key);
|
|
81
|
+
}
|
|
82
|
+
clear() {
|
|
83
|
+
this.cache.clear();
|
|
84
|
+
}
|
|
85
|
+
getStats() {
|
|
86
|
+
return {
|
|
87
|
+
size: this.cache.size,
|
|
88
|
+
hitRate: 0, // Would track in production
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// TEE ATTESTATION ENGINE
|
|
94
|
+
// ============================================================================
|
|
95
|
+
export class TEEAttestationEngine {
|
|
96
|
+
key = null;
|
|
97
|
+
config;
|
|
98
|
+
commitmentEngine;
|
|
99
|
+
cache;
|
|
100
|
+
documents = new Map();
|
|
101
|
+
// Rate limiting
|
|
102
|
+
requestCount = 0;
|
|
103
|
+
requestWindowStart = Date.now();
|
|
104
|
+
// Metrics
|
|
105
|
+
metrics = {
|
|
106
|
+
attestations: 0,
|
|
107
|
+
cacheHits: 0,
|
|
108
|
+
cacheMisses: 0,
|
|
109
|
+
failures: 0,
|
|
110
|
+
totalLatencyMs: 0,
|
|
111
|
+
};
|
|
112
|
+
constructor(commitmentEngine, config = {}) {
|
|
113
|
+
this.commitmentEngine = commitmentEngine;
|
|
114
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
115
|
+
this.cache = new AttestationCache(this.config.cacheTTL);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Initialize the TEE engine
|
|
119
|
+
*/
|
|
120
|
+
async initialize(sealKey) {
|
|
121
|
+
this.key = await deriveKey(sealKey);
|
|
122
|
+
// Platform-specific initialization
|
|
123
|
+
if (this.config.platform === 'nitro') {
|
|
124
|
+
await this.initializeNitro();
|
|
125
|
+
}
|
|
126
|
+
else if (this.config.platform === 'sgx') {
|
|
127
|
+
await this.initializeSGX();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Initialize AWS Nitro Enclaves
|
|
132
|
+
*/
|
|
133
|
+
async initializeNitro() {
|
|
134
|
+
// In production, this would:
|
|
135
|
+
// 1. Open /dev/nsm device
|
|
136
|
+
// 2. Verify enclave environment
|
|
137
|
+
// 3. Generate enclave key pair
|
|
138
|
+
console.log('[TEE] Nitro Enclaves initialized (simulated)');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Initialize Intel SGX
|
|
142
|
+
*/
|
|
143
|
+
async initializeSGX() {
|
|
144
|
+
// In production, this would:
|
|
145
|
+
// 1. Initialize SGX SDK
|
|
146
|
+
// 2. Load enclave
|
|
147
|
+
// 3. Establish IAS connection
|
|
148
|
+
console.log('[TEE] Intel SGX initialized (simulated)');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Attest data with hardware TEE
|
|
152
|
+
* Target: <10ms latency
|
|
153
|
+
*
|
|
154
|
+
* @param data - Data to attest
|
|
155
|
+
* @param commitmentId - L1 commitment reference
|
|
156
|
+
* @returns Attestation document
|
|
157
|
+
*/
|
|
158
|
+
async attest(data, commitmentId) {
|
|
159
|
+
if (!this.key) {
|
|
160
|
+
throw new Error('TEE engine not initialized');
|
|
161
|
+
}
|
|
162
|
+
const startTime = performance.now();
|
|
163
|
+
// Rate limiting
|
|
164
|
+
this.checkRateLimit();
|
|
165
|
+
// Generate cache key
|
|
166
|
+
const dataHash = await sha256Object(data);
|
|
167
|
+
const cacheKey = `${dataHash}:${commitmentId}`;
|
|
168
|
+
// Check cache
|
|
169
|
+
if (this.config.enableCache) {
|
|
170
|
+
const cached = this.cache.get(cacheKey);
|
|
171
|
+
if (cached && cached.status === 'verified') {
|
|
172
|
+
this.metrics.cacheHits++;
|
|
173
|
+
return cached;
|
|
174
|
+
}
|
|
175
|
+
this.metrics.cacheMisses++;
|
|
176
|
+
}
|
|
177
|
+
// Generate attestation based on platform
|
|
178
|
+
let platformAttestation;
|
|
179
|
+
let measurement;
|
|
180
|
+
switch (this.config.platform) {
|
|
181
|
+
case 'nitro':
|
|
182
|
+
const nitroResult = await this.attestNitro(data, dataHash);
|
|
183
|
+
platformAttestation = nitroResult.document;
|
|
184
|
+
measurement = nitroResult.measurement;
|
|
185
|
+
break;
|
|
186
|
+
case 'sgx':
|
|
187
|
+
const sgxResult = await this.attestSGX(data, dataHash);
|
|
188
|
+
platformAttestation = sgxResult.quote;
|
|
189
|
+
measurement = sgxResult.measurement;
|
|
190
|
+
break;
|
|
191
|
+
case 'simulated':
|
|
192
|
+
default:
|
|
193
|
+
const simResult = await this.attestSimulated(data, dataHash);
|
|
194
|
+
platformAttestation = simResult.attestation;
|
|
195
|
+
measurement = simResult.measurement;
|
|
196
|
+
}
|
|
197
|
+
const now = generateTimestamp();
|
|
198
|
+
const expiresAt = new Date(Date.now() + this.config.attestationTTL).toISOString();
|
|
199
|
+
// Create attestation document
|
|
200
|
+
const docData = {
|
|
201
|
+
id: `att-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
202
|
+
platform: this.config.platform,
|
|
203
|
+
timestamp: now,
|
|
204
|
+
measurement,
|
|
205
|
+
attested_data: dataHash,
|
|
206
|
+
platform_attestation: platformAttestation,
|
|
207
|
+
commitment_id: commitmentId,
|
|
208
|
+
status: 'verified',
|
|
209
|
+
expires_at: expiresAt,
|
|
210
|
+
};
|
|
211
|
+
// Seal the document
|
|
212
|
+
const seal = await hmacSeal(docData, this.key);
|
|
213
|
+
const document = {
|
|
214
|
+
...docData,
|
|
215
|
+
seal,
|
|
216
|
+
};
|
|
217
|
+
// Store and cache
|
|
218
|
+
this.documents.set(document.id, document);
|
|
219
|
+
if (this.config.enableCache) {
|
|
220
|
+
this.cache.set(cacheKey, document);
|
|
221
|
+
}
|
|
222
|
+
// Commit to L1
|
|
223
|
+
await this.commitmentEngine.commit(document, `tee:${document.id}`);
|
|
224
|
+
// Track metrics
|
|
225
|
+
const elapsed = performance.now() - startTime;
|
|
226
|
+
this.metrics.attestations++;
|
|
227
|
+
this.metrics.totalLatencyMs += elapsed;
|
|
228
|
+
if (elapsed > 10) {
|
|
229
|
+
console.warn(`[TEE] Attestation exceeded 10ms target: ${elapsed.toFixed(2)}ms`);
|
|
230
|
+
}
|
|
231
|
+
return document;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* AWS Nitro Enclaves attestation
|
|
235
|
+
*/
|
|
236
|
+
async attestNitro(data, dataHash) {
|
|
237
|
+
// In production, this would call /dev/nsm to get attestation document
|
|
238
|
+
// Simulating the NSM response structure
|
|
239
|
+
const nonce = crypto.randomUUID();
|
|
240
|
+
// Generate PCR values (simulated)
|
|
241
|
+
const pcrs = {};
|
|
242
|
+
for (const pcr of this.config.nitro?.pcrs || [0, 1, 2]) {
|
|
243
|
+
pcrs[pcr] = await sha256(`pcr-${pcr}-${dataHash}`);
|
|
244
|
+
}
|
|
245
|
+
// Module ID is the enclave image measurement
|
|
246
|
+
const moduleId = await sha256(`nitro-enclave-image-v3.0.0`);
|
|
247
|
+
const document = {
|
|
248
|
+
module_id: moduleId,
|
|
249
|
+
timestamp: Date.now(),
|
|
250
|
+
digest: 'SHA384',
|
|
251
|
+
pcrs,
|
|
252
|
+
certificate: 'simulated-nitro-certificate',
|
|
253
|
+
cabundle: ['simulated-ca-root'],
|
|
254
|
+
user_data: Buffer.from(dataHash).toString('base64').slice(0, 512),
|
|
255
|
+
nonce,
|
|
256
|
+
};
|
|
257
|
+
return {
|
|
258
|
+
document,
|
|
259
|
+
measurement: moduleId,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Intel SGX attestation
|
|
264
|
+
*/
|
|
265
|
+
async attestSGX(data, dataHash) {
|
|
266
|
+
// In production, this would:
|
|
267
|
+
// 1. Call sgx_create_report
|
|
268
|
+
// 2. Send to QE (Quoting Enclave)
|
|
269
|
+
// 3. Get signed quote
|
|
270
|
+
// 4. Optionally verify with IAS
|
|
271
|
+
const mrEnclave = await sha256(`sgx-enclave-v3.0.0`);
|
|
272
|
+
const mrSigner = await sha256(`long-arc-studios-signing-key`);
|
|
273
|
+
const quote = {
|
|
274
|
+
signature: await sha256(`sgx-quote-sig-${dataHash}-${Date.now()}`),
|
|
275
|
+
report_body: {
|
|
276
|
+
mr_enclave: mrEnclave,
|
|
277
|
+
mr_signer: mrSigner,
|
|
278
|
+
isv_prod_id: 1,
|
|
279
|
+
isv_svn: 1,
|
|
280
|
+
report_data: dataHash,
|
|
281
|
+
attributes: '0x0000000000000007', // Debug=0, Mode64=1, Init=1, Prov=1
|
|
282
|
+
},
|
|
283
|
+
qe_certification: {
|
|
284
|
+
type: 5, // PPID_RSA3072_ENCRYPTED
|
|
285
|
+
data: 'simulated-qe-cert-data',
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
return {
|
|
289
|
+
quote,
|
|
290
|
+
measurement: mrEnclave,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Simulated attestation (development/testing)
|
|
295
|
+
*/
|
|
296
|
+
async attestSimulated(data, dataHash) {
|
|
297
|
+
const measurement = await sha256(`simulated-enclave-v3.0.0`);
|
|
298
|
+
const nonce = crypto.randomUUID();
|
|
299
|
+
// Generate simulated PCRs
|
|
300
|
+
const pcrs = {};
|
|
301
|
+
for (let i = 0; i < 16; i++) {
|
|
302
|
+
pcrs[i] = await sha256(`sim-pcr-${i}-${dataHash}`);
|
|
303
|
+
}
|
|
304
|
+
const attestation = {
|
|
305
|
+
type: 'simulated',
|
|
306
|
+
measurement_hash: measurement,
|
|
307
|
+
nonce,
|
|
308
|
+
simulated_pcrs: pcrs,
|
|
309
|
+
signature: await sha256(`sim-sig-${dataHash}-${nonce}`),
|
|
310
|
+
};
|
|
311
|
+
return {
|
|
312
|
+
attestation,
|
|
313
|
+
measurement: measurement,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Verify an attestation document
|
|
318
|
+
*/
|
|
319
|
+
async verify(document) {
|
|
320
|
+
if (!this.key) {
|
|
321
|
+
throw new Error('TEE engine not initialized');
|
|
322
|
+
}
|
|
323
|
+
const errors = [];
|
|
324
|
+
// 1. Check expiry
|
|
325
|
+
if (new Date(document.expires_at) < new Date()) {
|
|
326
|
+
errors.push('Attestation document expired');
|
|
327
|
+
}
|
|
328
|
+
// 2. Verify seal
|
|
329
|
+
const docWithoutSeal = { ...document };
|
|
330
|
+
delete docWithoutSeal.seal;
|
|
331
|
+
const expectedSeal = await hmacSeal(docWithoutSeal, this.key);
|
|
332
|
+
if (expectedSeal !== document.seal) {
|
|
333
|
+
errors.push('Invalid document seal');
|
|
334
|
+
}
|
|
335
|
+
// 3. Verify L1 commitment exists
|
|
336
|
+
const commitment = this.commitmentEngine.getCommitment(`tee:${document.id}`);
|
|
337
|
+
if (!commitment) {
|
|
338
|
+
errors.push('L1 commitment not found');
|
|
339
|
+
}
|
|
340
|
+
// 4. Platform-specific verification
|
|
341
|
+
switch (document.platform) {
|
|
342
|
+
case 'nitro':
|
|
343
|
+
// Would verify certificate chain with AWS root
|
|
344
|
+
break;
|
|
345
|
+
case 'sgx':
|
|
346
|
+
// Would verify quote with IAS or DCAP
|
|
347
|
+
break;
|
|
348
|
+
case 'simulated':
|
|
349
|
+
// Just verify signature format
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
valid: errors.length === 0,
|
|
354
|
+
errors,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get attestation document by ID
|
|
359
|
+
*/
|
|
360
|
+
get(id) {
|
|
361
|
+
return this.documents.get(id) || null;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Rate limiting check
|
|
365
|
+
*/
|
|
366
|
+
checkRateLimit() {
|
|
367
|
+
const now = Date.now();
|
|
368
|
+
// Reset window every second
|
|
369
|
+
if (now - this.requestWindowStart > 1000) {
|
|
370
|
+
this.requestCount = 0;
|
|
371
|
+
this.requestWindowStart = now;
|
|
372
|
+
}
|
|
373
|
+
this.requestCount++;
|
|
374
|
+
if (this.requestCount > this.config.rateLimit) {
|
|
375
|
+
throw new Error('TEE attestation rate limit exceeded');
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Get platform capabilities
|
|
380
|
+
*/
|
|
381
|
+
getCapabilities() {
|
|
382
|
+
return PLATFORM_CAPABILITIES[this.config.platform];
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Get engine statistics
|
|
386
|
+
*/
|
|
387
|
+
getStats() {
|
|
388
|
+
return {
|
|
389
|
+
platform: this.config.platform,
|
|
390
|
+
attestations: this.metrics.attestations,
|
|
391
|
+
cacheHits: this.metrics.cacheHits,
|
|
392
|
+
cacheMisses: this.metrics.cacheMisses,
|
|
393
|
+
failures: this.metrics.failures,
|
|
394
|
+
avgLatencyMs: this.metrics.attestations > 0
|
|
395
|
+
? this.metrics.totalLatencyMs / this.metrics.attestations
|
|
396
|
+
: 0,
|
|
397
|
+
cacheStats: this.cache.getStats(),
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// ============================================================================
|
|
402
|
+
// TEE VERIFIER (Remote Attestation Verification)
|
|
403
|
+
// ============================================================================
|
|
404
|
+
/**
|
|
405
|
+
* Verifies attestation documents from external sources
|
|
406
|
+
* Used for cross-enclave or remote attestation scenarios
|
|
407
|
+
*/
|
|
408
|
+
export class TEEVerifier {
|
|
409
|
+
trustedMeasurements = new Set();
|
|
410
|
+
trustedSigners = new Set();
|
|
411
|
+
/**
|
|
412
|
+
* Add a trusted enclave measurement
|
|
413
|
+
*/
|
|
414
|
+
trustMeasurement(measurement) {
|
|
415
|
+
this.trustedMeasurements.add(measurement);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Add a trusted signer (for SGX)
|
|
419
|
+
*/
|
|
420
|
+
trustSigner(signer) {
|
|
421
|
+
this.trustedSigners.add(signer);
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Verify remote attestation
|
|
425
|
+
*/
|
|
426
|
+
async verifyRemote(document) {
|
|
427
|
+
const reasons = [];
|
|
428
|
+
// Check measurement is trusted
|
|
429
|
+
if (!this.trustedMeasurements.has(document.measurement)) {
|
|
430
|
+
reasons.push(`Unknown enclave measurement: ${document.measurement}`);
|
|
431
|
+
}
|
|
432
|
+
// Platform-specific checks
|
|
433
|
+
if (document.platform === 'sgx') {
|
|
434
|
+
const quote = document.platform_attestation;
|
|
435
|
+
if (!this.trustedSigners.has(quote.report_body.mr_signer)) {
|
|
436
|
+
reasons.push(`Unknown signer: ${quote.report_body.mr_signer}`);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
// Check expiry
|
|
440
|
+
if (new Date(document.expires_at) < new Date()) {
|
|
441
|
+
reasons.push('Document expired');
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
trusted: reasons.length === 0,
|
|
445
|
+
reasons,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// ============================================================================
|
|
450
|
+
// ATTESTATION BRIDGE (L1 <-> L2)
|
|
451
|
+
// ============================================================================
|
|
452
|
+
/**
|
|
453
|
+
* Bridges L1 commitments with L2 attestations
|
|
454
|
+
* Ensures cryptographic continuity between layers
|
|
455
|
+
*/
|
|
456
|
+
export class AttestationBridge {
|
|
457
|
+
teeEngine;
|
|
458
|
+
commitmentEngine;
|
|
459
|
+
constructor(teeEngine, commitmentEngine) {
|
|
460
|
+
this.teeEngine = teeEngine;
|
|
461
|
+
this.commitmentEngine = commitmentEngine;
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Commit and attest in one operation
|
|
465
|
+
* Returns both L1 seal and L2 attestation
|
|
466
|
+
*/
|
|
467
|
+
async commitAndAttest(data, operationId) {
|
|
468
|
+
// L1: Commit first (<1ms)
|
|
469
|
+
const commitment = await this.commitmentEngine.commit(data, operationId);
|
|
470
|
+
// L2: Attest with reference to L1 (<10ms)
|
|
471
|
+
const attestation = await this.teeEngine.attest(data, operationId);
|
|
472
|
+
return {
|
|
473
|
+
commitment,
|
|
474
|
+
attestation,
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Verify both layers
|
|
479
|
+
*/
|
|
480
|
+
async verifyBoth(commitment, attestation) {
|
|
481
|
+
const errors = [];
|
|
482
|
+
// Verify L1
|
|
483
|
+
const l1Result = await this.commitmentEngine.verify(commitment);
|
|
484
|
+
if (!l1Result) {
|
|
485
|
+
errors.push('L1 commitment verification failed');
|
|
486
|
+
}
|
|
487
|
+
// Verify L2
|
|
488
|
+
const l2Result = await this.teeEngine.verify(attestation);
|
|
489
|
+
if (!l2Result.valid) {
|
|
490
|
+
errors.push(...l2Result.errors);
|
|
491
|
+
}
|
|
492
|
+
// Cross-layer verification
|
|
493
|
+
const crossLayerValid = attestation.commitment_id === commitment.operationId;
|
|
494
|
+
if (!crossLayerValid) {
|
|
495
|
+
errors.push('Cross-layer reference mismatch');
|
|
496
|
+
}
|
|
497
|
+
return {
|
|
498
|
+
l1Valid: l1Result,
|
|
499
|
+
l2Valid: l2Result.valid,
|
|
500
|
+
crossLayerValid,
|
|
501
|
+
errors,
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/tee/engine.ts"],"names":[],"mappings":"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"}
|