@attestplane/attestplane 0.0.1 → 0.0.3-alpha
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/README.md +23 -9
- package/dist/adapter_conformance.d.ts +46 -0
- package/dist/adapter_conformance.d.ts.map +1 -0
- package/dist/adapter_conformance.js +160 -0
- package/dist/adapter_conformance.js.map +1 -0
- package/dist/adapters/langfuse.d.ts +51 -0
- package/dist/adapters/langfuse.d.ts.map +1 -0
- package/dist/adapters/langfuse.js +157 -0
- package/dist/adapters/langfuse.js.map +1 -0
- package/dist/adapters/langsmith.d.ts +53 -0
- package/dist/adapters/langsmith.d.ts.map +1 -0
- package/dist/adapters/langsmith.js +173 -0
- package/dist/adapters/langsmith.js.map +1 -0
- package/dist/adapters.d.ts +88 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +109 -0
- package/dist/adapters.js.map +1 -0
- package/dist/anchoring.d.ts +119 -0
- package/dist/anchoring.d.ts.map +1 -0
- package/dist/anchoring.js +340 -0
- package/dist/anchoring.js.map +1 -0
- package/dist/canonical.d.ts +11 -2
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +44 -31
- package/dist/canonical.js.map +1 -1
- package/dist/canonical_text.d.ts +30 -0
- package/dist/canonical_text.d.ts.map +1 -0
- package/dist/canonical_text.js +100 -0
- package/dist/canonical_text.js.map +1 -0
- package/dist/der.d.ts +55 -0
- package/dist/der.d.ts.map +1 -0
- package/dist/der.js +200 -0
- package/dist/der.js.map +1 -0
- package/dist/event_payloads.d.ts +118 -0
- package/dist/event_payloads.d.ts.map +1 -0
- package/dist/event_payloads.js +348 -0
- package/dist/event_payloads.js.map +1 -0
- package/dist/event_types.d.ts +47 -0
- package/dist/event_types.d.ts.map +1 -0
- package/dist/event_types.js +63 -0
- package/dist/event_types.js.map +1 -0
- package/dist/hashchain.d.ts +1 -0
- package/dist/hashchain.d.ts.map +1 -1
- package/dist/hashchain.js +25 -1
- package/dist/hashchain.js.map +1 -1
- package/dist/index.d.ts +23 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -2
- package/dist/index.js.map +1 -1
- package/dist/index_version.d.ts +9 -0
- package/dist/index_version.d.ts.map +1 -0
- package/dist/index_version.js +11 -0
- package/dist/index_version.js.map +1 -0
- package/dist/intoto.d.ts +48 -0
- package/dist/intoto.d.ts.map +1 -0
- package/dist/intoto.js +106 -0
- package/dist/intoto.js.map +1 -0
- package/dist/obligations.d.ts +41 -0
- package/dist/obligations.d.ts.map +1 -0
- package/dist/obligations.js +312 -0
- package/dist/obligations.js.map +1 -0
- package/dist/proof_bundle.d.ts +186 -0
- package/dist/proof_bundle.d.ts.map +1 -0
- package/dist/proof_bundle.js +299 -0
- package/dist/proof_bundle.js.map +1 -0
- package/dist/reason_codes.d.ts +38 -0
- package/dist/reason_codes.d.ts.map +1 -0
- package/dist/reason_codes.js +97 -0
- package/dist/reason_codes.js.map +1 -0
- package/dist/replay_verifier.d.ts +43 -0
- package/dist/replay_verifier.d.ts.map +1 -0
- package/dist/replay_verifier.js +98 -0
- package/dist/replay_verifier.js.map +1 -0
- package/dist/rfc3161.d.ts +52 -0
- package/dist/rfc3161.d.ts.map +1 -0
- package/dist/rfc3161.js +480 -0
- package/dist/rfc3161.js.map +1 -0
- package/dist/settlement_verifier.d.ts +34 -0
- package/dist/settlement_verifier.d.ts.map +1 -0
- package/dist/settlement_verifier.js +139 -0
- package/dist/settlement_verifier.js.map +1 -0
- package/dist/signing/base.d.ts +101 -0
- package/dist/signing/base.d.ts.map +1 -0
- package/dist/signing/base.js +144 -0
- package/dist/signing/base.js.map +1 -0
- package/dist/signing/providers.d.ts +113 -0
- package/dist/signing/providers.d.ts.map +1 -0
- package/dist/signing/providers.js +230 -0
- package/dist/signing/providers.js.map +1 -0
- package/dist/signing/signer.d.ts +66 -0
- package/dist/signing/signer.d.ts.map +1 -0
- package/dist/signing/signer.js +146 -0
- package/dist/signing/signer.js.map +1 -0
- package/dist/signing/trust_roots.d.ts +71 -0
- package/dist/signing/trust_roots.d.ts.map +1 -0
- package/dist/signing/trust_roots.js +267 -0
- package/dist/signing/trust_roots.js.map +1 -0
- package/dist/signing/verifier_ext.d.ts +77 -0
- package/dist/signing/verifier_ext.d.ts.map +1 -0
- package/dist/signing/verifier_ext.js +340 -0
- package/dist/signing/verifier_ext.js.map +1 -0
- package/dist/verifier.d.ts +39 -0
- package/dist/verifier.d.ts.map +1 -0
- package/dist/verifier.js +374 -0
- package/dist/verifier.js.map +1 -0
- package/package.json +2 -2
package/dist/verifier.js
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 The Attestplane Authors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* High-level proof-bundle verifier (TypeScript port of
|
|
5
|
+
* `sdk/python/src/attestplane/verifier.py`).
|
|
6
|
+
*
|
|
7
|
+
* Takes a parsed bundle object, performs a lightweight shape check
|
|
8
|
+
* (sufficient to safely rehydrate; callers needing full JSON Schema
|
|
9
|
+
* validation can run any standard validator against
|
|
10
|
+
* `schemas/v1/proof_bundle.schema.json`), rehydrates the contained
|
|
11
|
+
* events, re-walks the chain with `verifyChain`, and returns a
|
|
12
|
+
* `BundleVerificationResult`.
|
|
13
|
+
*
|
|
14
|
+
* Pure with respect to the bundle: no mutation, no signing, no I/O
|
|
15
|
+
* other than optionally reading a file when using `verifyProofBundleFile`.
|
|
16
|
+
*/
|
|
17
|
+
import { promises as fs } from 'node:fs';
|
|
18
|
+
import { POLICY_CHECK_EVENT } from './event_types.js';
|
|
19
|
+
import { GENESIS_HASH, SCHEMA_VERSION, headOf, verifyChain, } from './hashchain.js';
|
|
20
|
+
import { DEFAULT_FORBIDDEN_FIELDS } from './proof_bundle.js';
|
|
21
|
+
export class BundleVerificationError extends Error {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.name = 'BundleVerificationError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class BundleSchemaError extends BundleVerificationError {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = 'BundleSchemaError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function shortSummary(result) {
|
|
34
|
+
if (result.ok) {
|
|
35
|
+
return (`OK chain_id='${result.chain_id}' events=${result.event_count} ` +
|
|
36
|
+
`head=${result.head_hash_hex.slice(0, 16)}…`);
|
|
37
|
+
}
|
|
38
|
+
const bad = result.chain_result.first_bad_index;
|
|
39
|
+
return (`FAIL chain_id='${result.chain_id}' events=${result.event_count} ` +
|
|
40
|
+
`first_bad_index=${bad} reason=${JSON.stringify(result.chain_result.reason)} ` +
|
|
41
|
+
`agreement=${result.agreement} metadata_reason=${JSON.stringify(result.metadata_reason)} ` +
|
|
42
|
+
`policy_trace_refs_reason=${JSON.stringify(result.policy_trace_refs_reason)}`);
|
|
43
|
+
}
|
|
44
|
+
const REQUIRED_TOP_LEVEL = [
|
|
45
|
+
'bundle_version',
|
|
46
|
+
'chain_metadata',
|
|
47
|
+
'events',
|
|
48
|
+
'verification_report',
|
|
49
|
+
'forbidden_fields',
|
|
50
|
+
];
|
|
51
|
+
const REQUIRED_CHAIN_METADATA = [
|
|
52
|
+
'chain_id',
|
|
53
|
+
'schema_version',
|
|
54
|
+
'genesis_hash_hex',
|
|
55
|
+
'head_hash_hex',
|
|
56
|
+
'head_seq',
|
|
57
|
+
'producer_runtime',
|
|
58
|
+
];
|
|
59
|
+
const REQUIRED_VERIFICATION_REPORT = [
|
|
60
|
+
'ok',
|
|
61
|
+
'first_bad_index',
|
|
62
|
+
'reason',
|
|
63
|
+
'verified_at',
|
|
64
|
+
'verifier_version',
|
|
65
|
+
'verification_method',
|
|
66
|
+
];
|
|
67
|
+
const ALLOWED_TOP_LEVEL = new Set([
|
|
68
|
+
...REQUIRED_TOP_LEVEL,
|
|
69
|
+
'framework_mappings',
|
|
70
|
+
'signature',
|
|
71
|
+
'policy_trace_refs',
|
|
72
|
+
'signatures',
|
|
73
|
+
]);
|
|
74
|
+
const ALLOWED_VERIFICATION_METHODS = new Set([
|
|
75
|
+
'canonical-bytes-walk',
|
|
76
|
+
'canonical-bytes-walk+anchor',
|
|
77
|
+
]);
|
|
78
|
+
const HEX64 = /^[0-9a-f]{64}$/;
|
|
79
|
+
function isPlainObject(v) {
|
|
80
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
81
|
+
}
|
|
82
|
+
function validateShape(raw) {
|
|
83
|
+
if (!isPlainObject(raw)) {
|
|
84
|
+
throw new BundleSchemaError(`bundle must be a JSON object, got ${raw === null ? 'null' : typeof raw}`);
|
|
85
|
+
}
|
|
86
|
+
const unknown = Object.keys(raw).filter((k) => !ALLOWED_TOP_LEVEL.has(k));
|
|
87
|
+
if (unknown.length > 0) {
|
|
88
|
+
throw new BundleSchemaError(`bundle contains unknown top-level fields: ${JSON.stringify(unknown.sort())}`);
|
|
89
|
+
}
|
|
90
|
+
const missing = REQUIRED_TOP_LEVEL.filter((k) => !(k in raw));
|
|
91
|
+
if (missing.length > 0) {
|
|
92
|
+
throw new BundleSchemaError(`bundle missing required fields: ${JSON.stringify(missing)}`);
|
|
93
|
+
}
|
|
94
|
+
if (raw.bundle_version !== 1) {
|
|
95
|
+
throw new BundleSchemaError(`unsupported bundle_version=${JSON.stringify(raw.bundle_version)}; this verifier handles version 1 only`);
|
|
96
|
+
}
|
|
97
|
+
const cm = raw.chain_metadata;
|
|
98
|
+
if (!isPlainObject(cm)) {
|
|
99
|
+
throw new BundleSchemaError('chain_metadata must be a JSON object');
|
|
100
|
+
}
|
|
101
|
+
const missingCm = REQUIRED_CHAIN_METADATA.filter((k) => !(k in cm));
|
|
102
|
+
if (missingCm.length > 0) {
|
|
103
|
+
throw new BundleSchemaError(`chain_metadata missing required fields: ${JSON.stringify(missingCm)}`);
|
|
104
|
+
}
|
|
105
|
+
if (!Array.isArray(raw.events)) {
|
|
106
|
+
throw new BundleSchemaError('events must be an array');
|
|
107
|
+
}
|
|
108
|
+
if (!isPlainObject(raw.verification_report)) {
|
|
109
|
+
throw new BundleSchemaError('verification_report must be a JSON object');
|
|
110
|
+
}
|
|
111
|
+
const report = raw.verification_report;
|
|
112
|
+
const missingReport = REQUIRED_VERIFICATION_REPORT.filter((k) => !(k in report));
|
|
113
|
+
if (missingReport.length > 0) {
|
|
114
|
+
throw new BundleSchemaError(`verification_report missing required fields: ${JSON.stringify(missingReport)}`);
|
|
115
|
+
}
|
|
116
|
+
const method = report.verification_method;
|
|
117
|
+
if (!ALLOWED_VERIFICATION_METHODS.has(String(method))) {
|
|
118
|
+
throw new BundleSchemaError(`unsupported verification_method=${JSON.stringify(method)}`);
|
|
119
|
+
}
|
|
120
|
+
if (!Array.isArray(raw.forbidden_fields)) {
|
|
121
|
+
throw new BundleSchemaError('forbidden_fields must be an array');
|
|
122
|
+
}
|
|
123
|
+
const forbiddenFields = raw.forbidden_fields;
|
|
124
|
+
if (!forbiddenFields.every((item) => typeof item === 'string' && item.length > 0)) {
|
|
125
|
+
throw new BundleSchemaError('forbidden_fields must contain non-empty strings');
|
|
126
|
+
}
|
|
127
|
+
const missingForbidden = DEFAULT_FORBIDDEN_FIELDS.filter((term) => !forbiddenFields.includes(term));
|
|
128
|
+
if (missingForbidden.length > 0) {
|
|
129
|
+
throw new BundleSchemaError(`forbidden_fields missing required redaction terms: ${JSON.stringify(missingForbidden)}`);
|
|
130
|
+
}
|
|
131
|
+
if ('framework_mappings' in raw && !Array.isArray(raw.framework_mappings)) {
|
|
132
|
+
throw new BundleSchemaError('framework_mappings must be an array when present');
|
|
133
|
+
}
|
|
134
|
+
if ('policy_trace_refs' in raw && !Array.isArray(raw.policy_trace_refs)) {
|
|
135
|
+
throw new BundleSchemaError('policy_trace_refs must be an array when present');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function hexToBytes(hex) {
|
|
139
|
+
if (hex.length % 2 !== 0) {
|
|
140
|
+
throw new BundleSchemaError(`hex string has odd length: ${hex.length}`);
|
|
141
|
+
}
|
|
142
|
+
const out = new Uint8Array(hex.length / 2);
|
|
143
|
+
for (let i = 0; i < out.length; i++) {
|
|
144
|
+
const byte = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
145
|
+
if (Number.isNaN(byte)) {
|
|
146
|
+
throw new BundleSchemaError(`invalid hex byte at position ${i * 2}: ${hex.slice(i * 2, i * 2 + 2)}`);
|
|
147
|
+
}
|
|
148
|
+
out[i] = byte;
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
function deserializeSubject(raw) {
|
|
153
|
+
if (raw == null)
|
|
154
|
+
return null;
|
|
155
|
+
return { scheme: raw.scheme, value: raw.value };
|
|
156
|
+
}
|
|
157
|
+
function deserializeTimestamp(s) {
|
|
158
|
+
// Accept "YYYY-MM-DDThh:mm:ss.uuuuuuZ" with 6-digit microsecond precision.
|
|
159
|
+
// JavaScript Date is millisecond-precision; we drop the last three digits
|
|
160
|
+
// and round-trip through the standard ISO 8601 parser.
|
|
161
|
+
const match = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3})\d{3}Z$/.exec(s);
|
|
162
|
+
if (!match) {
|
|
163
|
+
throw new BundleSchemaError(`bad timestamp format: ${JSON.stringify(s)}`);
|
|
164
|
+
}
|
|
165
|
+
const date = new Date(`${match[1]}Z`);
|
|
166
|
+
if (Number.isNaN(date.getTime())) {
|
|
167
|
+
throw new BundleSchemaError(`unparsable timestamp: ${JSON.stringify(s)}`);
|
|
168
|
+
}
|
|
169
|
+
return date;
|
|
170
|
+
}
|
|
171
|
+
function deserializeAuditEvent(raw) {
|
|
172
|
+
return {
|
|
173
|
+
schema_version: raw.schema_version,
|
|
174
|
+
event_id: raw.event_id,
|
|
175
|
+
timestamp: deserializeTimestamp(raw.timestamp),
|
|
176
|
+
event_type: raw.event_type,
|
|
177
|
+
actor: raw.actor,
|
|
178
|
+
payload: raw.payload,
|
|
179
|
+
subject_ref: deserializeSubject(raw.subject_ref),
|
|
180
|
+
session_id: raw.session_id,
|
|
181
|
+
reference_db_ref: raw.reference_db_ref,
|
|
182
|
+
matched_input_ref: raw.matched_input_ref,
|
|
183
|
+
human_verifier: deserializeSubject(raw.human_verifier),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function rehydrateEvents(rawEvents) {
|
|
187
|
+
const chain = [];
|
|
188
|
+
for (let i = 0; i < rawEvents.length; i++) {
|
|
189
|
+
const raw = rawEvents[i];
|
|
190
|
+
try {
|
|
191
|
+
chain.push({
|
|
192
|
+
seq: raw.seq,
|
|
193
|
+
prev_hash: hexToBytes(raw.prev_hash_hex),
|
|
194
|
+
event_hash: hexToBytes(raw.event_hash_hex),
|
|
195
|
+
event: deserializeAuditEvent(raw.event),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
catch (exc) {
|
|
199
|
+
if (exc instanceof BundleSchemaError) {
|
|
200
|
+
throw new BundleSchemaError(`events[${i}]: ${exc.message}`);
|
|
201
|
+
}
|
|
202
|
+
throw exc;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return chain;
|
|
206
|
+
}
|
|
207
|
+
function bytesToHex(bytes) {
|
|
208
|
+
let out = '';
|
|
209
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
210
|
+
out += bytes[i].toString(16).padStart(2, '0');
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
function verifyMetadataClosure(bundle, events, chainResult) {
|
|
215
|
+
const metadata = bundle.chain_metadata;
|
|
216
|
+
const report = bundle.verification_report;
|
|
217
|
+
if (metadata.schema_version !== SCHEMA_VERSION) {
|
|
218
|
+
return {
|
|
219
|
+
ok: false,
|
|
220
|
+
reason: `chain_metadata.schema_version=${JSON.stringify(metadata.schema_version)}; this verifier handles ${SCHEMA_VERSION}`,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
if (metadata.genesis_hash_hex !== bytesToHex(GENESIS_HASH)) {
|
|
224
|
+
return {
|
|
225
|
+
ok: false,
|
|
226
|
+
reason: 'chain_metadata.genesis_hash_hex does not match substrate genesis hash',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
if (metadata.evidence_taxonomy_version !== undefined &&
|
|
230
|
+
metadata.evidence_taxonomy_version !== 1) {
|
|
231
|
+
return { ok: false, reason: 'chain_metadata.evidence_taxonomy_version must be 1 when present' };
|
|
232
|
+
}
|
|
233
|
+
const head = headOf(events);
|
|
234
|
+
if (metadata.head_seq !== head.seq) {
|
|
235
|
+
return {
|
|
236
|
+
ok: false,
|
|
237
|
+
reason: `chain_metadata.head_seq=${JSON.stringify(metadata.head_seq)} does not match computed head seq ${head.seq}`,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
if (metadata.head_hash_hex !== bytesToHex(head.event_hash)) {
|
|
241
|
+
return {
|
|
242
|
+
ok: false,
|
|
243
|
+
reason: 'chain_metadata.head_hash_hex does not match computed chain head',
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
if (Boolean(report.ok) !== chainResult.ok) {
|
|
247
|
+
return { ok: false, reason: 'verification_report.ok disagrees with recomputed chain result' };
|
|
248
|
+
}
|
|
249
|
+
if (report.first_bad_index !== chainResult.first_bad_index) {
|
|
250
|
+
return {
|
|
251
|
+
ok: false,
|
|
252
|
+
reason: 'verification_report.first_bad_index disagrees with recomputed chain result',
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (report.reason !== chainResult.reason) {
|
|
256
|
+
return {
|
|
257
|
+
ok: false,
|
|
258
|
+
reason: 'verification_report.reason disagrees with recomputed chain result',
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
if (chainResult.ok && (report.first_bad_index !== null || report.reason !== null)) {
|
|
262
|
+
return {
|
|
263
|
+
ok: false,
|
|
264
|
+
reason: 'verification_report carries failure detail while recomputed chain is ok',
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return { ok: true, reason: null };
|
|
268
|
+
}
|
|
269
|
+
function verifyPolicyTraceRefs(bundle, events) {
|
|
270
|
+
const expected = events
|
|
271
|
+
.filter((event) => event.event.event_type === POLICY_CHECK_EVENT)
|
|
272
|
+
.map((event) => bytesToHex(event.event_hash));
|
|
273
|
+
const hasRefs = bundle.policy_trace_refs !== undefined;
|
|
274
|
+
if (expected.length === 0) {
|
|
275
|
+
if (!hasRefs)
|
|
276
|
+
return { ok: true, reason: null };
|
|
277
|
+
const refs = bundle.policy_trace_refs;
|
|
278
|
+
if (refs.length === 0) {
|
|
279
|
+
return {
|
|
280
|
+
ok: false,
|
|
281
|
+
reason: 'policy_trace_refs must be absent, not empty, when no policy_check_event exists',
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
ok: false,
|
|
286
|
+
reason: 'policy_trace_refs present but bundle contains no policy_check_event',
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
if (!hasRefs) {
|
|
290
|
+
return {
|
|
291
|
+
ok: false,
|
|
292
|
+
reason: 'policy_trace_refs missing while bundle contains policy_check_event',
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
const refs = bundle.policy_trace_refs;
|
|
296
|
+
if (!refs.every((ref) => typeof ref === 'string' && HEX64.test(ref))) {
|
|
297
|
+
return {
|
|
298
|
+
ok: false,
|
|
299
|
+
reason: 'policy_trace_refs must contain only lowercase 64-hex event hashes',
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
if (new Set(refs).size !== refs.length) {
|
|
303
|
+
return { ok: false, reason: 'policy_trace_refs contains duplicate event hashes' };
|
|
304
|
+
}
|
|
305
|
+
const eventHashes = new Set(events.map((event) => bytesToHex(event.event_hash)));
|
|
306
|
+
const dangling = refs.filter((ref) => !eventHashes.has(ref));
|
|
307
|
+
if (dangling.length > 0) {
|
|
308
|
+
return {
|
|
309
|
+
ok: false,
|
|
310
|
+
reason: `policy_trace_refs contains dangling refs: ${JSON.stringify(dangling)}`,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const expectedSet = new Set(expected);
|
|
314
|
+
const wrongType = refs.filter((ref) => eventHashes.has(ref) && !expectedSet.has(ref));
|
|
315
|
+
if (wrongType.length > 0) {
|
|
316
|
+
return {
|
|
317
|
+
ok: false,
|
|
318
|
+
reason: `policy_trace_refs points at non-policy events: ${JSON.stringify(wrongType)}`,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
if (JSON.stringify(refs) !== JSON.stringify(expected)) {
|
|
322
|
+
return {
|
|
323
|
+
ok: false,
|
|
324
|
+
reason: 'policy_trace_refs does not match chain-seq-ordered policy_check_event hashes',
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
return { ok: true, reason: null };
|
|
328
|
+
}
|
|
329
|
+
export function verifyProofBundle(raw) {
|
|
330
|
+
validateShape(raw);
|
|
331
|
+
const bundle = raw;
|
|
332
|
+
const events = rehydrateEvents(bundle.events);
|
|
333
|
+
const chainResult = verifyChain(events);
|
|
334
|
+
const bundleReportedOk = Boolean(bundle.verification_report.ok);
|
|
335
|
+
const agreement = bundleReportedOk === chainResult.ok;
|
|
336
|
+
const metadata = verifyMetadataClosure(bundle, events, chainResult);
|
|
337
|
+
const policyTraceRefs = verifyPolicyTraceRefs(bundle, events);
|
|
338
|
+
return {
|
|
339
|
+
ok: chainResult.ok && agreement && metadata.ok && policyTraceRefs.ok,
|
|
340
|
+
chain_result: chainResult,
|
|
341
|
+
bundle_reported_ok: bundleReportedOk,
|
|
342
|
+
agreement,
|
|
343
|
+
event_count: events.length,
|
|
344
|
+
bundle_version: bundle.bundle_version,
|
|
345
|
+
chain_id: bundle.chain_metadata.chain_id,
|
|
346
|
+
head_hash_hex: bundle.chain_metadata.head_hash_hex,
|
|
347
|
+
metadata_ok: metadata.ok,
|
|
348
|
+
metadata_reason: metadata.reason,
|
|
349
|
+
policy_trace_refs_ok: policyTraceRefs.ok,
|
|
350
|
+
policy_trace_refs_reason: policyTraceRefs.reason,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
export async function verifyProofBundleFile(path) {
|
|
354
|
+
let text;
|
|
355
|
+
try {
|
|
356
|
+
text = await fs.readFile(path, 'utf-8');
|
|
357
|
+
}
|
|
358
|
+
catch (exc) {
|
|
359
|
+
if (exc instanceof Error && 'code' in exc && exc.code === 'ENOENT') {
|
|
360
|
+
throw new BundleVerificationError(`bundle file not found: ${path}`);
|
|
361
|
+
}
|
|
362
|
+
throw exc;
|
|
363
|
+
}
|
|
364
|
+
let parsed;
|
|
365
|
+
try {
|
|
366
|
+
parsed = JSON.parse(text);
|
|
367
|
+
}
|
|
368
|
+
catch (exc) {
|
|
369
|
+
const msg = exc instanceof Error ? exc.message : String(exc);
|
|
370
|
+
throw new BundleSchemaError(`${path}: not valid JSON: ${msg}`);
|
|
371
|
+
}
|
|
372
|
+
return verifyProofBundle(parsed);
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../src/verifier.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@attestplane/attestplane",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.3-alpha",
|
|
4
|
+
"description": "Apache-2.0 attestation and audit substrate for AI agent evidence chains.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"audit",
|
|
7
7
|
"compliance",
|