@antseed/antseed-verifier 0.1.0 → 0.1.1

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 (67) hide show
  1. package/README.md +5 -3
  2. package/dist/antseed-node-types.d.ts +6 -0
  3. package/dist/antseed-node-types.d.ts.map +1 -1
  4. package/dist/approved-node-measurements.d.ts +33 -0
  5. package/dist/approved-node-measurements.d.ts.map +1 -0
  6. package/dist/approved-node-measurements.js +42 -0
  7. package/dist/approved-node-measurements.js.map +1 -0
  8. package/dist/approved-seller-images.d.ts +14 -0
  9. package/dist/approved-seller-images.d.ts.map +1 -0
  10. package/dist/approved-seller-images.js +7 -0
  11. package/dist/approved-seller-images.js.map +1 -0
  12. package/dist/capability.d.ts +5 -0
  13. package/dist/capability.d.ts.map +1 -1
  14. package/dist/capability.js.map +1 -1
  15. package/dist/caps/tee-tdx.d.ts +43 -17
  16. package/dist/caps/tee-tdx.d.ts.map +1 -1
  17. package/dist/caps/tee-tdx.js +158 -35
  18. package/dist/caps/tee-tdx.js.map +1 -1
  19. package/dist/collect/confidential-space.d.ts +12 -0
  20. package/dist/collect/confidential-space.d.ts.map +1 -0
  21. package/dist/collect/confidential-space.js +22 -0
  22. package/dist/collect/confidential-space.js.map +1 -0
  23. package/dist/collect/dstack.d.ts +10 -0
  24. package/dist/collect/dstack.d.ts.map +1 -1
  25. package/dist/collect/dstack.js +31 -26
  26. package/dist/collect/dstack.js.map +1 -1
  27. package/dist/collect/unix-http.d.ts +9 -0
  28. package/dist/collect/unix-http.d.ts.map +1 -0
  29. package/dist/collect/unix-http.js +21 -0
  30. package/dist/collect/unix-http.js.map +1 -0
  31. package/dist/confidential-space.d.ts +49 -0
  32. package/dist/confidential-space.d.ts.map +1 -0
  33. package/dist/confidential-space.js +93 -0
  34. package/dist/confidential-space.js.map +1 -0
  35. package/dist/dstack-app-compose.d.ts +36 -0
  36. package/dist/dstack-app-compose.d.ts.map +1 -0
  37. package/dist/dstack-app-compose.js +113 -0
  38. package/dist/dstack-app-compose.js.map +1 -0
  39. package/dist/dstack-event-log.d.ts +42 -0
  40. package/dist/dstack-event-log.d.ts.map +1 -0
  41. package/dist/dstack-event-log.js +87 -0
  42. package/dist/dstack-event-log.js.map +1 -0
  43. package/dist/prover.d.ts.map +1 -1
  44. package/dist/prover.js +17 -4
  45. package/dist/prover.js.map +1 -1
  46. package/dist/report-data.d.ts +3 -1
  47. package/dist/report-data.d.ts.map +1 -1
  48. package/dist/report-data.js +1 -0
  49. package/dist/report-data.js.map +1 -1
  50. package/dist/seller-config-rules.d.ts +43 -0
  51. package/dist/seller-config-rules.d.ts.map +1 -0
  52. package/dist/seller-config-rules.js +130 -0
  53. package/dist/seller-config-rules.js.map +1 -0
  54. package/dist/shared.d.ts +16 -2
  55. package/dist/shared.d.ts.map +1 -1
  56. package/dist/shared.js +21 -5
  57. package/dist/shared.js.map +1 -1
  58. package/dist/tcb-policy.d.ts +8 -0
  59. package/dist/tcb-policy.d.ts.map +1 -0
  60. package/dist/tcb-policy.js +14 -0
  61. package/dist/tcb-policy.js.map +1 -0
  62. package/dist/tee-provider-plugins.json +7 -0
  63. package/dist/verifier.d.ts +2 -1
  64. package/dist/verifier.d.ts.map +1 -1
  65. package/dist/verifier.js +10 -7
  66. package/dist/verifier.js.map +1 -1
  67. package/package.json +1 -1
@@ -1,8 +1,13 @@
1
1
  import { claimId, computeReportData } from '../shared.js';
2
2
  import { generateTdxQuote } from '../collect/configfs.js';
3
- import { generateDstackQuote } from '../collect/dstack.js';
3
+ import { generateDstackAttestation } from '../collect/dstack.js';
4
+ import { composeHashFromEventLog, parseDstackEventLog, rtmr3Events } from '../dstack-event-log.js';
4
5
  import { collectViaHttp, collectTdxAndPubkey } from '../collect/http.js';
5
6
  import { antseedRdV1, verifyReportData } from '../report-data.js';
7
+ import { checkAppCompose } from '../dstack-app-compose.js';
8
+ import { checkConfidentialSpaceClaims, confidentialSpaceNonce, defaultVerifyConfidentialSpaceToken, } from '../confidential-space.js';
9
+ import { isTcbAcceptable } from '../tcb-policy.js';
10
+ import { generateConfidentialSpaceToken } from '../collect/confidential-space.js';
6
11
  /**
7
12
  * A genuine-Intel-TDX capability: proves a party runs in a genuine Intel TDX enclave.
8
13
  * It DCAP-verifies the quote (ECDSA sig + PCK chain to Intel's root + TCB), requires an
@@ -19,6 +24,11 @@ import { antseedRdV1, verifyReportData } from '../report-data.js';
19
24
  export const NODE_TEE_CAP_ID = 'seller-node-tee-genuine';
20
25
  /** The downstream inference provider's TEE (quote fetched from the provider's evidence route). */
21
26
  export const PROVIDER_TEE_CAP_ID = 'seller-provider-tee-genuine';
27
+ /**
28
+ * Reported with a passing seller node claim: the https origins its measured config forwards
29
+ * prompts to, comma-separated. It describes the node claim and has no evidence of its own.
30
+ */
31
+ export const NODE_UPSTREAMS_CLAIM = 'seller-node-upstreams';
22
32
  /**
23
33
  * Config-key convention: each TDX cap reads its own collector settings from `<capId>.<key>`
24
34
  * in the shared config map, so the node cap and the provider cap never collide. It lives in
@@ -27,29 +37,29 @@ export const PROVIDER_TEE_CAP_ID = 'seller-provider-tee-genuine';
27
37
  export function tdxConfigKey(id, key) {
28
38
  return `${id}.${key}`;
29
39
  }
30
- /**
31
- * TCB acceptance. UpToDate is always genuine hardware. SWHardeningNeeded flags guest-side
32
- * software mitigations only — not a hardware compromise — and is accepted by default (real
33
- * GCP TDX quotes often report it). Set ANTSEED_VERIFIER_STRICT_TCB=true to require UpToDate
34
- * exactly. Anything else (OutOfDate, Revoked, Unknown, ...) is rejected.
35
- */
36
- export function isTcbAcceptable(status) {
37
- if (status === 'UpToDate')
38
- return true;
39
- if (status === 'SWHardeningNeeded')
40
- return process.env['ANTSEED_VERIFIER_STRICT_TCB'] !== 'true';
41
- return false;
40
+ export { isTcbAcceptable } from '../tcb-policy.js';
41
+ /** Node evidence from Google Confidential Space: Google's signed attestation token in place of a quote. */
42
+ export function encodeConfidentialSpaceEvidence(token) {
43
+ return new TextEncoder().encode(JSON.stringify({ confidentialSpaceToken: token }));
42
44
  }
43
- export function encodeTeeTdxEvidence(quote, collateral, binding) {
45
+ export function encodeTeeTdxEvidence(quote, collateral, binding, dstack) {
44
46
  const blob = {
45
47
  quote: Buffer.from(quote).toString('base64'),
46
48
  ...(collateral !== undefined ? { collateral } : {}),
47
49
  ...(binding !== undefined ? { binding } : {}),
50
+ ...(dstack?.eventLog !== undefined ? { eventLog: dstack.eventLog } : {}),
51
+ ...(dstack?.appCompose !== undefined ? { appCompose: dstack.appCompose } : {}),
48
52
  };
49
53
  return new TextEncoder().encode(JSON.stringify(blob));
50
54
  }
51
55
  export function decodeTeeTdxEvidence(bytes) {
52
- const parsed = JSON.parse(new TextDecoder().decode(bytes));
56
+ return decodeTeeTdxEnvelope(JSON.parse(new TextDecoder().decode(bytes)));
57
+ }
58
+ /** Validate a parsed tee-tdx evidence envelope. */
59
+ function decodeTeeTdxEnvelope(envelope) {
60
+ if (!envelope || typeof envelope !== 'object')
61
+ throw new Error('tee-tdx evidence is not an object');
62
+ const parsed = envelope;
53
63
  if (typeof parsed.quote !== 'string' || parsed.quote.length === 0) {
54
64
  throw new Error('tee-tdx evidence missing "quote"');
55
65
  }
@@ -57,10 +67,26 @@ export function decodeTeeTdxEvidence(bytes) {
57
67
  if (quote.length === 0) {
58
68
  throw new Error('tee-tdx evidence "quote" is not valid base64');
59
69
  }
70
+ let eventLog;
71
+ if (parsed.eventLog !== undefined) {
72
+ try {
73
+ if (!Array.isArray(parsed.eventLog))
74
+ throw new Error('not an array');
75
+ eventLog = parseDstackEventLog(parsed.eventLog);
76
+ }
77
+ catch {
78
+ throw new Error('tee-tdx evidence "eventLog" is not a dstack event log');
79
+ }
80
+ }
81
+ if (parsed.appCompose !== undefined && typeof parsed.appCompose !== 'string') {
82
+ throw new Error('tee-tdx evidence "appCompose" is not a string');
83
+ }
60
84
  return {
61
85
  quote,
62
86
  ...(parsed.collateral !== undefined ? { collateral: parsed.collateral } : {}),
63
87
  ...(parsed.binding !== undefined ? { binding: parsed.binding } : {}),
88
+ ...(eventLog !== undefined ? { eventLog } : {}),
89
+ ...(parsed.appCompose !== undefined ? { appCompose: parsed.appCompose } : {}),
64
90
  };
65
91
  }
66
92
  /**
@@ -96,20 +122,41 @@ export const defaultVerifyQuote = async (quote, collateral, nowSecs) => {
96
122
  * decode or verify errors are captured in `error`, so dependent caps still see the raw
97
123
  * `quoteEvidence` bytes (seller-bound only needs those to bind identity to the quote).
98
124
  */
99
- export async function verifyTdxEvidence(evidence, verifyQuote, nowSecs) {
125
+ export async function verifyTdxEvidence(evidence, verifyQuote, nowSecs, verifyConfidentialSpaceToken = defaultVerifyConfidentialSpaceToken) {
126
+ let envelope;
127
+ try {
128
+ envelope = JSON.parse(new TextDecoder().decode(evidence));
129
+ }
130
+ catch (err) {
131
+ return { quoteEvidence: evidence, status: '', td: null, error: `malformed tee-tdx evidence: ${msg(err)}` };
132
+ }
133
+ const token = envelope && typeof envelope === 'object' ? envelope.confidentialSpaceToken : undefined;
134
+ if (typeof token === 'string') {
135
+ try {
136
+ return { quoteEvidence: evidence, status: '', td: null, confidentialSpace: await verifyConfidentialSpaceToken(token) };
137
+ }
138
+ catch (err) {
139
+ return { quoteEvidence: evidence, status: '', td: null, error: `Confidential Space token verification failed: ${msg(err)}` };
140
+ }
141
+ }
100
142
  let quote;
101
143
  let collateral;
102
144
  let binding;
145
+ let eventLog;
146
+ let appCompose;
103
147
  try {
104
148
  ;
105
- ({ quote, collateral, binding } = decodeTeeTdxEvidence(evidence));
149
+ ({ quote, collateral, binding, eventLog, appCompose } = decodeTeeTdxEnvelope(envelope));
106
150
  }
107
151
  catch (err) {
108
152
  return { quoteEvidence: evidence, status: '', td: null, error: `malformed tee-tdx evidence: ${msg(err)}` };
109
153
  }
110
154
  try {
111
155
  const raw = await verifyQuote(quote, collateral, nowSecs);
112
- return { quoteEvidence: evidence, status: raw.status, td: raw.td, ...(binding ? { binding } : {}) };
156
+ return {
157
+ quoteEvidence: evidence, status: raw.status, td: raw.td,
158
+ ...(binding ? { binding } : {}), ...(eventLog !== undefined ? { eventLog } : {}), ...(appCompose !== undefined ? { appCompose } : {}),
159
+ };
113
160
  }
114
161
  catch (err) {
115
162
  return { quoteEvidence: evidence, status: '', td: null, ...(binding ? { binding } : {}), error: `quote verification failed: ${msg(err)}` };
@@ -121,12 +168,52 @@ function msg(err) {
121
168
  function hex(b) {
122
169
  return Buffer.from(b).toString('hex');
123
170
  }
171
+ /**
172
+ * The approved build this quote runs: MRTD and RTMR0-2 must be an approved dstack OS, and the app
173
+ * compose measured into RTMR3 (replayed from the event log) must run an approved seller image under
174
+ * the compose rules. Returns the OS, image and upstreams, or why the build is not approved.
175
+ */
176
+ function approvedBuild(approved, td, eventLog, appCompose) {
177
+ const base = [td.mrTd, td.rtMr0, td.rtMr1, td.rtMr2].map(hex);
178
+ const os = approved.os.find((m) => [m.mrtd, m.rtmr0, m.rtmr1, m.rtmr2].every((v, i) => v.toLowerCase() === base[i]));
179
+ if (!os)
180
+ return { error: `the CVM OS (MRTD ${base[0].slice(0, 16)}…) is not an approved dstack release` };
181
+ if (eventLog === undefined)
182
+ return { error: 'seller sent no dstack event log' };
183
+ const replay = composeHashFromEventLog(eventLog, td.rtMr3);
184
+ if ('error' in replay)
185
+ return replay;
186
+ if (appCompose === undefined)
187
+ return { error: 'seller sent no app compose' };
188
+ const app = checkAppCompose(appCompose, replay.composeHash, approved.images);
189
+ return 'error' in app ? app : { os, ...app };
190
+ }
191
+ /** The node claim (and its upstreams) for Google Confidential Space evidence: a verified token, checked for this round. */
192
+ function verifyConfidentialSpaceNode(claim, input, claims) {
193
+ const channelBinding = input.channelBinding;
194
+ if (!channelBinding) {
195
+ return { claim, ok: false, detail: 'no connection binding: TEE attestation needs an encrypted TCP connection to the seller' };
196
+ }
197
+ // The token's nonce commits to this round's antseed-rd-v1 report data, connection included.
198
+ const nonce = confidentialSpaceNonce(computeReportData(input.nonce, input.peerId, channelBinding));
199
+ const images = input.policy?.images ?? [];
200
+ const checked = checkConfidentialSpaceClaims(claims, nonce, images);
201
+ if ('error' in checked) {
202
+ return { claim, ok: false, detail: `Google Confidential Space attestation, but not an approved TEE seller build: ${checked.error}` };
203
+ }
204
+ const origins = [...new Set(checked.upstreams.map((u) => u.origin))].sort();
205
+ return [
206
+ { claim, ok: true, detail: `Intel TDX on Google Confidential Space (attested by Google); Antseed TEE seller image ${checked.image.version}, bound to this connection; bound to this round (${antseedRdV1.id})` },
207
+ { claim: claimId(NODE_UPSTREAMS_CLAIM), ok: true, detail: origins.join(', ') },
208
+ ];
209
+ }
124
210
  /**
125
211
  * Mint one TDX capability. `id` names the target (node or provider); `defaultSource`
126
212
  * is the collector used when config supplies no `<id>.source` override:
127
- * 'configfs': self-hosted TDX minted locally via configfs-tsm; report_data = antseed-rd-v1 {peerId}
213
+ * 'configfs': self-hosted TDX minted locally via configfs-tsm; report_data = antseed-rd-v1
214
+ * {peerId, channelBinding} for seller-node attestations
128
215
  * 'dstack' : self-hosted TDX minted via the dstack guest-agent socket (Phala CVMs, where
129
- * configfs-tsm is absent); same antseed-rd-v1 {peerId} report_data as configfs
216
+ * configfs-tsm is absent); the same binding, plus the event log and app compose
130
217
  * 'http' : a pre-made quote fetched from a config-supplied evidence route ({nonce} hex)
131
218
  * verify reads this cap's own parsed quote (the orchestrator DCAP-verifies each cap's
132
219
  * own evidence entry independently). collect throws when its source is unavailable
@@ -144,18 +231,38 @@ export function makeTdxCap(id, defaultSource, opts) {
144
231
  return { claim, ok: false, detail: 'TDX quote was not verified' };
145
232
  if (p.error)
146
233
  return { claim, ok: false, detail: p.error };
234
+ if (p.confidentialSpace) {
235
+ if (!opts?.sellerNode)
236
+ return { claim, ok: false, detail: 'a Confidential Space token is only accepted for the seller node' };
237
+ return verifyConfidentialSpaceNode(claim, input, p.confidentialSpace);
238
+ }
147
239
  if (!isTcbAcceptable(p.status))
148
240
  return { claim, ok: false, detail: `TCB status not acceptable: ${p.status || 'unknown'}` };
149
241
  if (!p.td)
150
242
  return { claim, ok: false, detail: 'quote is not an Intel TDX quote' };
151
243
  if (p.td.debug === true)
152
244
  return { claim, ok: false, detail: 'TDX debug mode is enabled' };
153
- // Bind report_data to this round: the node cap to its {peerId} identity, a provider cap
154
- // to whatever frozen scheme its evidence declares. Fail-closed — a borrowed, relayed, or
245
+ // The seller node must also run an approved build and answer on the buyer's own connection:
246
+ // the quote commits to that connection's session hash, so it was minted by the approved
247
+ // build terminating this connection, not relayed from another machine.
248
+ let build;
249
+ const channelBinding = input.channelBinding;
250
+ if (opts?.sellerNode) {
251
+ if (!channelBinding) {
252
+ return { claim, ok: false, detail: 'no connection binding: TEE attestation needs an encrypted TCP connection to the seller' };
253
+ }
254
+ const match = approvedBuild(input.policy ?? { os: [], images: [] }, p.td, p.eventLog, p.appCompose);
255
+ if ('error' in match) {
256
+ return { claim, ok: false, detail: `genuine Intel TDX hardware, but not an approved TEE seller build: ${match.error}` };
257
+ }
258
+ build = match;
259
+ }
260
+ // Bind report_data to this round: the node cap to its {peerId, channelBinding}, a provider
261
+ // cap to whatever frozen scheme its evidence declares. Fail-closed — a borrowed, relayed, or
155
262
  // stale quote cannot match a fresh-nonce commitment. A provider quote with no declared
156
263
  // scheme still passes on genuineness, but its detail must disclose that freshness was not proven.
157
- const binding = opts?.bindNoncePeerId
158
- ? { scheme: antseedRdV1.id, ingredients: { peerId: input.peerId } }
264
+ const binding = opts?.sellerNode
265
+ ? { scheme: antseedRdV1.id, ingredients: { peerId: input.peerId, ...(channelBinding ? { channelBinding } : {}) } }
159
266
  : p.binding;
160
267
  if (binding) {
161
268
  const bad = verifyReportData(binding.scheme, p.td.reportData, input.nonce, binding.ingredients);
@@ -165,22 +272,35 @@ export function makeTdxCap(id, defaultSource, opts) {
165
272
  const freshness = binding
166
273
  ? `bound to this round (${binding.scheme})`
167
274
  : 'freshness/instance binding NOT verified (no report_data scheme declared)';
168
- return {
169
- claim,
170
- ok: true,
171
- detail: `genuine Intel TDX quote (TCB ${p.status}); MRTD ${hex(p.td.mrTd).slice(0, 16)}…; ${freshness}`,
172
- };
275
+ const scope = build
276
+ ? `Antseed TEE seller image ${build.image.version} on ${build.os.name}, bound to this connection`
277
+ : `MRTD ${hex(p.td.mrTd).slice(0, 16)}…`;
278
+ const result = { claim, ok: true, detail: `genuine Intel TDX quote (TCB ${p.status}); ${scope}; ${freshness}` };
279
+ if (!build)
280
+ return result;
281
+ const origins = [...new Set(build.upstreams.map((u) => u.origin))].sort();
282
+ return [result, { claim: claimId(NODE_UPSTREAMS_CLAIM), ok: true, detail: origins.join(', ') }];
173
283
  },
174
284
  async collect(input) {
175
285
  const source = input.config[tdxConfigKey(id, 'source')] ?? defaultSource;
286
+ const channelBinding = input.config[tdxConfigKey(id, 'channelBinding')] || undefined;
176
287
  if (source === 'configfs') {
177
- const quote = generateTdxQuote(computeReportData(input.nonce, input.peerId));
288
+ const quote = generateTdxQuote(computeReportData(input.nonce, input.peerId, channelBinding));
178
289
  return encodeTeeTdxEvidence(quote);
179
290
  }
291
+ if (source === 'confidential-space') {
292
+ const socket = input.config[tdxConfigKey(id, 'confidentialSpace.socket')] || undefined;
293
+ const nonce = confidentialSpaceNonce(computeReportData(input.nonce, input.peerId, channelBinding));
294
+ return encodeConfidentialSpaceEvidence(await generateConfidentialSpaceToken(nonce, socket));
295
+ }
180
296
  if (source === 'dstack') {
181
297
  const socket = input.config[tdxConfigKey(id, 'dstack.socket')] || undefined;
182
- const quote = await generateDstackQuote(computeReportData(input.nonce, input.peerId), socket);
183
- return encodeTeeTdxEvidence(quote);
298
+ const { quote, eventLog, appCompose } = await generateDstackAttestation(computeReportData(input.nonce, input.peerId, channelBinding), socket);
299
+ // Only the RTMR3 events: the buyer replays them to the app's compose hash, then checks the compose.
300
+ return encodeTeeTdxEvidence(quote, undefined, undefined, {
301
+ ...(eventLog ? { eventLog: rtmr3Events(eventLog) } : {}),
302
+ ...(appCompose ? { appCompose } : {}),
303
+ });
184
304
  }
185
305
  if (source === 'http') {
186
306
  const url = input.config[tdxConfigKey(id, 'url')];
@@ -199,12 +319,15 @@ export function makeTdxCap(id, defaultSource, opts) {
199
319
  const ingredients = pubkey ? { e2ePubkey: pubkey } : {};
200
320
  return encodeTeeTdxEvidence(quote, undefined, { scheme, ingredients });
201
321
  }
202
- throw new Error(`unknown ${id} source "${source}" (expected "configfs", "dstack", or "http")`);
322
+ throw new Error(`unknown ${id} source "${source}" (expected "configfs", "dstack", "confidential-space", or "http")`);
203
323
  },
204
324
  };
205
325
  }
206
- /** The AntSeed seller node's own TEE — mints its quote locally via configfs; report_data bound to nonce+peerId. */
207
- export const nodeTeeCapability = makeTdxCap(NODE_TEE_CAP_ID, 'configfs', { bindNoncePeerId: true });
326
+ /**
327
+ * The AntSeed seller node's own TEE — mints its quote locally via configfs; report_data bound to
328
+ * nonce + peerId + the buyer's connection, and the TD measurement must be an approved build.
329
+ */
330
+ export const nodeTeeCapability = makeTdxCap(NODE_TEE_CAP_ID, 'configfs', { sellerNode: true });
208
331
  /** The downstream inference provider's TEE — quote fetched from the provider's evidence route. */
209
332
  export const providerTeeCapability = makeTdxCap(PROVIDER_TEE_CAP_ID, 'http');
210
333
  //# sourceMappingURL=tee-tdx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tee-tdx.js","sourceRoot":"","sources":["../../src/caps/tee-tdx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tee-tdx.js","sourceRoot":"","sources":["../../src/caps/tee-tdx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Confidential Space collector: asks the container launcher for a Google attestation token
3
+ * carrying `nonce` (the round's binding). The launcher mounts its socket into the workload
4
+ * container; it throws when the socket is absent, so the prover omits the capability elsewhere.
5
+ *
6
+ * Wire contract (POST http://localhost/v1/token over the socket):
7
+ * request { "audience": "antseed-verifier", "token_type": "OIDC", "nonces": ["<nonce>"] }
8
+ * response the signed token (JWT text)
9
+ */
10
+ export declare const CS_LAUNCHER_SOCKET = "/run/container_launcher/teeserver.sock";
11
+ export declare function generateConfidentialSpaceToken(nonce: string, socketPath?: string): Promise<string>;
12
+ //# sourceMappingURL=confidential-space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidential-space.d.ts","sourceRoot":"","sources":["../../src/collect/confidential-space.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,2CAA2C,CAAA;AAE1E,wBAAsB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpH"}
@@ -0,0 +1,22 @@
1
+ import { CS_AUDIENCE } from '../confidential-space.js';
2
+ import { postUnix } from './unix-http.js';
3
+ /**
4
+ * Confidential Space collector: asks the container launcher for a Google attestation token
5
+ * carrying `nonce` (the round's binding). The launcher mounts its socket into the workload
6
+ * container; it throws when the socket is absent, so the prover omits the capability elsewhere.
7
+ *
8
+ * Wire contract (POST http://localhost/v1/token over the socket):
9
+ * request { "audience": "antseed-verifier", "token_type": "OIDC", "nonces": ["<nonce>"] }
10
+ * response the signed token (JWT text)
11
+ */
12
+ export const CS_LAUNCHER_SOCKET = '/run/container_launcher/teeserver.sock';
13
+ export async function generateConfidentialSpaceToken(nonce, socketPath = CS_LAUNCHER_SOCKET) {
14
+ const body = JSON.stringify({ audience: CS_AUDIENCE, token_type: 'OIDC', nonces: [nonce] });
15
+ const { status, body: token } = await postUnix(socketPath, '/v1/token', body);
16
+ if (status !== 200)
17
+ throw new Error(`Confidential Space token request returned HTTP ${status}: ${token.slice(0, 200)}`);
18
+ if (!/^[\w-]+\.[\w-]+\.[\w-]+$/.test(token.trim()))
19
+ throw new Error('Confidential Space token response is not a JWT');
20
+ return token.trim();
21
+ }
22
+ //# sourceMappingURL=confidential-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidential-space.js","sourceRoot":"","sources":["../../src/collect/confidential-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,wCAAwC,CAAA;AAE1E,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,KAAa,EAAE,UAAU,GAAG,kBAAkB;IACjG,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3F,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;IAC7E,IAAI,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IACvH,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACrH,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACrB,CAAC"}
@@ -5,4 +5,14 @@
5
5
  * this source" and omits the capability, like configfs off-TEE.
6
6
  */
7
7
  export declare function generateDstackQuote(reportData: Uint8Array, socketPath?: string): Promise<Uint8Array>;
8
+ /**
9
+ * The quote plus what a buyer needs to check the app it measured: the agent's event log (a JSON
10
+ * string), which replays RTMR3 to the app's compose hash, and the app-compose.json that hash
11
+ * covers. Either is undefined when the agent does not return it.
12
+ */
13
+ export declare function generateDstackAttestation(reportData: Uint8Array, socketPath?: string): Promise<{
14
+ quote: Uint8Array;
15
+ eventLog?: string;
16
+ appCompose?: string;
17
+ }>;
8
18
  //# sourceMappingURL=dstack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dstack.d.ts","sourceRoot":"","sources":["../../src/collect/dstack.ts"],"names":[],"mappings":"AAmDA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyB1G"}
1
+ {"version":3,"file":"dstack.d.ts","sourceRoot":"","sources":["../../src/collect/dstack.ts"],"names":[],"mappings":"AA4BA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE1G;AAeD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BxE"}
@@ -1,4 +1,4 @@
1
- import { request } from 'node:http';
1
+ import { postUnix } from './unix-http.js';
2
2
  /**
3
3
  * dstack collector: it mints a TDX quote via the dstack guest-agent unix socket. This is the
4
4
  * canonical quoting path inside dstack CVMs (e.g. Phala), where the Linux configfs-tsm
@@ -6,13 +6,13 @@ import { request } from 'node:http';
6
6
  * raw (no hashing, max 64 bytes). The quote's report_data is then byte-identical to the configfs
7
7
  * path, and the buyer verifies it unchanged.
8
8
  *
9
- * Wire contract (POST http://dstack/GetQuote over the socket):
10
- * request { "report_data": "<hex, <=64 bytes>" }
11
- * response { "quote": "<hex>", "event_log": ..., ... }
9
+ * Wire contract (POST over the socket):
10
+ * /GetQuote request { "report_data": "<hex, <=64 bytes>" } response { "quote": "<hex>", "event_log": "<json>", ... }
11
+ * /Info request {} response { "tcb_info": "<json with app_compose>", ... }
12
12
  */
13
13
  /** Default guest-agent socket locations, tried in order (mirrors @phala/dstack-sdk). */
14
14
  const DEFAULT_DSTACK_SOCKETS = ['/var/run/dstack.sock', '/run/dstack.sock'];
15
- const DSTACK_TIMEOUT_MS = 20_000;
15
+ const DSTACK_REQUEST = { timeoutMs: 20_000, timeoutMessage: 'dstack request timed out' };
16
16
  function msg(err) {
17
17
  return err instanceof Error ? err.message : String(err);
18
18
  }
@@ -21,25 +21,6 @@ function isConnError(err) {
21
21
  const code = err?.code;
22
22
  return code === 'ENOENT' || code === 'ECONNREFUSED' || code === 'EACCES';
23
23
  }
24
- /** POST JSON to a unix-socket HTTP server and read the whole response body. */
25
- function postUnix(socketPath, path, body) {
26
- return new Promise((resolve, reject) => {
27
- const req = request({
28
- socketPath,
29
- path,
30
- method: 'POST',
31
- headers: { 'content-type': 'application/json', 'content-length': Buffer.byteLength(body) },
32
- timeout: DSTACK_TIMEOUT_MS,
33
- }, (res) => {
34
- const chunks = [];
35
- res.on('data', (c) => chunks.push(c));
36
- res.on('end', () => resolve({ status: res.statusCode ?? 0, body: Buffer.concat(chunks).toString('utf8') }));
37
- });
38
- req.on('error', reject);
39
- req.on('timeout', () => req.destroy(new Error('dstack request timed out')));
40
- req.end(body);
41
- });
42
- }
43
24
  /**
44
25
  * Generate a raw Intel TDX quote bound to `reportData` (64 bytes) via the dstack guest agent.
45
26
  * `socketPath` overrides the default locations (e.g. a custom mount or the dstack simulator).
@@ -47,6 +28,28 @@ function postUnix(socketPath, path, body) {
47
28
  * this source" and omits the capability, like configfs off-TEE.
48
29
  */
49
30
  export async function generateDstackQuote(reportData, socketPath) {
31
+ return (await generateDstackAttestation(reportData, socketPath)).quote;
32
+ }
33
+ /** The app-compose.json the CVM was measured with (tcb_info.app_compose of the agent's Info), if available. */
34
+ async function readAppCompose(socketPath) {
35
+ try {
36
+ const { status, body } = await postUnix(socketPath, '/Info', '{}', DSTACK_REQUEST);
37
+ if (status !== 200)
38
+ return undefined;
39
+ const info = JSON.parse(body);
40
+ const tcb = (typeof info.tcb_info === 'string' ? JSON.parse(info.tcb_info) : info.tcb_info);
41
+ return typeof tcb?.app_compose === 'string' && tcb.app_compose.length > 0 ? tcb.app_compose : undefined;
42
+ }
43
+ catch {
44
+ return undefined;
45
+ }
46
+ }
47
+ /**
48
+ * The quote plus what a buyer needs to check the app it measured: the agent's event log (a JSON
49
+ * string), which replays RTMR3 to the app's compose hash, and the app-compose.json that hash
50
+ * covers. Either is undefined when the agent does not return it.
51
+ */
52
+ export async function generateDstackAttestation(reportData, socketPath) {
50
53
  if (reportData.length !== 64) {
51
54
  throw new Error(`reportData must be 64 bytes, got ${reportData.length}`);
52
55
  }
@@ -55,7 +58,7 @@ export async function generateDstackQuote(reportData, socketPath) {
55
58
  let lastErr;
56
59
  for (const sock of candidates) {
57
60
  try {
58
- const { status, body: resp } = await postUnix(sock, '/GetQuote', body);
61
+ const { status, body: resp } = await postUnix(sock, '/GetQuote', body, DSTACK_REQUEST);
59
62
  if (status !== 200)
60
63
  throw new Error(`dstack GetQuote returned HTTP ${status}`);
61
64
  const parsed = JSON.parse(resp);
@@ -65,7 +68,9 @@ export async function generateDstackQuote(reportData, socketPath) {
65
68
  const quote = Buffer.from(parsed.quote.replace(/^0x/, ''), 'hex');
66
69
  if (quote.length === 0)
67
70
  throw new Error('dstack GetQuote "quote" is not valid hex');
68
- return new Uint8Array(quote);
71
+ const eventLog = typeof parsed.event_log === 'string' && parsed.event_log.length > 0 ? parsed.event_log : undefined;
72
+ const appCompose = await readAppCompose(sock);
73
+ return { quote: new Uint8Array(quote), ...(eventLog ? { eventLog } : {}), ...(appCompose ? { appCompose } : {}) };
69
74
  }
70
75
  catch (err) {
71
76
  lastErr = err;
@@ -1 +1 @@
1
- {"version":3,"file":"dstack.js","sourceRoot":"","sources":["../../src/collect/dstack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dstack.js","sourceRoot":"","sources":["../../src/collect/dstack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** POST JSON to a unix-socket HTTP server and read the whole response body. */
2
+ export declare function postUnix(socketPath: string, path: string, body: string, { timeoutMs, timeoutMessage }?: {
3
+ timeoutMs?: number;
4
+ timeoutMessage?: string;
5
+ }): Promise<{
6
+ status: number;
7
+ body: string;
8
+ }>;
9
+ //# sourceMappingURL=unix-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unix-http.d.ts","sourceRoot":"","sources":["../../src/collect/unix-http.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,SAAkB,EAAE,cAAgD,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7H,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB3C"}
@@ -0,0 +1,21 @@
1
+ import { request } from 'node:http';
2
+ /** POST JSON to a unix-socket HTTP server and read the whole response body. */
3
+ export function postUnix(socketPath, path, body, { timeoutMs = 20_000, timeoutMessage = 'unix socket request timed out' } = {}) {
4
+ return new Promise((resolve, reject) => {
5
+ const req = request({
6
+ socketPath,
7
+ path,
8
+ method: 'POST',
9
+ headers: { 'content-type': 'application/json', 'content-length': Buffer.byteLength(body) },
10
+ timeout: timeoutMs,
11
+ }, (res) => {
12
+ const chunks = [];
13
+ res.on('data', (c) => chunks.push(c));
14
+ res.on('end', () => resolve({ status: res.statusCode ?? 0, body: Buffer.concat(chunks).toString('utf8') }));
15
+ });
16
+ req.on('error', reject);
17
+ req.on('timeout', () => req.destroy(new Error(timeoutMessage)));
18
+ req.end(body);
19
+ });
20
+ }
21
+ //# sourceMappingURL=unix-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unix-http.js","sourceRoot":"","sources":["../../src/collect/unix-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CACtB,UAAkB,EAClB,IAAY,EACZ,IAAY,EACZ,EAAE,SAAS,GAAG,MAAM,EAAE,cAAc,GAAG,+BAA+B,KAAsD,EAAE;IAE9H,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,OAAO,CACjB;YACE,UAAU;YACV,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC1F,OAAO,EAAE,SAAS;SACnB,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC,CAAA;YAC/C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7G,CAAC,CACF,CAAA;QACD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACvB,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;QAC/D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC"}