agent-passport-system 4.1.1 → 4.2.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.
Files changed (121) hide show
  1. package/dist/src/adapters/oauth-id-jag/import-v1.d.ts +74 -0
  2. package/dist/src/adapters/oauth-id-jag/import-v1.d.ts.map +1 -0
  3. package/dist/src/adapters/oauth-id-jag/import-v1.js +243 -0
  4. package/dist/src/adapters/oauth-id-jag/import-v1.js.map +1 -0
  5. package/dist/src/index.d.ts +3 -0
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +6 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/profiles/a2a/identity-v1.d.ts +44 -0
  10. package/dist/src/profiles/a2a/identity-v1.d.ts.map +1 -0
  11. package/dist/src/profiles/a2a/identity-v1.js +208 -0
  12. package/dist/src/profiles/a2a/identity-v1.js.map +1 -0
  13. package/dist/src/profiles/a2a/index.d.ts +2 -0
  14. package/dist/src/profiles/a2a/index.d.ts.map +1 -0
  15. package/dist/src/profiles/a2a/index.js +2 -0
  16. package/dist/src/profiles/a2a/index.js.map +1 -0
  17. package/dist/src/profiles/mcp/authorization-v1.d.ts +88 -0
  18. package/dist/src/profiles/mcp/authorization-v1.d.ts.map +1 -0
  19. package/dist/src/profiles/mcp/authorization-v1.js +215 -0
  20. package/dist/src/profiles/mcp/authorization-v1.js.map +1 -0
  21. package/dist/src/profiles/mcp/index.d.ts +2 -0
  22. package/dist/src/profiles/mcp/index.d.ts.map +1 -0
  23. package/dist/src/profiles/mcp/index.js +2 -0
  24. package/dist/src/profiles/mcp/index.js.map +1 -0
  25. package/dist/src/v2/action-reference/index.d.ts +2 -0
  26. package/dist/src/v2/action-reference/index.d.ts.map +1 -0
  27. package/dist/src/v2/action-reference/index.js +2 -0
  28. package/dist/src/v2/action-reference/index.js.map +1 -0
  29. package/dist/src/v2/action-reference/v2.d.ts +23 -0
  30. package/dist/src/v2/action-reference/v2.d.ts.map +1 -0
  31. package/dist/src/v2/action-reference/v2.js +57 -0
  32. package/dist/src/v2/action-reference/v2.js.map +1 -0
  33. package/dist/src/v2/authority-delegation/budget.d.ts +20 -0
  34. package/dist/src/v2/authority-delegation/budget.d.ts.map +1 -0
  35. package/dist/src/v2/authority-delegation/budget.js +141 -0
  36. package/dist/src/v2/authority-delegation/budget.js.map +1 -0
  37. package/dist/src/v2/authority-delegation/canonical.d.ts +12 -0
  38. package/dist/src/v2/authority-delegation/canonical.d.ts.map +1 -0
  39. package/dist/src/v2/authority-delegation/canonical.js +33 -0
  40. package/dist/src/v2/authority-delegation/canonical.js.map +1 -0
  41. package/dist/src/v2/authority-delegation/compare.d.ts +4 -0
  42. package/dist/src/v2/authority-delegation/compare.d.ts.map +1 -0
  43. package/dist/src/v2/authority-delegation/compare.js +67 -0
  44. package/dist/src/v2/authority-delegation/compare.js.map +1 -0
  45. package/dist/src/v2/authority-delegation/index.d.ts +10 -0
  46. package/dist/src/v2/authority-delegation/index.d.ts.map +1 -0
  47. package/dist/src/v2/authority-delegation/index.js +12 -0
  48. package/dist/src/v2/authority-delegation/index.js.map +1 -0
  49. package/dist/src/v2/authority-delegation/issue.d.ts +10 -0
  50. package/dist/src/v2/authority-delegation/issue.d.ts.map +1 -0
  51. package/dist/src/v2/authority-delegation/issue.js +52 -0
  52. package/dist/src/v2/authority-delegation/issue.js.map +1 -0
  53. package/dist/src/v2/authority-delegation/parse.d.ts +4 -0
  54. package/dist/src/v2/authority-delegation/parse.d.ts.map +1 -0
  55. package/dist/src/v2/authority-delegation/parse.js +96 -0
  56. package/dist/src/v2/authority-delegation/parse.js.map +1 -0
  57. package/dist/src/v2/authority-delegation/schema.d.ts +7 -0
  58. package/dist/src/v2/authority-delegation/schema.d.ts.map +1 -0
  59. package/dist/src/v2/authority-delegation/schema.js +177 -0
  60. package/dist/src/v2/authority-delegation/schema.js.map +1 -0
  61. package/dist/src/v2/authority-delegation/scope.d.ts +6 -0
  62. package/dist/src/v2/authority-delegation/scope.d.ts.map +1 -0
  63. package/dist/src/v2/authority-delegation/scope.js +50 -0
  64. package/dist/src/v2/authority-delegation/scope.js.map +1 -0
  65. package/dist/src/v2/authority-delegation/types.d.ts +98 -0
  66. package/dist/src/v2/authority-delegation/types.d.ts.map +1 -0
  67. package/dist/src/v2/authority-delegation/types.js +10 -0
  68. package/dist/src/v2/authority-delegation/types.js.map +1 -0
  69. package/dist/src/v2/authority-delegation/verify.d.ts +5 -0
  70. package/dist/src/v2/authority-delegation/verify.d.ts.map +1 -0
  71. package/dist/src/v2/authority-delegation/verify.js +124 -0
  72. package/dist/src/v2/authority-delegation/verify.js.map +1 -0
  73. package/dist/src/v2/identity-binding/did-aps.d.ts +12 -0
  74. package/dist/src/v2/identity-binding/did-aps.d.ts.map +1 -0
  75. package/dist/src/v2/identity-binding/did-aps.js +53 -0
  76. package/dist/src/v2/identity-binding/did-aps.js.map +1 -0
  77. package/dist/src/v2/identity-binding/index.d.ts +6 -0
  78. package/dist/src/v2/identity-binding/index.d.ts.map +1 -0
  79. package/dist/src/v2/identity-binding/index.js +6 -0
  80. package/dist/src/v2/identity-binding/index.js.map +1 -0
  81. package/dist/src/v2/identity-binding/passport.d.ts +18 -0
  82. package/dist/src/v2/identity-binding/passport.d.ts.map +1 -0
  83. package/dist/src/v2/identity-binding/passport.js +144 -0
  84. package/dist/src/v2/identity-binding/passport.js.map +1 -0
  85. package/dist/src/v2/identity-binding/principal-binding.d.ts +20 -0
  86. package/dist/src/v2/identity-binding/principal-binding.d.ts.map +1 -0
  87. package/dist/src/v2/identity-binding/principal-binding.js +128 -0
  88. package/dist/src/v2/identity-binding/principal-binding.js.map +1 -0
  89. package/dist/src/v2/identity-binding/revocation.d.ts +12 -0
  90. package/dist/src/v2/identity-binding/revocation.d.ts.map +1 -0
  91. package/dist/src/v2/identity-binding/revocation.js +97 -0
  92. package/dist/src/v2/identity-binding/revocation.js.map +1 -0
  93. package/dist/src/v2/identity-binding/types.d.ts +72 -0
  94. package/dist/src/v2/identity-binding/types.d.ts.map +1 -0
  95. package/dist/src/v2/identity-binding/types.js +4 -0
  96. package/dist/src/v2/identity-binding/types.js.map +1 -0
  97. package/dist/src/v2/identity-binding/validation.d.ts +9 -0
  98. package/dist/src/v2/identity-binding/validation.d.ts.map +1 -0
  99. package/dist/src/v2/identity-binding/validation.js +104 -0
  100. package/dist/src/v2/identity-binding/validation.js.map +1 -0
  101. package/dist/src/v2/receipt-core/decision-ref.d.ts +23 -0
  102. package/dist/src/v2/receipt-core/decision-ref.d.ts.map +1 -0
  103. package/dist/src/v2/receipt-core/decision-ref.js +75 -0
  104. package/dist/src/v2/receipt-core/decision-ref.js.map +1 -0
  105. package/dist/src/v2/receipt-core/jcs.d.ts +15 -0
  106. package/dist/src/v2/receipt-core/jcs.d.ts.map +1 -0
  107. package/dist/src/v2/receipt-core/jcs.js +198 -0
  108. package/dist/src/v2/receipt-core/jcs.js.map +1 -0
  109. package/dist/src/v2/receipt-core/receipt.d.ts +21 -0
  110. package/dist/src/v2/receipt-core/receipt.d.ts.map +1 -0
  111. package/dist/src/v2/receipt-core/receipt.js +132 -0
  112. package/dist/src/v2/receipt-core/receipt.js.map +1 -0
  113. package/dist/src/v2/receipt-core/supporting-record.d.ts +55 -0
  114. package/dist/src/v2/receipt-core/supporting-record.d.ts.map +1 -0
  115. package/dist/src/v2/receipt-core/supporting-record.js +243 -0
  116. package/dist/src/v2/receipt-core/supporting-record.js.map +1 -0
  117. package/dist/src/v2/receipt-core/types.d.ts +94 -0
  118. package/dist/src/v2/receipt-core/types.d.ts.map +1 -0
  119. package/dist/src/v2/receipt-core/types.js +4 -0
  120. package/dist/src/v2/receipt-core/types.js.map +1 -0
  121. package/package.json +5 -5
@@ -0,0 +1,132 @@
1
+ // Copyright (c) 2026 Tymofii Pidlisnyi
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { createHash } from 'node:crypto';
4
+ import { sign, verify } from '../../crypto/keys.js';
5
+ import { assertExactKeys, strictJCS } from './jcs.js';
6
+ export const RECEIPT_ID_TAG = 'APS-RECEIPT-ID-V1';
7
+ export const RECEIPT_SIG_TAG = 'APS-RECEIPT-SIG-V1';
8
+ const HEX64 = /^[0-9a-f]{64}$/;
9
+ const HEX128 = /^[0-9a-f]{128}$/;
10
+ const UTC_MS = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
11
+ const sha256Hex = (s) => createHash('sha256').update(s, 'utf8').digest('hex');
12
+ const compareUtf8 = (a, b) => Buffer.compare(Buffer.from(a, 'utf8'), Buffer.from(b, 'utf8'));
13
+ function compareEvidence(a, b) {
14
+ return compareUtf8(a.artifact_type, b.artifact_type) || compareUtf8(a.sha256, b.sha256);
15
+ }
16
+ function compareSignatures(a, b) {
17
+ return compareUtf8(a.signer, b.signer) || compareUtf8(a.key_id, b.key_id);
18
+ }
19
+ function isExactUtcMilliseconds(value) {
20
+ if (!UTC_MS.test(value))
21
+ return false;
22
+ const parsed = new Date(value);
23
+ return !Number.isNaN(parsed.valueOf()) && parsed.toISOString() === value;
24
+ }
25
+ function receiptWithout(receipt, ...keys) {
26
+ const copy = { ...receipt };
27
+ keys.forEach(k => delete copy[k]);
28
+ return copy;
29
+ }
30
+ export function receiptIdPayloadV1(receipt) {
31
+ return `${RECEIPT_ID_TAG}\0${strictJCS(receiptWithout(receipt, 'receipt_id', 'signatures'))}`;
32
+ }
33
+ export function computeReceiptIdV1(receipt) {
34
+ return sha256Hex(receiptIdPayloadV1(receipt));
35
+ }
36
+ export function receiptSignaturePayloadV1(receipt, descriptor) {
37
+ const form = { receipt: receiptWithout(receipt, 'signatures'), signer: descriptor };
38
+ return `${RECEIPT_SIG_TAG}\0${strictJCS(form)}`;
39
+ }
40
+ export function validateReceiptV1(receipt, requireValues = true) {
41
+ assertExactKeys(receipt, ['profile', 'receipt_id', 'receipt_type', 'issuer', 'subject_agent', 'action_ref', 'delegation_ref', 'decision_ref', 'issued_at', 'evidence_refs', 'result', 'prev', 'signatures'], ['profile', 'receipt_id', 'receipt_type', 'issuer', 'subject_agent', 'action_ref', 'delegation_ref', 'issued_at', 'evidence_refs', 'result', 'signatures'], 'ReceiptV1');
42
+ strictJCS(receipt);
43
+ if (receipt.profile !== 'aps-receipt-v1')
44
+ throw new TypeError('ReceiptV1: profile');
45
+ if (!receipt.receipt_type || !receipt.issuer || !receipt.subject_agent || !receipt.delegation_ref)
46
+ throw new TypeError('ReceiptV1: empty identifier');
47
+ if (requireValues && !HEX64.test(receipt.receipt_id))
48
+ throw new TypeError('ReceiptV1: receipt_id');
49
+ if (!HEX64.test(receipt.action_ref))
50
+ throw new TypeError('ReceiptV1: action_ref');
51
+ if (receipt.decision_ref !== undefined && !HEX64.test(receipt.decision_ref))
52
+ throw new TypeError('ReceiptV1: decision_ref');
53
+ if (receipt.prev !== undefined && !HEX64.test(receipt.prev))
54
+ throw new TypeError('ReceiptV1: prev');
55
+ if (!isExactUtcMilliseconds(receipt.issued_at))
56
+ throw new TypeError('ReceiptV1: issued_at');
57
+ if (typeof receipt.result !== 'object' || receipt.result === null || Array.isArray(receipt.result))
58
+ throw new TypeError('ReceiptV1: result');
59
+ if (!Array.isArray(receipt.evidence_refs) || !Array.isArray(receipt.signatures))
60
+ throw new TypeError('ReceiptV1: arrays');
61
+ const seenEvidence = new Set();
62
+ receipt.evidence_refs.forEach((ref, i) => {
63
+ assertExactKeys(ref, ['artifact_type', 'sha256'], ['artifact_type', 'sha256'], 'EvidenceRefV1');
64
+ if (!ref.artifact_type || !HEX64.test(ref.sha256))
65
+ throw new TypeError('EvidenceRefV1: value');
66
+ const key = `${ref.artifact_type}\0${ref.sha256}`;
67
+ if (seenEvidence.has(key))
68
+ throw new TypeError('ReceiptV1: duplicate evidence_ref');
69
+ seenEvidence.add(key);
70
+ if (i > 0 && compareEvidence(receipt.evidence_refs[i - 1], ref) >= 0)
71
+ throw new TypeError('ReceiptV1: evidence_refs not sorted');
72
+ });
73
+ const seenSigs = new Set();
74
+ receipt.signatures.forEach((proof, i) => {
75
+ assertExactKeys(proof, ['signer', 'key_id', 'alg', 'value'], ['signer', 'key_id', 'alg', 'value'], 'ReceiptSignatureV1');
76
+ if (!proof.signer || !proof.key_id || proof.alg !== 'Ed25519' || (requireValues && !HEX128.test(proof.value)))
77
+ throw new TypeError('ReceiptSignatureV1: value');
78
+ const key = `${proof.signer}\0${proof.key_id}`;
79
+ if (seenSigs.has(key))
80
+ throw new TypeError('ReceiptV1: duplicate signature');
81
+ seenSigs.add(key);
82
+ if (i > 0 && compareSignatures(receipt.signatures[i - 1], proof) >= 0)
83
+ throw new TypeError('ReceiptV1: signatures not sorted');
84
+ });
85
+ if (requireValues && !receipt.signatures.some(s => s.signer === receipt.issuer))
86
+ throw new TypeError('ReceiptV1: issuer signature missing');
87
+ }
88
+ export function createReceiptV1(fields, signers) {
89
+ if (signers.length === 0)
90
+ throw new TypeError('ReceiptV1: at least one signer');
91
+ const copiedFields = structuredClone(fields);
92
+ const evidence_refs = [...copiedFields.evidence_refs].sort(compareEvidence);
93
+ const descriptors = signers.map(s => ({ signer: s.signer, key_id: s.key_id, alg: 'Ed25519', private_key: s.private_key }))
94
+ .sort(compareSignatures);
95
+ const draft = { ...copiedFields, evidence_refs, receipt_id: '0'.repeat(64), signatures: [] };
96
+ validateReceiptV1(draft, false);
97
+ draft.receipt_id = computeReceiptIdV1(draft);
98
+ draft.signatures = descriptors.map(({ private_key, ...descriptor }) => ({
99
+ ...descriptor,
100
+ value: sign(receiptSignaturePayloadV1(draft, descriptor), private_key),
101
+ }));
102
+ validateReceiptV1(draft);
103
+ return draft;
104
+ }
105
+ export function verifyReceiptV1(receipt, resolveKey) {
106
+ const errors = [];
107
+ try {
108
+ validateReceiptV1(receipt);
109
+ }
110
+ catch (err) {
111
+ return { valid: false, receipt_id_valid: false, signature_results: [], errors: [err instanceof Error ? err.message : String(err)] };
112
+ }
113
+ const receipt_id_valid = computeReceiptIdV1(receipt) === receipt.receipt_id;
114
+ if (!receipt_id_valid)
115
+ errors.push('receipt_id_mismatch');
116
+ const signature_results = receipt.signatures.map(proof => {
117
+ try {
118
+ const key = resolveKey(proof.signer, proof.key_id, receipt.issued_at);
119
+ if (!key)
120
+ return { signer: proof.signer, key_id: proof.key_id, valid: false, reason: 'key_unresolved' };
121
+ const { value, ...descriptor } = proof;
122
+ return { signer: proof.signer, key_id: proof.key_id, valid: verify(receiptSignaturePayloadV1(receipt, descriptor), value, key) };
123
+ }
124
+ catch {
125
+ return { signer: proof.signer, key_id: proof.key_id, valid: false, reason: 'key_resolution_error' };
126
+ }
127
+ });
128
+ if (signature_results.some(r => !r.valid))
129
+ errors.push('signature_invalid');
130
+ return { valid: errors.length === 0, receipt_id_valid, signature_results, errors };
131
+ }
132
+ //# sourceMappingURL=receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../../src/v2/receipt-core/receipt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { EvidenceBundleBodyV2, EvidenceBundleMemberInputV2, EvidenceBundleMemberV2, EvidenceBundleProofV2, JsonValue, SupportingRecordV1 } from './types.js';
2
+ export declare const SUPPORTING_RECORD_ID_TAG: 'APS-SUPPORTING-RECORD-ID-V1';
3
+ export declare const SUPPORTING_RECORD_SIG_TAG: 'APS-SUPPORTING-RECORD-SIG-V1';
4
+ export declare function supportingRecordIdPayloadV1(record: SupportingRecordV1): string;
5
+ export declare function computeSupportingRecordIdV1(record: SupportingRecordV1): string;
6
+ export declare function supportingRecordSignaturePayloadV1(record: SupportingRecordV1): string;
7
+ export declare function validateSupportingRecordV1(record: SupportingRecordV1, requireCrypto?: boolean): void;
8
+ export declare function createSupportingRecordV1(fields: Omit<SupportingRecordV1, 'record_id' | 'sig'>, privateKey: string): SupportingRecordV1;
9
+ export declare function verifySupportingRecordV1(record: SupportingRecordV1, publicKey: string): {
10
+ valid: boolean;
11
+ id_valid: boolean;
12
+ signature_valid: boolean;
13
+ };
14
+ export declare function evidenceBundleMerkleRootV2(entries: EvidenceBundleMemberV2[]): string;
15
+ export declare function buildEvidenceBundleBodyV2(members: EvidenceBundleMemberInputV2[]): EvidenceBundleBodyV2;
16
+ export declare function verifyEvidenceBundleBodyV2(body: EvidenceBundleBodyV2, payloads?: Record<string, JsonValue>): boolean;
17
+ /** Build an inclusion proof over the already-sorted manifest members.
18
+ * Odd nodes are promoted, never duplicated, and the promotion is explicit in
19
+ * the proof so a verifier can validate the tree shape from leaf_count. */
20
+ export declare function buildEvidenceBundleProofV2(entries: EvidenceBundleMemberV2[], memberId: string): EvidenceBundleProofV2;
21
+ export declare function verifyEvidenceBundleProofV2(proof: EvidenceBundleProofV2, trustedRoot: string, payload?: JsonValue): boolean;
22
+ export type SupportingRecordFormat = {
23
+ format: 'supporting-record-v1';
24
+ canonicalization: 'rfc8785';
25
+ legacy: false;
26
+ } | {
27
+ format: 'evidence-bundle-v1';
28
+ canonicalization: 'aps-legacy-null-dropping';
29
+ legacy: true;
30
+ } | {
31
+ format: 'composition-check-v0';
32
+ canonicalization: 'rfc8785-tagged-v0';
33
+ legacy: true;
34
+ } | {
35
+ format: 'accountability-record-0.1.0';
36
+ canonicalization: 'rfc8785-untagged';
37
+ legacy: true;
38
+ } | {
39
+ format: 'read-fidelity-unwrapped';
40
+ canonicalization: 'rfc8785-untagged';
41
+ legacy: true;
42
+ } | {
43
+ format: 'revocation-observation-unversioned';
44
+ canonicalization: 'aps-legacy-null-dropping';
45
+ legacy: true;
46
+ } | {
47
+ format: 'unknown';
48
+ canonicalization: 'unknown';
49
+ legacy: false;
50
+ };
51
+ /** Explicit discriminator dispatch. Verification code must never try both canonicalizers. */
52
+ export declare function classifySupportingRecordFormat(value: unknown): SupportingRecordFormat;
53
+ /** Legacy canonical bytes are exposed only after explicit legacy classification. */
54
+ export declare function legacyNullDroppingPayload(value: JsonValue): string;
55
+ //# sourceMappingURL=supporting-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supporting-record.d.ts","sourceRoot":"","sources":["../../../../src/v2/receipt-core/supporting-record.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,sBAAsB,EAA6B,qBAAqB,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE5L,eAAO,MAAM,wBAAwB,EAAG,6BAAsC,CAAA;AAC9E,eAAO,MAAM,yBAAyB,EAAG,8BAAuC,CAAA;AAkBhF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAE9E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAE9E;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAErF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,UAAO,GAAG,IAAI,CAYjG;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,KAAK,CAAC,EACrD,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAKvJ;AAYD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAsBpF;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,2BAA2B,EAAE,GAAG,oBAAoB,CAWtG;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAepH;AAMD;;2EAE2E;AAC3E,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAoBrH;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CA+B3H;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,gBAAgB,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,GAC9E;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,gBAAgB,EAAE,0BAA0B,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAC5F;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACvF;IAAE,MAAM,EAAE,6BAA6B,CAAC;IAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAC7F;IAAE,MAAM,EAAE,yBAAyB,CAAC;IAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzF;IAAE,MAAM,EAAE,oCAAoC,CAAC;IAAC,gBAAgB,EAAE,0BAA0B,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAC5G;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,gBAAgB,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAA;AAErE,6FAA6F;AAC7F,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAUrF;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAElE"}
@@ -0,0 +1,243 @@
1
+ // Copyright (c) 2026 Tymofii Pidlisnyi
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { createHash } from 'node:crypto';
4
+ import { sign, verify } from '../../crypto/keys.js';
5
+ import { canonicalize } from '../../core/canonical.js';
6
+ import { assertExactKeys, strictJCS } from './jcs.js';
7
+ export const SUPPORTING_RECORD_ID_TAG = 'APS-SUPPORTING-RECORD-ID-V1';
8
+ export const SUPPORTING_RECORD_SIG_TAG = 'APS-SUPPORTING-RECORD-SIG-V1';
9
+ const HEX64 = /^[0-9a-f]{64}$/;
10
+ const HEX128 = /^[0-9a-f]{128}$/;
11
+ const UTC_MS = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
12
+ const sha256 = (value) => createHash('sha256').update(value).digest();
13
+ const sha256Hex = (value) => sha256(value).toString('hex');
14
+ const isExactUtcMilliseconds = (value) => {
15
+ if (!UTC_MS.test(value))
16
+ return false;
17
+ const parsed = new Date(value);
18
+ return !Number.isNaN(parsed.valueOf()) && parsed.toISOString() === value;
19
+ };
20
+ function without(record, ...keys) {
21
+ const copy = { ...record };
22
+ keys.forEach(key => delete copy[key]);
23
+ return copy;
24
+ }
25
+ export function supportingRecordIdPayloadV1(record) {
26
+ return `${SUPPORTING_RECORD_ID_TAG}\0${record.record_type}\0${strictJCS(without(record, 'record_id', 'sig'))}`;
27
+ }
28
+ export function computeSupportingRecordIdV1(record) {
29
+ return sha256Hex(supportingRecordIdPayloadV1(record));
30
+ }
31
+ export function supportingRecordSignaturePayloadV1(record) {
32
+ return `${SUPPORTING_RECORD_SIG_TAG}\0${record.record_type}\0${strictJCS(without(record, 'sig'))}`;
33
+ }
34
+ export function validateSupportingRecordV1(record, requireCrypto = true) {
35
+ assertExactKeys(record, ['profile', 'record_id', 'record_type', 'issuer', 'issuer_key_id', 'issued_at', 'action_ref', 'body', 'sig_alg', 'sig'], ['profile', 'record_id', 'record_type', 'issuer', 'issuer_key_id', 'issued_at', 'body', 'sig_alg', 'sig'], 'SupportingRecordV1');
36
+ strictJCS(record);
37
+ if (record.profile !== 'aps-supporting-record-v1')
38
+ throw new TypeError('SupportingRecordV1: profile');
39
+ if (!record.record_type || !record.issuer || !record.issuer_key_id)
40
+ throw new TypeError('SupportingRecordV1: identifier');
41
+ if (!isExactUtcMilliseconds(record.issued_at))
42
+ throw new TypeError('SupportingRecordV1: issued_at');
43
+ if (record.action_ref !== undefined && !HEX64.test(record.action_ref))
44
+ throw new TypeError('SupportingRecordV1: action_ref');
45
+ if (typeof record.body !== 'object' || record.body === null || Array.isArray(record.body))
46
+ throw new TypeError('SupportingRecordV1: body');
47
+ if (record.sig_alg !== 'Ed25519')
48
+ throw new TypeError('SupportingRecordV1: sig_alg');
49
+ if (requireCrypto && (!HEX64.test(record.record_id) || !HEX128.test(record.sig)))
50
+ throw new TypeError('SupportingRecordV1: crypto encoding');
51
+ }
52
+ export function createSupportingRecordV1(fields, privateKey) {
53
+ const record = { ...structuredClone(fields), record_id: '0'.repeat(64), sig: '' };
54
+ validateSupportingRecordV1(record, false);
55
+ record.record_id = computeSupportingRecordIdV1(record);
56
+ record.sig = sign(supportingRecordSignaturePayloadV1(record), privateKey);
57
+ validateSupportingRecordV1(record);
58
+ return record;
59
+ }
60
+ export function verifySupportingRecordV1(record, publicKey) {
61
+ try {
62
+ validateSupportingRecordV1(record);
63
+ }
64
+ catch {
65
+ return { valid: false, id_valid: false, signature_valid: false };
66
+ }
67
+ const id_valid = computeSupportingRecordIdV1(record) === record.record_id;
68
+ const signature_valid = verify(supportingRecordSignaturePayloadV1(record), record.sig, publicKey);
69
+ return { valid: id_valid && signature_valid, id_valid, signature_valid };
70
+ }
71
+ function validateEvidenceBundleMemberV2(entry) {
72
+ assertExactKeys(entry, ['member_id', 'member_type', 'sha256'], ['member_id', 'member_type', 'sha256'], 'EvidenceBundleMemberV2');
73
+ if (!entry.member_id || !entry.member_type || !HEX64.test(entry.sha256))
74
+ throw new TypeError('EvidenceBundleMemberV2: value');
75
+ }
76
+ function entryCanonical(entry) {
77
+ validateEvidenceBundleMemberV2(entry);
78
+ return strictJCS(entry);
79
+ }
80
+ export function evidenceBundleMerkleRootV2(entries) {
81
+ if (entries.length === 0)
82
+ throw new TypeError('EvidenceBundleV2: at least one member');
83
+ const seen = new Set();
84
+ const canonicalEntries = entries.map((entry, i) => {
85
+ const canonical = entryCanonical(entry);
86
+ if (seen.has(entry.member_id))
87
+ throw new TypeError('EvidenceBundleV2: duplicate member_id');
88
+ seen.add(entry.member_id);
89
+ if (i > 0 && Buffer.compare(Buffer.from(entryCanonical(entries[i - 1]), 'utf8'), Buffer.from(canonical, 'utf8')) >= 0) {
90
+ throw new TypeError('EvidenceBundleV2: members not sorted');
91
+ }
92
+ return canonical;
93
+ });
94
+ let level = canonicalEntries.map(canonical => sha256(Buffer.concat([Buffer.from([0]), Buffer.from(canonical, 'utf8')])));
95
+ while (level.length > 1) {
96
+ const next = [];
97
+ for (let i = 0; i < level.length; i += 2) {
98
+ if (i + 1 === level.length)
99
+ next.push(level[i]);
100
+ else
101
+ next.push(sha256(Buffer.concat([Buffer.from([1]), level[i], level[i + 1]])));
102
+ }
103
+ level = next;
104
+ }
105
+ return level[0].toString('hex');
106
+ }
107
+ export function buildEvidenceBundleBodyV2(members) {
108
+ if (members.length === 0)
109
+ throw new TypeError('EvidenceBundleV2: at least one member');
110
+ const seen = new Set();
111
+ const entries = members.map(member => {
112
+ assertExactKeys(member, ['member_id', 'member_type', 'payload'], ['member_id', 'member_type', 'payload'], 'EvidenceBundleMemberInputV2');
113
+ if (!member.member_id || !member.member_type)
114
+ throw new TypeError('EvidenceBundleV2: member identifier');
115
+ if (seen.has(member.member_id))
116
+ throw new TypeError('EvidenceBundleV2: duplicate member_id');
117
+ seen.add(member.member_id);
118
+ return { member_id: member.member_id, member_type: member.member_type, sha256: sha256Hex(strictJCS(member.payload)) };
119
+ }).sort((a, b) => Buffer.compare(Buffer.from(entryCanonical(a)), Buffer.from(entryCanonical(b))));
120
+ return { members: entries, merkle_root: evidenceBundleMerkleRootV2(entries) };
121
+ }
122
+ export function verifyEvidenceBundleBodyV2(body, payloads) {
123
+ try {
124
+ assertExactKeys(body, ['members', 'merkle_root'], ['members', 'merkle_root'], 'EvidenceBundleBodyV2');
125
+ if (!Array.isArray(body.members) || body.members.length === 0 || !HEX64.test(body.merkle_root))
126
+ return false;
127
+ const seen = new Set();
128
+ for (let i = 0; i < body.members.length; i++) {
129
+ const entry = body.members[i];
130
+ validateEvidenceBundleMemberV2(entry);
131
+ if (seen.has(entry.member_id))
132
+ return false;
133
+ seen.add(entry.member_id);
134
+ if (i > 0 && Buffer.compare(Buffer.from(entryCanonical(body.members[i - 1])), Buffer.from(entryCanonical(entry))) >= 0)
135
+ return false;
136
+ if (payloads && (!Object.prototype.hasOwnProperty.call(payloads, entry.member_id) || sha256Hex(strictJCS(payloads[entry.member_id])) !== entry.sha256))
137
+ return false;
138
+ }
139
+ return evidenceBundleMerkleRootV2(body.members) === body.merkle_root;
140
+ }
141
+ catch {
142
+ return false;
143
+ }
144
+ }
145
+ function evidenceLeaf(entry) {
146
+ return sha256(Buffer.concat([Buffer.from([0]), Buffer.from(entryCanonical(entry), 'utf8')]));
147
+ }
148
+ /** Build an inclusion proof over the already-sorted manifest members.
149
+ * Odd nodes are promoted, never duplicated, and the promotion is explicit in
150
+ * the proof so a verifier can validate the tree shape from leaf_count. */
151
+ export function buildEvidenceBundleProofV2(entries, memberId) {
152
+ evidenceBundleMerkleRootV2(entries);
153
+ const leaf_index = entries.findIndex(entry => entry.member_id === memberId);
154
+ if (leaf_index < 0)
155
+ throw new TypeError('EvidenceBundleV2: member not found');
156
+ let index = leaf_index;
157
+ let level = entries.map(evidenceLeaf);
158
+ const path = [];
159
+ while (level.length > 1) {
160
+ if (index % 2 === 1)
161
+ path.push({ position: 'left', sha256: level[index - 1].toString('hex') });
162
+ else if (index + 1 < level.length)
163
+ path.push({ position: 'right', sha256: level[index + 1].toString('hex') });
164
+ else
165
+ path.push({ position: 'promote' });
166
+ const next = [];
167
+ for (let i = 0; i < level.length; i += 2) {
168
+ if (i + 1 === level.length)
169
+ next.push(level[i]);
170
+ else
171
+ next.push(sha256(Buffer.concat([Buffer.from([1]), level[i], level[i + 1]])));
172
+ }
173
+ index = Math.floor(index / 2);
174
+ level = next;
175
+ }
176
+ return { profile: 'aps-evidence-proof-v2', member: { ...entries[leaf_index] }, leaf_index, leaf_count: entries.length, path };
177
+ }
178
+ export function verifyEvidenceBundleProofV2(proof, trustedRoot, payload) {
179
+ try {
180
+ assertExactKeys(proof, ['profile', 'member', 'leaf_index', 'leaf_count', 'path'], ['profile', 'member', 'leaf_index', 'leaf_count', 'path'], 'EvidenceBundleProofV2');
181
+ if (proof.profile !== 'aps-evidence-proof-v2' || !HEX64.test(trustedRoot))
182
+ return false;
183
+ validateEvidenceBundleMemberV2(proof.member);
184
+ if (!Number.isSafeInteger(proof.leaf_index) || !Number.isSafeInteger(proof.leaf_count) || proof.leaf_count < 1 || proof.leaf_index < 0 || proof.leaf_index >= proof.leaf_count || !Array.isArray(proof.path))
185
+ return false;
186
+ if (payload !== undefined && sha256Hex(strictJCS(payload)) !== proof.member.sha256)
187
+ return false;
188
+ let index = proof.leaf_index;
189
+ let width = proof.leaf_count;
190
+ let hash = evidenceLeaf(proof.member);
191
+ let pathIndex = 0;
192
+ while (width > 1) {
193
+ const step = proof.path[pathIndex++];
194
+ if (!step)
195
+ return false;
196
+ const expected = index % 2 === 1 ? 'left' : index + 1 < width ? 'right' : 'promote';
197
+ if (step.position !== expected)
198
+ return false;
199
+ if (step.position === 'promote') {
200
+ assertExactKeys(step, ['position'], ['position'], 'EvidenceBundleProofStepV2');
201
+ }
202
+ else {
203
+ assertExactKeys(step, ['position', 'sha256'], ['position', 'sha256'], 'EvidenceBundleProofStepV2');
204
+ if (!HEX64.test(step.sha256))
205
+ return false;
206
+ const sibling = Buffer.from(step.sha256, 'hex');
207
+ hash = step.position === 'left'
208
+ ? sha256(Buffer.concat([Buffer.from([1]), sibling, hash]))
209
+ : sha256(Buffer.concat([Buffer.from([1]), hash, sibling]));
210
+ }
211
+ index = Math.floor(index / 2);
212
+ width = Math.ceil(width / 2);
213
+ }
214
+ return pathIndex === proof.path.length && hash.toString('hex') === trustedRoot;
215
+ }
216
+ catch {
217
+ return false;
218
+ }
219
+ }
220
+ /** Explicit discriminator dispatch. Verification code must never try both canonicalizers. */
221
+ export function classifySupportingRecordFormat(value) {
222
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
223
+ return { format: 'unknown', canonicalization: 'unknown', legacy: false };
224
+ const v = value;
225
+ if (v.profile === 'aps-supporting-record-v1')
226
+ return { format: 'supporting-record-v1', canonicalization: 'rfc8785', legacy: false };
227
+ if (v.profile === 'aps-composition-check-v0')
228
+ return { format: 'composition-check-v0', canonicalization: 'rfc8785-tagged-v0', legacy: true };
229
+ if (v.spec_version === '0.1.0' && v.record_type === 'accountability_record')
230
+ return { format: 'accountability-record-0.1.0', canonicalization: 'rfc8785-untagged', legacy: true };
231
+ if (v.type === 'read_fidelity_receipt')
232
+ return { format: 'read-fidelity-unwrapped', canonicalization: 'rfc8785-untagged', legacy: true };
233
+ if (typeof v.manifest === 'object' && v.manifest !== null && v.manifest.profile === 'aps:evidence-bundle:v1')
234
+ return { format: 'evidence-bundle-v1', canonicalization: 'aps-legacy-null-dropping', legacy: true };
235
+ if ('authority_ref' in v && 'observer_key' in v && !('profile' in v))
236
+ return { format: 'revocation-observation-unversioned', canonicalization: 'aps-legacy-null-dropping', legacy: true };
237
+ return { format: 'unknown', canonicalization: 'unknown', legacy: false };
238
+ }
239
+ /** Legacy canonical bytes are exposed only after explicit legacy classification. */
240
+ export function legacyNullDroppingPayload(value) {
241
+ return canonicalize(value);
242
+ }
243
+ //# sourceMappingURL=supporting-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supporting-record.js","sourceRoot":"","sources":["../../../../src/v2/receipt-core/supporting-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ export type JsonPrimitive = null | boolean | number | string;
2
+ export type JsonValue = JsonPrimitive | JsonValue[] | {
3
+ [key: string]: JsonValue;
4
+ };
5
+ export type Hex64 = string;
6
+ export type Hex128 = string;
7
+ export interface EvidenceRefV1 {
8
+ artifact_type: string;
9
+ sha256: Hex64;
10
+ }
11
+ export interface ReceiptSignatureV1 {
12
+ signer: string;
13
+ key_id: string;
14
+ alg: 'Ed25519';
15
+ value: Hex128;
16
+ }
17
+ export interface ReceiptV1 {
18
+ profile: 'aps-receipt-v1';
19
+ receipt_id: Hex64;
20
+ receipt_type: string;
21
+ issuer: string;
22
+ subject_agent: string;
23
+ action_ref: Hex64;
24
+ delegation_ref: string;
25
+ decision_ref?: Hex64;
26
+ issued_at: string;
27
+ evidence_refs: EvidenceRefV1[];
28
+ result: {
29
+ [key: string]: JsonValue;
30
+ };
31
+ prev?: Hex64;
32
+ signatures: ReceiptSignatureV1[];
33
+ }
34
+ export interface ReceiptSignerV1 {
35
+ signer: string;
36
+ key_id: string;
37
+ private_key: string;
38
+ }
39
+ export interface DecisionRefInputV1 {
40
+ profile: 'aps-decision-ref-v1';
41
+ action_ref: Hex64;
42
+ authority_state_ref: Hex64;
43
+ policy_ref: Hex64;
44
+ context_ref: Hex64;
45
+ decision_output_ref: Hex64;
46
+ }
47
+ export interface CoreDecisionOutputV1 {
48
+ profile: 'aps-core-decision-output-v1';
49
+ verdict: 'permit' | 'deny' | 'narrow';
50
+ effective_authority_ref: Hex64 | null;
51
+ constraints: string[];
52
+ }
53
+ export interface SupportingRecordV1 {
54
+ profile: 'aps-supporting-record-v1';
55
+ record_id: Hex64;
56
+ record_type: string;
57
+ issuer: string;
58
+ issuer_key_id: string;
59
+ issued_at: string;
60
+ action_ref?: Hex64;
61
+ body: {
62
+ [key: string]: JsonValue;
63
+ };
64
+ sig_alg: 'Ed25519';
65
+ sig: Hex128;
66
+ }
67
+ export interface EvidenceBundleMemberInputV2 {
68
+ member_id: string;
69
+ member_type: string;
70
+ payload: JsonValue;
71
+ }
72
+ export interface EvidenceBundleMemberV2 {
73
+ member_id: string;
74
+ member_type: string;
75
+ sha256: Hex64;
76
+ }
77
+ export interface EvidenceBundleBodyV2 {
78
+ members: EvidenceBundleMemberV2[];
79
+ merkle_root: Hex64;
80
+ }
81
+ export type EvidenceBundleProofStepV2 = {
82
+ position: 'left' | 'right';
83
+ sha256: Hex64;
84
+ } | {
85
+ position: 'promote';
86
+ };
87
+ export interface EvidenceBundleProofV2 {
88
+ profile: 'aps-evidence-proof-v2';
89
+ member: EvidenceBundleMemberV2;
90
+ leaf_index: number;
91
+ leaf_count: number;
92
+ path: EvidenceBundleProofStepV2[];
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/v2/receipt-core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) 2026 Tymofii Pidlisnyi
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/v2/receipt-core/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC"}