burnledger 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 (99) hide show
  1. package/README.md +166 -0
  2. package/dist/cjs/client.d.ts +84 -0
  3. package/dist/cjs/client.d.ts.map +1 -0
  4. package/dist/cjs/client.js +275 -0
  5. package/dist/cjs/client.js.map +1 -0
  6. package/dist/cjs/crypto-browser.d.ts +7 -0
  7. package/dist/cjs/crypto-browser.d.ts.map +1 -0
  8. package/dist/cjs/crypto-browser.js +37 -0
  9. package/dist/cjs/crypto-browser.js.map +1 -0
  10. package/dist/cjs/crypto-node.d.ts +4 -0
  11. package/dist/cjs/crypto-node.d.ts.map +1 -0
  12. package/dist/cjs/crypto-node.js +30 -0
  13. package/dist/cjs/crypto-node.js.map +1 -0
  14. package/dist/cjs/crypto.d.ts +6 -0
  15. package/dist/cjs/crypto.d.ts.map +1 -0
  16. package/dist/cjs/crypto.js +4 -0
  17. package/dist/cjs/crypto.js.map +1 -0
  18. package/dist/cjs/errors.d.ts +76 -0
  19. package/dist/cjs/errors.d.ts.map +1 -0
  20. package/dist/cjs/errors.js +119 -0
  21. package/dist/cjs/errors.js.map +1 -0
  22. package/dist/cjs/http.d.ts +35 -0
  23. package/dist/cjs/http.d.ts.map +1 -0
  24. package/dist/cjs/http.js +136 -0
  25. package/dist/cjs/http.js.map +1 -0
  26. package/dist/cjs/index.browser.d.ts +31 -0
  27. package/dist/cjs/index.browser.d.ts.map +1 -0
  28. package/dist/cjs/index.browser.js +54 -0
  29. package/dist/cjs/index.browser.js.map +1 -0
  30. package/dist/cjs/index.d.ts +26 -0
  31. package/dist/cjs/index.d.ts.map +1 -0
  32. package/dist/cjs/index.js +50 -0
  33. package/dist/cjs/index.js.map +1 -0
  34. package/dist/cjs/models.d.ts +119 -0
  35. package/dist/cjs/models.d.ts.map +1 -0
  36. package/dist/cjs/models.js +144 -0
  37. package/dist/cjs/models.js.map +1 -0
  38. package/dist/cjs/package.json +1 -0
  39. package/dist/cjs/pagination.d.ts +21 -0
  40. package/dist/cjs/pagination.d.ts.map +1 -0
  41. package/dist/cjs/pagination.js +50 -0
  42. package/dist/cjs/pagination.js.map +1 -0
  43. package/dist/cjs/verify.d.ts +47 -0
  44. package/dist/cjs/verify.d.ts.map +1 -0
  45. package/dist/cjs/verify.js +471 -0
  46. package/dist/cjs/verify.js.map +1 -0
  47. package/dist/cjs/webhooks.d.ts +17 -0
  48. package/dist/cjs/webhooks.d.ts.map +1 -0
  49. package/dist/cjs/webhooks.js +39 -0
  50. package/dist/cjs/webhooks.js.map +1 -0
  51. package/dist/esm/client.d.ts +84 -0
  52. package/dist/esm/client.d.ts.map +1 -0
  53. package/dist/esm/client.js +238 -0
  54. package/dist/esm/client.js.map +1 -0
  55. package/dist/esm/crypto-browser.d.ts +7 -0
  56. package/dist/esm/crypto-browser.d.ts.map +1 -0
  57. package/dist/esm/crypto-browser.js +34 -0
  58. package/dist/esm/crypto-browser.js.map +1 -0
  59. package/dist/esm/crypto-node.d.ts +4 -0
  60. package/dist/esm/crypto-node.d.ts.map +1 -0
  61. package/dist/esm/crypto-node.js +27 -0
  62. package/dist/esm/crypto-node.js.map +1 -0
  63. package/dist/esm/crypto.d.ts +6 -0
  64. package/dist/esm/crypto.d.ts.map +1 -0
  65. package/dist/esm/crypto.js +3 -0
  66. package/dist/esm/crypto.js.map +1 -0
  67. package/dist/esm/errors.d.ts +76 -0
  68. package/dist/esm/errors.d.ts.map +1 -0
  69. package/dist/esm/errors.js +105 -0
  70. package/dist/esm/errors.js.map +1 -0
  71. package/dist/esm/http.d.ts +35 -0
  72. package/dist/esm/http.d.ts.map +1 -0
  73. package/dist/esm/http.js +132 -0
  74. package/dist/esm/http.js.map +1 -0
  75. package/dist/esm/index.browser.d.ts +31 -0
  76. package/dist/esm/index.browser.d.ts.map +1 -0
  77. package/dist/esm/index.browser.js +31 -0
  78. package/dist/esm/index.browser.js.map +1 -0
  79. package/dist/esm/index.d.ts +26 -0
  80. package/dist/esm/index.d.ts.map +1 -0
  81. package/dist/esm/index.js +26 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/models.d.ts +119 -0
  84. package/dist/esm/models.d.ts.map +1 -0
  85. package/dist/esm/models.js +132 -0
  86. package/dist/esm/models.js.map +1 -0
  87. package/dist/esm/pagination.d.ts +21 -0
  88. package/dist/esm/pagination.d.ts.map +1 -0
  89. package/dist/esm/pagination.js +46 -0
  90. package/dist/esm/pagination.js.map +1 -0
  91. package/dist/esm/verify.d.ts +47 -0
  92. package/dist/esm/verify.d.ts.map +1 -0
  93. package/dist/esm/verify.js +462 -0
  94. package/dist/esm/verify.js.map +1 -0
  95. package/dist/esm/webhooks.d.ts +17 -0
  96. package/dist/esm/webhooks.d.ts.map +1 -0
  97. package/dist/esm/webhooks.js +36 -0
  98. package/dist/esm/webhooks.js.map +1 -0
  99. package/package.json +62 -0
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ /** Offline certificate and transparency verification.
3
+ *
4
+ * Ports the Go signing payload builders (core/payload.go) and Merkle tree
5
+ * verification (core/merkle.go) to TypeScript. All crypto is delegated to
6
+ * a CryptoOps provider (Node or browser).
7
+ *
8
+ * Critical encoding details:
9
+ * - Go's json.Marshal encodes []byte as base64, [N]byte as number arrays.
10
+ * - The payload builders normalize both formats to lowercase hex strings.
11
+ * - Timestamps in payloads use second-precision UTC: "YYYY-MM-DDTHH:MM:SSZ".
12
+ * - RFC 8785 canonical JSON: sorted keys recursively, no whitespace.
13
+ * - Transparency leaf = SHA-256(0x00 || issuanceBytes(cert)), NOT the
14
+ * certificate signing payload. issuanceBytes reconstructs json.Marshal
15
+ * output at issuance time (transparency_status=PENDING, no transparency).
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.hexToBytes = hexToBytes;
19
+ exports.bytesToHex = bytesToHex;
20
+ exports.publicKeyFromHex = publicKeyFromHex;
21
+ exports.verifyCertificate = verifyCertificate;
22
+ exports.verifyTransparency = verifyTransparency;
23
+ exports.issuanceBytes = issuanceBytes;
24
+ exports.verifyConsistency = verifyConsistency;
25
+ const errors_js_1 = require("./errors.js");
26
+ // ---------------------------------------------------------------------------
27
+ // Pure byte helpers (no Buffer, no node:crypto)
28
+ // ---------------------------------------------------------------------------
29
+ const HEX_CHARS = "0123456789abcdef";
30
+ function hexToBytes(hex) {
31
+ const len = hex.length >>> 1;
32
+ const out = new Uint8Array(len);
33
+ for (let i = 0; i < len; i++) {
34
+ const hi = hex.charCodeAt(i * 2);
35
+ const lo = hex.charCodeAt(i * 2 + 1);
36
+ out[i] = (unhex(hi) << 4) | unhex(lo);
37
+ }
38
+ return out;
39
+ }
40
+ function unhex(c) {
41
+ // 0-9
42
+ if (c >= 48 && c <= 57)
43
+ return c - 48;
44
+ // a-f
45
+ if (c >= 97 && c <= 102)
46
+ return c - 87;
47
+ // A-F
48
+ if (c >= 65 && c <= 70)
49
+ return c - 55;
50
+ return 0;
51
+ }
52
+ function bytesToHex(bytes) {
53
+ let out = "";
54
+ for (let i = 0; i < bytes.length; i++) {
55
+ const b = bytes[i];
56
+ out += HEX_CHARS[b >>> 4];
57
+ out += HEX_CHARS[b & 0x0f];
58
+ }
59
+ return out;
60
+ }
61
+ function concatBytes(a, b) {
62
+ const out = new Uint8Array(a.length + b.length);
63
+ out.set(a, 0);
64
+ out.set(b, a.length);
65
+ return out;
66
+ }
67
+ function bytesEqual(a, b) {
68
+ if (a.length !== b.length)
69
+ return false;
70
+ for (let i = 0; i < a.length; i++) {
71
+ if (a[i] !== b[i])
72
+ return false;
73
+ }
74
+ return true;
75
+ }
76
+ function base64ToBytes(b64) {
77
+ // Use atob for universal browser+node compatibility.
78
+ // Node 18+ has atob globally; browsers always have it.
79
+ const bin = atob(b64);
80
+ const out = new Uint8Array(bin.length);
81
+ for (let i = 0; i < bin.length; i++) {
82
+ out[i] = bin.charCodeAt(i);
83
+ }
84
+ return out;
85
+ }
86
+ function textToBytes(s) {
87
+ return new TextEncoder().encode(s);
88
+ }
89
+ async function publicKeyFromHex(crypto, hexKey, opts) {
90
+ const raw = hexToBytes(hexKey);
91
+ const hash = await crypto.sha256(raw);
92
+ const keyId = "dp_k_" + bytesToHex(hash);
93
+ return { keyBytes: raw, keyId, revoked: opts?.revoked ?? false };
94
+ }
95
+ /** Verify all signatures on a deletion certificate offline. */
96
+ async function verifyCertificate(crypto, certificate, publicKeys) {
97
+ const issuer = certificate.issuer;
98
+ const keyId = issuer.key_id;
99
+ const pki = publicKeys.get(keyId);
100
+ if (pki === undefined)
101
+ throw new errors_js_1.VerificationError(`unknown issuer key: ${keyId}`);
102
+ if (pki.revoked)
103
+ throw new errors_js_1.VerificationError(`issuer key is revoked: ${keyId}`);
104
+ // 1. Attestation signature
105
+ const att = certificate.attestation;
106
+ const attPayload = buildAttestationPayload(certificate.subject, att);
107
+ const attSig = decodeSignature(att.attestation_signature);
108
+ if (!(await crypto.ed25519Verify(pki.keyBytes, attPayload, attSig))) {
109
+ throw new errors_js_1.VerificationError("attestation signature is invalid");
110
+ }
111
+ // 2. Verification signature
112
+ const ver = certificate.verification;
113
+ const verPayload = buildVerificationPayload(certificate.attestation_id, ver);
114
+ const verSig = decodeSignature(ver.verification_signature);
115
+ if (!(await crypto.ed25519Verify(pki.keyBytes, verPayload, verSig))) {
116
+ throw new errors_js_1.VerificationError("verification signature is invalid");
117
+ }
118
+ // 3. Certificate signature
119
+ const certPayload = buildCertificatePayload(certificate);
120
+ const certSig = decodeSignature(certificate.certificate_signature);
121
+ if (!(await crypto.ed25519Verify(pki.keyBytes, certPayload, certSig))) {
122
+ throw new errors_js_1.VerificationError("certificate signature is invalid");
123
+ }
124
+ return "VALID";
125
+ }
126
+ /** Verify the transparency proof embedded in a certificate. */
127
+ async function verifyTransparency(crypto, certificate, publicKeys) {
128
+ const transparency = certificate.transparency;
129
+ if (transparency == null) {
130
+ return "NOT_AVAILABLE";
131
+ }
132
+ const sth = transparency.signed_tree_head;
133
+ const issuer = certificate.issuer;
134
+ const keyId = issuer.key_id;
135
+ const pki = publicKeys.get(keyId);
136
+ if (pki === undefined)
137
+ throw new errors_js_1.VerificationError(`unknown issuer key: ${keyId}`);
138
+ if (pki.revoked)
139
+ throw new errors_js_1.VerificationError(`issuer key is revoked: ${keyId}`);
140
+ // 1. Tree head signature
141
+ const headPayload = buildTreeHeadPayload(sth);
142
+ const headSig = decodeSignature(sth.signature);
143
+ if (!(await crypto.ed25519Verify(pki.keyBytes, headPayload, headSig))) {
144
+ throw new errors_js_1.VerificationError("tree head signature is invalid");
145
+ }
146
+ // 2. Merkle inclusion proof — leaf is hash of issuance-time certificate JSON,
147
+ // NOT the canonical signing payload. Matches Go's core.IssuanceBytes(cert).
148
+ const issuanceData = issuanceBytes(certificate);
149
+ const leaf = await hashLeaf(crypto, issuanceData);
150
+ const proofHashes = (transparency.inclusion_proof ?? []).map((h) => decodeBytes(h));
151
+ const root = decodeBytes(sth.root_hash);
152
+ const index = transparency.entry_index;
153
+ const treeSize = sth.tree_size;
154
+ if (!(await verifyInclusion(crypto, leaf, index, treeSize, proofHashes, root))) {
155
+ throw new errors_js_1.VerificationError("merkle inclusion proof is invalid");
156
+ }
157
+ return "INCLUDED";
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Issuance bytes — matches Go's core.IssuanceBytes(cert)
161
+ // ---------------------------------------------------------------------------
162
+ /** Reconstruct the certificate JSON as it existed at issuance time.
163
+ *
164
+ * At issuance: transparency_status = "PENDING", transparency = nil (omitted).
165
+ * Go uses json.Marshal(cert) which preserves struct field order. JSON.parse
166
+ * preserves key insertion order from the Go JSON, so JSON.stringify reproduces
167
+ * the same bytes.
168
+ */
169
+ function issuanceBytes(certificate) {
170
+ const clone = JSON.parse(JSON.stringify(certificate));
171
+ clone.transparency_status = "PENDING";
172
+ delete clone.transparency;
173
+ return textToBytes(JSON.stringify(clone));
174
+ }
175
+ // ---------------------------------------------------------------------------
176
+ // RFC 8785 Canonical JSON
177
+ // ---------------------------------------------------------------------------
178
+ function canonicalJson(obj) {
179
+ return textToBytes(canonicalStringify(obj));
180
+ }
181
+ function canonicalStringify(val) {
182
+ if (val === null || val === undefined)
183
+ return "null";
184
+ if (typeof val === "boolean")
185
+ return val ? "true" : "false";
186
+ if (typeof val === "number")
187
+ return JSON.stringify(val);
188
+ if (typeof val === "string")
189
+ return JSON.stringify(val);
190
+ if (Array.isArray(val)) {
191
+ return "[" + val.map(canonicalStringify).join(",") + "]";
192
+ }
193
+ if (typeof val === "object") {
194
+ const obj = val;
195
+ const keys = Object.keys(obj).sort();
196
+ const pairs = keys.map((k) => JSON.stringify(k) + ":" + canonicalStringify(obj[k]));
197
+ return "{" + pairs.join(",") + "}";
198
+ }
199
+ return JSON.stringify(val);
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // Byte encoding helpers
203
+ // ---------------------------------------------------------------------------
204
+ /** Convert a byte field to lowercase hex. Handles:
205
+ * - hex string (from hand-crafted test data)
206
+ * - base64 string (from Go's json.Marshal of []byte slices)
207
+ * - number[] (from Go's json.Marshal of [N]byte fixed arrays)
208
+ */
209
+ function toHex(value) {
210
+ if (Array.isArray(value)) {
211
+ return bytesToHex(new Uint8Array(value));
212
+ }
213
+ const str = value;
214
+ if (/^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0) {
215
+ return str.toLowerCase();
216
+ }
217
+ return bytesToHex(base64ToBytes(str));
218
+ }
219
+ /** Decode a signature field to raw bytes. Same format handling as toHex. */
220
+ function decodeSignature(value) {
221
+ if (Array.isArray(value)) {
222
+ return new Uint8Array(value);
223
+ }
224
+ const str = value;
225
+ if (/^[0-9a-fA-F]+$/.test(str)) {
226
+ const raw = hexToBytes(str);
227
+ if (raw.length === 64)
228
+ return raw;
229
+ }
230
+ return base64ToBytes(str);
231
+ }
232
+ /** Decode a hash/bytes field to raw bytes. Same format handling as toHex. */
233
+ function decodeBytes(value) {
234
+ if (Array.isArray(value)) {
235
+ return new Uint8Array(value);
236
+ }
237
+ const str = value;
238
+ if (/^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0) {
239
+ return hexToBytes(str);
240
+ }
241
+ return base64ToBytes(str);
242
+ }
243
+ function formatTimestamp(ts) {
244
+ // Strip fractional seconds, normalize to YYYY-MM-DDTHH:MM:SSZ
245
+ let s = ts;
246
+ const dotIdx = s.indexOf(".");
247
+ if (dotIdx !== -1) {
248
+ // Find the end of fractional seconds (Z, +, or end)
249
+ let endIdx = s.length;
250
+ for (let i = dotIdx + 1; i < s.length; i++) {
251
+ if (s[i] === "Z" || s[i] === "+" || s[i] === "-") {
252
+ endIdx = i;
253
+ break;
254
+ }
255
+ }
256
+ s = s.slice(0, dotIdx) + s.slice(endIdx);
257
+ }
258
+ if (s.endsWith("Z"))
259
+ return s;
260
+ // Strip timezone offset
261
+ const plusIdx = s.indexOf("+");
262
+ if (plusIdx !== -1) {
263
+ s = s.slice(0, plusIdx);
264
+ }
265
+ return s + "Z";
266
+ }
267
+ // ---------------------------------------------------------------------------
268
+ // Payload builders — exact ports of core/payload.go
269
+ // ---------------------------------------------------------------------------
270
+ function buildAttestationPayload(subject, att) {
271
+ const attestedAt = formatTimestamp(att.attested_at);
272
+ const systems = att.systems.map((s) => ({
273
+ canonical_version: s.canonical_version ?? null,
274
+ connector_type: s.connector_type,
275
+ hash_scope: s.hash_scope,
276
+ merkle_root: s.merkle_root
277
+ ? toHex(s.merkle_root)
278
+ : null,
279
+ observed_at: attestedAt,
280
+ record_count: s.record_count,
281
+ system_id: s.system_name,
282
+ }));
283
+ const payload = {
284
+ attested_at: attestedAt,
285
+ proof_mode: att.proof_mode,
286
+ subject_hash: toHex(subject.identifier_hash),
287
+ systems,
288
+ };
289
+ return canonicalJson(payload);
290
+ }
291
+ function buildVerificationPayload(attestationId, ver) {
292
+ const verifiedAt = formatTimestamp(ver.verified_at);
293
+ const systems = ver.systems.map((s) => ({
294
+ observed_at: verifiedAt,
295
+ record_count: s.record_count,
296
+ system_id: s.system_name,
297
+ }));
298
+ const payload = {
299
+ attestation_id: attestationId,
300
+ systems,
301
+ verified_at: verifiedAt,
302
+ };
303
+ return canonicalJson(payload);
304
+ }
305
+ function buildCertificatePayload(cert) {
306
+ const att = cert.attestation;
307
+ const ver = cert.verification;
308
+ const issuer = cert.issuer;
309
+ const subject = cert.subject;
310
+ // Attestation systems — uses "system_name" field name
311
+ const attSystems = att.systems.map((s) => ({
312
+ canonical_version: s.canonical_version ?? null,
313
+ connector_type: s.connector_type,
314
+ hash_scope: s.hash_scope,
315
+ merkle_root: s.merkle_root
316
+ ? toHex(s.merkle_root)
317
+ : null,
318
+ record_count: s.record_count,
319
+ system_name: s.system_name,
320
+ }));
321
+ const attObj = {
322
+ attestation_signature: toHex(att.attestation_signature),
323
+ attested_at: formatTimestamp(att.attested_at),
324
+ proof_mode: att.proof_mode,
325
+ systems: attSystems,
326
+ };
327
+ // Verification systems
328
+ const verSystems = ver.systems.map((s) => ({
329
+ connector_type: s.connector_type,
330
+ record_count: s.record_count,
331
+ system_name: s.system_name,
332
+ }));
333
+ const verObj = {
334
+ systems: verSystems,
335
+ verification_signature: toHex(ver.verification_signature),
336
+ verified_at: formatTimestamp(ver.verified_at),
337
+ };
338
+ const issuerObj = {
339
+ key_id: issuer.key_id,
340
+ name: issuer.name,
341
+ public_key: toHex(issuer.public_key),
342
+ };
343
+ const subjectObj = {
344
+ identifier_hash: toHex(subject.identifier_hash),
345
+ identifier_type_hint: subject.identifier_type_hint,
346
+ };
347
+ // Revocation
348
+ let revocation = null;
349
+ const rev = cert.revocation;
350
+ if (rev != null) {
351
+ revocation = {
352
+ reason: rev.reason,
353
+ replacement_certificate_id: rev.replacement_certificate_id ?? null,
354
+ revoked_at: formatTimestamp(rev.revoked_at),
355
+ };
356
+ }
357
+ const payload = {
358
+ attestation: attObj,
359
+ attestation_id: cert.attestation_id,
360
+ certificate_format_version: cert.certificate_format_version,
361
+ certificate_id: cert.certificate_id,
362
+ issued_at: formatTimestamp(cert.issued_at),
363
+ issuer: issuerObj,
364
+ revocation,
365
+ status: cert.status,
366
+ subject: subjectObj,
367
+ verification: verObj,
368
+ };
369
+ return canonicalJson(payload);
370
+ }
371
+ function buildTreeHeadPayload(head) {
372
+ const payload = {
373
+ root_hash: toHex(head.root_hash),
374
+ timestamp: formatTimestamp(head.timestamp),
375
+ tree_size: head.tree_size,
376
+ };
377
+ return canonicalJson(payload);
378
+ }
379
+ // ---------------------------------------------------------------------------
380
+ // Merkle tree (RFC 6962) — ports of core/merkle.go
381
+ // ---------------------------------------------------------------------------
382
+ async function hashLeaf(crypto, data) {
383
+ return crypto.sha256(concatBytes(new Uint8Array([0x00]), data));
384
+ }
385
+ async function hashNode(crypto, left, right) {
386
+ const prefix = new Uint8Array([0x01]);
387
+ return crypto.sha256(concatBytes(prefix, concatBytes(left, right)));
388
+ }
389
+ function splitPoint(n) {
390
+ let k = 1;
391
+ while (k * 2 < n) {
392
+ k *= 2;
393
+ }
394
+ return k;
395
+ }
396
+ async function verifyInclusion(crypto, leaf, index, size, proof, root) {
397
+ if (size === 0 || index >= size)
398
+ return false;
399
+ if (size === 1)
400
+ return proof.length === 0 && bytesEqual(leaf, root);
401
+ const [computed, consumed] = await chainInclusion(crypto, leaf, index, size, proof);
402
+ return consumed === proof.length && bytesEqual(computed, root);
403
+ }
404
+ async function chainInclusion(crypto, leaf, index, n, proof) {
405
+ if (n === 1)
406
+ return [leaf, 0];
407
+ const k = splitPoint(n);
408
+ if (index < k) {
409
+ const [inner, used] = await chainInclusion(crypto, leaf, index, k, proof);
410
+ if (used >= proof.length)
411
+ return [inner, used + 1];
412
+ return [await hashNode(crypto, inner, proof[used]), used + 1];
413
+ }
414
+ const [inner, used] = await chainInclusion(crypto, leaf, index - k, n - k, proof);
415
+ if (used >= proof.length)
416
+ return [inner, used + 1];
417
+ return [await hashNode(crypto, proof[used], inner), used + 1];
418
+ }
419
+ function isPow2(n) {
420
+ return n > 0 && (n & (n - 1)) === 0;
421
+ }
422
+ /** Verify a Merkle consistency proof (RFC 6962 Section 2.1.4).
423
+ *
424
+ * Port of Go's VerifyConsistency / Python's _verify_consistency.
425
+ */
426
+ async function verifyConsistency(crypto, oldSize, newSize, oldRoot, newRoot, proof) {
427
+ if (oldSize === 0 || newSize === 0 || oldSize > newSize)
428
+ return false;
429
+ if (oldSize === newSize) {
430
+ return proof.length === 0 && bytesEqual(oldRoot, newRoot);
431
+ }
432
+ let pIdx = 0;
433
+ let fr;
434
+ let sr;
435
+ if (isPow2(oldSize)) {
436
+ fr = oldRoot;
437
+ sr = oldRoot;
438
+ }
439
+ else {
440
+ if (pIdx >= proof.length)
441
+ return false;
442
+ fr = proof[pIdx];
443
+ sr = proof[pIdx];
444
+ pIdx++;
445
+ }
446
+ let fn = oldSize - 1;
447
+ let sn = newSize - 1;
448
+ while ((fn & 1) === 1) {
449
+ fn >>= 1;
450
+ sn >>= 1;
451
+ }
452
+ while (pIdx < proof.length) {
453
+ const c = proof[pIdx];
454
+ pIdx++;
455
+ if ((fn & 1) === 1 || fn === sn) {
456
+ fr = await hashNode(crypto, c, fr);
457
+ sr = await hashNode(crypto, c, sr);
458
+ while (fn !== 0 && (fn & 1) === 0) {
459
+ fn >>= 1;
460
+ sn >>= 1;
461
+ }
462
+ }
463
+ else {
464
+ sr = await hashNode(crypto, sr, c);
465
+ }
466
+ fn >>= 1;
467
+ sn >>= 1;
468
+ }
469
+ return sn === 0 && bytesEqual(fr, oldRoot) && bytesEqual(sr, newRoot);
470
+ }
471
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAYH,gCASC;AAYD,gCAQC;AA0CD,4CASC;AASD,8CA0CC;AAGD,gDA4CC;AAaD,sCAKC;AAsSD,8CAuDC;AA1iBD,2CAAgD;AAGhD,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAErC,SAAgB,UAAU,CAAC,GAAW;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,MAAM;IACN,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM;IACN,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM;IACN,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,UAAU,CAAC,KAAiB;IAC1C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACpB,GAAG,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,GAAG,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa;IAC/C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,qDAAqD;IACrD,uDAAuD;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAYM,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,MAAc,EACd,IAA4B;IAE5B,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC;AACnE,CAAC;AAQD,+DAA+D;AACxD,KAAK,UAAU,iBAAiB,CACrC,MAAiB,EACjB,WAAiB,EACjB,UAAsC;IAEtC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAiC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAgB,CAAC;IAEtC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,IAAI,6BAAiB,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;IACnF,IAAI,GAAG,CAAC,OAAO;QAAE,MAAM,IAAI,6BAAiB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;IAEhF,2BAA2B;IAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,WAAsC,CAAC;IAC/D,MAAM,UAAU,GAAG,uBAAuB,CACxC,WAAW,CAAC,OAAkC,EAC9C,GAAG,CACJ,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,qBAA+B,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,6BAAiB,CAAC,kCAAkC,CAAC,CAAC;IAClE,CAAC;IAED,4BAA4B;IAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,YAAuC,CAAC;IAChE,MAAM,UAAU,GAAG,wBAAwB,CACzC,WAAW,CAAC,cAAwB,EACpC,GAAG,CACJ,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,sBAAgC,CAAC,CAAC;IACrE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,6BAAiB,CAAC,mCAAmC,CAAC,CAAC;IACnE,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,qBAA+B,CAAC,CAAC;IAC7E,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,6BAAiB,CAAC,kCAAkC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,OAA6B,CAAC;AACvC,CAAC;AAED,+DAA+D;AACxD,KAAK,UAAU,kBAAkB,CACtC,MAAiB,EACjB,WAAiB,EACjB,UAAsC;IAEtC,MAAM,YAAY,GAAG,WAAW,CAAC,YAEpB,CAAC;IACd,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,OAAO,eAAqC,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,gBAA2C,CAAC;IACrE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAiC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAgB,CAAC;IAEtC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,IAAI,6BAAiB,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;IACnF,IAAI,GAAG,CAAC,OAAO;QAAE,MAAM,IAAI,6BAAiB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;IAEhF,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,SAAmB,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,6BAAiB,CAAC,gCAAgC,CAAC,CAAC;IAChE,CAAC;IAED,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,CACjB,YAAY,CAAC,eAAyC,IAAI,EAAE,CAC9D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,YAAY,CAAC,WAAqB,CAAC;IACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAmB,CAAC;IAEzC,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,6BAAiB,CAAC,mCAAmC,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,UAAgC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,WAAiB;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAA4B,CAAC;IACjF,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACtC,OAAO,KAAK,CAAC,YAAY,CAAC;IAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,SAAS,aAAa,CAAC,GAAY;IACjC,OAAO,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;QACF,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,KAAK,CAAC,KAAc;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,IAAI,UAAU,CAAC,KAAiB,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,GAAG,GAAG,KAAe,CAAC;IAC5B,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,4EAA4E;AAC5E,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,UAAU,CAAC,KAAiB,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,KAAe,CAAC;IAC5B,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,6EAA6E;AAC7E,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,UAAU,CAAC,KAAiB,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,KAAe,CAAC;IAC5B,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,8DAA8D;IAC9D,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,oDAAoD;QACpD,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjD,MAAM,GAAG,CAAC,CAAC;gBACX,MAAM;YACR,CAAC;QACH,CAAC;QACD,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9B,wBAAwB;IACxB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E,SAAS,uBAAuB,CAC9B,OAAgC,EAChC,GAA4B;IAE5B,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,WAAqB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAI,GAAG,CAAC,OAAqC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,iBAAiB,EAAG,CAAC,CAAC,iBAAmC,IAAI,IAAI;QACjE,cAAc,EAAE,CAAC,CAAC,cAAwB;QAC1C,UAAU,EAAE,CAAC,CAAC,UAAoB;QAClC,WAAW,EAAE,CAAC,CAAC,WAAW;YACxB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAqB,CAAC;YAChC,CAAC,CAAC,IAAI;QACR,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,CAAC,CAAC,YAAsB;QACtC,SAAS,EAAE,CAAC,CAAC,WAAqB;KACnC,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,GAAG,CAAC,UAAoB;QACpC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,eAAyB,CAAC;QACtD,OAAO;KACR,CAAC;IACF,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,wBAAwB,CAC/B,aAAqB,EACrB,GAA4B;IAE5B,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,WAAqB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAI,GAAG,CAAC,OAAqC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,CAAC,CAAC,YAAsB;QACtC,SAAS,EAAE,CAAC,CAAC,WAAqB;KACnC,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,aAAa;QAC7B,OAAO;QACP,WAAW,EAAE,UAAU;KACxB,CAAC;IACF,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAA6B;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAsC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAuC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAiC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAkC,CAAC;IAExD,sDAAsD;IACtD,MAAM,UAAU,GAAI,GAAG,CAAC,OAAqC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,iBAAiB,EAAG,CAAC,CAAC,iBAAmC,IAAI,IAAI;QACjE,cAAc,EAAE,CAAC,CAAC,cAAwB;QAC1C,UAAU,EAAE,CAAC,CAAC,UAAoB;QAClC,WAAW,EAAE,CAAC,CAAC,WAAW;YACxB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAqB,CAAC;YAChC,CAAC,CAAC,IAAI;QACR,YAAY,EAAE,CAAC,CAAC,YAAsB;QACtC,WAAW,EAAE,CAAC,CAAC,WAAqB;KACrC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG;QACb,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,qBAA+B,CAAC;QACjE,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,WAAqB,CAAC;QACvD,UAAU,EAAE,GAAG,CAAC,UAAoB;QACpC,OAAO,EAAE,UAAU;KACpB,CAAC;IAEF,uBAAuB;IACvB,MAAM,UAAU,GAAI,GAAG,CAAC,OAAqC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,cAAc,EAAE,CAAC,CAAC,cAAwB;QAC1C,YAAY,EAAE,CAAC,CAAC,YAAsB;QACtC,WAAW,EAAE,CAAC,CAAC,WAAqB;KACrC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,UAAU;QACnB,sBAAsB,EAAE,KAAK,CAAC,GAAG,CAAC,sBAAgC,CAAC;QACnE,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,WAAqB,CAAC;KACxD,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,MAAM,EAAE,MAAM,CAAC,MAAgB;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAc;QAC3B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAoB,CAAC;KAC/C,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,eAAyB,CAAC;QACzD,oBAAoB,EAAE,OAAO,CAAC,oBAA8B;KAC7D,CAAC;IAEF,aAAa;IACb,IAAI,UAAU,GAAmC,IAAI,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAwD,CAAC;IAC1E,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,UAAU,GAAG;YACX,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,0BAA0B,EACvB,GAAG,CAAC,0BAA4C,IAAI,IAAI;YAC3D,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,UAAoB,CAAC;SACtD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,MAAM;QACnB,cAAc,EAAE,IAAI,CAAC,cAAwB;QAC7C,0BAA0B,EAAE,IAAI,CAAC,0BAAoC;QACrE,cAAc,EAAE,IAAI,CAAC,cAAwB;QAC7C,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,SAAmB,CAAC;QACpD,MAAM,EAAE,SAAS;QACjB,UAAU;QACV,MAAM,EAAE,IAAI,CAAC,MAAgB;QAC7B,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,MAAM;KACrB,CAAC;IACF,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA6B;IACzD,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAmB,CAAC;QAC1C,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,SAAmB,CAAC;QACpD,SAAS,EAAE,IAAI,CAAC,SAAmB;KACpC,CAAC;IACF,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,KAAK,UAAU,QAAQ,CAAC,MAAiB,EAAE,IAAgB;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAiB,EAAE,IAAgB,EAAE,KAAiB;IAC5E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAAiB,EACjB,IAAgB,EAChB,KAAa,EACb,IAAY,EACZ,KAAmB,EACnB,IAAgB;IAEhB,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpF,OAAO,QAAQ,KAAK,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,MAAiB,EACjB,IAAgB,EAChB,KAAa,EACb,CAAS,EACT,KAAmB;IAEnB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAClF,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAE,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,iBAAiB,CACrC,MAAiB,EACjB,OAAe,EACf,OAAe,EACf,OAAmB,EACnB,OAAmB,EACnB,KAAmB;IAEnB,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,GAAG,OAAO;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,EAAc,CAAC;IACnB,IAAI,EAAc,CAAC;IAEnB,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,EAAE,GAAG,OAAO,CAAC;QACb,EAAE,GAAG,OAAO,CAAC;IACf,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACvC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QAClB,EAAE,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QAClB,IAAI,EAAE,CAAC;IACT,CAAC;IAED,IAAI,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC;IACrB,IAAI,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC;IAErB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,EAAE,KAAK,CAAC,CAAC;QACT,EAAE,KAAK,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QACvB,IAAI,EAAE,CAAC;QAEP,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChC,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,EAAE,KAAK,CAAC,CAAC;gBACT,EAAE,KAAK,CAAC,CAAC;YACX,CAAC;QACH,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,EAAE,KAAK,CAAC,CAAC;QACT,EAAE,KAAK,CAAC,CAAC;IACX,CAAC;IAED,OAAO,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** Webhook signature verification for incoming BurnLedger events.
2
+ *
3
+ * The server signs webhook payloads with HMAC-SHA256 using the webhook secret.
4
+ * The signature is sent in the X-BurnLedger-Signature header as a hex string.
5
+ *
6
+ * Node-only — webhooks are received server-side.
7
+ */
8
+ /**
9
+ * Verify that a webhook payload was signed by the expected secret.
10
+ *
11
+ * @param secret The webhook secret (raw UTF-8, as returned by the API)
12
+ * @param body The raw request body bytes
13
+ * @param signature The hex-encoded HMAC-SHA256 signature from the X-BurnLedger-Signature header
14
+ * @returns true if the signature is valid
15
+ */
16
+ export declare function verifyWebhookSignature(secret: string, body: Uint8Array | string, signature: string): boolean;
17
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAkBT"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /** Webhook signature verification for incoming BurnLedger events.
3
+ *
4
+ * The server signs webhook payloads with HMAC-SHA256 using the webhook secret.
5
+ * The signature is sent in the X-BurnLedger-Signature header as a hex string.
6
+ *
7
+ * Node-only — webhooks are received server-side.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.verifyWebhookSignature = verifyWebhookSignature;
11
+ const node_crypto_1 = require("node:crypto");
12
+ /**
13
+ * Verify that a webhook payload was signed by the expected secret.
14
+ *
15
+ * @param secret The webhook secret (raw UTF-8, as returned by the API)
16
+ * @param body The raw request body bytes
17
+ * @param signature The hex-encoded HMAC-SHA256 signature from the X-BurnLedger-Signature header
18
+ * @returns true if the signature is valid
19
+ */
20
+ function verifyWebhookSignature(secret, body, signature) {
21
+ if (secret.length === 0)
22
+ return false;
23
+ if (signature.length === 0)
24
+ return false;
25
+ const expected = (0, node_crypto_1.createHmac)("sha256", secret)
26
+ .update(typeof body === "string" ? Buffer.from(body, "utf-8") : body)
27
+ .digest();
28
+ let received;
29
+ try {
30
+ received = Buffer.from(signature, "hex");
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ if (received.length !== expected.length)
36
+ return false;
37
+ return (0, node_crypto_1.timingSafeEqual)(expected, received);
38
+ }
39
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAYH,wDAsBC;AAhCD,6CAA0D;AAE1D;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CACpC,MAAc,EACd,IAAyB,EACzB,SAAiB;IAEjB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzC,MAAM,QAAQ,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC;SAC1C,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACpE,MAAM,EAAE,CAAC;IAEZ,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAEtD,OAAO,IAAA,6BAAe,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,84 @@
1
+ /** Async BurnLedger API client.
2
+ *
3
+ * Single class — Node.js is all-async, no sync/async split needed.
4
+ * Pagination uses AsyncIterable<T> via Paginator.
5
+ */
6
+ import type { Attestation, CertificateResponse, ConsistencyProof, InclusionProof, LogEntry, RevocationStatus, SignedTreeHead, System, VerifyResult, Webhook } from "./models.js";
7
+ import { Paginator } from "./pagination.js";
8
+ export interface BurnLedgerOptions {
9
+ apiKey: string;
10
+ baseUrl?: string;
11
+ timeout?: number;
12
+ maxRetries?: number;
13
+ }
14
+ export declare class BurnLedger {
15
+ private readonly transport;
16
+ constructor(opts: BurnLedgerOptions);
17
+ close(): void;
18
+ [Symbol.asyncDispose](): Promise<void>;
19
+ registerSystem(opts: {
20
+ name: string;
21
+ connectorType: string;
22
+ connectionConfig?: Record<string, unknown>;
23
+ dsn?: string;
24
+ uri?: string;
25
+ subjectQuery: string;
26
+ hashScope?: string;
27
+ maxRecords?: number;
28
+ maxBytes?: number;
29
+ queryTimeout?: string;
30
+ }): Promise<System>;
31
+ getSystem(systemId: string): Promise<System>;
32
+ listSystems(opts?: {
33
+ limit?: number;
34
+ }): Paginator<System>;
35
+ deregisterSystem(systemId: string): Promise<void>;
36
+ healthCheck(systemId: string): Promise<System>;
37
+ attest(subjectIdentifier: string, opts?: {
38
+ systemIds?: string[];
39
+ proofMode?: string;
40
+ expiresIn?: string;
41
+ webhookUrl?: string;
42
+ }): Promise<Attestation>;
43
+ getAttestation(attestationId: string): Promise<Attestation>;
44
+ waitFor(attestationId: string, opts?: {
45
+ timeout?: number;
46
+ pollInterval?: number;
47
+ }): Promise<Attestation>;
48
+ verify(attestationId: string, subjectIdentifier: string, opts?: {
49
+ timeout?: number;
50
+ pollInterval?: number;
51
+ }): Promise<VerifyResult>;
52
+ getCertificate(certificateId: string): Promise<CertificateResponse>;
53
+ listCertificates(opts?: {
54
+ limit?: number;
55
+ }): Paginator<CertificateResponse>;
56
+ downloadPdf(certificateId: string): Promise<Uint8Array>;
57
+ savePdf(certificateId: string, path: string): Promise<void>;
58
+ getRevocationStatus(certificateId: string): Promise<RevocationStatus>;
59
+ revokeCertificate(certificateId: string, opts: {
60
+ reason: string;
61
+ }): Promise<CertificateResponse>;
62
+ registerWebhook(opts: {
63
+ url: string;
64
+ }): Promise<Webhook>;
65
+ listWebhooks(opts?: {
66
+ limit?: number;
67
+ }): Paginator<Webhook>;
68
+ deleteWebhook(webhookId: string): Promise<void>;
69
+ getLogHead(): Promise<SignedTreeHead>;
70
+ getLogEntry(index: number): Promise<LogEntry>;
71
+ getLogEntries(opts: {
72
+ start: number;
73
+ end: number;
74
+ }): Promise<LogEntry[]>;
75
+ getInclusionProof(opts: {
76
+ index: number;
77
+ treeSize: number;
78
+ }): Promise<InclusionProof>;
79
+ getConsistencyProof(opts: {
80
+ oldSize: number;
81
+ newSize: number;
82
+ }): Promise<ConsistencyProof>;
83
+ }
84
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}