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.
- package/dist/src/adapters/oauth-id-jag/import-v1.d.ts +74 -0
- package/dist/src/adapters/oauth-id-jag/import-v1.d.ts.map +1 -0
- package/dist/src/adapters/oauth-id-jag/import-v1.js +243 -0
- package/dist/src/adapters/oauth-id-jag/import-v1.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/profiles/a2a/identity-v1.d.ts +44 -0
- package/dist/src/profiles/a2a/identity-v1.d.ts.map +1 -0
- package/dist/src/profiles/a2a/identity-v1.js +208 -0
- package/dist/src/profiles/a2a/identity-v1.js.map +1 -0
- package/dist/src/profiles/a2a/index.d.ts +2 -0
- package/dist/src/profiles/a2a/index.d.ts.map +1 -0
- package/dist/src/profiles/a2a/index.js +2 -0
- package/dist/src/profiles/a2a/index.js.map +1 -0
- package/dist/src/profiles/mcp/authorization-v1.d.ts +88 -0
- package/dist/src/profiles/mcp/authorization-v1.d.ts.map +1 -0
- package/dist/src/profiles/mcp/authorization-v1.js +215 -0
- package/dist/src/profiles/mcp/authorization-v1.js.map +1 -0
- package/dist/src/profiles/mcp/index.d.ts +2 -0
- package/dist/src/profiles/mcp/index.d.ts.map +1 -0
- package/dist/src/profiles/mcp/index.js +2 -0
- package/dist/src/profiles/mcp/index.js.map +1 -0
- package/dist/src/v2/action-reference/index.d.ts +2 -0
- package/dist/src/v2/action-reference/index.d.ts.map +1 -0
- package/dist/src/v2/action-reference/index.js +2 -0
- package/dist/src/v2/action-reference/index.js.map +1 -0
- package/dist/src/v2/action-reference/v2.d.ts +23 -0
- package/dist/src/v2/action-reference/v2.d.ts.map +1 -0
- package/dist/src/v2/action-reference/v2.js +57 -0
- package/dist/src/v2/action-reference/v2.js.map +1 -0
- package/dist/src/v2/authority-delegation/budget.d.ts +20 -0
- package/dist/src/v2/authority-delegation/budget.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/budget.js +141 -0
- package/dist/src/v2/authority-delegation/budget.js.map +1 -0
- package/dist/src/v2/authority-delegation/canonical.d.ts +12 -0
- package/dist/src/v2/authority-delegation/canonical.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/canonical.js +33 -0
- package/dist/src/v2/authority-delegation/canonical.js.map +1 -0
- package/dist/src/v2/authority-delegation/compare.d.ts +4 -0
- package/dist/src/v2/authority-delegation/compare.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/compare.js +67 -0
- package/dist/src/v2/authority-delegation/compare.js.map +1 -0
- package/dist/src/v2/authority-delegation/index.d.ts +10 -0
- package/dist/src/v2/authority-delegation/index.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/index.js +12 -0
- package/dist/src/v2/authority-delegation/index.js.map +1 -0
- package/dist/src/v2/authority-delegation/issue.d.ts +10 -0
- package/dist/src/v2/authority-delegation/issue.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/issue.js +52 -0
- package/dist/src/v2/authority-delegation/issue.js.map +1 -0
- package/dist/src/v2/authority-delegation/parse.d.ts +4 -0
- package/dist/src/v2/authority-delegation/parse.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/parse.js +96 -0
- package/dist/src/v2/authority-delegation/parse.js.map +1 -0
- package/dist/src/v2/authority-delegation/schema.d.ts +7 -0
- package/dist/src/v2/authority-delegation/schema.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/schema.js +177 -0
- package/dist/src/v2/authority-delegation/schema.js.map +1 -0
- package/dist/src/v2/authority-delegation/scope.d.ts +6 -0
- package/dist/src/v2/authority-delegation/scope.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/scope.js +50 -0
- package/dist/src/v2/authority-delegation/scope.js.map +1 -0
- package/dist/src/v2/authority-delegation/types.d.ts +98 -0
- package/dist/src/v2/authority-delegation/types.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/types.js +10 -0
- package/dist/src/v2/authority-delegation/types.js.map +1 -0
- package/dist/src/v2/authority-delegation/verify.d.ts +5 -0
- package/dist/src/v2/authority-delegation/verify.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/verify.js +124 -0
- package/dist/src/v2/authority-delegation/verify.js.map +1 -0
- package/dist/src/v2/identity-binding/did-aps.d.ts +12 -0
- package/dist/src/v2/identity-binding/did-aps.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/did-aps.js +53 -0
- package/dist/src/v2/identity-binding/did-aps.js.map +1 -0
- package/dist/src/v2/identity-binding/index.d.ts +6 -0
- package/dist/src/v2/identity-binding/index.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/index.js +6 -0
- package/dist/src/v2/identity-binding/index.js.map +1 -0
- package/dist/src/v2/identity-binding/passport.d.ts +18 -0
- package/dist/src/v2/identity-binding/passport.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/passport.js +144 -0
- package/dist/src/v2/identity-binding/passport.js.map +1 -0
- package/dist/src/v2/identity-binding/principal-binding.d.ts +20 -0
- package/dist/src/v2/identity-binding/principal-binding.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/principal-binding.js +128 -0
- package/dist/src/v2/identity-binding/principal-binding.js.map +1 -0
- package/dist/src/v2/identity-binding/revocation.d.ts +12 -0
- package/dist/src/v2/identity-binding/revocation.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/revocation.js +97 -0
- package/dist/src/v2/identity-binding/revocation.js.map +1 -0
- package/dist/src/v2/identity-binding/types.d.ts +72 -0
- package/dist/src/v2/identity-binding/types.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/types.js +4 -0
- package/dist/src/v2/identity-binding/types.js.map +1 -0
- package/dist/src/v2/identity-binding/validation.d.ts +9 -0
- package/dist/src/v2/identity-binding/validation.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/validation.js +104 -0
- package/dist/src/v2/identity-binding/validation.js.map +1 -0
- package/dist/src/v2/receipt-core/decision-ref.d.ts +23 -0
- package/dist/src/v2/receipt-core/decision-ref.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/decision-ref.js +75 -0
- package/dist/src/v2/receipt-core/decision-ref.js.map +1 -0
- package/dist/src/v2/receipt-core/jcs.d.ts +15 -0
- package/dist/src/v2/receipt-core/jcs.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/jcs.js +198 -0
- package/dist/src/v2/receipt-core/jcs.js.map +1 -0
- package/dist/src/v2/receipt-core/receipt.d.ts +21 -0
- package/dist/src/v2/receipt-core/receipt.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/receipt.js +132 -0
- package/dist/src/v2/receipt-core/receipt.js.map +1 -0
- package/dist/src/v2/receipt-core/supporting-record.d.ts +55 -0
- package/dist/src/v2/receipt-core/supporting-record.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/supporting-record.js +243 -0
- package/dist/src/v2/receipt-core/supporting-record.js.map +1 -0
- package/dist/src/v2/receipt-core/types.d.ts +94 -0
- package/dist/src/v2/receipt-core/types.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/types.js +4 -0
- package/dist/src/v2/receipt-core/types.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/v2/receipt-core/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC"}
|