agent-passport-system 2.0.0 → 2.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/README.md +2 -2
- package/dist/src/adapters/mutual-auth-a2a.d.ts +53 -0
- package/dist/src/adapters/mutual-auth-a2a.d.ts.map +1 -0
- package/dist/src/adapters/mutual-auth-a2a.js +108 -0
- package/dist/src/adapters/mutual-auth-a2a.js.map +1 -0
- package/dist/src/adapters/mutual-auth-mcp.d.ts +55 -0
- package/dist/src/adapters/mutual-auth-mcp.d.ts.map +1 -0
- package/dist/src/adapters/mutual-auth-mcp.js +107 -0
- package/dist/src/adapters/mutual-auth-mcp.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/v2/cognitive-attestation/disputes.d.ts +50 -0
- package/dist/src/v2/cognitive-attestation/disputes.d.ts.map +1 -0
- package/dist/src/v2/cognitive-attestation/disputes.js +12 -0
- package/dist/src/v2/cognitive-attestation/disputes.js.map +1 -0
- package/dist/src/v2/cognitive-attestation/envelope.d.ts +44 -0
- package/dist/src/v2/cognitive-attestation/envelope.d.ts.map +1 -0
- package/dist/src/v2/cognitive-attestation/envelope.js +341 -0
- package/dist/src/v2/cognitive-attestation/envelope.js.map +1 -0
- package/dist/src/v2/cognitive-attestation/index.d.ts +6 -0
- package/dist/src/v2/cognitive-attestation/index.d.ts.map +1 -0
- package/dist/src/v2/cognitive-attestation/index.js +23 -0
- package/dist/src/v2/cognitive-attestation/index.js.map +1 -0
- package/dist/src/v2/cognitive-attestation/types.d.ts +111 -0
- package/dist/src/v2/cognitive-attestation/types.d.ts.map +1 -0
- package/dist/src/v2/cognitive-attestation/types.js +13 -0
- package/dist/src/v2/cognitive-attestation/types.js.map +1 -0
- package/dist/src/v2/cognitive-attestation/verify.d.ts +67 -0
- package/dist/src/v2/cognitive-attestation/verify.d.ts.map +1 -0
- package/dist/src/v2/cognitive-attestation/verify.js +125 -0
- package/dist/src/v2/cognitive-attestation/verify.js.map +1 -0
- package/dist/src/v2/index.d.ts +2 -0
- package/dist/src/v2/index.d.ts.map +1 -1
- package/dist/src/v2/index.js +7 -0
- package/dist/src/v2/index.js.map +1 -1
- package/dist/src/v2/mutual-auth/certificate.d.ts +39 -0
- package/dist/src/v2/mutual-auth/certificate.d.ts.map +1 -0
- package/dist/src/v2/mutual-auth/certificate.js +89 -0
- package/dist/src/v2/mutual-auth/certificate.js.map +1 -0
- package/dist/src/v2/mutual-auth/handshake.d.ts +37 -0
- package/dist/src/v2/mutual-auth/handshake.d.ts.map +1 -0
- package/dist/src/v2/mutual-auth/handshake.js +216 -0
- package/dist/src/v2/mutual-auth/handshake.js.map +1 -0
- package/dist/src/v2/mutual-auth/index.d.ts +8 -0
- package/dist/src/v2/mutual-auth/index.d.ts.map +1 -0
- package/dist/src/v2/mutual-auth/index.js +8 -0
- package/dist/src/v2/mutual-auth/index.js.map +1 -0
- package/dist/src/v2/mutual-auth/trust-bundle.d.ts +20 -0
- package/dist/src/v2/mutual-auth/trust-bundle.d.ts.map +1 -0
- package/dist/src/v2/mutual-auth/trust-bundle.js +45 -0
- package/dist/src/v2/mutual-auth/trust-bundle.js.map +1 -0
- package/dist/src/v2/mutual-auth/types.d.ts +145 -0
- package/dist/src/v2/mutual-auth/types.d.ts.map +1 -0
- package/dist/src/v2/mutual-auth/types.js +19 -0
- package/dist/src/v2/mutual-auth/types.js.map +1 -0
- package/dist/src/v2/wallet-binding/bind.d.ts +12 -0
- package/dist/src/v2/wallet-binding/bind.d.ts.map +1 -1
- package/dist/src/v2/wallet-binding/bind.js +8 -9
- package/dist/src/v2/wallet-binding/bind.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disputes.js","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/disputes.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qEAAqE;AACrE,iEAAiE;AACjE,qEAAqE;AACrE,0EAA0E;AAC1E,EAAE;AACF,kEAAkE;AAClE,oEAAoE;AACpE,wEAAwE;AACxE,qEAAqE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { CognitiveAttestation, BuildAttestationInput, FeatureActivation, SignerRole } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Sort feature_activations canonically. Per schema: sort by
|
|
4
|
+
* (feature_id ascending, activation_statistic alphabetically).
|
|
5
|
+
* Returns a new array; does not mutate input.
|
|
6
|
+
*/
|
|
7
|
+
export declare function sortFeatureActivations(acts: FeatureActivation[]): FeatureActivation[];
|
|
8
|
+
/**
|
|
9
|
+
* Construct an unsigned cognitive attestation. The returned object has
|
|
10
|
+
* `signatures: []` and canonically-sorted `feature_activations`. Callers
|
|
11
|
+
* sign it via `signAttestation`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildAttestation(input: BuildAttestationInput): CognitiveAttestation;
|
|
14
|
+
/**
|
|
15
|
+
* JCS-canonicalize the attestation for signing. Signatures are elided
|
|
16
|
+
* (`signatures: []`) so all signers over the same payload produce the
|
|
17
|
+
* same input bytes regardless of signing order.
|
|
18
|
+
*
|
|
19
|
+
* Returns UTF-8 bytes. To obtain the canonical string, decode with TextDecoder.
|
|
20
|
+
*/
|
|
21
|
+
export declare function canonicalizeAttestation(att: CognitiveAttestation): Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* Sign an attestation with a 32-byte Ed25519 seed. Appends a new entry to
|
|
24
|
+
* `signatures`. Returns a new object; never mutates input.
|
|
25
|
+
*
|
|
26
|
+
* The signature covers `canonicalizeAttestation(att)`, i.e. the envelope
|
|
27
|
+
* with `signatures: []`. Additional signers produce byte-identical canonical
|
|
28
|
+
* input, so the signing order does not affect any individual signature.
|
|
29
|
+
*/
|
|
30
|
+
export declare function signAttestation(att: CognitiveAttestation, privateKey: Uint8Array, signerDid: string, signerRole: SignerRole): CognitiveAttestation;
|
|
31
|
+
/**
|
|
32
|
+
* Cross-primitive anchor. Returns lowercase hex sha256 of the full signed
|
|
33
|
+
* envelope (including signatures) under JCS. Use this when an APS action
|
|
34
|
+
* receipt needs to reference a cognitive attestation by content hash.
|
|
35
|
+
*
|
|
36
|
+
* Matches the hashing pattern of other v2 primitives (wallet-binding digest,
|
|
37
|
+
* attribution-primitive canonical hash).
|
|
38
|
+
*/
|
|
39
|
+
export declare function cognitiveAttestationDigest(att: CognitiveAttestation): string;
|
|
40
|
+
export declare function validateAttestationShape(att: unknown): {
|
|
41
|
+
ok: boolean;
|
|
42
|
+
errors: string[];
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/envelope.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAA;AAcnB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAOrF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,oBAAoB,CAuCnF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,GAAG,UAAU,CAQ7E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GACrB,oBAAoB,CAsBtB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAO5E;AAkCD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsJxF"}
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
// Copyright 2024-2026 Tymofii Pidlisnyi. Apache-2.0 license. See LICENSE.
|
|
2
|
+
// ══════════════════════════════════════════════════════════════════
|
|
3
|
+
// Cognitive Attestation — envelope construction, JCS, signing, digest
|
|
4
|
+
// ══════════════════════════════════════════════════════════════════
|
|
5
|
+
// Paper: "Cognitive Attestation" — Zenodo DOI 10.5281/zenodo.19646276
|
|
6
|
+
// Normative schema: papers/paper-4/poc/schema/cognitive_attestation.schema.json
|
|
7
|
+
//
|
|
8
|
+
// Wire compatibility with the Python reference impl at
|
|
9
|
+
// papers/paper-4/poc/src/envelope.py is preserved via:
|
|
10
|
+
// - canonicalizeJCS (RFC 8785, nulls preserved)
|
|
11
|
+
// - base64 signatures
|
|
12
|
+
// - feature_activations sorted by (feature_id, activation_statistic)
|
|
13
|
+
// ══════════════════════════════════════════════════════════════════
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
import { canonicalizeJCS } from '../../core/canonical-jcs.js';
|
|
16
|
+
import { sign as edSignHex } from '../../crypto/keys.js';
|
|
17
|
+
const SPEC_VERSION = '1.0';
|
|
18
|
+
function bytesToHex(bytes) {
|
|
19
|
+
let out = '';
|
|
20
|
+
for (let i = 0; i < bytes.length; i++)
|
|
21
|
+
out += bytes[i].toString(16).padStart(2, '0');
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
function hexToBase64(hex) {
|
|
25
|
+
return Buffer.from(hex, 'hex').toString('base64');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sort feature_activations canonically. Per schema: sort by
|
|
29
|
+
* (feature_id ascending, activation_statistic alphabetically).
|
|
30
|
+
* Returns a new array; does not mutate input.
|
|
31
|
+
*/
|
|
32
|
+
export function sortFeatureActivations(acts) {
|
|
33
|
+
return acts.slice().sort((a, b) => {
|
|
34
|
+
if (a.feature_id !== b.feature_id)
|
|
35
|
+
return a.feature_id - b.feature_id;
|
|
36
|
+
if (a.activation_statistic < b.activation_statistic)
|
|
37
|
+
return -1;
|
|
38
|
+
if (a.activation_statistic > b.activation_statistic)
|
|
39
|
+
return 1;
|
|
40
|
+
return 0;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Construct an unsigned cognitive attestation. The returned object has
|
|
45
|
+
* `signatures: []` and canonically-sorted `feature_activations`. Callers
|
|
46
|
+
* sign it via `signAttestation`.
|
|
47
|
+
*/
|
|
48
|
+
export function buildAttestation(input) {
|
|
49
|
+
const timestamp = input.timestamp ?? new Date().toISOString();
|
|
50
|
+
return {
|
|
51
|
+
spec_version: SPEC_VERSION,
|
|
52
|
+
model_ref: {
|
|
53
|
+
model_id: input.model_id,
|
|
54
|
+
model_version_hash: input.model_version_hash,
|
|
55
|
+
tokenizer_version_hash: input.tokenizer_version_hash,
|
|
56
|
+
inference_provider: input.inference_provider,
|
|
57
|
+
execution_environment: {
|
|
58
|
+
hardware_family: input.hardware_family,
|
|
59
|
+
precision: input.precision,
|
|
60
|
+
inference_engine: input.inference_engine,
|
|
61
|
+
deterministic_mode: input.deterministic_mode,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
dictionary_ref: {
|
|
65
|
+
dictionary_id: input.dictionary_id,
|
|
66
|
+
dictionary_version_hash: input.dictionary_version_hash,
|
|
67
|
+
training_corpus_hash: input.training_corpus_hash,
|
|
68
|
+
layer_index: input.layer_index,
|
|
69
|
+
attachment_point: input.attachment_point,
|
|
70
|
+
sae_type: input.sae_type,
|
|
71
|
+
},
|
|
72
|
+
token_range: {
|
|
73
|
+
absolute_sequence_hash: input.absolute_sequence_hash,
|
|
74
|
+
prior_state_hash: input.prior_state_hash,
|
|
75
|
+
start_token_index: input.start_token_index,
|
|
76
|
+
end_token_index: input.end_token_index,
|
|
77
|
+
token_count: input.token_count,
|
|
78
|
+
},
|
|
79
|
+
feature_activations: sortFeatureActivations(input.feature_activations),
|
|
80
|
+
aggregation_policy: {
|
|
81
|
+
...input.aggregation_policy,
|
|
82
|
+
required_signer_roles: input.aggregation_policy.required_signer_roles.slice(),
|
|
83
|
+
},
|
|
84
|
+
signatures: [],
|
|
85
|
+
attestation_timestamp: timestamp,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* JCS-canonicalize the attestation for signing. Signatures are elided
|
|
90
|
+
* (`signatures: []`) so all signers over the same payload produce the
|
|
91
|
+
* same input bytes regardless of signing order.
|
|
92
|
+
*
|
|
93
|
+
* Returns UTF-8 bytes. To obtain the canonical string, decode with TextDecoder.
|
|
94
|
+
*/
|
|
95
|
+
export function canonicalizeAttestation(att) {
|
|
96
|
+
const view = {
|
|
97
|
+
...att,
|
|
98
|
+
feature_activations: sortFeatureActivations(att.feature_activations),
|
|
99
|
+
signatures: [],
|
|
100
|
+
};
|
|
101
|
+
const s = canonicalizeJCS(view);
|
|
102
|
+
return new TextEncoder().encode(s);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Sign an attestation with a 32-byte Ed25519 seed. Appends a new entry to
|
|
106
|
+
* `signatures`. Returns a new object; never mutates input.
|
|
107
|
+
*
|
|
108
|
+
* The signature covers `canonicalizeAttestation(att)`, i.e. the envelope
|
|
109
|
+
* with `signatures: []`. Additional signers produce byte-identical canonical
|
|
110
|
+
* input, so the signing order does not affect any individual signature.
|
|
111
|
+
*/
|
|
112
|
+
export function signAttestation(att, privateKey, signerDid, signerRole) {
|
|
113
|
+
if (!(privateKey instanceof Uint8Array) || privateKey.length !== 32) {
|
|
114
|
+
throw new Error('signAttestation: privateKey must be a 32-byte Uint8Array (Ed25519 seed)');
|
|
115
|
+
}
|
|
116
|
+
if (typeof signerDid !== 'string' || signerDid.length === 0) {
|
|
117
|
+
throw new Error('signAttestation: signerDid must be a non-empty string');
|
|
118
|
+
}
|
|
119
|
+
const canonicalBytes = canonicalizeAttestation(att);
|
|
120
|
+
const canonicalString = new TextDecoder().decode(canonicalBytes);
|
|
121
|
+
const privateKeyHex = bytesToHex(privateKey);
|
|
122
|
+
const sigHex = edSignHex(canonicalString, privateKeyHex);
|
|
123
|
+
const sigB64 = hexToBase64(sigHex);
|
|
124
|
+
return {
|
|
125
|
+
...att,
|
|
126
|
+
feature_activations: sortFeatureActivations(att.feature_activations),
|
|
127
|
+
signatures: [
|
|
128
|
+
...att.signatures,
|
|
129
|
+
{ signer_did: signerDid, signer_role: signerRole, signature: sigB64 },
|
|
130
|
+
],
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Cross-primitive anchor. Returns lowercase hex sha256 of the full signed
|
|
135
|
+
* envelope (including signatures) under JCS. Use this when an APS action
|
|
136
|
+
* receipt needs to reference a cognitive attestation by content hash.
|
|
137
|
+
*
|
|
138
|
+
* Matches the hashing pattern of other v2 primitives (wallet-binding digest,
|
|
139
|
+
* attribution-primitive canonical hash).
|
|
140
|
+
*/
|
|
141
|
+
export function cognitiveAttestationDigest(att) {
|
|
142
|
+
const withSortedFeatures = {
|
|
143
|
+
...att,
|
|
144
|
+
feature_activations: sortFeatureActivations(att.feature_activations),
|
|
145
|
+
};
|
|
146
|
+
const canonical = canonicalizeJCS(withSortedFeatures);
|
|
147
|
+
return createHash('sha256').update(canonical, 'utf-8').digest('hex');
|
|
148
|
+
}
|
|
149
|
+
// ──────────────────────────────────────────────────────────────────
|
|
150
|
+
// Shape validation — hand-rolled check of the normative JSON schema.
|
|
151
|
+
// No new runtime deps. The schema file is the source of truth; this
|
|
152
|
+
// function mirrors its required fields, enums, and patterns.
|
|
153
|
+
// ──────────────────────────────────────────────────────────────────
|
|
154
|
+
const HEX64 = /^[0-9a-f]{64}$/;
|
|
155
|
+
const PRECISIONS = new Set(['fp32', 'fp16', 'bf16', 'int8']);
|
|
156
|
+
const ATTACHMENT_POINTS = new Set(['residual_stream', 'attention_output', 'mlp_output']);
|
|
157
|
+
const SAE_TYPES = new Set(['standard', 'topk', 'jumprelu', 'gated', 'batchtopk']);
|
|
158
|
+
const STATS = new Set(['max', 'mean', 'sum', 'integral', 'last']);
|
|
159
|
+
const COMPLETENESS = new Set(['top_k_only', 'all_above_threshold', 'dictionary_exhaustive']);
|
|
160
|
+
const TIEBREAKERS = new Set(['lowest_feature_id', 'highest_feature_id']);
|
|
161
|
+
const ROLES = new Set(['agent', 'operator', 'provider', 'third_party_attester']);
|
|
162
|
+
function isObject(v) {
|
|
163
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
164
|
+
}
|
|
165
|
+
function isInt(v) {
|
|
166
|
+
return typeof v === 'number' && Number.isInteger(v);
|
|
167
|
+
}
|
|
168
|
+
function checkHex64(errs, path, v) {
|
|
169
|
+
if (typeof v !== 'string' || !HEX64.test(v))
|
|
170
|
+
errs.push(`${path}: expected 64-char lowercase hex`);
|
|
171
|
+
}
|
|
172
|
+
function checkHex64Nullable(errs, path, v) {
|
|
173
|
+
if (v === null)
|
|
174
|
+
return;
|
|
175
|
+
checkHex64(errs, path, v);
|
|
176
|
+
}
|
|
177
|
+
export function validateAttestationShape(att) {
|
|
178
|
+
const errors = [];
|
|
179
|
+
if (!isObject(att))
|
|
180
|
+
return { ok: false, errors: ['root: expected object'] };
|
|
181
|
+
if (att.spec_version !== '1.0')
|
|
182
|
+
errors.push('spec_version: must be "1.0"');
|
|
183
|
+
// model_ref
|
|
184
|
+
const m = att.model_ref;
|
|
185
|
+
if (!isObject(m)) {
|
|
186
|
+
errors.push('model_ref: expected object');
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
if (typeof m.model_id !== 'string')
|
|
190
|
+
errors.push('model_ref.model_id: expected string');
|
|
191
|
+
checkHex64(errors, 'model_ref.model_version_hash', m.model_version_hash);
|
|
192
|
+
checkHex64(errors, 'model_ref.tokenizer_version_hash', m.tokenizer_version_hash);
|
|
193
|
+
if (m.inference_provider !== null && typeof m.inference_provider !== 'string') {
|
|
194
|
+
errors.push('model_ref.inference_provider: expected string|null');
|
|
195
|
+
}
|
|
196
|
+
const ee = m.execution_environment;
|
|
197
|
+
if (!isObject(ee)) {
|
|
198
|
+
errors.push('model_ref.execution_environment: expected object');
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
if (typeof ee.hardware_family !== 'string')
|
|
202
|
+
errors.push('execution_environment.hardware_family: expected string');
|
|
203
|
+
if (typeof ee.precision !== 'string' || !PRECISIONS.has(ee.precision)) {
|
|
204
|
+
errors.push('execution_environment.precision: must be fp32|fp16|bf16|int8');
|
|
205
|
+
}
|
|
206
|
+
if (typeof ee.inference_engine !== 'string')
|
|
207
|
+
errors.push('execution_environment.inference_engine: expected string');
|
|
208
|
+
if (typeof ee.deterministic_mode !== 'boolean')
|
|
209
|
+
errors.push('execution_environment.deterministic_mode: expected boolean');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// dictionary_ref
|
|
213
|
+
const d = att.dictionary_ref;
|
|
214
|
+
if (!isObject(d)) {
|
|
215
|
+
errors.push('dictionary_ref: expected object');
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
if (typeof d.dictionary_id !== 'string')
|
|
219
|
+
errors.push('dictionary_ref.dictionary_id: expected string');
|
|
220
|
+
checkHex64(errors, 'dictionary_ref.dictionary_version_hash', d.dictionary_version_hash);
|
|
221
|
+
checkHex64Nullable(errors, 'dictionary_ref.training_corpus_hash', d.training_corpus_hash);
|
|
222
|
+
if (!isInt(d.layer_index) || d.layer_index < 0) {
|
|
223
|
+
errors.push('dictionary_ref.layer_index: expected non-negative integer');
|
|
224
|
+
}
|
|
225
|
+
if (typeof d.attachment_point !== 'string' || !ATTACHMENT_POINTS.has(d.attachment_point)) {
|
|
226
|
+
errors.push('dictionary_ref.attachment_point: must be residual_stream|attention_output|mlp_output');
|
|
227
|
+
}
|
|
228
|
+
if (typeof d.sae_type !== 'string' || !SAE_TYPES.has(d.sae_type)) {
|
|
229
|
+
errors.push('dictionary_ref.sae_type: must be standard|topk|jumprelu|gated|batchtopk');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// token_range
|
|
233
|
+
const tr = att.token_range;
|
|
234
|
+
if (!isObject(tr)) {
|
|
235
|
+
errors.push('token_range: expected object');
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
checkHex64(errors, 'token_range.absolute_sequence_hash', tr.absolute_sequence_hash);
|
|
239
|
+
checkHex64Nullable(errors, 'token_range.prior_state_hash', tr.prior_state_hash);
|
|
240
|
+
if (!isInt(tr.start_token_index) || tr.start_token_index < 0) {
|
|
241
|
+
errors.push('token_range.start_token_index: expected non-negative integer');
|
|
242
|
+
}
|
|
243
|
+
if (!isInt(tr.end_token_index) || tr.end_token_index < 0) {
|
|
244
|
+
errors.push('token_range.end_token_index: expected non-negative integer');
|
|
245
|
+
}
|
|
246
|
+
if (!isInt(tr.token_count) || tr.token_count < 1) {
|
|
247
|
+
errors.push('token_range.token_count: expected integer >= 1');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// feature_activations
|
|
251
|
+
if (!Array.isArray(att.feature_activations)) {
|
|
252
|
+
errors.push('feature_activations: expected array');
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
att.feature_activations.forEach((fa, i) => {
|
|
256
|
+
if (!isObject(fa)) {
|
|
257
|
+
errors.push(`feature_activations[${i}]: expected object`);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
if (!isInt(fa.feature_id) || fa.feature_id < 0) {
|
|
261
|
+
errors.push(`feature_activations[${i}].feature_id: expected non-negative integer`);
|
|
262
|
+
}
|
|
263
|
+
if (fa.feature_label !== null && typeof fa.feature_label !== 'string') {
|
|
264
|
+
errors.push(`feature_activations[${i}].feature_label: expected string|null`);
|
|
265
|
+
}
|
|
266
|
+
if (typeof fa.activation_statistic !== 'string' || !STATS.has(fa.activation_statistic)) {
|
|
267
|
+
errors.push(`feature_activations[${i}].activation_statistic: must be max|mean|sum|integral|last`);
|
|
268
|
+
}
|
|
269
|
+
if (typeof fa.activation_value !== 'number' || fa.activation_value < 0) {
|
|
270
|
+
errors.push(`feature_activations[${i}].activation_value: expected number >= 0`);
|
|
271
|
+
}
|
|
272
|
+
if (!isInt(fa.tokens_active) || fa.tokens_active < 0) {
|
|
273
|
+
errors.push(`feature_activations[${i}].tokens_active: expected non-negative integer`);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// aggregation_policy
|
|
278
|
+
const ap = att.aggregation_policy;
|
|
279
|
+
if (!isObject(ap)) {
|
|
280
|
+
errors.push('aggregation_policy: expected object');
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
if (ap.top_k !== null && (!isInt(ap.top_k) || ap.top_k < 1)) {
|
|
284
|
+
errors.push('aggregation_policy.top_k: expected integer >= 1 or null');
|
|
285
|
+
}
|
|
286
|
+
if (ap.threshold !== null && (typeof ap.threshold !== 'number' || ap.threshold < 0)) {
|
|
287
|
+
errors.push('aggregation_policy.threshold: expected number >= 0 or null');
|
|
288
|
+
}
|
|
289
|
+
if (typeof ap.attestation_epsilon !== 'number' || ap.attestation_epsilon <= 0) {
|
|
290
|
+
errors.push('aggregation_policy.attestation_epsilon: required, must be number > 0');
|
|
291
|
+
}
|
|
292
|
+
checkHex64Nullable(errors, 'aggregation_policy.feature_allowlist_hash', ap.feature_allowlist_hash);
|
|
293
|
+
if (typeof ap.completeness_claim !== 'string' || !COMPLETENESS.has(ap.completeness_claim)) {
|
|
294
|
+
errors.push('aggregation_policy.completeness_claim: must be top_k_only|all_above_threshold|dictionary_exhaustive');
|
|
295
|
+
}
|
|
296
|
+
if (typeof ap.tiebreaker_rule !== 'string' || !TIEBREAKERS.has(ap.tiebreaker_rule)) {
|
|
297
|
+
errors.push('aggregation_policy.tiebreaker_rule: must be lowest_feature_id|highest_feature_id');
|
|
298
|
+
}
|
|
299
|
+
if (!Array.isArray(ap.required_signer_roles) || ap.required_signer_roles.length === 0) {
|
|
300
|
+
errors.push('aggregation_policy.required_signer_roles: required, non-empty array');
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
const seen = new Set();
|
|
304
|
+
ap.required_signer_roles.forEach((r, i) => {
|
|
305
|
+
if (typeof r !== 'string' || !ROLES.has(r)) {
|
|
306
|
+
errors.push(`aggregation_policy.required_signer_roles[${i}]: must be agent|operator|provider|third_party_attester`);
|
|
307
|
+
}
|
|
308
|
+
if (seen.has(r))
|
|
309
|
+
errors.push(`aggregation_policy.required_signer_roles: duplicate "${r}"`);
|
|
310
|
+
seen.add(r);
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// signatures
|
|
315
|
+
if (!Array.isArray(att.signatures) || att.signatures.length < 1) {
|
|
316
|
+
errors.push('signatures: expected non-empty array');
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
att.signatures.forEach((s, i) => {
|
|
320
|
+
if (!isObject(s)) {
|
|
321
|
+
errors.push(`signatures[${i}]: expected object`);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
if (typeof s.signer_did !== 'string' || s.signer_did.length === 0) {
|
|
325
|
+
errors.push(`signatures[${i}].signer_did: expected non-empty string`);
|
|
326
|
+
}
|
|
327
|
+
if (typeof s.signer_role !== 'string' || !ROLES.has(s.signer_role)) {
|
|
328
|
+
errors.push(`signatures[${i}].signer_role: must be agent|operator|provider|third_party_attester`);
|
|
329
|
+
}
|
|
330
|
+
if (typeof s.signature !== 'string' || s.signature.length === 0) {
|
|
331
|
+
errors.push(`signatures[${i}].signature: expected non-empty base64 string`);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
// attestation_timestamp
|
|
336
|
+
if (typeof att.attestation_timestamp !== 'string' || Number.isNaN(Date.parse(att.attestation_timestamp))) {
|
|
337
|
+
errors.push('attestation_timestamp: expected ISO 8601 date-time string');
|
|
338
|
+
}
|
|
339
|
+
return { ok: errors.length === 0, errors };
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { CognitiveAttestation, ModelRef, DictionaryRef, TokenRange, FeatureActivation, AggregationPolicy, Signature, SignerRole, ExecutionEnvironment, Precision, AttachmentPoint, SAEType, ActivationStatistic, CompletenessClaim, TiebreakerRule, BuildAttestationInput, } from './types.js';
|
|
2
|
+
export { buildAttestation, canonicalizeAttestation, signAttestation, cognitiveAttestationDigest, sortFeatureActivations, validateAttestationShape, } from './envelope.js';
|
|
3
|
+
export { verifySignature, verifyRequiredSignerRoles, verifyAgainstRegistry, verifyByReplay, } from './verify.js';
|
|
4
|
+
export type { RequiredRoleCoverage, RegistryResolver, RegistryVerificationResult, ReplayBackend, ReplayVerificationResult, } from './verify.js';
|
|
5
|
+
export type { ThresholdDispute, ExclusionDispute, ComputationalDispute, DecompositionAdequacyDispute, FacetedReinterpretationDispute, InterpretiveDispute, Dispute, } from './disputes.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/index.ts"],"names":[],"mappings":"AAqBA,YAAY,EACV,oBAAoB,EACpB,QAAQ,EACR,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,aAAa,EACb,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAGpB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,8BAA8B,EAC9B,mBAAmB,EACnB,OAAO,GACR,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright 2024-2026 Tymofii Pidlisnyi. Apache-2.0 license. See LICENSE.
|
|
2
|
+
// ══════════════════════════════════════════════════════════════════
|
|
3
|
+
// Cognitive Attestation — public surface
|
|
4
|
+
// ══════════════════════════════════════════════════════════════════
|
|
5
|
+
// Paper: "Cognitive Attestation — signed declarations of feature-level
|
|
6
|
+
// model computation for accountable AI"
|
|
7
|
+
// Zenodo DOI: 10.5281/zenodo.19646276
|
|
8
|
+
// Normative schema: papers/paper-4/poc/schema/cognitive_attestation.schema.json
|
|
9
|
+
//
|
|
10
|
+
// SDK scope: envelope construction, JCS canonicalization, Ed25519 signing,
|
|
11
|
+
// Stage 1 (cryptographic) verification, Stage 2 (registry)
|
|
12
|
+
// interface, Stage 3 (replay) stub, typed dispute primitives.
|
|
13
|
+
//
|
|
14
|
+
// Out of scope for the SDK: dispute resolution, re-verification scheduling,
|
|
15
|
+
// cross-tenant correlation, transparency-log
|
|
16
|
+
// publishing, bulk compliance reports. All of
|
|
17
|
+
// those are product intelligence and live in
|
|
18
|
+
// the private `@aeoess/gateway` module.
|
|
19
|
+
// ══════════════════════════════════════════════════════════════════
|
|
20
|
+
export { buildAttestation, canonicalizeAttestation, signAttestation, cognitiveAttestationDigest, sortFeatureActivations, validateAttestationShape, } from './envelope.js';
|
|
21
|
+
// Three-stage verification
|
|
22
|
+
export { verifySignature, verifyRequiredSignerRoles, verifyAgainstRegistry, verifyByReplay, } from './verify.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qEAAqE;AACrE,yCAAyC;AACzC,qEAAqE;AACrE,uEAAuE;AACvE,+CAA+C;AAC/C,sCAAsC;AACtC,gFAAgF;AAChF,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,yEAAyE;AACzE,EAAE;AACF,4EAA4E;AAC5E,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,kEAAkE;AAClE,qEAAqE;AAsBrE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,eAAe,CAAA;AAEtB,2BAA2B;AAC3B,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,GACf,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export type Precision = 'fp32' | 'fp16' | 'bf16' | 'int8';
|
|
2
|
+
export type AttachmentPoint = 'residual_stream' | 'attention_output' | 'mlp_output';
|
|
3
|
+
export type SAEType = 'standard' | 'topk' | 'jumprelu' | 'gated' | 'batchtopk';
|
|
4
|
+
export type ActivationStatistic = 'max' | 'mean' | 'sum' | 'integral' | 'last';
|
|
5
|
+
export type CompletenessClaim = 'top_k_only' | 'all_above_threshold' | 'dictionary_exhaustive';
|
|
6
|
+
export type TiebreakerRule = 'lowest_feature_id' | 'highest_feature_id';
|
|
7
|
+
export type SignerRole = 'agent' | 'operator' | 'provider' | 'third_party_attester';
|
|
8
|
+
export interface ExecutionEnvironment {
|
|
9
|
+
/** e.g. `nvidia/hopper/h100-sxm5` or `apple-silicon/m-series/m3-max` */
|
|
10
|
+
hardware_family: string;
|
|
11
|
+
precision: Precision;
|
|
12
|
+
/** `library@version` format, e.g. `vllm@0.6.3`. */
|
|
13
|
+
inference_engine: string;
|
|
14
|
+
deterministic_mode: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ModelRef {
|
|
17
|
+
model_id: string;
|
|
18
|
+
/** sha256 hex, 64 lowercase chars. */
|
|
19
|
+
model_version_hash: string;
|
|
20
|
+
/** sha256 hex, 64 lowercase chars. */
|
|
21
|
+
tokenizer_version_hash: string;
|
|
22
|
+
inference_provider: string | null;
|
|
23
|
+
execution_environment: ExecutionEnvironment;
|
|
24
|
+
}
|
|
25
|
+
export interface DictionaryRef {
|
|
26
|
+
dictionary_id: string;
|
|
27
|
+
/** sha256 hex, 64 lowercase chars. */
|
|
28
|
+
dictionary_version_hash: string;
|
|
29
|
+
/** sha256 hex, 64 lowercase chars, or null. */
|
|
30
|
+
training_corpus_hash: string | null;
|
|
31
|
+
layer_index: number;
|
|
32
|
+
attachment_point: AttachmentPoint;
|
|
33
|
+
sae_type: SAEType;
|
|
34
|
+
}
|
|
35
|
+
export interface TokenRange {
|
|
36
|
+
/** sha256 of uint32-big-endian token IDs from BOS through end-of-range, no separators. */
|
|
37
|
+
absolute_sequence_hash: string;
|
|
38
|
+
/** sha256 of tokens preceding the attested range, or null. NOT a KV-cache hash. */
|
|
39
|
+
prior_state_hash: string | null;
|
|
40
|
+
start_token_index: number;
|
|
41
|
+
end_token_index: number;
|
|
42
|
+
token_count: number;
|
|
43
|
+
}
|
|
44
|
+
export interface FeatureActivation {
|
|
45
|
+
feature_id: number;
|
|
46
|
+
feature_label: string | null;
|
|
47
|
+
activation_statistic: ActivationStatistic;
|
|
48
|
+
activation_value: number;
|
|
49
|
+
tokens_active: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Aggregation policy. Note: `attestation_epsilon` and `required_signer_roles`
|
|
53
|
+
* are REQUIRED per the normative schema. The Python reference's smoke test
|
|
54
|
+
* omitted them — this TS type makes that omission a compile error.
|
|
55
|
+
*/
|
|
56
|
+
export interface AggregationPolicy {
|
|
57
|
+
top_k: number | null;
|
|
58
|
+
threshold: number | null;
|
|
59
|
+
/** Governance-relevant "effectively zero" threshold. Must be > 0. */
|
|
60
|
+
attestation_epsilon: number;
|
|
61
|
+
/** sha256 hex of the allowlist, or null. */
|
|
62
|
+
feature_allowlist_hash: string | null;
|
|
63
|
+
completeness_claim: CompletenessClaim;
|
|
64
|
+
tiebreaker_rule: TiebreakerRule;
|
|
65
|
+
/** At least one role. Verifiers MUST confirm every listed role is signed by someone. */
|
|
66
|
+
required_signer_roles: SignerRole[];
|
|
67
|
+
}
|
|
68
|
+
export interface Signature {
|
|
69
|
+
signer_did: string;
|
|
70
|
+
signer_role: SignerRole;
|
|
71
|
+
/** base64-encoded Ed25519 signature over JCS-canonicalized payload with signatures=[] elided. */
|
|
72
|
+
signature: string;
|
|
73
|
+
}
|
|
74
|
+
export interface CognitiveAttestation {
|
|
75
|
+
spec_version: '1.0';
|
|
76
|
+
model_ref: ModelRef;
|
|
77
|
+
dictionary_ref: DictionaryRef;
|
|
78
|
+
token_range: TokenRange;
|
|
79
|
+
feature_activations: FeatureActivation[];
|
|
80
|
+
aggregation_policy: AggregationPolicy;
|
|
81
|
+
signatures: Signature[];
|
|
82
|
+
/** ISO 8601 UTC timestamp. */
|
|
83
|
+
attestation_timestamp: string;
|
|
84
|
+
}
|
|
85
|
+
/** Input to `buildAttestation`. Flat shape matches the Python reference. */
|
|
86
|
+
export interface BuildAttestationInput {
|
|
87
|
+
model_id: string;
|
|
88
|
+
model_version_hash: string;
|
|
89
|
+
tokenizer_version_hash: string;
|
|
90
|
+
inference_provider: string | null;
|
|
91
|
+
hardware_family: string;
|
|
92
|
+
precision: Precision;
|
|
93
|
+
inference_engine: string;
|
|
94
|
+
deterministic_mode: boolean;
|
|
95
|
+
dictionary_id: string;
|
|
96
|
+
dictionary_version_hash: string;
|
|
97
|
+
training_corpus_hash: string | null;
|
|
98
|
+
layer_index: number;
|
|
99
|
+
attachment_point: AttachmentPoint;
|
|
100
|
+
sae_type: SAEType;
|
|
101
|
+
absolute_sequence_hash: string;
|
|
102
|
+
prior_state_hash: string | null;
|
|
103
|
+
start_token_index: number;
|
|
104
|
+
end_token_index: number;
|
|
105
|
+
token_count: number;
|
|
106
|
+
feature_activations: FeatureActivation[];
|
|
107
|
+
aggregation_policy: AggregationPolicy;
|
|
108
|
+
/** Override for deterministic fixtures. Defaults to `new Date().toISOString()`. */
|
|
109
|
+
timestamp?: string;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright 2024-2026 Tymofii Pidlisnyi. Apache-2.0 license. See LICENSE.
|
|
2
|
+
// ══════════════════════════════════════════════════════════════════
|
|
3
|
+
// Cognitive Attestation — TypeScript types mirroring the normative schema
|
|
4
|
+
// ══════════════════════════════════════════════════════════════════
|
|
5
|
+
// Source of truth: papers/paper-4/poc/schema/cognitive_attestation.schema.json
|
|
6
|
+
// Paper: "Cognitive Attestation" — Zenodo DOI 10.5281/zenodo.19646276
|
|
7
|
+
//
|
|
8
|
+
// Every nullable field in the JSON schema is expressed as `T | null` here so
|
|
9
|
+
// that JCS canonicalization preserves null (RFC 8785 requirement, and the
|
|
10
|
+
// cross-language compatibility contract with the Python reference impl).
|
|
11
|
+
// ══════════════════════════════════════════════════════════════════
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/v2/cognitive-attestation/types.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qEAAqE;AACrE,0EAA0E;AAC1E,qEAAqE;AACrE,+EAA+E;AAC/E,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,yEAAyE;AACzE,qEAAqE"}
|