@coderifts/agent-guard 17.2.0 → 17.3.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.
@@ -36,8 +36,18 @@ const crypto = require('node:crypto');
36
36
  const { verifyReceipt, keyringFromDocument } = require('./verify.js');
37
37
  const { verifyExecutionGrant } = require('./verify-grant.js');
38
38
  const { verifyProveTranscript } = require('./verify-prove-transcript.js');
39
+ const {
40
+ ROOT_V, SLOTS, SLOT_NAMES, digestToken, verifyEvidenceRoot, canonicalJson,
41
+ } = require('./evidence-root.js');
39
42
 
40
43
  const CORRELATION_V = 'cr.exec.correlation.v1';
44
+
45
+ /**
46
+ * The version four consumers must agree on. `verifyEvidenceRootBinding` returns it, so "prove,
47
+ * conformance, the guard and the provider all ran the same library" is something a report can
48
+ * SHOW rather than assert. Bump it when a check is added, removed or changed in meaning.
49
+ */
50
+ const LIBRARY_VERSION = 'cr.evidence-verifier.1';
41
51
  const US = '\x1f';
42
52
 
43
53
  /** The slots this verifier knows how to authenticate. */
@@ -227,7 +237,169 @@ function verifyEvidenceEnvelope(artifact, o = {}) {
227
237
  return { ok: failures.length === 0, slots, failures };
228
238
  }
229
239
 
240
+ /**
241
+ * THE ROOT CHECK — is this set of tokens ONE run?
242
+ *
243
+ * Ten questions, in the order a reader would ask them. Each is answered against something the
244
+ * producer signed, never against a value copied out of the thing being checked.
245
+ *
246
+ * 1 the root's own signature verifies against the executor key
247
+ * 2 every mandatory slot is present in the root (absence is refused, not skipped)
248
+ * 3 every token PRESENT in the envelope has the EXACT byte digest the root recorded
249
+ * 4 every token the root records is present to be checked, or named as unavailable
250
+ * 5 the grant's claims match the root's claims (grant_id, scope, policy)
251
+ * 6 grant.receipt_hash === sha256(the chain_receipt bytes actually carried)
252
+ * 7 grant_id === the consumed jti === the attested jti
253
+ * 8 run_id === the transcript's run_id === the correlation's scope binding
254
+ * 9 the outer artifact's summaries agree with what the tokens say
255
+ * 10 the verifier reports its own version, so four consumers can be shown to run one library
256
+ *
257
+ * @param {object} artifact
258
+ * @param {object} o
259
+ * @param {import('crypto').KeyObject} o.executorKey the key the root and correlation are signed with
260
+ * @param {object} [o.sidecars] tokens the artifact does not carry but the caller holds, by slot
261
+ * name (e.g. provider_readback bytes, atomic_attestation token)
262
+ */
263
+ function verifyEvidenceRootBinding(artifact, o = {}) {
264
+ const failures = [];
265
+ const checks = [];
266
+ const note = (id, ok, detail) => { checks.push({ id, ok, detail }); if (!ok) failures.push(detail); };
267
+
268
+ const root = artifact && artifact.evidence_root;
269
+ if (!root) {
270
+ return {
271
+ ok: false,
272
+ present: false,
273
+ library: LIBRARY_VERSION,
274
+ checks: [],
275
+ failures: ['cross_run_collage: the artifact carries no cr.evidence.root.v1, so nothing binds '
276
+ + 'its tokens to ONE run'],
277
+ };
278
+ }
279
+
280
+ // 1 — the root's own signature.
281
+ const rv = verifyEvidenceRoot(root, o.executorKey);
282
+ note('root_signature', rv.valid,
283
+ rv.valid ? 'the evidence root is signed by the executor key'
284
+ : `the evidence root signature does not verify (${rv.status}: ${rv.reason})`);
285
+ // Everything below reads the root. A root that does not verify is not a source of truth about
286
+ // anything, so the remaining checks are not run rather than run against unsigned values.
287
+ if (!rv.valid) return { ok: false, present: true, library: LIBRARY_VERSION, checks, failures };
288
+
289
+ // The tokens as they travel, by slot. Sidecars are tokens the artifact does not republish but
290
+ // the caller holds — the provider readback is one, and binding it is what stops a readback from
291
+ // another run being paired with this artifact.
292
+ const carried = {
293
+ chain_receipt: artifact.issuance && artifact.issuance.chain_receipt,
294
+ execution_grant: artifact.issuance && artifact.issuance.execution_grant,
295
+ transcript_token: artifact.transcript_token,
296
+ correlation: artifact.correlation || null,
297
+ atomic_attestation: null,
298
+ provider_readback: null,
299
+ ...(o.sidecars || {}),
300
+ };
301
+
302
+ // 2 — mandatory slots. A root that omits a token would make deletion look like "not applicable".
303
+ for (const name of SLOT_NAMES) {
304
+ if (!SLOTS[name].mandatory) continue;
305
+ note(`root_slot_${name}`, root.artifact_digests && root.artifact_digests[name] != null,
306
+ `the root records no digest for the mandatory ${name}`);
307
+ }
308
+
309
+ // 3 & 4 — EXACT BYTES. This is the check the collage fails: a substituted token is authentic and
310
+ // has different bytes, so its digest cannot match whatever it says inside.
311
+ for (const name of SLOT_NAMES) {
312
+ const want = root.artifact_digests ? root.artifact_digests[name] : null;
313
+ const got = digestToken(carried[name]);
314
+ if (want == null && got == null) continue;
315
+ if (want == null) {
316
+ note(`digest_${name}`, false,
317
+ `the envelope carries a ${name} the root does not account for — an extra token is not evidence`);
318
+ continue;
319
+ }
320
+ if (got == null) {
321
+ // Not a failure for an optional slot the caller simply did not supply: it is UNCHECKED, and
322
+ // saying so beats grading a token nobody looked at.
323
+ note(`digest_${name}`, !SLOTS[name].mandatory,
324
+ `the root records a ${name} digest but no such token was supplied to check it`);
325
+ continue;
326
+ }
327
+ note(`digest_${name}`, got === want,
328
+ got === want ? `${name} bytes match the root`
329
+ : `${name} does not match the root's digest — these bytes were not emitted by run ${root.run_id}`);
330
+ }
331
+
332
+ // 5 — the grant's own claims vs the root's.
333
+ const grantBody = (() => {
334
+ const t = carried.execution_grant;
335
+ if (typeof t !== 'string') return null;
336
+ try { return JSON.parse(Buffer.from(t.split('.')[0], 'base64url').toString('utf8')); } catch (_) { return null; }
337
+ })();
338
+ if (grantBody) {
339
+ const gid = grantBody.grant_id || grantBody.jti || null;
340
+ note('claim_grant_id', root.grant_id == null || root.grant_id === gid,
341
+ `the root names grant ${root.grant_id} but the grant it carries is ${gid}`);
342
+ const scope = grantBody.after_payload_hash || grantBody.scope_hash || null;
343
+ note('claim_scope_hash', root.scope_hash == null || root.scope_hash === scope,
344
+ `the root names scope ${root.scope_hash} but the grant scopes ${scope}`);
345
+ note('claim_policy_hash', root.policy_hash == null || grantBody.policy_hash == null
346
+ || root.policy_hash === grantBody.policy_hash,
347
+ 'the root and the grant disagree about policy_hash');
348
+
349
+ // 6 — grant → receipt, by the digest of the receipt actually carried, not by a copied string.
350
+ const rh = grantBody.receipt_hash || grantBody.receipt_digest || null;
351
+ if (rh && typeof carried.chain_receipt === 'string') {
352
+ const actual = digestToken(carried.chain_receipt);
353
+ note('grant_binds_receipt', rh === actual,
354
+ `the grant was issued against receipt ${rh}, but the receipt carried here hashes to ${actual}`);
355
+ }
356
+ }
357
+
358
+ // 7 — one grant, through consume and attestation. Read from the continuity block the producer
359
+ // signed into the transcript, re-derived rather than trusted: the identities must agree with the
360
+ // root's grant_id too, or the root and the chain are describing different executions.
361
+ const ids = (artifact.continuity && artifact.continuity.identities) || {};
362
+ if (root.grant_id != null && ids.issued_jti != null) {
363
+ const oneGrant = ids.issued_jti === root.grant_id
364
+ && ids.consumed_jti === root.grant_id
365
+ && ids.attestation_jti === root.grant_id;
366
+ note('identity_chain', oneGrant,
367
+ `the root names grant ${root.grant_id}, the chain records issued ${ids.issued_jti} / `
368
+ + `consumed ${ids.consumed_jti} / attested ${ids.attestation_jti}`);
369
+ }
370
+
371
+ // 8 — one run, through the transcript and the correlation.
372
+ note('run_id_artifact', artifact.run_id === root.run_id,
373
+ `the artifact says run ${artifact.run_id}, the root says ${root.run_id}`);
374
+ if (carried.correlation && root.scope_hash != null) {
375
+ note('run_id_correlation', carried.correlation.scope_hash === root.scope_hash,
376
+ `the correlation binds scope ${carried.correlation.scope_hash}, the root ${root.scope_hash}`);
377
+ }
378
+ if (root.contract_commit != null && carried.correlation) {
379
+ note('contract_commit', carried.correlation.contract_commit === root.contract_commit,
380
+ `the correlation names commit ${carried.correlation.contract_commit}, the root ${root.contract_commit}`);
381
+ }
382
+
383
+ // 9 — the outer summary vs the tokens. The artifact is a wrapper; a wrapper that disagrees with
384
+ // what it wraps is the thing that is wrong.
385
+ const tv = typeof carried.transcript_token === 'string'
386
+ ? verifyProveTranscript(carried.transcript_token, { keyring: null, publicKey: o.executorKey })
387
+ : null;
388
+ if (tv && tv.valid && tv.payload) {
389
+ const claimed = tv.payload.run_id || tv.payload.deployment_id || null;
390
+ if (claimed && tv.payload.run_id) {
391
+ note('transcript_run_id', tv.payload.run_id === root.run_id,
392
+ `the signed transcript is run ${tv.payload.run_id}, the root says ${root.run_id}`);
393
+ }
394
+ }
395
+
396
+ return { ok: failures.length === 0, present: true, library: LIBRARY_VERSION, checks, failures };
397
+ }
398
+
230
399
  module.exports = {
400
+ verifyEvidenceRootBinding,
401
+ LIBRARY_VERSION,
402
+ ROOT_V,
231
403
  verifyEvidenceEnvelope,
232
404
  verifyCorrelation,
233
405
  verifyAtomicAttestationToken,
@@ -58,6 +58,35 @@ const V2_REQUIRED_STRINGS = Object.freeze([
58
58
  'operation', 'target_uri', 'expected_state_token', 'after_payload_hash',
59
59
  'nonce_hash', 'policy_hash', 'audience_hash', 'not_before', 'expires_at',
60
60
  ]);
61
+ /**
62
+ * RESERVED, AND INERT. Optional v2 fields a grant MAY carry and this verifier reads as NOTHING.
63
+ *
64
+ * ── WHY THEY EXIST BEFORE THE GATE THAT USES THEM ───────────────────────────────────────────
65
+ *
66
+ * The admitted key set is closed: an unknown field is `MALFORMED/unknown_field`, which is the
67
+ * right default and also means a future field cannot be introduced without every deployed
68
+ * verifier refusing the grants that carry it. Reserving the two names now is what keeps that
69
+ * introduction from being a breaking change later.
70
+ *
71
+ * ── WHAT THEY DO NOT DO, WHICH IS THE POINT ─────────────────────────────────────────────────
72
+ *
73
+ * NOTHING. A grant carrying `call_hash` is graded EXACTLY as one without it. There is no check,
74
+ * no comparison, and no `intended` field they bind to.
75
+ *
76
+ * A VERIFIER THAT READS THEIR PRESENCE AS AUTHORIZATION IS WRONG. `call_hash` present does not
77
+ * mean a tool call was bound; `executor_image_digest` present does not mean an executor image was
78
+ * pinned. Nothing signs a promise that the value is true, nothing compares it to anything, and an
79
+ * attacker who can mint a grant can put any value in them. Presence is not proof — it is a slot.
80
+ *
81
+ * They are unsigned-by-default only in the sense that no separate signature covers them: the v2
82
+ * signing input is the canonical JSON of the WHOLE body, so a grant that carries them signs
83
+ * different bytes than one that does not, and neither can be edited into the other. That binds
84
+ * the VALUE to the issuer; it says nothing about whether the value means anything.
85
+ *
86
+ * When a gate for them lands it will be a NEW check with its own negative fixtures, and this
87
+ * comment is what a reader should be shown if anyone claims otherwise before then.
88
+ */
89
+ const V2_RESERVED_INERT = Object.freeze(['call_hash', 'executor_image_digest']);
61
90
  const TARGET_SCHEMES = Object.freeze(['fs', 'git', 'api', 'db', 'registry', 'deploy']);
62
91
  const DEFAULT_FETCH_URL = 'https://app.coderifts.com/api/v1/attestation/public-key';
63
92
 
@@ -70,8 +99,39 @@ function scalar(v) {
70
99
  return v == null ? '' : String(v);
71
100
  }
72
101
 
102
+ /**
103
+ * cr.exec.v1 OPTIONAL signed fields — the ATOMIC profile's, and a DELIBERATE widening (1470).
104
+ *
105
+ * ── MEASURED BEFORE OPENING THE SET ─────────────────────────────────────────────────────────
106
+ *
107
+ * This verifier's allowed set was `['v', ...SIGNED_FIELDS]`, so a v1 grant carrying `state_nonce`
108
+ * read MALFORMED / unknown_field. That grant is not malformed: it is what the demo executor issues
109
+ * for the ATOMIC profile, and capability-demo's middleware has always signed and accepted it
110
+ * (OPTIONAL_SIGNED_FIELDS = ['state_nonce', 'deployment_id']). Fail-CLOSED, and wrong — this core
111
+ * is vendored into five consumers, so every one of them refused a valid ATOMIC grant.
112
+ *
113
+ * ── WHY WIDENING IS SAFE HERE, AND WHY IT IS STILL A DECISION ───────────────────────────────
114
+ *
115
+ * These fields are SIGNED: appended to the preimage, so a forger cannot add one without breaking
116
+ * the signature. The closed set never protected against injection; it protects against SEMANTIC
117
+ * DRIFT — a future field that RESTRICTS use must not be silently ignored by an older verifier that
118
+ * then says GRANT_CURRENT. `state_nonce` and `deployment_id` do not restrict: they NARROW, and a
119
+ * verifier that ignores them is not more permissive than one that does not know them.
120
+ *
121
+ * So the set is widened BY NAME, not opened. An actually-unknown field is still unknown_field, and
122
+ * test/v1-atomic-optional-fields.test.js records both halves so the next change is a decision
123
+ * rather than a rediscovery.
124
+ *
125
+ * ── APPENDED ONLY WHEN NON-EMPTY ────────────────────────────────────────────────────────────
126
+ *
127
+ * Byte-identical to capability-demo/packages/middleware/src/verify-grant.js. A BEARER grant's
128
+ * signing input must stay exactly what it was before ATOMIC existed, or every pre-ATOMIC issuance
129
+ * stops verifying — which is why presence, not declaration, decides the slot.
130
+ */
131
+ const V1_OPTIONAL_SIGNED_FIELDS = Object.freeze(['state_nonce', 'deployment_id']);
132
+
73
133
  function reconstructSignedInput(payload) {
74
- return [
134
+ const parts = [
75
135
  SIGNING_PREFIX,
76
136
  scalar(payload.kid),
77
137
  scalar(payload.receipt_digest),
@@ -82,7 +142,11 @@ function reconstructSignedInput(payload) {
82
142
  scalar(payload.jti),
83
143
  scalar(payload.iat),
84
144
  scalar(payload.exp),
85
- ].join('|');
145
+ ];
146
+ for (const k of V1_OPTIONAL_SIGNED_FIELDS) {
147
+ if (payload[k] != null && String(payload[k]).length > 0) parts.push(String(payload[k]));
148
+ }
149
+ return parts.join('|');
86
150
  }
87
151
 
88
152
  function sha256pref(s) {
@@ -142,7 +206,9 @@ function verifyExecutionGrantV2(payload, sigB64, ctx, opts = {}) {
142
206
  if (!Number.isInteger(payload.max_attempts) || payload.max_attempts < 1) {
143
207
  return { valid: false, status: 'MALFORMED', reason: 'bad_max_attempts', payload };
144
208
  }
145
- const allowed = new Set([...V2_REQUIRED_STRINGS, 'max_attempts']);
209
+ // The reserved names are ADMITTED, never inspected. Everything below this line treats a payload
210
+ // carrying them identically to one that does not — verified by test, not by intent.
211
+ const allowed = new Set([...V2_REQUIRED_STRINGS, 'max_attempts', ...V2_RESERVED_INERT]);
146
212
  for (const k of Object.keys(payload)) {
147
213
  if (!allowed.has(k)) return { valid: false, status: 'MALFORMED', reason: 'unknown_field', payload };
148
214
  }
@@ -262,13 +328,19 @@ function verifyExecutionGrantInner(token, ctx, opts = {}) {
262
328
  return { valid: false, status: 'MALFORMED', reason: 'missing_field', payload };
263
329
  }
264
330
  }
265
- const allowed = new Set(['v', ...SIGNED_FIELDS]);
331
+ const allowed = new Set(['v', ...SIGNED_FIELDS, ...V1_OPTIONAL_SIGNED_FIELDS]);
266
332
  for (const k of Object.keys(payload)) {
267
333
  if (!allowed.has(k)) {
268
334
  return { valid: false, status: 'MALFORMED', reason: 'unknown_field', payload };
269
335
  }
270
336
  }
271
337
 
338
+ for (const k of V1_OPTIONAL_SIGNED_FIELDS) {
339
+ if (payload[k] != null && typeof payload[k] !== 'string') {
340
+ return { valid: false, status: 'MALFORMED', reason: 'missing_field', payload };
341
+ }
342
+ }
343
+
272
344
  // 3. delimiter guard
273
345
  for (const k of SIGNED_FIELDS) {
274
346
  if (payload[k].includes('|')) {
@@ -513,6 +585,9 @@ module.exports = {
513
585
  SIGNING_PREFIX,
514
586
  SIGNING_PREFIX_V2,
515
587
  SIGNED_FIELDS,
588
+ V1_OPTIONAL_SIGNED_FIELDS,
589
+ V2_REQUIRED_STRINGS,
590
+ V2_RESERVED_INERT,
516
591
  CLOCK_SKEW_LEEWAY_MS,
517
592
  isIssuedInFuture,
518
593
  };
@@ -23,13 +23,13 @@
23
23
  * the command, so it left.
24
24
  *
25
25
  * CLI usage now:
26
- * node cli.js <receipt> [--key pub.pem | --keys <url|file>] [--kid <kid>] [--fetch <url>]
27
- * node cli.js --chain receipts.txt [--key pub.pem | --keys <url|file>] [--kid <kid>] [--fetch <url>]
26
+ * node cli.js <receipt> [--key pub.pem | --keys <url|file>] [--kid <kid>] [--fetch <url>] [--refresh-keys]
27
+ * node cli.js --chain receipts.txt [--key pub.pem | --keys <url|file>] [--kid <kid>] [--fetch <url>] [--refresh-keys]
28
28
  *
29
- * Key discovery: with no --key/--keys, keys are fetched from
30
- * https://app.coderifts.com/.well-known/coderifts-keys.json (override with --fetch <url>).
31
- * The fetch-and-resolve path accepts BOTH the registry array (active + retired)
32
- * and the legacy single-key body from /api/v1/attestation/public-key.
29
+ * Key discovery: with no --key/--keys/--fetch/--refresh-keys, the command loads the
30
+ * vendored snapshot at keys/coderifts-keys.json (offline). Live fetch is opt-in
31
+ * (--refresh-keys or --fetch <url> / --keys <url>). DEFAULT_FETCH_URL is the well-known
32
+ * registry used by those opt-in flags. This library never fetches.
33
33
  * --keys resolves each receipt's key by kid from a registry
34
34
  * ({ keys: [{ kid, public_key_pem, status, valid_from, retired_at }] }); accepts a URL or file.
35
35
  *
@@ -178,6 +178,21 @@ export type EvaluateCasEvidenceOpts = {
178
178
  status?: string;
179
179
  }>;
180
180
  } | null;
181
+ /**
182
+ * The decision receipt's own bytes, and the keyring that signs them.
183
+ *
184
+ * Optional, and their ABSENCE is what it looks like: the core marks the result caller-asserted
185
+ * and says so in its shortfalls. Supplying them moves the receipt from "this guard's own bind
186
+ * step said so" to "the shared predicate verified a signature".
187
+ */
188
+ receipt_token?: string | null;
189
+ receipt_keyring?: {
190
+ keys?: Array<{
191
+ kid?: string;
192
+ public_key_pem?: string;
193
+ status?: string;
194
+ }>;
195
+ } | null;
181
196
  /** Clock injection for grant expiry, tests only. */
182
197
  now?: number;
183
198
  /** Strict-only tightening of derived.authorized_and_committed. Absent = 9.0.0 formula. */
@@ -1 +1 @@
1
- {"version":3,"file":"cas-attestation.d.ts","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cas-attestation.d.ts","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,30 @@ const LIMITS = Object.freeze({
23
23
  does_not_claim_host_cannot_bypass: true,
24
24
  does_not_claim_governance_redecision: true,
25
25
  });
26
+ /**
27
+ * THE CORE PREDICATE, quoted rather than recomputed (1459).
28
+ *
29
+ * MEASURED before this wiring: the guard reached the right answer with a formula of its own —
30
+ * `receipt_verified && committed && class === 'executor_attested' && strictCommitObservation(...)`.
31
+ * Correct, and bespoke. The auditor's point is that a predicate written twice is a predicate that
32
+ * drifts, and the Atomic bypass was exactly that: two formulas for one question, disagreeing.
33
+ *
34
+ * So the guard now shapes its inputs and QUOTES `verifiedExecutionBinding`. The named shortfall
35
+ * states (UNAUTHORIZED / COMMIT_UNPROVEN / ONE_RUN_UNPROVEN / …) surface here as a result, so an
36
+ * operator reads the same vocabulary the CLI, Prove and conformance print.
37
+ *
38
+ * Loaded lazily and behind try/catch: a packaging fault must surface as NOT authorized, never as a
39
+ * crash inside the guard, and never as a silent fallback to the old local formula.
40
+ */
41
+ function coreBinding() {
42
+ try {
43
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
44
+ return require('./vendor/verified-execution-binding.js');
45
+ }
46
+ catch (_) {
47
+ return null;
48
+ }
49
+ }
26
50
  /**
27
51
  * Authenticate an execution grant against the pinned ISSUER keyring, through the vendored
28
52
  * canonical core (receipt-verifier verify-grant.js — cr.exec.v1 AND cr.exec.v2).
@@ -339,19 +363,123 @@ export function buildCasAttestation(proof, outcome, opts = {}) {
339
363
  const indeterminate = cas.status === 'indeterminate';
340
364
  const cas_evidence = evaluateCasEvidence(outcome, opts);
341
365
  let authorized_and_committed = receipt_verified && cas.status === 'committed';
366
+ let binding = null;
342
367
  let authorized_and_host_reported_committed = false;
343
368
  // ENFORCING_STRICT: the existing derived name now requires executor_attested + kernel
344
369
  // cross-check. Non-strict keeps the 9.0.0 formula (receipt verified + clean commit).
345
- if (opts.profile === 'ENFORCING_STRICT') {
346
- const obs = strictCommitObservation(outcome, cas_evidence, opts);
347
- authorized_and_committed = authorized_and_committed
348
- && obs.commit_label === 'authorized_and_committed';
370
+ // ── ONE PREDICATE FOR BOTH ENFORCING PROFILES ────────────────────────────────────────────
371
+ //
372
+ // The intersection is computed by the vendored core; this block only SHAPES the guard's inputs
373
+ // into the core's vocabulary. `required` names the two authorities an enforcing guard can
374
+ // actually establish from a tool outcome: it holds a grant and an attestation, and it does not
375
+ // hold a prove artifact or a provider readback — asking the core for `one_run_root` here would
376
+ // report a shortfall about evidence this surface never receives.
377
+ const enforcingProfile = opts.profile === 'ENFORCING_STRICT' || opts.profile === 'ENFORCING_ATOMIC';
378
+ if (enforcingProfile) {
379
+ const core = coreBinding();
380
+ const from = intendedFromOutcome(outcome);
381
+ const grantToken = (opts.grant && String(opts.grant)) || (from.grant && String(from.grant)) || '';
382
+ const attToken = extractExecutorAttestationToken(outcome);
383
+ if (!core) {
384
+ // FAIL-CLOSED, and named. Falling back to the local formula would recreate the second
385
+ // predicate this change exists to remove.
386
+ authorized_and_committed = false;
387
+ binding = { state: 'UNAUTHORIZED', shortfalls: ['the vendored core predicate could not be loaded'] };
388
+ }
389
+ else {
390
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
391
+ const { createPublicKey: createPk } = require('node:crypto');
392
+ const receiptKeyring = opts.receipt_keyring && Array.isArray(opts.receipt_keyring.keys)
393
+ ? new Map(opts.receipt_keyring.keys
394
+ .filter((k) => k && k.kid && k.public_key_pem)
395
+ .map((k) => [k.kid, {
396
+ publicKey: createPk(k.public_key_pem),
397
+ status: k.status || 'active',
398
+ retired_at: null,
399
+ compromised_at: null,
400
+ }]))
401
+ : null;
402
+ const keyring = opts.grant_keyring && Array.isArray(opts.grant_keyring.keys)
403
+ ? new Map(opts.grant_keyring.keys
404
+ .filter((k) => k && typeof k.kid === 'string' && typeof k.public_key_pem === 'string')
405
+ .map((k) => [k.kid, {
406
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
407
+ publicKey: require('node:crypto').createPublicKey(k.public_key_pem),
408
+ status: k.status || 'active',
409
+ retired_at: null,
410
+ compromised_at: null,
411
+ }]))
412
+ : null;
413
+ const r = core.verifiedExecutionBinding({
414
+ // ── THE RECEIPT, HANDED OVER WHEN THE CALLER HAS IT ─────────────────────────────
415
+ //
416
+ // `proof.receipt` records the guard's OWN bind step — it carries no token, by design. So
417
+ // when a caller supplies the receipt bytes and a keyring, the core verifies them; when it
418
+ // does not, `verified` is still passed and the core marks the result caller-asserted.
419
+ //
420
+ // That marking is not cosmetic any more: a caller-asserted receipt can no longer reach the
421
+ // global success token. It does not change THIS surface's answer, because this surface
422
+ // asks a CUSTOM authority set and reads `requirements_satisfied` — but the distinction is
423
+ // now visible in the state rather than only in a boolean nobody branched on.
424
+ receipt: opts.receipt_token
425
+ ? {
426
+ token: opts.receipt_token,
427
+ keyring: receiptKeyring,
428
+ expectedKid: null,
429
+ ...(Number.isFinite(opts.now) ? { now: opts.now } : {}),
430
+ }
431
+ : { verified: receipt_verified },
432
+ grant: { token: grantToken, keyring, expectedKid: null, ...(Number.isFinite(opts.now) ? { now: opts.now } : {}) },
433
+ attestation: {
434
+ token: attToken,
435
+ registry: opts.registry,
436
+ // The SDK's verifier, handed in rather than reimplemented — the core holds no
437
+ // attestation format knowledge of its own.
438
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require
439
+ verify: (t, o) => require('@coderifts/sdk').verifyExecutionAttestation(t, o),
440
+ },
441
+ committed: cas.status === 'committed',
442
+ required: ['issuer_grant', 'executor_attestation'],
443
+ });
444
+ binding = { state: r.state, shortfalls: r.shortfalls };
445
+ // ── THE FIELD THIS SURFACE IS ENTITLED TO ────────────────────────────────────────
446
+ //
447
+ // This asks a CUSTOM authority set (issuer_grant + executor_attestation), and the core no
448
+ // longer lets a custom set reach `authorized_and_committed` — asking for less must not
449
+ // produce the word every consumer reads as the answer. `requirements_satisfied` is "the set
450
+ // I asked for is met", which is exactly the question this surface asks.
451
+ //
452
+ // MEASURED: reading `authorized_and_committed` after the core change would have made this
453
+ // permanently false, and a guard that refuses everything looks like a guard that works.
454
+ authorized_and_committed = r.requirements_satisfied === true;
455
+ }
349
456
  }
350
457
  if (opts.profile === 'ENFORCING_ATOMIC') {
351
- const executorOk = cas_evidence.class === 'executor_attested';
458
+ // ── REPRODUCED THEN CLOSED (1447 / 1459) ────────────────────────────────────────────
459
+ //
460
+ // This branch used to read:
461
+ //
462
+ // authorized_and_committed = receipt_verified && committed && class === 'executor_attested'
463
+ //
464
+ // and never asked whether the GRANT was signed by anyone. Measured on the public 17.2.0, with
465
+ // a forged-signature grant and a REAL attestation from a trusted executor bound to that
466
+ // grant's jti and scope:
467
+ //
468
+ // ENFORCING_STRICT authorized_and_committed = false
469
+ // ENFORCING_ATOMIC authorized_and_committed = true
470
+ //
471
+ // Two profiles of one product, one set of bytes, opposite answers. The attestation was doing
472
+ // all the work, and an attestation only ever says "I committed the grant with these ids" — it
473
+ // cannot say the ids belonged to a grant anyone authorized.
474
+ //
475
+ // BOTH branches now QUOTE the same predicate rather than each computing a formula. Strict is
476
+ // unchanged in behaviour and Atomic is brought up to it, which is the direction a disagreement
477
+ // between two enforcing profiles has to be resolved in.
478
+ // The verdict itself now comes from the core above — both enforcing profiles quote it, which
479
+ // is what makes them incapable of disagreeing. This branch keeps only the ATOMIC-only
480
+ // OBSERVATION name, which is a different fact and was never part of the bypass.
352
481
  const hostClaimed = cas_evidence.class === 'host_claimed';
353
482
  authorized_and_host_reported_committed = receipt_verified && cas.status === 'committed' && hostClaimed;
354
- authorized_and_committed = receipt_verified && cas.status === 'committed' && executorOk;
355
483
  }
356
484
  const attestation = {
357
485
  attestation_spec: CAS_ATTESTATION_SPEC,
@@ -372,6 +500,8 @@ export function buildCasAttestation(proof, outcome, opts = {}) {
372
500
  ...(opts.profile === 'ENFORCING_ATOMIC'
373
501
  ? { authorized_and_host_reported_committed }
374
502
  : {}),
503
+ // The core's NAMED state, carried so an operator reads why rather than only whether.
504
+ ...(binding ? { authorization_state: binding.state } : {}),
375
505
  }),
376
506
  cas_evidence,
377
507
  limits: LIMITS,
@@ -1 +1 @@
1
- {"version":3,"file":"cas-attestation.js","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cas-attestation.js","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}