aqta-verify-receipt 1.0.5 → 1.0.6
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/cli.js +54 -58
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -15,59 +15,51 @@ const fs_1 = require("fs");
|
|
|
15
15
|
const index_1 = require("./index");
|
|
16
16
|
const PUB_KEY_HINT = 'https://api.aqta.ai/v1/attestation/public-key';
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* Human-facing stamp on stderr, TTY only, so piped runs still see exactly the
|
|
19
|
+
* machine line on stdout. A small mark, aligned rows, and a single coloured
|
|
20
|
+
* verdict token: green when the signature holds, red when it does not. No
|
|
21
|
+
* block art, no flood of colour. This is a tool an auditor runs.
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
-
' ▄▄▄▄▄▄▄▄',
|
|
24
|
-
' ▄███████▀████▄▄',
|
|
25
|
-
' ▄████████████████',
|
|
26
|
-
' ██████████████▀▀',
|
|
27
|
-
' █████████████▀',
|
|
28
|
-
' ▄█████████████',
|
|
29
|
-
' ▄██████████████',
|
|
30
|
-
' ▄█████████████████',
|
|
31
|
-
'▄███████████████████',
|
|
32
|
-
'████████████████████ ▄',
|
|
33
|
-
'██████████████▀ ████ ▄▀',
|
|
34
|
-
' ▀▀█████████▀ ███▀ ▄▄▀▀',
|
|
35
|
-
' ▀▀▀██▄▄▄▄▄▄██▀ ▀▀',
|
|
36
|
-
];
|
|
37
|
-
const SEAL_ASCII = [
|
|
38
|
-
' +%@@@@%+',
|
|
39
|
-
' %@@@@@@oo@@@@@',
|
|
40
|
-
' @@@@@@@@@@@@@@+',
|
|
41
|
-
' +@@@@@@@@@@@+',
|
|
42
|
-
' @@@@@@@@@@@',
|
|
43
|
-
' +@@@@@@@@@@@@%',
|
|
44
|
-
' @@@@@@@@@@@@@@@',
|
|
45
|
-
'@@@@@@@@@@@@@@@@@%',
|
|
46
|
-
'@@@@@@@@@@@@@%@@@%',
|
|
47
|
-
'+%@@@@@@@@@+ @@@',
|
|
48
|
-
' +%@@%+ @@+',
|
|
49
|
-
];
|
|
50
|
-
/**
|
|
51
|
-
* Human-facing stamp: an intact seal when the signature verifies, a sheared
|
|
52
|
-
* one when it does not, so the shape carries the answer before the word.
|
|
53
|
-
*
|
|
54
|
-
* stderr only, TTY only, so piped runs still see exactly the verdict line.
|
|
55
|
-
*/
|
|
56
|
-
function stamp(valid) {
|
|
23
|
+
function stamp(receipt, valid, reason, trust) {
|
|
57
24
|
if (!process.stderr.isTTY)
|
|
58
25
|
return;
|
|
59
26
|
const utf8 = /UTF-?8/i.test(process.env.LC_ALL || process.env.LC_CTYPE || process.env.LANG || '');
|
|
27
|
+
const MARK = utf8 ? '•ᴥ•' : 'o.o';
|
|
28
|
+
const DOT = utf8 ? '·' : '-';
|
|
29
|
+
const ELL = utf8 ? '…' : '...';
|
|
30
|
+
const OK = utf8 ? '✓' : '+';
|
|
31
|
+
const NO = utf8 ? '✗' : 'x';
|
|
60
32
|
const ESC = String.fromCharCode(27);
|
|
61
33
|
const colour = process.env.NO_COLOR === undefined;
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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');
|
|
71
63
|
}
|
|
72
64
|
function usage() {
|
|
73
65
|
console.error(`aqta-verify-receipt - offline check for ATTESTATION-v1 (Seal)
|
|
@@ -151,17 +143,21 @@ function main() {
|
|
|
151
143
|
strictFields: strict,
|
|
152
144
|
});
|
|
153
145
|
if (!quiet) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
146
|
+
const trust = result.keySource === 'pinned'
|
|
147
|
+
? 'pinned key'
|
|
148
|
+
: 'untrusted embedded key (integrity only)';
|
|
149
|
+
stamp(receipt, result.valid, result.reason, trust);
|
|
150
|
+
// One machine-readable line, emitted only when stdout is not a terminal,
|
|
151
|
+
// so an interactive run shows just the stamp and `... | tool` still parses.
|
|
152
|
+
if (!process.stdout.isTTY) {
|
|
153
|
+
const id = typeof receipt.attestation_id === 'string' ? receipt.attestation_id : '?';
|
|
154
|
+
const outcome = typeof receipt.outcome === 'string' ? receipt.outcome : '?';
|
|
155
|
+
if (result.valid) {
|
|
156
|
+
console.log(`ok ${outcome} ${id} ${trust}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log(`fail ${result.reason ?? 'verification failed'} ${id}`);
|
|
160
|
+
}
|
|
165
161
|
}
|
|
166
162
|
}
|
|
167
163
|
process.exit(result.valid ? 0 : 1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA;;;;;;;;;GASG;AACH,2BAAkC;AAClC,mCAA4D;AAE5D,MAAM,YAAY,GAChB,+CAA+C,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export interface VerifyOptions {
|
|
|
46
46
|
}
|
|
47
47
|
export type KeySource = 'pinned' | 'untrusted';
|
|
48
48
|
export interface VerifyResult {
|
|
49
|
+
/** Which envelope format was recognised, when one was. */
|
|
50
|
+
envelope?: EnvelopeFormat;
|
|
49
51
|
valid: boolean;
|
|
50
52
|
reason?: string;
|
|
51
53
|
/** Present when `valid` is true. */
|
|
@@ -69,6 +71,18 @@ export interface VerifyResult {
|
|
|
69
71
|
* });
|
|
70
72
|
* if (!result.valid) throw new Error(`Receipt invalid: ${result.reason}`);
|
|
71
73
|
*/
|
|
74
|
+
/**
|
|
75
|
+
* Envelope formats this verifier can read.
|
|
76
|
+
*
|
|
77
|
+
* The point of accepting more than one is that an auditor should install a
|
|
78
|
+
* single tool, not one per issuer. The formats differ only in which fields
|
|
79
|
+
* carry the signature and the signer's key, and in base64 versus base64url
|
|
80
|
+
* encoding, which `base64urlDecode` already normalises. The canonicalisation
|
|
81
|
+
* rule is the same in both: sorted keys, no whitespace, literal UTF-8.
|
|
82
|
+
*/
|
|
83
|
+
export type EnvelopeFormat = 'ATTESTATION-v1' | 'anchor-v1';
|
|
84
|
+
/** Identify an envelope by the field names it carries, or null if unrecognised. */
|
|
85
|
+
export declare function detectEnvelope(receipt: unknown): EnvelopeFormat | null;
|
|
72
86
|
export declare function verifyReceipt(receipt: unknown, options?: VerifyOptions): VerifyResult;
|
|
73
87
|
/**
|
|
74
88
|
* Fetch the Seal public key from the published URL and return it as a
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;IACzD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAsED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,aAAkB,GAC1B,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;IACzD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAsED;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,WAAW,CAAC;AAO5D,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAUtE;AA4DD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAoGd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,SAA4C,GAC9C,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.detectEnvelope = detectEnvelope;
|
|
15
16
|
exports.verifyReceipt = verifyReceipt;
|
|
16
17
|
exports.fetchPublishedPublicKey = fetchPublishedPublicKey;
|
|
17
18
|
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
@@ -79,29 +80,91 @@ function canonicalValue(v) {
|
|
|
79
80
|
// Strings, booleans
|
|
80
81
|
return JSON.stringify(v);
|
|
81
82
|
}
|
|
83
|
+
const ENVELOPE_FIELDS = {
|
|
84
|
+
'ATTESTATION-v1': { signature: 'signature', publicKey: 'public_key' },
|
|
85
|
+
'anchor-v1': { signature: 'signature_b64', publicKey: 'public_key_b64' },
|
|
86
|
+
};
|
|
87
|
+
/** Identify an envelope by the field names it carries, or null if unrecognised. */
|
|
88
|
+
function detectEnvelope(receipt) {
|
|
89
|
+
if (typeof receipt !== 'object' || receipt === null)
|
|
90
|
+
return null;
|
|
91
|
+
const r = receipt;
|
|
92
|
+
if (typeof r.signature === 'string' && typeof r.public_key === 'string') {
|
|
93
|
+
return 'ATTESTATION-v1';
|
|
94
|
+
}
|
|
95
|
+
if (typeof r.signature_b64 === 'string' && typeof r.public_key_b64 === 'string') {
|
|
96
|
+
return 'anchor-v1';
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
82
100
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* Pinning is required by default. A self-signed receipt must not return
|
|
86
|
-
* `valid: true` unless `allowUntrustedEmbeddedKey` is set.
|
|
101
|
+
* Signature check shared by every envelope.
|
|
87
102
|
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* otherwise `{ valid: false, reason: string }`.
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* const result = verifyReceipt(receipt, {
|
|
96
|
-
* trustedPublicKey: 'gUoUhIvptKAoLTnry3VrDtOQEWggGQveLrHFVrfNqmE',
|
|
97
|
-
* });
|
|
98
|
-
* if (!result.valid) throw new Error(`Receipt invalid: ${result.reason}`);
|
|
103
|
+
* Deliberately makes no claim about the receipt's meaning: it answers only
|
|
104
|
+
* "were these bytes signed by this key". Format-specific structural rules,
|
|
105
|
+
* such as ATTESTATION-v1's twelve-field requirement, are applied by the
|
|
106
|
+
* caller before this runs.
|
|
99
107
|
*/
|
|
108
|
+
function verifySignedEnvelope(r, envelope, options) {
|
|
109
|
+
const fields = ENVELOPE_FIELDS[envelope];
|
|
110
|
+
const pinned = options.trustedPublicKey;
|
|
111
|
+
const allowUntrusted = options.allowUntrustedEmbeddedKey === true;
|
|
112
|
+
if (pinned === undefined && !allowUntrusted) {
|
|
113
|
+
return {
|
|
114
|
+
valid: false,
|
|
115
|
+
reason: 'trustedPublicKey required (pass allowUntrustedEmbeddedKey for integrity-only)',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const embeddedKey = r[fields.publicKey];
|
|
119
|
+
if (pinned !== undefined && pinned !== embeddedKey) {
|
|
120
|
+
return { valid: false, reason: 'public key does not match trusted key' };
|
|
121
|
+
}
|
|
122
|
+
const payload = { ...r };
|
|
123
|
+
delete payload[fields.signature];
|
|
124
|
+
let canonical;
|
|
125
|
+
try {
|
|
126
|
+
canonical = canonicalise(payload);
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
return { valid: false, reason: `failed to canonicalise: ${String(e)}` };
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const sig = base64urlDecode(r[fields.signature]);
|
|
133
|
+
const pub = base64urlDecode(embeddedKey);
|
|
134
|
+
if (sig.length !== 64)
|
|
135
|
+
return { valid: false, reason: 'signature length != 64 bytes' };
|
|
136
|
+
if (pub.length !== 32)
|
|
137
|
+
return { valid: false, reason: 'public key length != 32 bytes' };
|
|
138
|
+
if (!tweetnacl_1.default.sign.detached.verify(canonical, sig, pub)) {
|
|
139
|
+
return { valid: false, reason: 'signature check failed' };
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
valid: true,
|
|
143
|
+
envelope,
|
|
144
|
+
keySource: pinned !== undefined ? 'pinned' : 'untrusted',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
return { valid: false, reason: `signature decode error: ${String(e)}` };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
100
151
|
function verifyReceipt(receipt, options = {}) {
|
|
101
152
|
if (typeof receipt !== 'object' || receipt === null) {
|
|
102
153
|
return { valid: false, reason: 'receipt is not an object' };
|
|
103
154
|
}
|
|
104
155
|
const r = receipt;
|
|
156
|
+
const envelope = detectEnvelope(r);
|
|
157
|
+
if (envelope === null) {
|
|
158
|
+
return {
|
|
159
|
+
valid: false,
|
|
160
|
+
reason: 'unrecognised envelope: expected signature/public_key or signature_b64/public_key_b64',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Other issuers' envelopes carry their own field sets, so only the signature
|
|
164
|
+
// is checked. The structural rules below are ATTESTATION-v1's alone.
|
|
165
|
+
if (envelope !== 'ATTESTATION-v1') {
|
|
166
|
+
return verifySignedEnvelope(r, envelope, options);
|
|
167
|
+
}
|
|
105
168
|
// Structural checks
|
|
106
169
|
for (const field of REQUIRED_FIELDS) {
|
|
107
170
|
if (!(field in r)) {
|
|
@@ -169,6 +232,7 @@ function verifyReceipt(receipt, options = {}) {
|
|
|
169
232
|
}
|
|
170
233
|
return {
|
|
171
234
|
valid: true,
|
|
235
|
+
envelope: 'ATTESTATION-v1',
|
|
172
236
|
keySource: pinned !== undefined ? 'pinned' : 'untrusted',
|
|
173
237
|
};
|
|
174
238
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.6",
|
|
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",
|