@clawbureau/clawverify-core 0.1.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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/crypto.d.ts +27 -0
  4. package/dist/crypto.d.ts.map +1 -0
  5. package/dist/crypto.js +124 -0
  6. package/dist/crypto.js.map +1 -0
  7. package/dist/index.d.ts +27 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +24 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/jcs.d.ts +13 -0
  12. package/dist/jcs.d.ts.map +1 -0
  13. package/dist/jcs.js +43 -0
  14. package/dist/jcs.js.map +1 -0
  15. package/dist/model-identity.d.ts +46 -0
  16. package/dist/model-identity.d.ts.map +1 -0
  17. package/dist/model-identity.js +233 -0
  18. package/dist/model-identity.js.map +1 -0
  19. package/dist/schema-registry.d.ts +99 -0
  20. package/dist/schema-registry.d.ts.map +1 -0
  21. package/dist/schema-registry.js +259 -0
  22. package/dist/schema-registry.js.map +1 -0
  23. package/dist/schema-validation.d.ts +35 -0
  24. package/dist/schema-validation.d.ts.map +1 -0
  25. package/dist/schema-validation.js +156 -0
  26. package/dist/schema-validation.js.map +1 -0
  27. package/dist/schema-validators.generated.d.ts +158 -0
  28. package/dist/schema-validators.generated.d.ts.map +1 -0
  29. package/dist/schema-validators.generated.js +19186 -0
  30. package/dist/schema-validators.generated.js.map +1 -0
  31. package/dist/types.d.ts +910 -0
  32. package/dist/types.d.ts.map +1 -0
  33. package/dist/types.js +33 -0
  34. package/dist/types.js.map +1 -0
  35. package/dist/verify-audit-result-attestation.d.ts +32 -0
  36. package/dist/verify-audit-result-attestation.d.ts.map +1 -0
  37. package/dist/verify-audit-result-attestation.js +396 -0
  38. package/dist/verify-audit-result-attestation.js.map +1 -0
  39. package/dist/verify-derivation-attestation.d.ts +30 -0
  40. package/dist/verify-derivation-attestation.d.ts.map +1 -0
  41. package/dist/verify-derivation-attestation.js +371 -0
  42. package/dist/verify-derivation-attestation.js.map +1 -0
  43. package/dist/verify-execution-attestation.d.ts +32 -0
  44. package/dist/verify-execution-attestation.d.ts.map +1 -0
  45. package/dist/verify-execution-attestation.js +578 -0
  46. package/dist/verify-execution-attestation.js.map +1 -0
  47. package/dist/verify-export-bundle.d.ts +14 -0
  48. package/dist/verify-export-bundle.d.ts.map +1 -0
  49. package/dist/verify-export-bundle.js +307 -0
  50. package/dist/verify-export-bundle.js.map +1 -0
  51. package/dist/verify-log-inclusion-proof.d.ts +16 -0
  52. package/dist/verify-log-inclusion-proof.d.ts.map +1 -0
  53. package/dist/verify-log-inclusion-proof.js +216 -0
  54. package/dist/verify-log-inclusion-proof.js.map +1 -0
  55. package/dist/verify-proof-bundle.d.ts +48 -0
  56. package/dist/verify-proof-bundle.d.ts.map +1 -0
  57. package/dist/verify-proof-bundle.js +1708 -0
  58. package/dist/verify-proof-bundle.js.map +1 -0
  59. package/dist/verify-receipt.d.ts +30 -0
  60. package/dist/verify-receipt.d.ts.map +1 -0
  61. package/dist/verify-receipt.js +408 -0
  62. package/dist/verify-receipt.js.map +1 -0
  63. package/dist/verify-web-receipt.d.ts +21 -0
  64. package/dist/verify-web-receipt.d.ts.map +1 -0
  65. package/dist/verify-web-receipt.js +341 -0
  66. package/dist/verify-web-receipt.js.map +1 -0
  67. package/package.json +54 -0
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Witnessed Web Receipt Verification
3
+ * POH-US-018
4
+ */
5
+ import { isAllowedVersion, isAllowedType, isAllowedAlgorithm, isAllowedHashAlgorithm, isValidDidFormat, isValidBase64Url, isValidIsoDate, } from './schema-registry.js';
6
+ import { computeHash, base64UrlDecode, extractPublicKeyFromDidKey, verifySignature, } from './crypto.js';
7
+ import { validateWebReceiptEnvelopeV1 } from './schema-validation.js';
8
+ function validateEnvelopeStructure(envelope) {
9
+ if (typeof envelope !== 'object' || envelope === null)
10
+ return false;
11
+ const e = envelope;
12
+ return ('envelope_version' in e &&
13
+ 'envelope_type' in e &&
14
+ 'payload' in e &&
15
+ 'payload_hash_b64u' in e &&
16
+ 'hash_algorithm' in e &&
17
+ 'signature_b64u' in e &&
18
+ 'algorithm' in e &&
19
+ 'signer_did' in e &&
20
+ 'issued_at' in e);
21
+ }
22
+ function validatePayload(payload) {
23
+ if (typeof payload !== 'object' || payload === null)
24
+ return false;
25
+ const p = payload;
26
+ if (p.receipt_version !== '1')
27
+ return false;
28
+ if (typeof p.receipt_id !== 'string' || p.receipt_id.length === 0)
29
+ return false;
30
+ if (typeof p.witness_id !== 'string' || p.witness_id.length === 0)
31
+ return false;
32
+ if (p.source !== 'chatgpt_web' && p.source !== 'claude_web' && p.source !== 'gemini_web' && p.source !== 'other') {
33
+ return false;
34
+ }
35
+ if (typeof p.request_hash_b64u !== 'string' || !isValidBase64Url(p.request_hash_b64u))
36
+ return false;
37
+ if (typeof p.response_hash_b64u !== 'string' || !isValidBase64Url(p.response_hash_b64u))
38
+ return false;
39
+ if (p.session_hash_b64u !== undefined) {
40
+ if (typeof p.session_hash_b64u !== 'string' || !isValidBase64Url(p.session_hash_b64u)) {
41
+ return false;
42
+ }
43
+ }
44
+ if (!isValidIsoDate(p.timestamp))
45
+ return false;
46
+ return true;
47
+ }
48
+ export async function verifyWebReceipt(envelope, options = {}) {
49
+ const now = new Date().toISOString();
50
+ if (!validateEnvelopeStructure(envelope)) {
51
+ return {
52
+ result: {
53
+ status: 'INVALID',
54
+ reason: 'Malformed envelope: missing required fields',
55
+ verified_at: now,
56
+ },
57
+ error: {
58
+ code: 'MALFORMED_ENVELOPE',
59
+ message: 'Envelope is missing required fields or has invalid structure',
60
+ },
61
+ };
62
+ }
63
+ if (!isAllowedVersion(envelope.envelope_version)) {
64
+ return {
65
+ result: {
66
+ status: 'INVALID',
67
+ reason: `Unknown envelope version: ${envelope.envelope_version}`,
68
+ verified_at: now,
69
+ },
70
+ error: {
71
+ code: 'UNKNOWN_ENVELOPE_VERSION',
72
+ message: `Envelope version "${envelope.envelope_version}" is not in the allowlist`,
73
+ field: 'envelope_version',
74
+ },
75
+ };
76
+ }
77
+ if (!isAllowedType(envelope.envelope_type)) {
78
+ return {
79
+ result: {
80
+ status: 'INVALID',
81
+ reason: `Unknown envelope type: ${envelope.envelope_type}`,
82
+ verified_at: now,
83
+ },
84
+ error: {
85
+ code: 'UNKNOWN_ENVELOPE_TYPE',
86
+ message: `Envelope type "${envelope.envelope_type}" is not in the allowlist`,
87
+ field: 'envelope_type',
88
+ },
89
+ };
90
+ }
91
+ if (envelope.envelope_type !== 'web_receipt') {
92
+ return {
93
+ result: {
94
+ status: 'INVALID',
95
+ reason: `Expected web_receipt envelope, got: ${envelope.envelope_type}`,
96
+ verified_at: now,
97
+ },
98
+ error: {
99
+ code: 'UNKNOWN_ENVELOPE_TYPE',
100
+ message: 'This endpoint only accepts web_receipt envelopes',
101
+ field: 'envelope_type',
102
+ },
103
+ };
104
+ }
105
+ if (!isAllowedAlgorithm(envelope.algorithm)) {
106
+ return {
107
+ result: {
108
+ status: 'INVALID',
109
+ reason: `Unknown signature algorithm: ${envelope.algorithm}`,
110
+ verified_at: now,
111
+ },
112
+ error: {
113
+ code: 'UNKNOWN_ALGORITHM',
114
+ message: `Signature algorithm "${envelope.algorithm}" is not in the allowlist`,
115
+ field: 'algorithm',
116
+ },
117
+ };
118
+ }
119
+ if (!isAllowedHashAlgorithm(envelope.hash_algorithm)) {
120
+ return {
121
+ result: {
122
+ status: 'INVALID',
123
+ reason: `Unknown hash algorithm: ${envelope.hash_algorithm}`,
124
+ verified_at: now,
125
+ },
126
+ error: {
127
+ code: 'UNKNOWN_HASH_ALGORITHM',
128
+ message: `Hash algorithm "${envelope.hash_algorithm}" is not in the allowlist`,
129
+ field: 'hash_algorithm',
130
+ },
131
+ };
132
+ }
133
+ const schemaResult = validateWebReceiptEnvelopeV1(envelope);
134
+ if (!schemaResult.valid) {
135
+ return {
136
+ result: {
137
+ status: 'INVALID',
138
+ reason: schemaResult.message,
139
+ envelope_type: envelope.envelope_type,
140
+ signer_did: envelope.signer_did,
141
+ verified_at: now,
142
+ },
143
+ error: {
144
+ code: 'SCHEMA_VALIDATION_FAILED',
145
+ message: schemaResult.message,
146
+ field: schemaResult.field,
147
+ },
148
+ };
149
+ }
150
+ if (!isValidDidFormat(envelope.signer_did)) {
151
+ return {
152
+ result: {
153
+ status: 'INVALID',
154
+ reason: `Invalid DID format: ${envelope.signer_did}`,
155
+ verified_at: now,
156
+ },
157
+ error: {
158
+ code: 'INVALID_DID_FORMAT',
159
+ message: 'Signer DID does not match expected format (did:key:... or did:web:...)',
160
+ field: 'signer_did',
161
+ },
162
+ };
163
+ }
164
+ if (!options.allowlistedSignerDids || options.allowlistedSignerDids.length === 0) {
165
+ return {
166
+ result: {
167
+ status: 'INVALID',
168
+ reason: 'Web receipt signer allowlist not configured',
169
+ envelope_type: envelope.envelope_type,
170
+ signer_did: envelope.signer_did,
171
+ verified_at: now,
172
+ },
173
+ error: {
174
+ code: 'DEPENDENCY_NOT_CONFIGURED',
175
+ message: 'Web receipt signer allowlist is not configured. Set WEB_RECEIPT_SIGNER_DIDS to enable web receipt verification.',
176
+ field: 'env.WEB_RECEIPT_SIGNER_DIDS',
177
+ },
178
+ };
179
+ }
180
+ if (!options.allowlistedSignerDids.includes(envelope.signer_did)) {
181
+ return {
182
+ result: {
183
+ status: 'INVALID',
184
+ reason: 'Web receipt signer DID is not allowlisted',
185
+ envelope_type: envelope.envelope_type,
186
+ signer_did: envelope.signer_did,
187
+ verified_at: now,
188
+ },
189
+ error: {
190
+ code: 'CLAIM_NOT_FOUND',
191
+ message: `Signer DID '${envelope.signer_did}' is not in the allowlisted web receipt signer list`,
192
+ field: 'signer_did',
193
+ },
194
+ };
195
+ }
196
+ if (!isValidIsoDate(envelope.issued_at)) {
197
+ return {
198
+ result: {
199
+ status: 'INVALID',
200
+ reason: 'Invalid issued_at date format',
201
+ verified_at: now,
202
+ },
203
+ error: {
204
+ code: 'MALFORMED_ENVELOPE',
205
+ message: 'issued_at must be a valid ISO 8601 date string',
206
+ field: 'issued_at',
207
+ },
208
+ };
209
+ }
210
+ if (!isValidBase64Url(envelope.payload_hash_b64u)) {
211
+ return {
212
+ result: {
213
+ status: 'INVALID',
214
+ reason: 'Invalid payload_hash_b64u format',
215
+ verified_at: now,
216
+ },
217
+ error: {
218
+ code: 'MALFORMED_ENVELOPE',
219
+ message: 'payload_hash_b64u must be a valid base64url string',
220
+ field: 'payload_hash_b64u',
221
+ },
222
+ };
223
+ }
224
+ if (!isValidBase64Url(envelope.signature_b64u)) {
225
+ return {
226
+ result: {
227
+ status: 'INVALID',
228
+ reason: 'Invalid signature_b64u format',
229
+ verified_at: now,
230
+ },
231
+ error: {
232
+ code: 'MALFORMED_ENVELOPE',
233
+ message: 'signature_b64u must be a valid base64url string',
234
+ field: 'signature_b64u',
235
+ },
236
+ };
237
+ }
238
+ if (!validatePayload(envelope.payload)) {
239
+ return {
240
+ result: {
241
+ status: 'INVALID',
242
+ reason: 'Invalid web receipt payload structure',
243
+ verified_at: now,
244
+ },
245
+ error: {
246
+ code: 'MALFORMED_ENVELOPE',
247
+ message: 'Web receipt payload is malformed or missing required fields',
248
+ field: 'payload',
249
+ },
250
+ };
251
+ }
252
+ try {
253
+ const computedHash = await computeHash(envelope.payload, envelope.hash_algorithm);
254
+ if (computedHash !== envelope.payload_hash_b64u) {
255
+ return {
256
+ result: {
257
+ status: 'INVALID',
258
+ reason: 'Payload hash mismatch: envelope may have been tampered with',
259
+ verified_at: now,
260
+ },
261
+ error: {
262
+ code: 'HASH_MISMATCH',
263
+ message: 'Computed payload hash does not match envelope hash',
264
+ },
265
+ };
266
+ }
267
+ }
268
+ catch {
269
+ return {
270
+ result: {
271
+ status: 'INVALID',
272
+ reason: 'Hash computation failed',
273
+ verified_at: now,
274
+ },
275
+ error: {
276
+ code: 'HASH_MISMATCH',
277
+ message: 'Failed to compute payload hash',
278
+ },
279
+ };
280
+ }
281
+ const publicKeyBytes = extractPublicKeyFromDidKey(envelope.signer_did);
282
+ if (!publicKeyBytes) {
283
+ return {
284
+ result: {
285
+ status: 'INVALID',
286
+ reason: 'Could not extract public key from signer DID',
287
+ verified_at: now,
288
+ },
289
+ error: {
290
+ code: 'INVALID_DID_FORMAT',
291
+ message: 'Unable to extract Ed25519 public key from did:key DID',
292
+ field: 'signer_did',
293
+ },
294
+ };
295
+ }
296
+ try {
297
+ const sigBytes = base64UrlDecode(envelope.signature_b64u);
298
+ const msgBytes = new TextEncoder().encode(envelope.payload_hash_b64u);
299
+ const ok = await verifySignature('Ed25519', publicKeyBytes, sigBytes, msgBytes);
300
+ if (!ok) {
301
+ return {
302
+ result: {
303
+ status: 'INVALID',
304
+ reason: 'Signature verification failed',
305
+ verified_at: now,
306
+ },
307
+ error: {
308
+ code: 'SIGNATURE_INVALID',
309
+ message: 'The Ed25519 signature does not match the payload hash',
310
+ },
311
+ };
312
+ }
313
+ }
314
+ catch {
315
+ return {
316
+ result: {
317
+ status: 'INVALID',
318
+ reason: 'Signature verification error',
319
+ verified_at: now,
320
+ },
321
+ error: {
322
+ code: 'SIGNATURE_INVALID',
323
+ message: 'Failed to verify signature',
324
+ },
325
+ };
326
+ }
327
+ return {
328
+ result: {
329
+ status: 'VALID',
330
+ reason: 'Web receipt verified successfully',
331
+ envelope_type: envelope.envelope_type,
332
+ signer_did: envelope.signer_did,
333
+ verified_at: now,
334
+ },
335
+ witness_id: envelope.payload.witness_id,
336
+ source: envelope.payload.source,
337
+ proof_tier: 'witnessed_web',
338
+ equivalent_to_gateway: false,
339
+ };
340
+ }
341
+ //# sourceMappingURL=verify-web-receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-web-receipt.js","sourceRoot":"","sources":["../src/verify-web-receipt.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@clawbureau/clawverify-core",
3
+ "version": "0.1.0",
4
+ "description": "Pure, offline-capable verification primitives for the Clawsig Protocol — schema validation, Ed25519 signature verification, hash chain integrity, receipt validation.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist/**/*.js",
16
+ "dist/**/*.d.ts",
17
+ "dist/**/*.d.ts.map",
18
+ "dist/**/*.js.map",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "typecheck": "tsc --noEmit",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "keywords": [
28
+ "clawsig",
29
+ "verifier",
30
+ "proof-bundle",
31
+ "offline-verification",
32
+ "Ed25519",
33
+ "schema-validation"
34
+ ],
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/clawbureau/clawbureau",
38
+ "directory": "packages/clawverify-core"
39
+ },
40
+ "homepage": "https://github.com/clawbureau/clawbureau/tree/main/packages/clawverify-core",
41
+ "bugs": "https://github.com/clawbureau/clawbureau/issues",
42
+ "dependencies": {
43
+ "ajv": "^8.17.1",
44
+ "ajv-formats": "^3.0.1"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^25.2.1",
48
+ "typescript": "^5.7.0"
49
+ },
50
+ "engines": {
51
+ "node": ">=20"
52
+ },
53
+ "license": "MIT"
54
+ }