chit402-verify 0.3.5 → 0.4.1

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 (108) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +205 -17
  3. package/dist/anchor-trust.d.ts +144 -0
  4. package/dist/anchor-trust.d.ts.map +1 -0
  5. package/dist/anchor-trust.js +441 -0
  6. package/dist/anchor-trust.js.map +1 -0
  7. package/dist/anchor-witness.d.ts +265 -0
  8. package/dist/anchor-witness.d.ts.map +1 -0
  9. package/dist/anchor-witness.js +833 -0
  10. package/dist/anchor-witness.js.map +1 -0
  11. package/dist/base-payer.d.ts +65 -0
  12. package/dist/base-payer.d.ts.map +1 -0
  13. package/dist/base-payer.js +222 -0
  14. package/dist/base-payer.js.map +1 -0
  15. package/dist/binding.d.ts +52 -0
  16. package/dist/binding.d.ts.map +1 -0
  17. package/dist/binding.js +80 -0
  18. package/dist/binding.js.map +1 -0
  19. package/dist/canonical-preimage.d.ts +9 -0
  20. package/dist/canonical-preimage.d.ts.map +1 -0
  21. package/dist/canonical-preimage.js +25 -0
  22. package/dist/canonical-preimage.js.map +1 -0
  23. package/dist/carry-forward.d.ts +79 -0
  24. package/dist/carry-forward.d.ts.map +1 -0
  25. package/dist/carry-forward.js +184 -0
  26. package/dist/carry-forward.js.map +1 -0
  27. package/dist/cli.d.ts +18 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +2086 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/epoch.d.ts +143 -0
  32. package/dist/epoch.d.ts.map +1 -0
  33. package/dist/epoch.js +352 -0
  34. package/dist/epoch.js.map +1 -0
  35. package/dist/head-binding.d.ts +24 -0
  36. package/dist/head-binding.d.ts.map +1 -0
  37. package/dist/head-binding.js +61 -0
  38. package/dist/head-binding.js.map +1 -0
  39. package/dist/index.d.ts +585 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +1648 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/issuer-history.d.ts +151 -0
  44. package/dist/issuer-history.d.ts.map +1 -0
  45. package/dist/issuer-history.js +595 -0
  46. package/dist/issuer-history.js.map +1 -0
  47. package/dist/issuer-pin.d.ts +126 -0
  48. package/dist/issuer-pin.d.ts.map +1 -0
  49. package/dist/issuer-pin.js +567 -0
  50. package/dist/issuer-pin.js.map +1 -0
  51. package/dist/jcs.d.ts +8 -0
  52. package/dist/jcs.d.ts.map +1 -0
  53. package/dist/jcs.js +64 -0
  54. package/dist/jcs.js.map +1 -0
  55. package/dist/jws.d.ts +46 -0
  56. package/dist/jws.d.ts.map +1 -0
  57. package/dist/jws.js +129 -0
  58. package/dist/jws.js.map +1 -0
  59. package/dist/payer.d.ts +65 -0
  60. package/dist/payer.d.ts.map +1 -0
  61. package/dist/payer.js +148 -0
  62. package/dist/payer.js.map +1 -0
  63. package/dist/preimage.d.ts +78 -0
  64. package/dist/preimage.d.ts.map +1 -0
  65. package/dist/preimage.js +363 -0
  66. package/dist/preimage.js.map +1 -0
  67. package/dist/receipt-lane.d.ts +235 -0
  68. package/dist/receipt-lane.d.ts.map +1 -0
  69. package/dist/receipt-lane.js +446 -0
  70. package/dist/receipt-lane.js.map +1 -0
  71. package/dist/receipt-version.d.ts +98 -0
  72. package/dist/receipt-version.d.ts.map +1 -0
  73. package/dist/receipt-version.js +364 -0
  74. package/dist/receipt-version.js.map +1 -0
  75. package/dist/refusal.d.ts +93 -0
  76. package/dist/refusal.d.ts.map +1 -0
  77. package/dist/refusal.js +249 -0
  78. package/dist/refusal.js.map +1 -0
  79. package/dist/request-binding.d.ts +7 -0
  80. package/dist/request-binding.d.ts.map +1 -0
  81. package/dist/request-binding.js +26 -0
  82. package/dist/request-binding.js.map +1 -0
  83. package/dist/row-hash.d.ts +22 -0
  84. package/dist/row-hash.d.ts.map +1 -0
  85. package/dist/row-hash.js +26 -0
  86. package/dist/row-hash.js.map +1 -0
  87. package/dist/shell.d.ts +65 -0
  88. package/dist/shell.d.ts.map +1 -0
  89. package/dist/shell.js +268 -0
  90. package/dist/shell.js.map +1 -0
  91. package/dist/solana-payer.d.ts +99 -0
  92. package/dist/solana-payer.d.ts.map +1 -0
  93. package/dist/solana-payer.js +258 -0
  94. package/dist/solana-payer.js.map +1 -0
  95. package/dist/v11-receipt.d.ts +23 -0
  96. package/dist/v11-receipt.d.ts.map +1 -0
  97. package/dist/v11-receipt.js +368 -0
  98. package/dist/v11-receipt.js.map +1 -0
  99. package/dist/verdict.d.ts +98 -0
  100. package/dist/verdict.d.ts.map +1 -0
  101. package/dist/verdict.js +390 -0
  102. package/dist/verdict.js.map +1 -0
  103. package/issuer-history.snapshot.json +1 -0
  104. package/package.json +32 -22
  105. package/cli.js +0 -42
  106. package/index.cjs +0 -8
  107. package/index.d.ts +0 -5
  108. package/index.js +0 -7
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CARRY_FORWARD_STATUS = exports.PINNED_ANCHOR_EPOCHS = void 0;
4
+ exports.verifyCarryForward = verifyCarryForward;
5
+ /**
6
+ * A receipt leaf that was included under an earlier epoch head and later
7
+ * included under the current epoch head.
8
+ *
9
+ * The issued time and the issued epoch come from the earlier head's signed
10
+ * claims. The logged time, epoch, and leaf index come from the current
11
+ * head's signed claims and from the inclusion proof that binds that leaf
12
+ * to the current root. Unsigned receipt fields, request fields, and the
13
+ * local clock are not a source for either date.
14
+ *
15
+ * Lockstep with `assessCarryForward` in services/gateway/src/receipt-merkle.js.
16
+ */
17
+ const anchor_witness_js_1 = require("./anchor-witness.js");
18
+ const jws_js_1 = require("./jws.js");
19
+ /** Epoch ids named by the committed receipt-log pin anchors. */
20
+ exports.PINNED_ANCHOR_EPOCHS = [1, 2];
21
+ exports.CARRY_FORWARD_STATUS = 'VERIFIED_CARRIED_FORWARD';
22
+ const SIGNED_TIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/;
23
+ function signedTime(value) {
24
+ if (typeof value !== 'string' || !SIGNED_TIME.test(value))
25
+ return null;
26
+ const ms = Date.parse(value);
27
+ if (!Number.isFinite(ms))
28
+ return null;
29
+ return value;
30
+ }
31
+ function fail(reason) {
32
+ return { applicable: true, ok: false, status: null, reason };
33
+ }
34
+ function jwksCandidates(jwks, kid) {
35
+ const keys = jwks?.keys || [];
36
+ const es256 = keys.filter((key) => (0, jws_js_1.isEs256PublicJwk)(key) && (key.alg == null || key.alg === 'ES256'));
37
+ if (!kid)
38
+ return es256;
39
+ return es256.filter((key) => key.kid === kid);
40
+ }
41
+ function verifyHeadJws(head, options) {
42
+ const jws = head?.issuer_signature?.jws;
43
+ if (!jws)
44
+ return { ok: false, reason: 'epoch_signature_missing' };
45
+ const header = (0, jws_js_1.readJwsHeader)(jws);
46
+ const kid = header?.kid || head?.issuer_signature?.kid;
47
+ const trustedKids = options.trustedKids ?? [];
48
+ const embedded = (0, jws_js_1.resolvePinnedIssuerJwk)({ issuer_signature: head?.issuer_signature || undefined });
49
+ const pinned = !!(embedded && (0, jws_js_1.isPinnedTrustedJwk)(embedded, trustedKids));
50
+ const candidates = jwksCandidates(options.jwks, kid);
51
+ for (const jwk of candidates) {
52
+ const result = (0, jws_js_1.verifyIssuerJws)(jws, jwk);
53
+ if (result.valid && result.payload)
54
+ return { ok: true, payload: result.payload };
55
+ }
56
+ if (pinned && embedded) {
57
+ const result = (0, jws_js_1.verifyIssuerJws)(jws, embedded);
58
+ if (result.valid && result.payload)
59
+ return { ok: true, payload: result.payload };
60
+ }
61
+ return { ok: false, reason: 'signature_invalid' };
62
+ }
63
+ function sameJson(a, b) {
64
+ return JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
65
+ }
66
+ function hexLeaf(value) {
67
+ if (typeof value !== 'string')
68
+ return null;
69
+ const hex = value.replace(/^0x/i, '').toLowerCase();
70
+ return /^[0-9a-f]{64}$/.test(hex) ? hex : null;
71
+ }
72
+ function readSignedHead(head, options, pinned) {
73
+ const verified = verifyHeadJws(head, options);
74
+ if (!verified.ok)
75
+ return fail(verified.reason);
76
+ const payload = verified.payload;
77
+ const publishedAt = signedTime(payload.published_at);
78
+ if (!publishedAt)
79
+ return fail('head_mismatch');
80
+ if (head && Object.prototype.hasOwnProperty.call(head, 'published_at')
81
+ && head.published_at != null
82
+ && head.published_at !== publishedAt) {
83
+ return fail('head_mismatch');
84
+ }
85
+ const epoch = Number(payload.epoch);
86
+ if (!Number.isInteger(epoch) || epoch < 1)
87
+ return fail('bad_epoch');
88
+ if (!pinned.has(epoch))
89
+ return fail('bad_epoch');
90
+ if (head && Object.prototype.hasOwnProperty.call(head, 'epoch')
91
+ && head.epoch != null
92
+ && Number(head.epoch) !== epoch) {
93
+ return fail('head_mismatch');
94
+ }
95
+ const root = typeof payload.root === 'string' ? payload.root.replace(/^0x/i, '').toLowerCase() : '';
96
+ if (!/^[0-9a-f]{64}$/.test(root))
97
+ return fail('head_mismatch');
98
+ if (head?.root != null && String(head.root).replace(/^0x/i, '').toLowerCase() !== root) {
99
+ return fail('head_mismatch');
100
+ }
101
+ const treeSize = Number(payload.tree_size);
102
+ if (!Number.isSafeInteger(treeSize) || treeSize < 1)
103
+ return fail('head_mismatch');
104
+ if (head?.tree_size != null && Number(head.tree_size) !== treeSize)
105
+ return fail('head_mismatch');
106
+ if (payload.schema != null && head && 'schema' in head && head.schema != null
107
+ && !sameJson(payload.schema, head.schema)) {
108
+ return fail('head_mismatch');
109
+ }
110
+ return { ok: true, published_at: publishedAt, epoch, root, tree_size: treeSize };
111
+ }
112
+ function inclusionOf(leaf, inclusion, root, treeSize) {
113
+ if (!inclusion || inclusion.error === 'not_in_tree')
114
+ return fail('not_in_tree');
115
+ if (!Array.isArray(inclusion.proof))
116
+ return fail('not_in_tree');
117
+ const claimed = hexLeaf(inclusion.leaf);
118
+ const got = Buffer.from(leaf).toString('hex');
119
+ if (claimed && claimed !== got)
120
+ return fail('tree_head_mismatch');
121
+ if (inclusion.tree_size != null && Number(inclusion.tree_size) !== treeSize)
122
+ return fail('inclusion_failed');
123
+ const index = Number(inclusion.leaf_index);
124
+ if (!Number.isSafeInteger(index))
125
+ return fail('inclusion_failed');
126
+ const proved = (0, anchor_witness_js_1.verifyMerkleInclusion)(Buffer.from(leaf), index, treeSize, root, inclusion.proof);
127
+ if (!proved)
128
+ return fail('inclusion_failed');
129
+ return { ok: true, leaf_index: index };
130
+ }
131
+ /**
132
+ * Verify a cross-epoch carry. A pair of heads in the same epoch is not a
133
+ * carry: the caller leaves the receipt result unchanged.
134
+ */
135
+ function verifyCarryForward(input) {
136
+ const pinned = new Set(input.pinnedEpochs ?? exports.PINNED_ANCHOR_EPOCHS);
137
+ const trust = { trustedKids: input.trustedKids, jwks: input.jwks };
138
+ const oldHead = readSignedHead(input.oldHead, trust, pinned);
139
+ if (!('published_at' in oldHead))
140
+ return oldHead;
141
+ const currentHead = readSignedHead(input.currentHead, trust, pinned);
142
+ if (!('published_at' in currentHead))
143
+ return currentHead;
144
+ if (oldHead.epoch === currentHead.epoch) {
145
+ return { applicable: false, ok: true, status: null };
146
+ }
147
+ if (currentHead.epoch < oldHead.epoch)
148
+ return fail('head_mismatch');
149
+ const oldMs = Date.parse(oldHead.published_at);
150
+ const currentMs = Date.parse(currentHead.published_at);
151
+ if (!(currentMs >= oldMs))
152
+ return fail('head_mismatch');
153
+ const oldLeaf = hexLeaf(input.oldInclusion?.leaf);
154
+ const currentLeaves = (input.currentInclusions || []).map((row) => hexLeaf(row?.leaf)).filter((row) => !!row);
155
+ if (oldLeaf && currentLeaves.some((row) => row !== oldLeaf))
156
+ return fail('tree_head_mismatch');
157
+ const oldIncluded = inclusionOf(input.leaf, input.oldInclusion, oldHead.root, oldHead.tree_size);
158
+ if (!oldIncluded.ok)
159
+ return oldIncluded;
160
+ const inclusions = input.currentInclusions;
161
+ if (!Array.isArray(inclusions) || inclusions.length === 0)
162
+ return fail('not_in_tree');
163
+ const positions = new Set();
164
+ for (const row of inclusions) {
165
+ const included = inclusionOf(input.leaf, row, currentHead.root, currentHead.tree_size);
166
+ if (!included.ok)
167
+ return included;
168
+ positions.add(included.leaf_index);
169
+ }
170
+ if (positions.size !== 1)
171
+ return fail('inclusion_failed');
172
+ const leafIndex = [...positions][0];
173
+ return {
174
+ applicable: true,
175
+ ok: true,
176
+ status: exports.CARRY_FORWARD_STATUS,
177
+ issued_at: oldHead.published_at,
178
+ issued_epoch: oldHead.epoch,
179
+ logged_at: currentHead.published_at,
180
+ logged_epoch: currentHead.epoch,
181
+ leaf_index: leafIndex,
182
+ };
183
+ }
184
+ //# sourceMappingURL=carry-forward.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carry-forward.js","sourceRoot":"","sources":["../src/carry-forward.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * xfuel-verify CLI — Offline receipt verification.
4
+ *
5
+ * Usage:
6
+ * xfuel-verify receipt.json
7
+ * xfuel-verify receipt.json --check-nullifier
8
+ * xfuel-verify receipt.json --rpc https://mainnet.base.org
9
+ * xfuel-verify receipt.json inclusion.json head.json --rpc
10
+ * cat receipt.json | xfuel-verify -
11
+ *
12
+ * Exit codes:
13
+ * 0 = VERIFIED (every check passed)
14
+ * 1 = INVALID
15
+ * 2 = COULD_NOT_CHECK
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}