@atrib/verify 0.7.9 → 0.8.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.
@@ -0,0 +1,473 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Anchor plurality verification (D138, spec §2.11.7-§2.11.13).
4
+ *
5
+ * Implements the verifier side of the anchor interface over §2.11.3
6
+ * `log_proofs` arrays:
7
+ *
8
+ * - `anchor_type` discrimination per §2.11.9: absent = `atrib-log`
9
+ * carrying the legacy `(log_id, checkpoint, inclusion_proof)` triple,
10
+ * so every existing bundle parses unchanged, byte-for-byte.
11
+ * - Malformation rules (a)/(b) per §2.11.9: a malformed element is
12
+ * excluded from every count except `proof_count` / `malformed_count`
13
+ * and never invalidates the bundle or the record. Malformation takes
14
+ * precedence over unknown-type surfacing: an element that violates
15
+ * rule (b) is malformed even when its `anchor_type` is unregistered.
16
+ * - Unknown-type forward compatibility: surfaced in `unknown_types`,
17
+ * never counted toward plurality, never invalidating — the same rule
18
+ * as unknown event types (§1.2.4).
19
+ * - The `anchor_plurality` annotation per §2.11.11, with
20
+ * `single_anchor: true` as a TIER, never a failure — signal not block,
21
+ * exactly like `cross_attestation_missing` (D052) and
22
+ * `in_envelope: false` (D051).
23
+ * - The §2.11.4 hard conditions, UNCHANGED: `cross_log_threshold_not_met`
24
+ * (consumer threshold M, default 1) and
25
+ * `cross_log_equivocation_detected` (pairwise committed-leaf-byte
26
+ * comparison across trusted logs) are the only hard rejections;
27
+ * censorship-shaped disagreement is flagged
28
+ * (`cross_log_censorship_suspected`) with the silent log identified,
29
+ * never rejected.
30
+ *
31
+ * Every verification here is a pure function of the bundle, the record
32
+ * hash, and the caller's trust configuration (§2.11.7(c)): no network, no
33
+ * wall clock, no randomness. Two runs on identical input produce identical
34
+ * output — the same determinism discipline as §4.6.
35
+ *
36
+ * The `rfc3161-tsa` and `opentimestamps` payload interiors are STRUCTURAL
37
+ * in this revision, matching the conformance corpus
38
+ * (spec/conformance/2.11/anchors/): the commitment-binding fields
39
+ * (`hashed_message_hex` / `commitment_hex`) MUST equal the bundle's record
40
+ * hash and are checked; the DER TimeStampToken and serialized `.ots` bytes
41
+ * are carried opaquely. Implementations with real RFC 3161 / OTS verifiers
42
+ * additionally verify those payloads and treat a cryptographic failure as
43
+ * an invalid proof.
44
+ */
45
+ import * as ed from '@noble/ed25519';
46
+ import { sha512 } from '@noble/hashes/sha2.js';
47
+ import { base64urlDecode, hexEncode, leafHash, sha256, verifyInclusion, } from '@atrib/mcp';
48
+ // @noble/ed25519 v3 needs sha512 wired via the hashes object. Idempotent;
49
+ // the same wiring @atrib/mcp performs on load, repeated so this module is
50
+ // safe to import in isolation.
51
+ ed.hashes.sha512 = sha512;
52
+ ed.hashes.sha512Async = (m) => Promise.resolve(sha512(m));
53
+ const utf8 = new TextEncoder();
54
+ const utf8Decode = new TextDecoder();
55
+ /** §2.11.10 domain-separation prefix for the anchoring-claim artifact. */
56
+ export const ANCHOR_CLAIM_PREFIX = 'atrib-anchor/v1:';
57
+ /** Registered non-atrib-log anchor types per the §2.11.8 v1 registry. */
58
+ export const REGISTERED_NON_LOG_ANCHOR_TYPES = new Set([
59
+ 'sigstore-rekor',
60
+ 'rfc3161-tsa',
61
+ 'opentimestamps',
62
+ ]);
63
+ // ── Internals ────────────────────────────────────────────────────────
64
+ function b64decode(s) {
65
+ return new Uint8Array(Buffer.from(s, 'base64'));
66
+ }
67
+ /**
68
+ * JCS-equivalent serialization for the FLAT objects the corpus signs
69
+ * (ASCII string / integer values only): JSON.stringify with sorted keys.
70
+ */
71
+ function sortedJson(obj) {
72
+ const sorted = {};
73
+ for (const key of Object.keys(obj).sort()) {
74
+ const value = obj[key];
75
+ if (value !== undefined)
76
+ sorted[key] = value;
77
+ }
78
+ return JSON.stringify(sorted);
79
+ }
80
+ /** §2.4.2 key_id = SHA-256(key_name || 0x0A || 0x01 || public_key_bytes)[:4] */
81
+ function computeKeyId(origin, publicKey) {
82
+ const nameBytes = utf8.encode(origin);
83
+ const preimage = new Uint8Array(nameBytes.length + 2 + publicKey.length);
84
+ preimage.set(nameBytes, 0);
85
+ preimage[nameBytes.length] = 0x0a;
86
+ preimage[nameBytes.length + 1] = 0x01;
87
+ preimage.set(publicKey, nameBytes.length + 2);
88
+ return sha256(preimage).slice(0, 4);
89
+ }
90
+ /** Parse a §2.4.3 signed note (3-line body + blank line + signature line). */
91
+ function parseCheckpoint(checkpoint) {
92
+ const lines = checkpoint.split('\n');
93
+ if (lines.length < 5)
94
+ return null;
95
+ const origin = lines[0];
96
+ const sizeStr = lines[1];
97
+ const rootB64 = lines[2];
98
+ if (origin === undefined || sizeStr === undefined || rootB64 === undefined)
99
+ return null;
100
+ if (lines[3] !== '')
101
+ return null;
102
+ const sigLine = lines[4];
103
+ if (sigLine === undefined)
104
+ return null;
105
+ const m = sigLine.match(/^[—-] (\S+) (\S+)\s*$/);
106
+ if (!m)
107
+ return null;
108
+ const sigOrigin = m[1];
109
+ if (sigOrigin !== origin)
110
+ return null;
111
+ const decoded = b64decode(m[2]);
112
+ if (decoded.length !== 4 + 64)
113
+ return null;
114
+ if (!/^\d+$/.test(sizeStr))
115
+ return null;
116
+ const body = `${origin}\n${sizeStr}\n${rootB64}\n`;
117
+ return {
118
+ origin,
119
+ treeSize: Number(sizeStr),
120
+ root: b64decode(rootB64),
121
+ bodyBytes: utf8.encode(body),
122
+ keyId: decoded.slice(0, 4),
123
+ signature: decoded.slice(4),
124
+ };
125
+ }
126
+ /** Verify a signed checkpoint against a trust-material entry. */
127
+ async function verifyCheckpoint(checkpoint, material) {
128
+ const parsed = parseCheckpoint(checkpoint);
129
+ if (!parsed)
130
+ return null;
131
+ if (parsed.origin !== material.origin)
132
+ return null;
133
+ const pubkey = b64decode(material.pubkey_b64);
134
+ const expectedKeyId = computeKeyId(material.origin, pubkey);
135
+ if (hexEncode(parsed.keyId) !== hexEncode(expectedKeyId))
136
+ return null;
137
+ const ok = await ed.verifyAsync(parsed.signature, parsed.bodyBytes, pubkey);
138
+ return ok ? parsed : null;
139
+ }
140
+ // ── Per-element verification (§2.11.7(c) pure function) ─────────────
141
+ /**
142
+ * Verify one `log_proofs` element against the bundle's `record_hash` and
143
+ * the caller's trust material. Pure: no network, no clock, no randomness.
144
+ * Never throws; unexpected failures surface as `invalid` (§5.8).
145
+ */
146
+ export async function verifyAnchorProofElement(el, recordHash, trust) {
147
+ try {
148
+ return await verifyElementInner(el, recordHash, trust);
149
+ }
150
+ catch {
151
+ return {
152
+ status: 'invalid',
153
+ anchorType: typeof el?.anchor_type === 'string' ? el.anchor_type : 'atrib-log',
154
+ anchorId: typeof el?.anchor_id === 'string'
155
+ ? el.anchor_id
156
+ : typeof el?.log_id === 'string'
157
+ ? el.log_id
158
+ : '',
159
+ attestedTimeMs: null,
160
+ entryBytesB64: null,
161
+ };
162
+ }
163
+ }
164
+ async function verifyElementInner(el, recordHash, trust) {
165
+ // Guard non-object elements as malformed rather than crashing on access.
166
+ if (typeof el !== 'object' || el === null) {
167
+ return {
168
+ status: 'malformed',
169
+ anchorType: 'atrib-log',
170
+ anchorId: '',
171
+ attestedTimeMs: null,
172
+ entryBytesB64: null,
173
+ };
174
+ }
175
+ const anchorType = el.anchor_type;
176
+ const recordHashHex = recordHash.startsWith('sha256:')
177
+ ? recordHash.slice('sha256:'.length)
178
+ : recordHash;
179
+ // Rule (a): anchor_type absent (or explicit "atrib-log") requires the
180
+ // legacy (log_id, checkpoint, inclusion_proof) triple; when the
181
+ // discriminator is absent a `proof` object is additionally forbidden.
182
+ if (anchorType === undefined || anchorType === 'atrib-log') {
183
+ if (typeof el.log_id !== 'string' ||
184
+ typeof el.checkpoint !== 'string' ||
185
+ !Array.isArray(el.inclusion_proof) ||
186
+ (anchorType === undefined && el.proof !== undefined)) {
187
+ return {
188
+ status: 'malformed',
189
+ anchorType: 'atrib-log',
190
+ anchorId: typeof el.log_id === 'string' ? el.log_id : '',
191
+ attestedTimeMs: null,
192
+ entryBytesB64: null,
193
+ };
194
+ }
195
+ const base = {
196
+ anchorType: 'atrib-log',
197
+ anchorId: el.log_id,
198
+ attestedTimeMs: null,
199
+ entryBytesB64: el.entry_bytes_b64 ?? null,
200
+ };
201
+ const material = trust.trust_material.logs[el.log_id];
202
+ if (!material || typeof el.entry_bytes_b64 !== 'string' || typeof el.log_index !== 'number') {
203
+ return { ...base, status: 'invalid' };
204
+ }
205
+ const parsed = await verifyCheckpoint(el.checkpoint, material);
206
+ if (!parsed)
207
+ return { ...base, status: 'invalid' };
208
+ const entryBytes = b64decode(el.entry_bytes_b64);
209
+ // The 90-byte entry embeds record_hash at bytes [1..33] (§2.3.1).
210
+ if (entryBytes.length !== 90 || hexEncode(entryBytes.slice(1, 33)) !== recordHashHex) {
211
+ return { ...base, status: 'invalid' };
212
+ }
213
+ const proof = el.inclusion_proof.map(b64decode);
214
+ const ok = verifyInclusion(el.log_index, parsed.treeSize, leafHash(entryBytes), proof, parsed.root);
215
+ return { ...base, status: ok ? 'verified' : 'invalid' };
216
+ }
217
+ // Rule (b): anchor_type present and != "atrib-log" requires anchor_id +
218
+ // proof. Malformation takes precedence over unknown-type surfacing: an
219
+ // element violating rule (b) is malformed per §2.11.9(e) even when its
220
+ // anchor_type is unregistered.
221
+ if (typeof el.anchor_id !== 'string' || typeof el.proof !== 'object' || el.proof === null) {
222
+ return {
223
+ status: 'malformed',
224
+ anchorType,
225
+ anchorId: el.anchor_id ?? '',
226
+ attestedTimeMs: null,
227
+ entryBytesB64: null,
228
+ };
229
+ }
230
+ const base = {
231
+ anchorType,
232
+ anchorId: el.anchor_id,
233
+ attestedTimeMs: null,
234
+ entryBytesB64: null,
235
+ };
236
+ if (!REGISTERED_NON_LOG_ANCHOR_TYPES.has(anchorType)) {
237
+ // Forward compatibility (§2.11.8): surfaced, not counted, never invalidating.
238
+ return { ...base, status: 'unknown' };
239
+ }
240
+ const proof = el.proof;
241
+ if (anchorType === 'sigstore-rekor') {
242
+ const material = trust.trust_material.rekor?.[el.anchor_id];
243
+ const entryBodyB64 = proof['entry_body_b64'];
244
+ const logIndex = proof['log_index'];
245
+ const checkpoint = proof['checkpoint'];
246
+ const inclusionProof = proof['inclusion_proof'];
247
+ const integratedTimeMs = proof['integrated_time_ms'];
248
+ const setB64 = proof['signed_entry_timestamp_b64'];
249
+ if (!material ||
250
+ typeof entryBodyB64 !== 'string' ||
251
+ typeof logIndex !== 'number' ||
252
+ typeof checkpoint !== 'string' ||
253
+ !Array.isArray(inclusionProof) ||
254
+ typeof integratedTimeMs !== 'number' ||
255
+ typeof setB64 !== 'string') {
256
+ return { ...base, status: 'invalid' };
257
+ }
258
+ // 1. Reconstruct the anchor-claim artifact from the bundle's record_hash
259
+ // (§2.11.10). An entry whose artifact does not reconstruct is an
260
+ // INVALID proof — not counted, not equivocation — even when its
261
+ // embedded signature is genuinely valid over its own artifact.
262
+ const expectedArtifact = ANCHOR_CLAIM_PREFIX + recordHash;
263
+ const bodyBytes = b64decode(entryBodyB64);
264
+ let body;
265
+ try {
266
+ body = JSON.parse(utf8Decode.decode(bodyBytes));
267
+ }
268
+ catch {
269
+ return { ...base, status: 'invalid' };
270
+ }
271
+ const artifactB64 = body['artifact_b64'];
272
+ const pubB64url = body['public_key_b64url'];
273
+ const sigB64url = body['signature_b64url'];
274
+ if (typeof artifactB64 !== 'string' ||
275
+ typeof pubB64url !== 'string' ||
276
+ typeof sigB64url !== 'string') {
277
+ return { ...base, status: 'invalid' };
278
+ }
279
+ const artifactBytes = b64decode(artifactB64);
280
+ const artifact = utf8Decode.decode(artifactBytes);
281
+ if (artifact !== expectedArtifact || !artifact.startsWith(ANCHOR_CLAIM_PREFIX)) {
282
+ return { ...base, status: 'invalid' };
283
+ }
284
+ // 2. Verify the FRESH anchoring signature over the artifact bytes —
285
+ // never the record's own signature (§2.11.10).
286
+ const sigOk = await ed.verifyAsync(base64urlDecode(sigB64url), artifactBytes, base64urlDecode(pubB64url));
287
+ if (!sigOk)
288
+ return { ...base, status: 'invalid' };
289
+ // 3. Verify the inclusion proof against the checkpoint.
290
+ const parsed = await verifyCheckpoint(checkpoint, material);
291
+ if (!parsed)
292
+ return { ...base, status: 'invalid' };
293
+ const inclusionOk = verifyInclusion(logIndex, parsed.treeSize, leafHash(bodyBytes), inclusionProof.map(b64decode), parsed.root);
294
+ if (!inclusionOk)
295
+ return { ...base, status: 'invalid' };
296
+ // 4. Verify the signed entry timestamp over the reconstructed input.
297
+ const setInput = sortedJson({
298
+ entry_body_b64: entryBodyB64,
299
+ integrated_time_ms: integratedTimeMs,
300
+ log_index: logIndex,
301
+ });
302
+ const setOk = await ed.verifyAsync(b64decode(setB64), utf8.encode(setInput), b64decode(material.pubkey_b64));
303
+ if (!setOk)
304
+ return { ...base, status: 'invalid' };
305
+ return { ...base, status: 'verified', attestedTimeMs: integratedTimeMs };
306
+ }
307
+ if (anchorType === 'rfc3161-tsa') {
308
+ // STRUCTURAL verification in this revision: the commitment-binding
309
+ // field must equal the bundle's record hash; the DER token is opaque.
310
+ // A token whose hashedMessage differs is an invalid proof, not
311
+ // equivocation (§2.11.11).
312
+ const hashedMessageHex = proof['hashed_message_hex'];
313
+ const tokenB64 = proof['timestamp_token_b64'];
314
+ const genTimeMs = proof['gen_time_ms'];
315
+ if (typeof hashedMessageHex !== 'string' ||
316
+ typeof tokenB64 !== 'string' ||
317
+ typeof genTimeMs !== 'number' ||
318
+ hashedMessageHex !== recordHashHex ||
319
+ b64decode(tokenB64).length === 0) {
320
+ return { ...base, status: 'invalid' };
321
+ }
322
+ return { ...base, status: 'verified', attestedTimeMs: genTimeMs };
323
+ }
324
+ // opentimestamps. A `pending` proof is carried and upgraded in place
325
+ // later (§2.11.8); it counts in pending_count, never toward plurality.
326
+ const commitmentHex = proof['commitment_hex'];
327
+ const otsB64 = proof['ots_b64'];
328
+ const status = proof['status'];
329
+ if (typeof commitmentHex !== 'string' ||
330
+ typeof otsB64 !== 'string' ||
331
+ commitmentHex !== recordHashHex ||
332
+ b64decode(otsB64).length === 0) {
333
+ return { ...base, status: 'invalid' };
334
+ }
335
+ if (status === 'pending')
336
+ return { ...base, status: 'pending' };
337
+ const attestedTimeMs = proof['attested_time_ms'];
338
+ if (status !== 'complete' || typeof attestedTimeMs !== 'number') {
339
+ return { ...base, status: 'invalid' };
340
+ }
341
+ return { ...base, status: 'verified', attestedTimeMs };
342
+ }
343
+ /**
344
+ * Operator-group key for independence counting (§2.11.11): the declared
345
+ * group when the trust config names one, else one group per distinct
346
+ * `(anchor_type, anchor_id)` pair (the default grouping).
347
+ */
348
+ export function anchorOperatorGroup(anchorType, anchorId, trust) {
349
+ for (const g of trust.operator_groups ?? []) {
350
+ for (const m of g.members) {
351
+ if (m.anchor_type === anchorType && m.anchor_id === anchorId)
352
+ return `group:${g.group}`;
353
+ }
354
+ }
355
+ return `pair:${anchorType} ${anchorId}`;
356
+ }
357
+ // ── Bundle-level verdict (§2.11.11 annotation + §2.11.4 hard conditions) ──
358
+ /**
359
+ * Compute the `anchor_plurality` annotation and the unchanged §2.11.4 hard
360
+ * conditions for a proof bundle. Deterministic: identical bundle + trust
361
+ * config + not-found responses in, identical verdict out. Never throws;
362
+ * a structurally hopeless bundle degrades to zero counts (§5.8).
363
+ *
364
+ * `single_anchor: true` is a TIER: the record stays valid, `hard_reject`
365
+ * stays false. Hard rejection is reserved for `cross_log_threshold_not_met`
366
+ * and `cross_log_equivocation_detected`; `cross_log_censorship_suspected`
367
+ * is a flag, not a rejection.
368
+ */
369
+ export async function verifyAnchorPlurality(bundle, trust, notFoundResponses = []) {
370
+ const elements = typeof bundle === 'object' && bundle !== null && Array.isArray(bundle.log_proofs)
371
+ ? bundle.log_proofs
372
+ : [];
373
+ const recordHash = typeof bundle === 'object' && bundle !== null && typeof bundle.record_hash === 'string'
374
+ ? bundle.record_hash
375
+ : '';
376
+ const results = [];
377
+ for (const el of elements) {
378
+ results.push(await verifyAnchorProofElement(el, recordHash, trust));
379
+ }
380
+ const malformedIndices = [];
381
+ const invalidIndices = [];
382
+ const unknownTypes = [];
383
+ const groups = new Set();
384
+ const times = [];
385
+ let verified = 0;
386
+ let pending = 0;
387
+ results.forEach((r, i) => {
388
+ if (r.status === 'malformed')
389
+ malformedIndices.push(i);
390
+ if (r.status === 'invalid')
391
+ invalidIndices.push(i);
392
+ if (r.status === 'unknown' && !unknownTypes.includes(r.anchorType)) {
393
+ unknownTypes.push(r.anchorType);
394
+ }
395
+ if (r.status === 'pending')
396
+ pending += 1;
397
+ if (r.status === 'verified') {
398
+ verified += 1;
399
+ groups.add(anchorOperatorGroup(r.anchorType, r.anchorId, trust));
400
+ if (r.attestedTimeMs !== null)
401
+ times.push(r.attestedTimeMs);
402
+ }
403
+ });
404
+ const requiredAnchors = trust.required_anchors ?? 2;
405
+ const thresholdM = trust.threshold_m ?? 1;
406
+ const trustedLogs = trust.trusted_logs ?? [];
407
+ // §2.11.4 threshold: count verified atrib-log proofs in the trusted set.
408
+ // Untrusted-set proofs are surfaced, never counted toward M.
409
+ const trustedVerified = results.filter((r) => r.status === 'verified' && r.anchorType === 'atrib-log' && trustedLogs.includes(r.anchorId));
410
+ const untrustedSurfaced = results
411
+ .filter((r) => r.status === 'verified' && r.anchorType === 'atrib-log' && !trustedLogs.includes(r.anchorId))
412
+ .map((r) => r.anchorId);
413
+ const thresholdNotMet = trustedVerified.length < thresholdM;
414
+ // §2.11.4 step 4, unchanged: pairwise committed-leaf-byte comparison
415
+ // across trusted logs for the same record_hash.
416
+ let equivocation = false;
417
+ let disagreeingPair = null;
418
+ for (let i = 0; i < trustedVerified.length; i++) {
419
+ for (let j = i + 1; j < trustedVerified.length; j++) {
420
+ const a = trustedVerified[i];
421
+ const b = trustedVerified[j];
422
+ if (a.entryBytesB64 !== null && b.entryBytesB64 !== null && a.entryBytesB64 !== b.entryBytesB64) {
423
+ equivocation = true;
424
+ disagreeingPair = {
425
+ log_id_a: a.anchorId,
426
+ leaf_hash_a_hex: hexEncode(leafHash(b64decode(a.entryBytesB64))),
427
+ log_id_b: b.anchorId,
428
+ leaf_hash_b_hex: hexEncode(leafHash(b64decode(b.entryBytesB64))),
429
+ };
430
+ }
431
+ }
432
+ }
433
+ // §2.11.4 censorship-shaped equivocation: a trusted log reports not-found
434
+ // inside the epoch window while another trusted log holds a verified
435
+ // proof. Flag, not rejection; the silent log is identified.
436
+ let censorship = false;
437
+ let silentLog = null;
438
+ for (const nf of notFoundResponses) {
439
+ if (nf.status === 'not_found' && trustedLogs.includes(nf.log_id) && trustedVerified.length > 0) {
440
+ censorship = true;
441
+ silentLog = nf.log_id;
442
+ }
443
+ }
444
+ const independentCount = groups.size;
445
+ const annotation = {
446
+ proof_count: elements.length,
447
+ verified_count: verified,
448
+ pending_count: pending,
449
+ malformed_count: malformedIndices.length,
450
+ unknown_types: unknownTypes,
451
+ independent_count: independentCount,
452
+ plurality_met: independentCount >= requiredAnchors,
453
+ single_anchor: independentCount === 1,
454
+ equivocation_detected: equivocation,
455
+ anchored_at_range_ms: times.length > 0 ? [Math.min(...times), Math.max(...times)] : null,
456
+ };
457
+ return {
458
+ anchor_plurality: annotation,
459
+ malformed_indices: malformedIndices,
460
+ invalid_indices: invalidIndices,
461
+ trusted_verified_count: trustedVerified.length,
462
+ cross_log_threshold_not_met: thresholdNotMet,
463
+ cross_log_equivocation_detected: equivocation,
464
+ cross_log_censorship_suspected: censorship,
465
+ silent_log: silentLog,
466
+ untrusted_surfaced: untrustedSurfaced,
467
+ disagreeing_pair: disagreeingPair,
468
+ // Hard rejection is reserved for the §2.11.4 conditions. single_anchor
469
+ // is a tier, never a failure (§2.11.11).
470
+ hard_reject: thresholdNotMet || equivocation,
471
+ };
472
+ }
473
+ //# sourceMappingURL=anchor-plurality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor-plurality.js","sourceRoot":"","sources":["../src/anchor-plurality.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { JWK, JSONWebKeySet, JWTPayload } from 'jose';
2
2
  import type { AAuthAuthorizationEvidenceInput, AAuthAuthorizationEvidenceVerification } from './aauth-evidence.js';
3
3
  import type { DpopReplayCache } from './dpop-replay-cache.js';
4
+ import type { X401AuthorizationEvidenceInput, X401AuthorizationEvidenceVerification } from './x401-evidence.js';
4
5
  export type EvidenceCheckStatus = 'passed' | 'failed' | 'unresolved' | 'not_checked';
5
6
  export type OAuthSignaturePolicy = 'require' | 'best-effort' | 'off';
6
7
  export type OAuthEvidenceProtocol = 'oauth2' | 'mcp_oauth';
@@ -151,9 +152,12 @@ export declare function verifyOAuthAuthorizationEvidence(input: OAuthAuthorizati
151
152
  export type AuthorizationEvidenceInput = {
152
153
  protocol?: 'aauth';
153
154
  aauth: AAuthAuthorizationEvidenceInput;
155
+ } | {
156
+ protocol?: 'x401';
157
+ x401: X401AuthorizationEvidenceInput;
154
158
  } | {
155
159
  protocol?: OAuthEvidenceProtocol;
156
160
  oauth: OAuthAuthorizationEvidenceInput;
157
- } | AAuthAuthorizationEvidenceInput | OAuthAuthorizationEvidenceInput;
158
- export declare function verifyAuthorizationEvidence(evidence: AuthorizationEvidenceInput): Promise<EvidenceVerificationBlock | AAuthAuthorizationEvidenceVerification>;
161
+ } | AAuthAuthorizationEvidenceInput | X401AuthorizationEvidenceInput | OAuthAuthorizationEvidenceInput;
162
+ export declare function verifyAuthorizationEvidence(evidence: AuthorizationEvidenceInput): Promise<EvidenceVerificationBlock | AAuthAuthorizationEvidenceVerification | X401AuthorizationEvidenceVerification>;
159
163
  //# sourceMappingURL=authorization-evidence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorization-evidence.d.ts","sourceRoot":"","sources":["../src/authorization-evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authorization-evidence.d.ts","sourceRoot":"","sources":["../src/authorization-evidence.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  import { base64urlEncode, sha256 } from '@atrib/mcp';
3
3
  import { calculateJwkThumbprint, createLocalJWKSet, decodeJwt, decodeProtectedHeader, importJWK, jwtVerify, } from 'jose';
4
4
  import { verifyAAuthAuthorizationEvidence } from './aauth-evidence.js';
5
+ import { verifyX401AuthorizationEvidence } from './x401-evidence.js';
5
6
  function asArray(value) {
6
7
  if (typeof value === 'string')
7
8
  return [value];
@@ -426,6 +427,17 @@ function isAAuthAuthorizationEvidenceInput(evidence) {
426
427
  'httpSignature' in evidence ||
427
428
  'r3' in evidence);
428
429
  }
430
+ function isX401AuthorizationEvidenceInput(evidence) {
431
+ if (evidence.protocol === 'x401')
432
+ return true;
433
+ return ('headers' in evidence ||
434
+ 'headerSet' in evidence ||
435
+ 'proofRequest' in evidence ||
436
+ 'proofResponse' in evidence ||
437
+ 'proofResult' in evidence ||
438
+ 'resultVerified' in evidence ||
439
+ 'tokenVerified' in evidence);
440
+ }
429
441
  export async function verifyAuthorizationEvidence(evidence) {
430
442
  if ('aauth' in evidence) {
431
443
  return verifyAAuthAuthorizationEvidence({
@@ -433,6 +445,15 @@ export async function verifyAuthorizationEvidence(evidence) {
433
445
  protocol: 'aauth',
434
446
  });
435
447
  }
448
+ if ('x401' in evidence) {
449
+ return verifyX401AuthorizationEvidence({
450
+ ...evidence.x401,
451
+ protocol: 'x401',
452
+ });
453
+ }
454
+ if (isX401AuthorizationEvidenceInput(evidence)) {
455
+ return verifyX401AuthorizationEvidence(evidence);
456
+ }
436
457
  if (isAAuthAuthorizationEvidenceInput(evidence)) {
437
458
  return verifyAAuthAuthorizationEvidence(evidence);
438
459
  }