aqta-verify-receipt 1.0.7 → 1.0.8
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 +38 -11
- package/dist/cli.js +85 -68
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://aqta.ai/brand/seal-mark-512.png" alt="Seal" width="
|
|
2
|
+
<img src="https://aqta.ai/brand/seal-mark-512.png" alt="Seal" width="96" height="96" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
# aqta-verify-receipt
|
|
@@ -18,20 +18,42 @@ Same algorithm on npm and PyPI. Reference implementation, not a platform SDK.
|
|
|
18
18
|
## 30-second check
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
22
|
-
npx aqta-verify-receipt@1.0.7 receipt.json \
|
|
21
|
+
npx aqta-verify-receipt@1.0.8 receipt.json \
|
|
23
22
|
--key gUoUhIvptKAoLTnry3VrDtOQEWggGQveLrHFVrfNqmE
|
|
24
23
|
```
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
Default output is one compact line (words carry meaning; colour is optional):
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
✓ valid ALLOWED 2d41…871e94c pinned issuer key
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Invalid:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
✕ invalid signature mismatch 2d41…871e94c
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Optional flourish (never the proof):
|
|
27
38
|
|
|
28
39
|
```bash
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
npx aqta-verify-receipt@1.0.8 receipt.json --key <pinned> --pretty
|
|
41
|
+
# …
|
|
42
|
+
◈ seal intact · verified offline
|
|
31
43
|
```
|
|
32
44
|
|
|
33
|
-
|
|
34
|
-
|
|
45
|
+
Automation:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx aqta-verify-receipt@1.0.8 receipt.json --key <pinned> --json
|
|
49
|
+
npx aqta-verify-receipt@1.0.8 receipt.json --key <pinned> -q; echo $?
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
| Exit | Meaning |
|
|
53
|
+
|------|---------|
|
|
54
|
+
| `0` | valid |
|
|
55
|
+
| `1` | invalid |
|
|
56
|
+
| `2` | usage / IO |
|
|
35
57
|
|
|
36
58
|
Production public key (also at
|
|
37
59
|
[`/v1/attestation/public-key`](https://api.aqta.ai/v1/attestation/public-key),
|
|
@@ -78,8 +100,8 @@ verify collapses trust back to "trust the issuer's server right now".
|
|
|
78
100
|
## CLI
|
|
79
101
|
|
|
80
102
|
```
|
|
81
|
-
aqta-verify-receipt <file|-> --key <base64url> [
|
|
82
|
-
aqta-verify-receipt <file|-> --integrity-only [
|
|
103
|
+
aqta-verify-receipt <file|-> --key <base64url> [options]
|
|
104
|
+
aqta-verify-receipt <file|-> --integrity-only [options]
|
|
83
105
|
```
|
|
84
106
|
|
|
85
107
|
| Flag | Meaning |
|
|
@@ -87,8 +109,12 @@ aqta-verify-receipt <file|-> --integrity-only [--no-strict] [-q]
|
|
|
87
109
|
| `--key` | Pin issuer identity (required for counsel-grade). |
|
|
88
110
|
| `--integrity-only` | Signature vs embedded key only; returns untrusted. Anyone can self-sign. |
|
|
89
111
|
| `--no-strict` | Allow unknown top-level fields |
|
|
112
|
+
| `--json` | One JSON object on stdout |
|
|
113
|
+
| `--pretty` | Optional human flourish after the compact line (not the proof) |
|
|
90
114
|
| `-q` | Silent; exit code only |
|
|
91
115
|
|
|
116
|
+
`NO_COLOR=1` disables colour. Meaning never depends on colour alone.
|
|
117
|
+
|
|
92
118
|
## API
|
|
93
119
|
|
|
94
120
|
### `verifyReceipt(receipt, options?) → { valid, reason?, keySource? }`
|
|
@@ -111,7 +137,8 @@ Conformance suite (6 valid + 8 invalid):
|
|
|
111
137
|
## What this is not
|
|
112
138
|
|
|
113
139
|
Not a governance dashboard. Not a cost router. Not a chain explorer.
|
|
114
|
-
A small verifier for one signed model-call receipt.
|
|
140
|
+
A small verifier for one signed model-call receipt. The novel part is the
|
|
141
|
+
receipt format and offline verification model, not ASCII theatre.
|
|
115
142
|
|
|
116
143
|
## Security
|
|
117
144
|
|
package/dist/cli.js
CHANGED
|
@@ -7,78 +7,78 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
* Offline check of an ATTESTATION-v1 receipt. No account. No network by
|
|
8
8
|
* default. Exit 0 if the signature verifies, 1 if not, 2 on usage/IO errors.
|
|
9
9
|
*
|
|
10
|
+
* Default output is one compact, scriptable line on stdout. Colour is
|
|
11
|
+
* presentation only (NO_COLOR / non-TTY disables it). --pretty adds a short
|
|
12
|
+
* human flourish; it is never the verification contract.
|
|
13
|
+
*
|
|
10
14
|
* npx aqta-verify-receipt receipt.json --key <base64url-ed25519-key>
|
|
11
15
|
* curl -sS https://api.aqta.ai/r/REC_ID | npx aqta-verify-receipt - --key <key>
|
|
12
|
-
* npx aqta-verify-receipt receipt.json --
|
|
16
|
+
* npx aqta-verify-receipt receipt.json --key <key> --json
|
|
17
|
+
* npx aqta-verify-receipt receipt.json --key <key> --pretty
|
|
13
18
|
*/
|
|
14
19
|
const fs_1 = require("fs");
|
|
15
20
|
const index_1 = require("./index");
|
|
16
21
|
const PUB_KEY_HINT = 'https://api.aqta.ai/v1/attestation/public-key';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
const colour = process.env.NO_COLOR === undefined;
|
|
34
|
-
const paint = (code, s) => colour ? ESC + '[' + code + 'm' + s + ESC + '[0m' : s;
|
|
35
|
-
const dim = (s) => paint('2', s);
|
|
36
|
-
const r = receipt;
|
|
37
|
-
const str = (v) => (typeof v === 'string' ? v : '?');
|
|
38
|
-
const mid = (v, head = 8, tail = 6) => {
|
|
39
|
-
const s = str(v);
|
|
40
|
-
return s.length > head + tail + 1 ? s.slice(0, head) + ELL + s.slice(-tail) : s;
|
|
41
|
-
};
|
|
42
|
-
const policies = Array.isArray(r.policy_applied) && r.policy_applied.length
|
|
43
|
-
? r.policy_applied.map(str).join(' ' + DOT + ' ')
|
|
44
|
-
: '';
|
|
45
|
-
const rows = [
|
|
46
|
-
['outcome', str(r.outcome)],
|
|
47
|
-
['model', str(r.model)],
|
|
48
|
-
];
|
|
49
|
-
if (policies)
|
|
50
|
-
rows.push(['rules', policies]);
|
|
51
|
-
rows.push(['key', trust]);
|
|
52
|
-
rows.push(['request', mid(r.request_hash)]);
|
|
53
|
-
rows.push(['id', mid(r.attestation_id, 8, 4)]);
|
|
54
|
-
const out = ['', ' ' + dim(MARK + ' Seal ' + DOT + ' ATTESTATION-v1'), ''];
|
|
55
|
-
for (const [k, v] of rows)
|
|
56
|
-
out.push(' ' + dim(k.padEnd(8)) + v);
|
|
57
|
-
out.push('');
|
|
58
|
-
out.push(valid
|
|
59
|
-
? ' ' + paint('32', OK + ' sealed') + ' ' + dim('signature valid, checked offline')
|
|
60
|
-
: ' ' + paint('31', NO + ' broken') + ' ' + dim(reason ?? 'signature does not match the key'));
|
|
61
|
-
out.push('');
|
|
62
|
-
process.stderr.write(out.join('\n') + '\n');
|
|
22
|
+
function useUtf8() {
|
|
23
|
+
return /UTF-?8/i.test(process.env.LC_ALL || process.env.LC_CTYPE || process.env.LANG || '');
|
|
24
|
+
}
|
|
25
|
+
function useColour() {
|
|
26
|
+
return (process.stdout.isTTY === true &&
|
|
27
|
+
process.env.NO_COLOR === undefined &&
|
|
28
|
+
process.env.TERM !== 'dumb');
|
|
29
|
+
}
|
|
30
|
+
function paint(code, s) {
|
|
31
|
+
if (!useColour())
|
|
32
|
+
return s;
|
|
33
|
+
return `\x1b[${code}m${s}\x1b[0m`;
|
|
34
|
+
}
|
|
35
|
+
function mid(s, head = 4, tail = 6) {
|
|
36
|
+
const ell = useUtf8() ? '…' : '...';
|
|
37
|
+
return s.length > head + tail + 1 ? `${s.slice(0, head)}${ell}${s.slice(-tail)}` : s;
|
|
63
38
|
}
|
|
64
39
|
function usage() {
|
|
65
|
-
|
|
40
|
+
process.stderr.write(`aqta-verify-receipt - offline check for ATTESTATION-v1 (Seal)
|
|
66
41
|
|
|
67
42
|
Usage:
|
|
68
|
-
aqta-verify-receipt <receipt.json | -> --key <base64url> [
|
|
69
|
-
aqta-verify-receipt <receipt.json | -> --integrity-only [
|
|
43
|
+
aqta-verify-receipt <receipt.json | -> --key <base64url> [options]
|
|
44
|
+
aqta-verify-receipt <receipt.json | -> --integrity-only [options]
|
|
70
45
|
|
|
71
46
|
Options:
|
|
72
47
|
--key <key> pin the issuer public key (required for counsel-grade)
|
|
73
48
|
--integrity-only check signature vs embedded key only (anyone can self-sign)
|
|
74
49
|
--no-strict allow unknown top-level fields
|
|
50
|
+
--json machine JSON on stdout (one object)
|
|
51
|
+
--pretty optional human flourish after the compact line
|
|
75
52
|
-q, --quiet exit code only
|
|
76
53
|
|
|
54
|
+
Contract:
|
|
55
|
+
exit 0 valid · exit 1 invalid · exit 2 usage/IO
|
|
56
|
+
default stdout is one compact line (words carry meaning; colour is optional)
|
|
57
|
+
--pretty never changes the exit code or the verify result
|
|
58
|
+
|
|
77
59
|
Pin the production key once from ${PUB_KEY_HINT}
|
|
78
60
|
(field public_key). Do not re-fetch on every verify.
|
|
79
61
|
`);
|
|
80
62
|
process.exit(2);
|
|
81
63
|
}
|
|
64
|
+
function compactLine(valid, outcome, id, trustOrReason) {
|
|
65
|
+
const utf8 = useUtf8();
|
|
66
|
+
const ok = utf8 ? '✓' : '+';
|
|
67
|
+
const no = utf8 ? '✕' : 'x';
|
|
68
|
+
if (valid) {
|
|
69
|
+
return `${paint('32', `${ok} valid`)} ${outcome} ${mid(id)} ${trustOrReason}`;
|
|
70
|
+
}
|
|
71
|
+
return `${paint('31', `${no} invalid`)} ${trustOrReason} ${mid(id)}`;
|
|
72
|
+
}
|
|
73
|
+
function prettyExtra(valid) {
|
|
74
|
+
const utf8 = useUtf8();
|
|
75
|
+
const mark = utf8 ? '◈' : '*';
|
|
76
|
+
const dot = utf8 ? '·' : '-';
|
|
77
|
+
if (valid) {
|
|
78
|
+
return `${mark} seal intact ${dot} verified offline`;
|
|
79
|
+
}
|
|
80
|
+
return `${mark} seal broken ${dot} do not trust this receipt`;
|
|
81
|
+
}
|
|
82
82
|
function main() {
|
|
83
83
|
const args = process.argv.slice(2);
|
|
84
84
|
if (args.length === 0 || args.includes('--help') || args.includes('-h'))
|
|
@@ -88,6 +88,8 @@ function main() {
|
|
|
88
88
|
let integrityOnly = false;
|
|
89
89
|
let strict = true;
|
|
90
90
|
let quiet = false;
|
|
91
|
+
let asJson = false;
|
|
92
|
+
let pretty = false;
|
|
91
93
|
for (let i = 0; i < args.length; i++) {
|
|
92
94
|
const a = args[i];
|
|
93
95
|
if (a === '--key') {
|
|
@@ -104,6 +106,12 @@ function main() {
|
|
|
104
106
|
else if (a === '--quiet' || a === '-q') {
|
|
105
107
|
quiet = true;
|
|
106
108
|
}
|
|
109
|
+
else if (a === '--json') {
|
|
110
|
+
asJson = true;
|
|
111
|
+
}
|
|
112
|
+
else if (a === '--pretty') {
|
|
113
|
+
pretty = true;
|
|
114
|
+
}
|
|
107
115
|
else if (!file) {
|
|
108
116
|
file = a;
|
|
109
117
|
}
|
|
@@ -114,11 +122,15 @@ function main() {
|
|
|
114
122
|
if (!file)
|
|
115
123
|
usage();
|
|
116
124
|
if (!trustedKey && !integrityOnly) {
|
|
117
|
-
|
|
125
|
+
process.stderr.write('aqta-verify-receipt: pass --key <pinned> (or --integrity-only for embedded-key checks)\n');
|
|
118
126
|
process.exit(2);
|
|
119
127
|
}
|
|
120
128
|
if (trustedKey && integrityOnly) {
|
|
121
|
-
|
|
129
|
+
process.stderr.write('aqta-verify-receipt: use --key or --integrity-only, not both\n');
|
|
130
|
+
process.exit(2);
|
|
131
|
+
}
|
|
132
|
+
if (quiet && (asJson || pretty)) {
|
|
133
|
+
process.stderr.write('aqta-verify-receipt: -q cannot be combined with --json or --pretty\n');
|
|
122
134
|
process.exit(2);
|
|
123
135
|
}
|
|
124
136
|
let raw;
|
|
@@ -126,7 +138,7 @@ function main() {
|
|
|
126
138
|
raw = file === '-' ? (0, fs_1.readFileSync)(0, 'utf8') : (0, fs_1.readFileSync)(file, 'utf8');
|
|
127
139
|
}
|
|
128
140
|
catch {
|
|
129
|
-
|
|
141
|
+
process.stderr.write(`aqta-verify-receipt: cannot read ${file === '-' ? 'stdin' : file}\n`);
|
|
130
142
|
process.exit(2);
|
|
131
143
|
}
|
|
132
144
|
let receipt;
|
|
@@ -134,7 +146,7 @@ function main() {
|
|
|
134
146
|
receipt = JSON.parse(raw);
|
|
135
147
|
}
|
|
136
148
|
catch {
|
|
137
|
-
|
|
149
|
+
process.stderr.write('aqta-verify-receipt: input is not valid JSON\n');
|
|
138
150
|
process.exit(2);
|
|
139
151
|
}
|
|
140
152
|
const result = (0, index_1.verifyReceipt)(receipt, {
|
|
@@ -142,21 +154,26 @@ function main() {
|
|
|
142
154
|
allowUntrustedEmbeddedKey: integrityOnly,
|
|
143
155
|
strictFields: strict,
|
|
144
156
|
});
|
|
157
|
+
const id = typeof receipt.attestation_id === 'string' ? receipt.attestation_id : '?';
|
|
158
|
+
const outcome = typeof receipt.outcome === 'string' ? receipt.outcome : '?';
|
|
159
|
+
const trust = result.keySource === 'pinned'
|
|
160
|
+
? 'pinned issuer key'
|
|
161
|
+
: 'untrusted embedded key (integrity only)';
|
|
145
162
|
if (!quiet) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
if (asJson) {
|
|
164
|
+
process.stdout.write(JSON.stringify({
|
|
165
|
+
valid: result.valid,
|
|
166
|
+
outcome,
|
|
167
|
+
attestation_id: id,
|
|
168
|
+
key_source: result.keySource ?? null,
|
|
169
|
+
reason: result.valid ? null : result.reason ?? 'verification failed',
|
|
170
|
+
}) + '\n');
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const detail = result.valid ? trust : result.reason ?? 'verification failed';
|
|
174
|
+
process.stdout.write(compactLine(result.valid, outcome, id, detail) + '\n');
|
|
175
|
+
if (pretty) {
|
|
176
|
+
process.stdout.write(prettyExtra(result.valid) + '\n');
|
|
160
177
|
}
|
|
161
178
|
}
|
|
162
179
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aqta-verify-receipt",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Offline CLI and library for Seal ATTESTATION-v1 receipts. Ed25519 check of a signed model call; no account, no Aqta server required.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|