nostr-double-ratchet 0.0.3 → 0.0.5
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/Channel.d.ts +23 -4
- package/dist/Channel.d.ts.map +1 -1
- package/dist/InviteLink.d.ts.map +1 -1
- package/dist/nostr-double-ratchet.es.js +483 -455
- package/dist/nostr-double-ratchet.umd.js +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -16
- package/src/Channel.ts +52 -18
- package/src/InviteLink.ts +6 -4
- package/src/types.ts +19 -1
|
@@ -28,9 +28,9 @@ function ci(e, t) {
|
|
|
28
28
|
if (e.length < n)
|
|
29
29
|
throw new Error(`digestInto() expects output buffer of length at least ${n}`);
|
|
30
30
|
}
|
|
31
|
-
const
|
|
31
|
+
const At = typeof globalThis == "object" && "crypto" in globalThis ? globalThis.crypto : void 0;
|
|
32
32
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
33
|
-
const On = (e) => e instanceof Uint8Array,
|
|
33
|
+
const On = (e) => e instanceof Uint8Array, St = (e) => new DataView(e.buffer, e.byteOffset, e.byteLength), ne = (e, t) => e << 32 - t | e >>> t, li = new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68;
|
|
34
34
|
if (!li)
|
|
35
35
|
throw new Error("Non little-endian hardware is not supported");
|
|
36
36
|
function ui(e) {
|
|
@@ -38,7 +38,7 @@ function ui(e) {
|
|
|
38
38
|
throw new Error(`utf8ToBytes expected string, got ${typeof e}`);
|
|
39
39
|
return new Uint8Array(new TextEncoder().encode(e));
|
|
40
40
|
}
|
|
41
|
-
function
|
|
41
|
+
function Vt(e) {
|
|
42
42
|
if (typeof e == "string" && (e = ui(e)), !On(e))
|
|
43
43
|
throw new Error(`expected Uint8Array, got ${typeof e}`);
|
|
44
44
|
return e;
|
|
@@ -59,12 +59,12 @@ let Mn = class {
|
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
function hi(e) {
|
|
62
|
-
const t = (r) => e().update(
|
|
62
|
+
const t = (r) => e().update(Vt(r)).digest(), n = e();
|
|
63
63
|
return t.outputLen = n.outputLen, t.blockLen = n.blockLen, t.create = () => e(), t;
|
|
64
64
|
}
|
|
65
65
|
function Hn(e = 32) {
|
|
66
|
-
if (
|
|
67
|
-
return
|
|
66
|
+
if (At && typeof At.getRandomValues == "function")
|
|
67
|
+
return At.getRandomValues(new Uint8Array(e));
|
|
68
68
|
throw new Error("crypto.getRandomValues must be defined");
|
|
69
69
|
}
|
|
70
70
|
function di(e, t, n, r) {
|
|
@@ -75,17 +75,17 @@ function di(e, t, n, r) {
|
|
|
75
75
|
}
|
|
76
76
|
let yi = class extends Mn {
|
|
77
77
|
constructor(t, n, r, i) {
|
|
78
|
-
super(), this.blockLen = t, this.outputLen = n, this.padOffset = r, this.isLE = i, this.finished = !1, this.length = 0, this.pos = 0, this.destroyed = !1, this.buffer = new Uint8Array(t), this.view =
|
|
78
|
+
super(), this.blockLen = t, this.outputLen = n, this.padOffset = r, this.isLE = i, this.finished = !1, this.length = 0, this.pos = 0, this.destroyed = !1, this.buffer = new Uint8Array(t), this.view = St(this.buffer);
|
|
79
79
|
}
|
|
80
80
|
update(t) {
|
|
81
81
|
rt(this);
|
|
82
82
|
const { view: n, buffer: r, blockLen: i } = this;
|
|
83
|
-
t =
|
|
83
|
+
t = Vt(t);
|
|
84
84
|
const o = t.length;
|
|
85
85
|
for (let s = 0; s < o; ) {
|
|
86
86
|
const c = Math.min(i - this.pos, o - s);
|
|
87
87
|
if (c === i) {
|
|
88
|
-
const a =
|
|
88
|
+
const a = St(t);
|
|
89
89
|
for (; i <= o - s; s += i)
|
|
90
90
|
this.process(a, s);
|
|
91
91
|
continue;
|
|
@@ -102,7 +102,7 @@ let yi = class extends Mn {
|
|
|
102
102
|
for (let u = s; u < i; u++)
|
|
103
103
|
n[u] = 0;
|
|
104
104
|
di(r, i - 8, BigInt(this.length * 8), o), this.process(r, 0);
|
|
105
|
-
const c =
|
|
105
|
+
const c = St(t), a = this.outputLen;
|
|
106
106
|
if (a % 4)
|
|
107
107
|
throw new Error("_sha2: outputLen should be aligned to 32bit");
|
|
108
108
|
const l = a / 4, f = this.get();
|
|
@@ -123,7 +123,7 @@ let yi = class extends Mn {
|
|
|
123
123
|
return t.length = i, t.pos = c, t.finished = o, t.destroyed = s, i % n && t.buffer.set(r), t;
|
|
124
124
|
}
|
|
125
125
|
};
|
|
126
|
-
const
|
|
126
|
+
const pi = (e, t, n) => e & t ^ ~e & n, gi = (e, t, n) => e & t ^ e & n ^ t & n, wi = /* @__PURE__ */ new Uint32Array([
|
|
127
127
|
1116352408,
|
|
128
128
|
1899447441,
|
|
129
129
|
3049323471,
|
|
@@ -188,7 +188,7 @@ const gi = (e, t, n) => e & t ^ ~e & n, pi = (e, t, n) => e & t ^ e & n ^ t & n,
|
|
|
188
188
|
2756734187,
|
|
189
189
|
3204031479,
|
|
190
190
|
3329325298
|
|
191
|
-
]),
|
|
191
|
+
]), ge = /* @__PURE__ */ new Uint32Array([
|
|
192
192
|
1779033703,
|
|
193
193
|
3144134277,
|
|
194
194
|
1013904242,
|
|
@@ -200,7 +200,7 @@ const gi = (e, t, n) => e & t ^ ~e & n, pi = (e, t, n) => e & t ^ e & n ^ t & n,
|
|
|
200
200
|
]), we = /* @__PURE__ */ new Uint32Array(64);
|
|
201
201
|
let bi = class extends yi {
|
|
202
202
|
constructor() {
|
|
203
|
-
super(64, 32, 8, !1), this.A =
|
|
203
|
+
super(64, 32, 8, !1), this.A = ge[0] | 0, this.B = ge[1] | 0, this.C = ge[2] | 0, this.D = ge[3] | 0, this.E = ge[4] | 0, this.F = ge[5] | 0, this.G = ge[6] | 0, this.H = ge[7] | 0;
|
|
204
204
|
}
|
|
205
205
|
get() {
|
|
206
206
|
const { A: t, B: n, C: r, D: i, E: o, F: s, G: c, H: a } = this;
|
|
@@ -214,13 +214,13 @@ let bi = class extends yi {
|
|
|
214
214
|
for (let u = 0; u < 16; u++, n += 4)
|
|
215
215
|
we[u] = t.getUint32(n, !1);
|
|
216
216
|
for (let u = 16; u < 64; u++) {
|
|
217
|
-
const d = we[u - 15],
|
|
218
|
-
we[u] = h + we[u - 7] +
|
|
217
|
+
const d = we[u - 15], p = we[u - 2], g = ne(d, 7) ^ ne(d, 18) ^ d >>> 3, h = ne(p, 17) ^ ne(p, 19) ^ p >>> 10;
|
|
218
|
+
we[u] = h + we[u - 7] + g + we[u - 16] | 0;
|
|
219
219
|
}
|
|
220
220
|
let { A: r, B: i, C: o, D: s, E: c, F: a, G: l, H: f } = this;
|
|
221
221
|
for (let u = 0; u < 64; u++) {
|
|
222
|
-
const d = ne(c, 6) ^ ne(c, 11) ^ ne(c, 25),
|
|
223
|
-
f = l, l = a, a = c, c = s +
|
|
222
|
+
const d = ne(c, 6) ^ ne(c, 11) ^ ne(c, 25), p = f + d + pi(c, a, l) + wi[u] + we[u] | 0, h = (ne(r, 2) ^ ne(r, 13) ^ ne(r, 22)) + gi(r, i, o) | 0;
|
|
223
|
+
f = l, l = a, a = c, c = s + p | 0, s = o, o = i, i = r, r = p + h | 0;
|
|
224
224
|
}
|
|
225
225
|
r = r + this.A | 0, i = i + this.B | 0, o = o + this.C | 0, s = s + this.D | 0, c = c + this.E | 0, a = a + this.F | 0, l = l + this.G | 0, f = f + this.H | 0, this.set(r, i, o, s, c, a, l, f);
|
|
226
226
|
}
|
|
@@ -231,11 +231,11 @@ let bi = class extends yi {
|
|
|
231
231
|
this.set(0, 0, 0, 0, 0, 0, 0, 0), this.buffer.fill(0);
|
|
232
232
|
}
|
|
233
233
|
};
|
|
234
|
-
const
|
|
234
|
+
const Lt = /* @__PURE__ */ hi(() => new bi());
|
|
235
235
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
236
|
-
const qn = BigInt(0),
|
|
236
|
+
const qn = BigInt(0), lt = BigInt(1), vi = BigInt(2), ut = (e) => e instanceof Uint8Array, mi = /* @__PURE__ */ Array.from({ length: 256 }, (e, t) => t.toString(16).padStart(2, "0"));
|
|
237
237
|
function He(e) {
|
|
238
|
-
if (!
|
|
238
|
+
if (!ut(e))
|
|
239
239
|
throw new Error("Uint8Array expected");
|
|
240
240
|
let t = "";
|
|
241
241
|
for (let n = 0; n < e.length; n++)
|
|
@@ -266,11 +266,11 @@ function qe(e) {
|
|
|
266
266
|
}
|
|
267
267
|
return n;
|
|
268
268
|
}
|
|
269
|
-
function
|
|
269
|
+
function G(e) {
|
|
270
270
|
return Zt(He(e));
|
|
271
271
|
}
|
|
272
272
|
function Ft(e) {
|
|
273
|
-
if (!
|
|
273
|
+
if (!ut(e))
|
|
274
274
|
throw new Error("Uint8Array expected");
|
|
275
275
|
return Zt(He(Uint8Array.from(e).reverse()));
|
|
276
276
|
}
|
|
@@ -291,7 +291,7 @@ function Z(e, t, n) {
|
|
|
291
291
|
} catch (o) {
|
|
292
292
|
throw new Error(`${e} must be valid hex string, got "${t}". Cause: ${o}`);
|
|
293
293
|
}
|
|
294
|
-
else if (
|
|
294
|
+
else if (ut(t))
|
|
295
295
|
r = Uint8Array.from(t);
|
|
296
296
|
else
|
|
297
297
|
throw new Error(`${e} must be hex string or Uint8Array`);
|
|
@@ -304,7 +304,7 @@ function Ie(...e) {
|
|
|
304
304
|
const t = new Uint8Array(e.reduce((r, i) => r + i.length, 0));
|
|
305
305
|
let n = 0;
|
|
306
306
|
return e.forEach((r) => {
|
|
307
|
-
if (!
|
|
307
|
+
if (!ut(r))
|
|
308
308
|
throw new Error("Uint8Array expected");
|
|
309
309
|
t.set(r, n), n += r.length;
|
|
310
310
|
}), t;
|
|
@@ -324,14 +324,14 @@ function Ai(e) {
|
|
|
324
324
|
}
|
|
325
325
|
function Si(e) {
|
|
326
326
|
let t;
|
|
327
|
-
for (t = 0; e > qn; e >>=
|
|
327
|
+
for (t = 0; e > qn; e >>= lt, t += 1)
|
|
328
328
|
;
|
|
329
329
|
return t;
|
|
330
330
|
}
|
|
331
331
|
function Ki(e, t) {
|
|
332
|
-
return e >> BigInt(t) &
|
|
332
|
+
return e >> BigInt(t) & lt;
|
|
333
333
|
}
|
|
334
|
-
const Bi = (e, t, n) => e | (n ?
|
|
334
|
+
const Bi = (e, t, n) => e | (n ? lt : qn) << BigInt(t), Gt = (e) => (vi << BigInt(e - 1)) - lt, Kt = (e) => new Uint8Array(e), En = (e) => Uint8Array.from(e);
|
|
335
335
|
function jn(e, t, n) {
|
|
336
336
|
if (typeof e != "number" || e < 2)
|
|
337
337
|
throw new Error("hashLen must be a number");
|
|
@@ -339,10 +339,10 @@ function jn(e, t, n) {
|
|
|
339
339
|
throw new Error("qByteLen must be a number");
|
|
340
340
|
if (typeof n != "function")
|
|
341
341
|
throw new Error("hmacFn must be a function");
|
|
342
|
-
let r =
|
|
342
|
+
let r = Kt(e), i = Kt(e), o = 0;
|
|
343
343
|
const s = () => {
|
|
344
344
|
r.fill(1), i.fill(0), o = 0;
|
|
345
|
-
}, c = (...u) => n(i, r, ...u), a = (u =
|
|
345
|
+
}, c = (...u) => n(i, r, ...u), a = (u = Kt()) => {
|
|
346
346
|
i = c(En([0]), u), r = c(), u.length !== 0 && (i = c(En([1]), u), r = c());
|
|
347
347
|
}, l = () => {
|
|
348
348
|
if (o++ >= 1e3)
|
|
@@ -351,17 +351,17 @@ function jn(e, t, n) {
|
|
|
351
351
|
const d = [];
|
|
352
352
|
for (; u < t; ) {
|
|
353
353
|
r = c();
|
|
354
|
-
const
|
|
355
|
-
d.push(
|
|
354
|
+
const p = r.slice();
|
|
355
|
+
d.push(p), u += r.length;
|
|
356
356
|
}
|
|
357
357
|
return Ie(...d);
|
|
358
358
|
};
|
|
359
359
|
return (u, d) => {
|
|
360
360
|
s(), a(u);
|
|
361
|
-
let
|
|
362
|
-
for (; !(
|
|
361
|
+
let p;
|
|
362
|
+
for (; !(p = d(l())); )
|
|
363
363
|
a();
|
|
364
|
-
return s(),
|
|
364
|
+
return s(), p;
|
|
365
365
|
};
|
|
366
366
|
}
|
|
367
367
|
const Ni = {
|
|
@@ -397,7 +397,7 @@ const Ci = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
397
397
|
bitMask: Gt,
|
|
398
398
|
bitSet: Bi,
|
|
399
399
|
bytesToHex: He,
|
|
400
|
-
bytesToNumberBE:
|
|
400
|
+
bytesToNumberBE: G,
|
|
401
401
|
bytesToNumberLE: Ft,
|
|
402
402
|
concatBytes: Ie,
|
|
403
403
|
createHmacDrbg: jn,
|
|
@@ -413,10 +413,10 @@ const Ci = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
413
413
|
validateObject: Je
|
|
414
414
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
415
415
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
416
|
-
const j = BigInt(0), q = BigInt(1), Be = BigInt(2), Ii = BigInt(3),
|
|
416
|
+
const j = BigInt(0), q = BigInt(1), Be = BigInt(2), Ii = BigInt(3), $t = BigInt(4), xn = BigInt(5), An = BigInt(8);
|
|
417
417
|
BigInt(9);
|
|
418
418
|
BigInt(16);
|
|
419
|
-
function
|
|
419
|
+
function V(e, t) {
|
|
420
420
|
const n = e % t;
|
|
421
421
|
return n >= j ? n : t + n;
|
|
422
422
|
}
|
|
@@ -430,25 +430,25 @@ function Ui(e, t, n) {
|
|
|
430
430
|
t & q && (r = r * e % n), e = e * e % n, t >>= q;
|
|
431
431
|
return r;
|
|
432
432
|
}
|
|
433
|
-
function
|
|
433
|
+
function J(e, t, n) {
|
|
434
434
|
let r = e;
|
|
435
435
|
for (; t-- > j; )
|
|
436
436
|
r *= r, r %= n;
|
|
437
437
|
return r;
|
|
438
438
|
}
|
|
439
|
-
function
|
|
439
|
+
function Tt(e, t) {
|
|
440
440
|
if (e === j || t <= j)
|
|
441
441
|
throw new Error(`invert: expected positive integers, got n=${e} mod=${t}`);
|
|
442
|
-
let n =
|
|
442
|
+
let n = V(e, t), r = t, i = j, o = q;
|
|
443
443
|
for (; n !== j; ) {
|
|
444
444
|
const c = r / n, a = r % n, l = i - o * c;
|
|
445
445
|
r = n, n = a, i = o, o = l;
|
|
446
446
|
}
|
|
447
447
|
if (r !== q)
|
|
448
448
|
throw new Error("invert: does not exist");
|
|
449
|
-
return
|
|
449
|
+
return V(i, t);
|
|
450
450
|
}
|
|
451
|
-
function
|
|
451
|
+
function ki(e) {
|
|
452
452
|
const t = (e - q) / Be;
|
|
453
453
|
let n, r, i;
|
|
454
454
|
for (n = e - q, r = 0; n % Be === j; n /= Be, r++)
|
|
@@ -456,7 +456,7 @@ function _i(e) {
|
|
|
456
456
|
for (i = Be; i < e && Ui(i, t, e) !== e - q; i++)
|
|
457
457
|
;
|
|
458
458
|
if (r === 1) {
|
|
459
|
-
const s = (e + q) /
|
|
459
|
+
const s = (e + q) / $t;
|
|
460
460
|
return function(a, l) {
|
|
461
461
|
const f = a.pow(l, s);
|
|
462
462
|
if (!a.eql(a.sqr(f), l))
|
|
@@ -472,18 +472,18 @@ function _i(e) {
|
|
|
472
472
|
for (; !c.eql(d, c.ONE); ) {
|
|
473
473
|
if (c.eql(d, c.ZERO))
|
|
474
474
|
return c.ZERO;
|
|
475
|
-
let
|
|
476
|
-
for (let h = c.sqr(d);
|
|
475
|
+
let p = 1;
|
|
476
|
+
for (let h = c.sqr(d); p < l && !c.eql(h, c.ONE); p++)
|
|
477
477
|
h = c.sqr(h);
|
|
478
|
-
const
|
|
479
|
-
f = c.sqr(
|
|
478
|
+
const g = c.pow(f, q << BigInt(l - p - 1));
|
|
479
|
+
f = c.sqr(g), u = c.mul(u, g), d = c.mul(d, f), l = p;
|
|
480
480
|
}
|
|
481
481
|
return u;
|
|
482
482
|
};
|
|
483
483
|
}
|
|
484
|
-
function
|
|
485
|
-
if (e %
|
|
486
|
-
const t = (e + q) /
|
|
484
|
+
function _i(e) {
|
|
485
|
+
if (e % $t === Ii) {
|
|
486
|
+
const t = (e + q) / $t;
|
|
487
487
|
return function(r, i) {
|
|
488
488
|
const o = r.pow(i, t);
|
|
489
489
|
if (!r.eql(r.sqr(o), i))
|
|
@@ -500,7 +500,7 @@ function ki(e) {
|
|
|
500
500
|
return l;
|
|
501
501
|
};
|
|
502
502
|
}
|
|
503
|
-
return
|
|
503
|
+
return ki(e);
|
|
504
504
|
}
|
|
505
505
|
const Li = [
|
|
506
506
|
"create",
|
|
@@ -546,24 +546,24 @@ function Ri(e, t) {
|
|
|
546
546
|
const n = new Array(t.length), r = t.reduce((o, s, c) => e.is0(s) ? o : (n[c] = o, e.mul(o, s)), e.ONE), i = e.inv(r);
|
|
547
547
|
return t.reduceRight((o, s, c) => e.is0(s) ? o : (n[c] = e.mul(o, n[c]), e.mul(o, s)), i), n;
|
|
548
548
|
}
|
|
549
|
-
function
|
|
549
|
+
function zn(e, t) {
|
|
550
550
|
const n = t !== void 0 ? t : e.toString(2).length, r = Math.ceil(n / 8);
|
|
551
551
|
return { nBitLength: n, nByteLength: r };
|
|
552
552
|
}
|
|
553
553
|
function Pi(e, t, n = !1, r = {}) {
|
|
554
554
|
if (e <= j)
|
|
555
555
|
throw new Error(`Expected Field ORDER > 0, got ${e}`);
|
|
556
|
-
const { nBitLength: i, nByteLength: o } =
|
|
556
|
+
const { nBitLength: i, nByteLength: o } = zn(e, t);
|
|
557
557
|
if (o > 2048)
|
|
558
558
|
throw new Error("Field lengths over 2048 bytes are not supported");
|
|
559
|
-
const s =
|
|
559
|
+
const s = _i(e), c = Object.freeze({
|
|
560
560
|
ORDER: e,
|
|
561
561
|
BITS: i,
|
|
562
562
|
BYTES: o,
|
|
563
563
|
MASK: Gt(i),
|
|
564
564
|
ZERO: j,
|
|
565
565
|
ONE: q,
|
|
566
|
-
create: (a) =>
|
|
566
|
+
create: (a) => V(a, e),
|
|
567
567
|
isValid: (a) => {
|
|
568
568
|
if (typeof a != "bigint")
|
|
569
569
|
throw new Error(`Invalid field element: expected bigint, got ${typeof a}`);
|
|
@@ -571,20 +571,20 @@ function Pi(e, t, n = !1, r = {}) {
|
|
|
571
571
|
},
|
|
572
572
|
is0: (a) => a === j,
|
|
573
573
|
isOdd: (a) => (a & q) === q,
|
|
574
|
-
neg: (a) =>
|
|
574
|
+
neg: (a) => V(-a, e),
|
|
575
575
|
eql: (a, l) => a === l,
|
|
576
|
-
sqr: (a) =>
|
|
577
|
-
add: (a, l) =>
|
|
578
|
-
sub: (a, l) =>
|
|
579
|
-
mul: (a, l) =>
|
|
576
|
+
sqr: (a) => V(a * a, e),
|
|
577
|
+
add: (a, l) => V(a + l, e),
|
|
578
|
+
sub: (a, l) => V(a - l, e),
|
|
579
|
+
mul: (a, l) => V(a * l, e),
|
|
580
580
|
pow: (a, l) => Ti(c, a, l),
|
|
581
|
-
div: (a, l) =>
|
|
581
|
+
div: (a, l) => V(a * Tt(l, e), e),
|
|
582
582
|
// Same as above, but doesn't normalize
|
|
583
583
|
sqrN: (a) => a * a,
|
|
584
584
|
addN: (a, l) => a + l,
|
|
585
585
|
subN: (a, l) => a - l,
|
|
586
586
|
mulN: (a, l) => a * l,
|
|
587
|
-
inv: (a) =>
|
|
587
|
+
inv: (a) => Tt(a, e),
|
|
588
588
|
sqrt: r.sqrt || ((a) => s(c, a)),
|
|
589
589
|
invertBatch: (a) => Ri(c, a),
|
|
590
590
|
// TODO: do we really need constant cmov?
|
|
@@ -594,30 +594,30 @@ function Pi(e, t, n = !1, r = {}) {
|
|
|
594
594
|
fromBytes: (a) => {
|
|
595
595
|
if (a.length !== o)
|
|
596
596
|
throw new Error(`Fp.fromBytes: expected ${o}, got ${a.length}`);
|
|
597
|
-
return n ? Ft(a) :
|
|
597
|
+
return n ? Ft(a) : G(a);
|
|
598
598
|
}
|
|
599
599
|
});
|
|
600
600
|
return Object.freeze(c);
|
|
601
601
|
}
|
|
602
|
-
function
|
|
602
|
+
function Vn(e) {
|
|
603
603
|
if (typeof e != "bigint")
|
|
604
604
|
throw new Error("field order must be bigint");
|
|
605
605
|
const t = e.toString(2).length;
|
|
606
606
|
return Math.ceil(t / 8);
|
|
607
607
|
}
|
|
608
608
|
function Zn(e) {
|
|
609
|
-
const t =
|
|
609
|
+
const t = Vn(e);
|
|
610
610
|
return t + Math.ceil(t / 2);
|
|
611
611
|
}
|
|
612
612
|
function Oi(e, t, n = !1) {
|
|
613
|
-
const r = e.length, i =
|
|
613
|
+
const r = e.length, i = Vn(t), o = Zn(t);
|
|
614
614
|
if (r < 16 || r < o || r > 1024)
|
|
615
615
|
throw new Error(`expected ${o}-1024 bytes of input, got ${r}`);
|
|
616
|
-
const s = n ?
|
|
616
|
+
const s = n ? G(e) : Ft(e), c = V(s, t - q) + q;
|
|
617
617
|
return n ? Wt(c, i) : xe(c, i);
|
|
618
618
|
}
|
|
619
619
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
620
|
-
const Mi = BigInt(0),
|
|
620
|
+
const Mi = BigInt(0), Bt = BigInt(1);
|
|
621
621
|
function Hi(e, t) {
|
|
622
622
|
const n = (i, o) => {
|
|
623
623
|
const s = o.negate();
|
|
@@ -632,7 +632,7 @@ function Hi(e, t) {
|
|
|
632
632
|
unsafeLadder(i, o) {
|
|
633
633
|
let s = e.ZERO, c = i;
|
|
634
634
|
for (; o > Mi; )
|
|
635
|
-
o &
|
|
635
|
+
o & Bt && (s = s.add(c)), c = c.double(), o >>= Bt;
|
|
636
636
|
return s;
|
|
637
637
|
},
|
|
638
638
|
/**
|
|
@@ -666,13 +666,13 @@ function Hi(e, t) {
|
|
|
666
666
|
wNAF(i, o, s) {
|
|
667
667
|
const { windows: c, windowSize: a } = r(i);
|
|
668
668
|
let l = e.ZERO, f = e.BASE;
|
|
669
|
-
const u = BigInt(2 ** i - 1), d = 2 ** i,
|
|
670
|
-
for (let
|
|
671
|
-
const h =
|
|
669
|
+
const u = BigInt(2 ** i - 1), d = 2 ** i, p = BigInt(i);
|
|
670
|
+
for (let g = 0; g < c; g++) {
|
|
671
|
+
const h = g * a;
|
|
672
672
|
let y = Number(s & u);
|
|
673
|
-
s >>=
|
|
674
|
-
const
|
|
675
|
-
y === 0 ? f = f.add(n(K, o[
|
|
673
|
+
s >>= p, y > a && (y -= d, s += Bt);
|
|
674
|
+
const w = h, E = h + Math.abs(y) - 1, K = g % 2 !== 0, k = y < 0;
|
|
675
|
+
y === 0 ? f = f.add(n(K, o[w])) : l = l.add(n(k, o[E]));
|
|
676
676
|
}
|
|
677
677
|
return { p: l, f };
|
|
678
678
|
},
|
|
@@ -693,7 +693,7 @@ function Fn(e) {
|
|
|
693
693
|
nBitLength: "isSafeInteger",
|
|
694
694
|
nByteLength: "isSafeInteger"
|
|
695
695
|
}), Object.freeze({
|
|
696
|
-
...
|
|
696
|
+
...zn(e.n, e.nBitLength),
|
|
697
697
|
...e,
|
|
698
698
|
p: e.Fp.ORDER
|
|
699
699
|
});
|
|
@@ -763,70 +763,70 @@ const { bytesToNumberBE: Di, hexToBytes: ji } = Ci, Ne = {
|
|
|
763
763
|
}, r = t(n(e.s)), i = t(n(e.r)), o = r.length / 2, s = i.length / 2, c = n(o), a = n(s);
|
|
764
764
|
return `30${n(s + o + 4)}02${a}${i}02${c}${r}`;
|
|
765
765
|
}
|
|
766
|
-
}, ce = BigInt(0),
|
|
766
|
+
}, ce = BigInt(0), Y = BigInt(1);
|
|
767
767
|
BigInt(2);
|
|
768
768
|
const Sn = BigInt(3);
|
|
769
769
|
BigInt(4);
|
|
770
|
-
function
|
|
771
|
-
const t = qi(e), { Fp: n } = t, r = t.toBytes || ((
|
|
772
|
-
const
|
|
773
|
-
return Ie(Uint8Array.from([4]), n.toBytes(
|
|
774
|
-
}), i = t.fromBytes || ((
|
|
775
|
-
const h =
|
|
776
|
-
return { x: y, y:
|
|
770
|
+
function zi(e) {
|
|
771
|
+
const t = qi(e), { Fp: n } = t, r = t.toBytes || ((g, h, y) => {
|
|
772
|
+
const w = h.toAffine();
|
|
773
|
+
return Ie(Uint8Array.from([4]), n.toBytes(w.x), n.toBytes(w.y));
|
|
774
|
+
}), i = t.fromBytes || ((g) => {
|
|
775
|
+
const h = g.subarray(1), y = n.fromBytes(h.subarray(0, n.BYTES)), w = n.fromBytes(h.subarray(n.BYTES, 2 * n.BYTES));
|
|
776
|
+
return { x: y, y: w };
|
|
777
777
|
});
|
|
778
|
-
function o(
|
|
779
|
-
const { a: h, b: y } = t,
|
|
780
|
-
return n.add(n.add(E, n.mul(
|
|
778
|
+
function o(g) {
|
|
779
|
+
const { a: h, b: y } = t, w = n.sqr(g), E = n.mul(w, g);
|
|
780
|
+
return n.add(n.add(E, n.mul(g, h)), y);
|
|
781
781
|
}
|
|
782
782
|
if (!n.eql(n.sqr(t.Gy), o(t.Gx)))
|
|
783
783
|
throw new Error("bad generator point: equation left != right");
|
|
784
|
-
function s(
|
|
785
|
-
return typeof
|
|
784
|
+
function s(g) {
|
|
785
|
+
return typeof g == "bigint" && ce < g && g < t.n;
|
|
786
786
|
}
|
|
787
|
-
function c(
|
|
788
|
-
if (!s(
|
|
787
|
+
function c(g) {
|
|
788
|
+
if (!s(g))
|
|
789
789
|
throw new Error("Expected valid bigint: 0 < bigint < curve.n");
|
|
790
790
|
}
|
|
791
|
-
function a(
|
|
792
|
-
const { allowedPrivateKeyLengths: h, nByteLength: y, wrapPrivateKey:
|
|
793
|
-
if (h && typeof
|
|
794
|
-
if (
|
|
791
|
+
function a(g) {
|
|
792
|
+
const { allowedPrivateKeyLengths: h, nByteLength: y, wrapPrivateKey: w, n: E } = t;
|
|
793
|
+
if (h && typeof g != "bigint") {
|
|
794
|
+
if (g instanceof Uint8Array && (g = He(g)), typeof g != "string" || !h.includes(g.length))
|
|
795
795
|
throw new Error("Invalid key");
|
|
796
|
-
|
|
796
|
+
g = g.padStart(y * 2, "0");
|
|
797
797
|
}
|
|
798
798
|
let K;
|
|
799
799
|
try {
|
|
800
|
-
K = typeof
|
|
800
|
+
K = typeof g == "bigint" ? g : G(Z("private key", g, y));
|
|
801
801
|
} catch {
|
|
802
|
-
throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof
|
|
802
|
+
throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof g}`);
|
|
803
803
|
}
|
|
804
|
-
return
|
|
804
|
+
return w && (K = V(K, E)), c(K), K;
|
|
805
805
|
}
|
|
806
806
|
const l = /* @__PURE__ */ new Map();
|
|
807
|
-
function f(
|
|
808
|
-
if (!(
|
|
807
|
+
function f(g) {
|
|
808
|
+
if (!(g instanceof u))
|
|
809
809
|
throw new Error("ProjectivePoint expected");
|
|
810
810
|
}
|
|
811
811
|
class u {
|
|
812
|
-
constructor(h, y,
|
|
813
|
-
if (this.px = h, this.py = y, this.pz =
|
|
812
|
+
constructor(h, y, w) {
|
|
813
|
+
if (this.px = h, this.py = y, this.pz = w, h == null || !n.isValid(h))
|
|
814
814
|
throw new Error("x required");
|
|
815
815
|
if (y == null || !n.isValid(y))
|
|
816
816
|
throw new Error("y required");
|
|
817
|
-
if (
|
|
817
|
+
if (w == null || !n.isValid(w))
|
|
818
818
|
throw new Error("z required");
|
|
819
819
|
}
|
|
820
820
|
// Does not validate if the point is on-curve.
|
|
821
821
|
// Use fromHex instead, or call assertValidity() later.
|
|
822
822
|
static fromAffine(h) {
|
|
823
|
-
const { x: y, y:
|
|
824
|
-
if (!h || !n.isValid(y) || !n.isValid(
|
|
823
|
+
const { x: y, y: w } = h || {};
|
|
824
|
+
if (!h || !n.isValid(y) || !n.isValid(w))
|
|
825
825
|
throw new Error("invalid affine point");
|
|
826
826
|
if (h instanceof u)
|
|
827
827
|
throw new Error("projective point not allowed");
|
|
828
828
|
const E = (K) => n.eql(K, n.ZERO);
|
|
829
|
-
return E(y) && E(
|
|
829
|
+
return E(y) && E(w) ? u.ZERO : new u(y, w, n.ONE);
|
|
830
830
|
}
|
|
831
831
|
get x() {
|
|
832
832
|
return this.toAffine().x;
|
|
@@ -841,8 +841,8 @@ function Vi(e) {
|
|
|
841
841
|
* Optimization: converts a list of projective points to a list of identical points with Z=1.
|
|
842
842
|
*/
|
|
843
843
|
static normalizeZ(h) {
|
|
844
|
-
const y = n.invertBatch(h.map((
|
|
845
|
-
return h.map((
|
|
844
|
+
const y = n.invertBatch(h.map((w) => w.pz));
|
|
845
|
+
return h.map((w, E) => w.toAffine(y[E])).map(u.fromAffine);
|
|
846
846
|
}
|
|
847
847
|
/**
|
|
848
848
|
* Converts hash string or Uint8Array to Point.
|
|
@@ -870,8 +870,8 @@ function Vi(e) {
|
|
|
870
870
|
const { x: h, y } = this.toAffine();
|
|
871
871
|
if (!n.isValid(h) || !n.isValid(y))
|
|
872
872
|
throw new Error("bad point: x or y not FE");
|
|
873
|
-
const
|
|
874
|
-
if (!n.eql(
|
|
873
|
+
const w = n.sqr(y), E = o(h);
|
|
874
|
+
if (!n.eql(w, E))
|
|
875
875
|
throw new Error("bad point: equation left != right");
|
|
876
876
|
if (!this.isTorsionFree())
|
|
877
877
|
throw new Error("bad point: not in prime-order subgroup");
|
|
@@ -887,7 +887,7 @@ function Vi(e) {
|
|
|
887
887
|
*/
|
|
888
888
|
equals(h) {
|
|
889
889
|
f(h);
|
|
890
|
-
const { px: y, py:
|
|
890
|
+
const { px: y, py: w, pz: E } = this, { px: K, py: k, pz: C } = h, m = n.eql(n.mul(y, C), n.mul(K, E)), x = n.eql(n.mul(w, C), n.mul(k, E));
|
|
891
891
|
return m && x;
|
|
892
892
|
}
|
|
893
893
|
/**
|
|
@@ -901,9 +901,9 @@ function Vi(e) {
|
|
|
901
901
|
// https://eprint.iacr.org/2015/1060, algorithm 3
|
|
902
902
|
// Cost: 8M + 3S + 3*a + 2*b3 + 15add.
|
|
903
903
|
double() {
|
|
904
|
-
const { a: h, b: y } = t,
|
|
905
|
-
let C = n.ZERO, m = n.ZERO, x = n.ZERO, A = n.mul(E, E), O = n.mul(K, K), U = n.mul(
|
|
906
|
-
return B = n.add(B, B), x = n.mul(E,
|
|
904
|
+
const { a: h, b: y } = t, w = n.mul(y, Sn), { px: E, py: K, pz: k } = this;
|
|
905
|
+
let C = n.ZERO, m = n.ZERO, x = n.ZERO, A = n.mul(E, E), O = n.mul(K, K), U = n.mul(k, k), B = n.mul(E, K);
|
|
906
|
+
return B = n.add(B, B), x = n.mul(E, k), x = n.add(x, x), C = n.mul(h, x), m = n.mul(w, U), m = n.add(C, m), C = n.sub(O, m), m = n.add(O, m), m = n.mul(C, m), C = n.mul(B, C), x = n.mul(w, x), U = n.mul(h, U), B = n.sub(A, U), B = n.mul(h, B), B = n.add(B, x), x = n.add(A, A), A = n.add(x, A), A = n.add(A, U), A = n.mul(A, B), m = n.add(m, A), U = n.mul(K, k), U = n.add(U, U), A = n.mul(U, B), C = n.sub(C, A), x = n.mul(U, O), x = n.add(x, x), x = n.add(x, x), new u(C, m, x);
|
|
907
907
|
}
|
|
908
908
|
// Renes-Costello-Batina exception-free addition formula.
|
|
909
909
|
// There is 30% faster Jacobian formula, but it is not complete.
|
|
@@ -911,13 +911,13 @@ function Vi(e) {
|
|
|
911
911
|
// Cost: 12M + 0S + 3*a + 3*b3 + 23add.
|
|
912
912
|
add(h) {
|
|
913
913
|
f(h);
|
|
914
|
-
const { px: y, py:
|
|
914
|
+
const { px: y, py: w, pz: E } = this, { px: K, py: k, pz: C } = h;
|
|
915
915
|
let m = n.ZERO, x = n.ZERO, A = n.ZERO;
|
|
916
916
|
const O = t.a, U = n.mul(t.b, Sn);
|
|
917
|
-
let B = n.mul(y, K), T = n.mul(
|
|
917
|
+
let B = n.mul(y, K), T = n.mul(w, k), R = n.mul(E, C), H = n.add(y, w), b = n.add(K, k);
|
|
918
918
|
H = n.mul(H, b), b = n.add(B, T), H = n.sub(H, b), b = n.add(y, E);
|
|
919
919
|
let v = n.add(K, C);
|
|
920
|
-
return b = n.mul(b, v), v = n.add(B, R), b = n.sub(b, v), v = n.add(
|
|
920
|
+
return b = n.mul(b, v), v = n.add(B, R), b = n.sub(b, v), v = n.add(w, E), m = n.add(k, C), v = n.mul(v, m), m = n.add(T, R), v = n.sub(v, m), A = n.mul(O, b), m = n.mul(U, R), A = n.add(m, A), m = n.sub(T, A), A = n.add(T, A), x = n.mul(m, A), T = n.add(B, B), T = n.add(T, B), R = n.mul(O, R), b = n.mul(U, b), T = n.add(T, R), R = n.sub(B, R), R = n.mul(O, R), b = n.add(b, R), B = n.mul(T, b), x = n.add(x, B), B = n.mul(v, b), m = n.mul(H, m), m = n.sub(m, B), B = n.mul(H, T), A = n.mul(v, A), A = n.add(A, B), new u(m, x, A);
|
|
921
921
|
}
|
|
922
922
|
subtract(h) {
|
|
923
923
|
return this.add(h.negate());
|
|
@@ -926,9 +926,9 @@ function Vi(e) {
|
|
|
926
926
|
return this.equals(u.ZERO);
|
|
927
927
|
}
|
|
928
928
|
wNAF(h) {
|
|
929
|
-
return
|
|
930
|
-
const
|
|
931
|
-
return y.map((E, K) => E.toAffine(
|
|
929
|
+
return p.wNAFCached(this, l, h, (y) => {
|
|
930
|
+
const w = n.invertBatch(y.map((E) => E.pz));
|
|
931
|
+
return y.map((E, K) => E.toAffine(w[K])).map(u.fromAffine);
|
|
932
932
|
});
|
|
933
933
|
}
|
|
934
934
|
/**
|
|
@@ -940,15 +940,15 @@ function Vi(e) {
|
|
|
940
940
|
const y = u.ZERO;
|
|
941
941
|
if (h === ce)
|
|
942
942
|
return y;
|
|
943
|
-
if (c(h), h ===
|
|
943
|
+
if (c(h), h === Y)
|
|
944
944
|
return this;
|
|
945
|
-
const { endo:
|
|
946
|
-
if (!
|
|
947
|
-
return
|
|
948
|
-
let { k1neg: E, k1: K, k2neg:
|
|
945
|
+
const { endo: w } = t;
|
|
946
|
+
if (!w)
|
|
947
|
+
return p.unsafeLadder(this, h);
|
|
948
|
+
let { k1neg: E, k1: K, k2neg: k, k2: C } = w.splitScalar(h), m = y, x = y, A = this;
|
|
949
949
|
for (; K > ce || C > ce; )
|
|
950
|
-
K &
|
|
951
|
-
return E && (m = m.negate()),
|
|
950
|
+
K & Y && (m = m.add(A)), C & Y && (x = x.add(A)), A = A.double(), K >>= Y, C >>= Y;
|
|
951
|
+
return E && (m = m.negate()), k && (x = x.negate()), x = new u(n.mul(x.px, w.beta), x.py, x.pz), m.add(x);
|
|
952
952
|
}
|
|
953
953
|
/**
|
|
954
954
|
* Constant time multiplication.
|
|
@@ -961,17 +961,17 @@ function Vi(e) {
|
|
|
961
961
|
*/
|
|
962
962
|
multiply(h) {
|
|
963
963
|
c(h);
|
|
964
|
-
let y = h,
|
|
964
|
+
let y = h, w, E;
|
|
965
965
|
const { endo: K } = t;
|
|
966
966
|
if (K) {
|
|
967
|
-
const { k1neg:
|
|
967
|
+
const { k1neg: k, k1: C, k2neg: m, k2: x } = K.splitScalar(y);
|
|
968
968
|
let { p: A, f: O } = this.wNAF(C), { p: U, f: B } = this.wNAF(x);
|
|
969
|
-
A =
|
|
969
|
+
A = p.constTimeNegate(k, A), U = p.constTimeNegate(m, U), U = new u(n.mul(U.px, K.beta), U.py, U.pz), w = A.add(U), E = O.add(B);
|
|
970
970
|
} else {
|
|
971
|
-
const { p:
|
|
972
|
-
|
|
971
|
+
const { p: k, f: C } = this.wNAF(y);
|
|
972
|
+
w = k, E = C;
|
|
973
973
|
}
|
|
974
|
-
return u.normalizeZ([
|
|
974
|
+
return u.normalizeZ([w, E])[0];
|
|
975
975
|
}
|
|
976
976
|
/**
|
|
977
977
|
* Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.
|
|
@@ -979,26 +979,26 @@ function Vi(e) {
|
|
|
979
979
|
* The trick could be useful if both P and Q are not G (not in our case).
|
|
980
980
|
* @returns non-zero affine point
|
|
981
981
|
*/
|
|
982
|
-
multiplyAndAddUnsafe(h, y,
|
|
983
|
-
const E = u.BASE, K = (C, m) => m === ce || m ===
|
|
984
|
-
return
|
|
982
|
+
multiplyAndAddUnsafe(h, y, w) {
|
|
983
|
+
const E = u.BASE, K = (C, m) => m === ce || m === Y || !C.equals(E) ? C.multiplyUnsafe(m) : C.multiply(m), k = K(this, y).add(K(h, w));
|
|
984
|
+
return k.is0() ? void 0 : k;
|
|
985
985
|
}
|
|
986
986
|
// Converts Projective point to affine (x, y) coordinates.
|
|
987
987
|
// Can accept precomputed Z^-1 - for example, from invertBatch.
|
|
988
988
|
// (x, y, z) ∋ (x=x/z, y=y/z)
|
|
989
989
|
toAffine(h) {
|
|
990
|
-
const { px: y, py:
|
|
990
|
+
const { px: y, py: w, pz: E } = this, K = this.is0();
|
|
991
991
|
h == null && (h = K ? n.ONE : n.inv(E));
|
|
992
|
-
const
|
|
992
|
+
const k = n.mul(y, h), C = n.mul(w, h), m = n.mul(E, h);
|
|
993
993
|
if (K)
|
|
994
994
|
return { x: n.ZERO, y: n.ZERO };
|
|
995
995
|
if (!n.eql(m, n.ONE))
|
|
996
996
|
throw new Error("invZ was invalid");
|
|
997
|
-
return { x:
|
|
997
|
+
return { x: k, y: C };
|
|
998
998
|
}
|
|
999
999
|
isTorsionFree() {
|
|
1000
1000
|
const { h, isTorsionFree: y } = t;
|
|
1001
|
-
if (h ===
|
|
1001
|
+
if (h === Y)
|
|
1002
1002
|
return !0;
|
|
1003
1003
|
if (y)
|
|
1004
1004
|
return y(u, this);
|
|
@@ -1006,7 +1006,7 @@ function Vi(e) {
|
|
|
1006
1006
|
}
|
|
1007
1007
|
clearCofactor() {
|
|
1008
1008
|
const { h, clearCofactor: y } = t;
|
|
1009
|
-
return h ===
|
|
1009
|
+
return h === Y ? this : y ? y(u, this) : this.multiplyUnsafe(t.h);
|
|
1010
1010
|
}
|
|
1011
1011
|
toRawBytes(h = !0) {
|
|
1012
1012
|
return this.assertValidity(), r(u, this, h);
|
|
@@ -1016,7 +1016,7 @@ function Vi(e) {
|
|
|
1016
1016
|
}
|
|
1017
1017
|
}
|
|
1018
1018
|
u.BASE = new u(t.Gx, t.Gy, n.ONE), u.ZERO = new u(n.ZERO, n.ONE, n.ZERO);
|
|
1019
|
-
const d = t.nBitLength,
|
|
1019
|
+
const d = t.nBitLength, p = Hi(u, t.endo ? Math.ceil(d / 2) : d);
|
|
1020
1020
|
return {
|
|
1021
1021
|
CURVE: t,
|
|
1022
1022
|
ProjectivePoint: u,
|
|
@@ -1025,7 +1025,7 @@ function Vi(e) {
|
|
|
1025
1025
|
isWithinCurveOrder: s
|
|
1026
1026
|
};
|
|
1027
1027
|
}
|
|
1028
|
-
function
|
|
1028
|
+
function Vi(e) {
|
|
1029
1029
|
const t = Fn(e);
|
|
1030
1030
|
return Je(t, {
|
|
1031
1031
|
hash: "hash",
|
|
@@ -1038,61 +1038,61 @@ function zi(e) {
|
|
|
1038
1038
|
}), Object.freeze({ lowS: !0, ...t });
|
|
1039
1039
|
}
|
|
1040
1040
|
function Zi(e) {
|
|
1041
|
-
const t =
|
|
1041
|
+
const t = Vi(e), { Fp: n, n: r } = t, i = n.BYTES + 1, o = 2 * n.BYTES + 1;
|
|
1042
1042
|
function s(b) {
|
|
1043
1043
|
return ce < b && b < n.ORDER;
|
|
1044
1044
|
}
|
|
1045
1045
|
function c(b) {
|
|
1046
|
-
return
|
|
1046
|
+
return V(b, r);
|
|
1047
1047
|
}
|
|
1048
1048
|
function a(b) {
|
|
1049
|
-
return
|
|
1049
|
+
return Tt(b, r);
|
|
1050
1050
|
}
|
|
1051
|
-
const { ProjectivePoint: l, normPrivateKeyToScalar: f, weierstrassEquation: u, isWithinCurveOrder: d } =
|
|
1051
|
+
const { ProjectivePoint: l, normPrivateKeyToScalar: f, weierstrassEquation: u, isWithinCurveOrder: d } = zi({
|
|
1052
1052
|
...t,
|
|
1053
1053
|
toBytes(b, v, S) {
|
|
1054
|
-
const I = v.toAffine(), N = n.toBytes(I.x),
|
|
1055
|
-
return S ?
|
|
1054
|
+
const I = v.toAffine(), N = n.toBytes(I.x), _ = Ie;
|
|
1055
|
+
return S ? _(Uint8Array.from([v.hasEvenY() ? 2 : 3]), N) : _(Uint8Array.from([4]), N, n.toBytes(I.y));
|
|
1056
1056
|
},
|
|
1057
1057
|
fromBytes(b) {
|
|
1058
1058
|
const v = b.length, S = b[0], I = b.subarray(1);
|
|
1059
1059
|
if (v === i && (S === 2 || S === 3)) {
|
|
1060
|
-
const N =
|
|
1060
|
+
const N = G(I);
|
|
1061
1061
|
if (!s(N))
|
|
1062
1062
|
throw new Error("Point is not on curve");
|
|
1063
|
-
const
|
|
1064
|
-
let P = n.sqrt(
|
|
1065
|
-
const $ = (P &
|
|
1063
|
+
const _ = u(N);
|
|
1064
|
+
let P = n.sqrt(_);
|
|
1065
|
+
const $ = (P & Y) === Y;
|
|
1066
1066
|
return (S & 1) === 1 !== $ && (P = n.neg(P)), { x: N, y: P };
|
|
1067
1067
|
} else if (v === o && S === 4) {
|
|
1068
|
-
const N = n.fromBytes(I.subarray(0, n.BYTES)),
|
|
1069
|
-
return { x: N, y:
|
|
1068
|
+
const N = n.fromBytes(I.subarray(0, n.BYTES)), _ = n.fromBytes(I.subarray(n.BYTES, 2 * n.BYTES));
|
|
1069
|
+
return { x: N, y: _ };
|
|
1070
1070
|
} else
|
|
1071
1071
|
throw new Error(`Point of length ${v} was invalid. Expected ${i} compressed bytes or ${o} uncompressed bytes`);
|
|
1072
1072
|
}
|
|
1073
|
-
}),
|
|
1074
|
-
function
|
|
1075
|
-
const v = r >>
|
|
1073
|
+
}), p = (b) => He(xe(b, t.nByteLength));
|
|
1074
|
+
function g(b) {
|
|
1075
|
+
const v = r >> Y;
|
|
1076
1076
|
return b > v;
|
|
1077
1077
|
}
|
|
1078
1078
|
function h(b) {
|
|
1079
|
-
return
|
|
1079
|
+
return g(b) ? c(-b) : b;
|
|
1080
1080
|
}
|
|
1081
|
-
const y = (b, v, S) =>
|
|
1082
|
-
class
|
|
1081
|
+
const y = (b, v, S) => G(b.slice(v, S));
|
|
1082
|
+
class w {
|
|
1083
1083
|
constructor(v, S, I) {
|
|
1084
1084
|
this.r = v, this.s = S, this.recovery = I, this.assertValidity();
|
|
1085
1085
|
}
|
|
1086
1086
|
// pair (bytes of r, bytes of s)
|
|
1087
1087
|
static fromCompact(v) {
|
|
1088
1088
|
const S = t.nByteLength;
|
|
1089
|
-
return v = Z("compactSignature", v, S * 2), new
|
|
1089
|
+
return v = Z("compactSignature", v, S * 2), new w(y(v, 0, S), y(v, S, 2 * S));
|
|
1090
1090
|
}
|
|
1091
1091
|
// DER encoded ECDSA signature
|
|
1092
1092
|
// https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script
|
|
1093
1093
|
static fromDER(v) {
|
|
1094
1094
|
const { r: S, s: I } = Ne.toSig(Z("DER", v));
|
|
1095
|
-
return new
|
|
1095
|
+
return new w(S, I);
|
|
1096
1096
|
}
|
|
1097
1097
|
assertValidity() {
|
|
1098
1098
|
if (!d(this.r))
|
|
@@ -1101,26 +1101,26 @@ function Zi(e) {
|
|
|
1101
1101
|
throw new Error("s must be 0 < s < CURVE.n");
|
|
1102
1102
|
}
|
|
1103
1103
|
addRecoveryBit(v) {
|
|
1104
|
-
return new
|
|
1104
|
+
return new w(this.r, this.s, v);
|
|
1105
1105
|
}
|
|
1106
1106
|
recoverPublicKey(v) {
|
|
1107
|
-
const { r: S, s: I, recovery: N } = this,
|
|
1107
|
+
const { r: S, s: I, recovery: N } = this, _ = x(Z("msgHash", v));
|
|
1108
1108
|
if (N == null || ![0, 1, 2, 3].includes(N))
|
|
1109
1109
|
throw new Error("recovery id invalid");
|
|
1110
1110
|
const P = N === 2 || N === 3 ? S + t.n : S;
|
|
1111
1111
|
if (P >= n.ORDER)
|
|
1112
1112
|
throw new Error("recovery id 2 or 3 invalid");
|
|
1113
|
-
const $ = N & 1 ? "03" : "02", X = l.fromHex($ +
|
|
1114
|
-
if (!
|
|
1113
|
+
const $ = N & 1 ? "03" : "02", X = l.fromHex($ + p(P)), ye = a(P), ke = c(-_ * ye), ze = c(I * ye), pe = l.BASE.multiplyAndAddUnsafe(X, ke, ze);
|
|
1114
|
+
if (!pe)
|
|
1115
1115
|
throw new Error("point at infinify");
|
|
1116
|
-
return
|
|
1116
|
+
return pe.assertValidity(), pe;
|
|
1117
1117
|
}
|
|
1118
1118
|
// Signatures should be low-s, to prevent malleability.
|
|
1119
1119
|
hasHighS() {
|
|
1120
|
-
return
|
|
1120
|
+
return g(this.s);
|
|
1121
1121
|
}
|
|
1122
1122
|
normalizeS() {
|
|
1123
|
-
return this.hasHighS() ? new
|
|
1123
|
+
return this.hasHighS() ? new w(this.r, c(-this.s), this.recovery) : this;
|
|
1124
1124
|
}
|
|
1125
1125
|
// DER-encoded
|
|
1126
1126
|
toDERRawBytes() {
|
|
@@ -1134,7 +1134,7 @@ function Zi(e) {
|
|
|
1134
1134
|
return qe(this.toCompactHex());
|
|
1135
1135
|
}
|
|
1136
1136
|
toCompactHex() {
|
|
1137
|
-
return
|
|
1137
|
+
return p(this.r) + p(this.s);
|
|
1138
1138
|
}
|
|
1139
1139
|
}
|
|
1140
1140
|
const E = {
|
|
@@ -1169,19 +1169,19 @@ function Zi(e) {
|
|
|
1169
1169
|
function K(b, v = !0) {
|
|
1170
1170
|
return l.fromPrivateKey(b).toRawBytes(v);
|
|
1171
1171
|
}
|
|
1172
|
-
function
|
|
1172
|
+
function k(b) {
|
|
1173
1173
|
const v = b instanceof Uint8Array, S = typeof b == "string", I = (v || S) && b.length;
|
|
1174
1174
|
return v ? I === i || I === o : S ? I === 2 * i || I === 2 * o : b instanceof l;
|
|
1175
1175
|
}
|
|
1176
1176
|
function C(b, v, S = !0) {
|
|
1177
|
-
if (
|
|
1177
|
+
if (k(b))
|
|
1178
1178
|
throw new Error("first arg must be private key");
|
|
1179
|
-
if (!
|
|
1179
|
+
if (!k(v))
|
|
1180
1180
|
throw new Error("second arg must be public key");
|
|
1181
1181
|
return l.fromHex(v).multiply(f(b)).toRawBytes(S);
|
|
1182
1182
|
}
|
|
1183
1183
|
const m = t.bits2int || function(b) {
|
|
1184
|
-
const v =
|
|
1184
|
+
const v = G(b), S = b.length * 8 - t.nBitLength;
|
|
1185
1185
|
return S > 0 ? v >> BigInt(S) : v;
|
|
1186
1186
|
}, x = t.bits2int_modN || function(b) {
|
|
1187
1187
|
return c(m(b));
|
|
@@ -1197,33 +1197,33 @@ function Zi(e) {
|
|
|
1197
1197
|
if (["recovered", "canonical"].some((Ke) => Ke in S))
|
|
1198
1198
|
throw new Error("sign() legacy options not supported");
|
|
1199
1199
|
const { hash: I, randomBytes: N } = t;
|
|
1200
|
-
let { lowS:
|
|
1201
|
-
|
|
1202
|
-
const X = x(b), ye = f(v),
|
|
1200
|
+
let { lowS: _, prehash: P, extraEntropy: $ } = S;
|
|
1201
|
+
_ == null && (_ = !0), b = Z("msgHash", b), P && (b = Z("prehashed msgHash", I(b)));
|
|
1202
|
+
const X = x(b), ye = f(v), ke = [O(ye), O(X)];
|
|
1203
1203
|
if ($ != null) {
|
|
1204
1204
|
const Ke = $ === !0 ? N(n.BYTES) : $;
|
|
1205
|
-
|
|
1205
|
+
ke.push(Z("extraEntropy", Ke));
|
|
1206
1206
|
}
|
|
1207
|
-
const
|
|
1208
|
-
function
|
|
1209
|
-
const
|
|
1210
|
-
if (!d(
|
|
1207
|
+
const ze = Ie(...ke), pe = X;
|
|
1208
|
+
function xt(Ke) {
|
|
1209
|
+
const _e = m(Ke);
|
|
1210
|
+
if (!d(_e))
|
|
1211
1211
|
return;
|
|
1212
|
-
const wn = a(
|
|
1212
|
+
const wn = a(_e), Le = l.BASE.multiply(_e).toAffine(), Q = c(Le.x);
|
|
1213
1213
|
if (Q === ce)
|
|
1214
1214
|
return;
|
|
1215
|
-
const $e = c(wn * c(
|
|
1215
|
+
const $e = c(wn * c(pe + Q * ye));
|
|
1216
1216
|
if ($e === ce)
|
|
1217
1217
|
return;
|
|
1218
|
-
let bn = (Le.x === Q ? 0 : 2) | Number(Le.y &
|
|
1219
|
-
return
|
|
1218
|
+
let bn = (Le.x === Q ? 0 : 2) | Number(Le.y & Y), vn = $e;
|
|
1219
|
+
return _ && g($e) && (vn = h($e), bn ^= 1), new w(Q, vn, bn);
|
|
1220
1220
|
}
|
|
1221
|
-
return { seed:
|
|
1221
|
+
return { seed: ze, k2sig: xt };
|
|
1222
1222
|
}
|
|
1223
1223
|
const B = { lowS: t.lowS, prehash: !1 }, T = { lowS: t.lowS, prehash: !1 };
|
|
1224
1224
|
function R(b, v, S = B) {
|
|
1225
|
-
const { seed: I, k2sig: N } = U(b, v, S),
|
|
1226
|
-
return jn(
|
|
1225
|
+
const { seed: I, k2sig: N } = U(b, v, S), _ = t;
|
|
1226
|
+
return jn(_.hash.outputLen, _.nByteLength, _.hmac)(I, N);
|
|
1227
1227
|
}
|
|
1228
1228
|
l.BASE._setWindowSize(8);
|
|
1229
1229
|
function H(b, v, S, I = T) {
|
|
@@ -1231,20 +1231,20 @@ function Zi(e) {
|
|
|
1231
1231
|
const N = b;
|
|
1232
1232
|
if (v = Z("msgHash", v), S = Z("publicKey", S), "strict" in I)
|
|
1233
1233
|
throw new Error("options.strict was renamed to lowS");
|
|
1234
|
-
const { lowS:
|
|
1234
|
+
const { lowS: _, prehash: P } = I;
|
|
1235
1235
|
let $, X;
|
|
1236
1236
|
try {
|
|
1237
1237
|
if (typeof N == "string" || N instanceof Uint8Array)
|
|
1238
1238
|
try {
|
|
1239
|
-
$ =
|
|
1239
|
+
$ = w.fromDER(N);
|
|
1240
1240
|
} catch (Q) {
|
|
1241
1241
|
if (!(Q instanceof Ne.Err))
|
|
1242
1242
|
throw Q;
|
|
1243
|
-
$ =
|
|
1243
|
+
$ = w.fromCompact(N);
|
|
1244
1244
|
}
|
|
1245
1245
|
else if (typeof N == "object" && typeof N.r == "bigint" && typeof N.s == "bigint") {
|
|
1246
1246
|
const { r: Q, s: $e } = N;
|
|
1247
|
-
$ = new
|
|
1247
|
+
$ = new w(Q, $e);
|
|
1248
1248
|
} else
|
|
1249
1249
|
throw new Error("PARSE");
|
|
1250
1250
|
X = l.fromHex(S);
|
|
@@ -1253,11 +1253,11 @@ function Zi(e) {
|
|
|
1253
1253
|
throw new Error("signature must be Signature instance, Uint8Array or hex string");
|
|
1254
1254
|
return !1;
|
|
1255
1255
|
}
|
|
1256
|
-
if (
|
|
1256
|
+
if (_ && $.hasHighS())
|
|
1257
1257
|
return !1;
|
|
1258
1258
|
P && (v = t.hash(v));
|
|
1259
|
-
const { r: ye, s:
|
|
1260
|
-
return
|
|
1259
|
+
const { r: ye, s: ke } = $, ze = x(v), pe = a(ke), xt = c(ze * pe), Ke = c(ye * pe), _e = (Le = l.BASE.multiplyAndAddUnsafe(X, xt, Ke)) == null ? void 0 : Le.toAffine();
|
|
1260
|
+
return _e ? c(_e.x) === ye : !1;
|
|
1261
1261
|
}
|
|
1262
1262
|
return {
|
|
1263
1263
|
CURVE: t,
|
|
@@ -1266,14 +1266,14 @@ function Zi(e) {
|
|
|
1266
1266
|
sign: R,
|
|
1267
1267
|
verify: H,
|
|
1268
1268
|
ProjectivePoint: l,
|
|
1269
|
-
Signature:
|
|
1269
|
+
Signature: w,
|
|
1270
1270
|
utils: E
|
|
1271
1271
|
};
|
|
1272
1272
|
}
|
|
1273
1273
|
let Wn = class extends Mn {
|
|
1274
1274
|
constructor(t, n) {
|
|
1275
1275
|
super(), this.finished = !1, this.destroyed = !1, ai(t);
|
|
1276
|
-
const r =
|
|
1276
|
+
const r = Vt(n);
|
|
1277
1277
|
if (this.iHash = t.create(), typeof this.iHash.update != "function")
|
|
1278
1278
|
throw new Error("Expected instance of class which extends utils.Hash");
|
|
1279
1279
|
this.blockLen = this.iHash.blockLen, this.outputLen = this.iHash.outputLen;
|
|
@@ -1320,17 +1320,17 @@ function Wi(e, t) {
|
|
|
1320
1320
|
return Object.freeze({ ...n(t), create: n });
|
|
1321
1321
|
}
|
|
1322
1322
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
1323
|
-
const
|
|
1323
|
+
const ft = BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"), it = BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"), Jn = BigInt(1), ot = BigInt(2), Kn = (e, t) => (e + t / ot) / t;
|
|
1324
1324
|
function Yn(e) {
|
|
1325
|
-
const t =
|
|
1326
|
-
if (!
|
|
1325
|
+
const t = ft, n = BigInt(3), r = BigInt(6), i = BigInt(11), o = BigInt(22), s = BigInt(23), c = BigInt(44), a = BigInt(88), l = e * e * e % t, f = l * l * e % t, u = J(f, n, t) * f % t, d = J(u, n, t) * f % t, p = J(d, ot, t) * l % t, g = J(p, i, t) * p % t, h = J(g, o, t) * g % t, y = J(h, c, t) * h % t, w = J(y, a, t) * y % t, E = J(w, c, t) * h % t, K = J(E, n, t) * f % t, k = J(K, s, t) * g % t, C = J(k, r, t) * l % t, m = J(C, ot, t);
|
|
1326
|
+
if (!Rt.eql(Rt.sqr(m), e))
|
|
1327
1327
|
throw new Error("Cannot find square root");
|
|
1328
1328
|
return m;
|
|
1329
1329
|
}
|
|
1330
|
-
const
|
|
1330
|
+
const Rt = Pi(ft, void 0, void 0, { sqrt: Yn }), Ue = Wi({
|
|
1331
1331
|
a: BigInt(0),
|
|
1332
1332
|
b: BigInt(7),
|
|
1333
|
-
Fp:
|
|
1333
|
+
Fp: Rt,
|
|
1334
1334
|
n: it,
|
|
1335
1335
|
// Base point (x, y) aka generator point
|
|
1336
1336
|
Gx: BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),
|
|
@@ -1347,67 +1347,67 @@ const Pt = Pi(ht, void 0, void 0, { sqrt: Yn }), Ue = Wi({
|
|
|
1347
1347
|
beta: BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),
|
|
1348
1348
|
splitScalar: (e) => {
|
|
1349
1349
|
const t = it, n = BigInt("0x3086d221a7d46bcde86c90e49284eb15"), r = -Jn * BigInt("0xe4437ed6010e88286f547fa90abfe4c3"), i = BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"), o = n, s = BigInt("0x100000000000000000000000000000000"), c = Kn(o * e, t), a = Kn(-r * e, t);
|
|
1350
|
-
let l =
|
|
1350
|
+
let l = V(e - c * n - a * i, t), f = V(-c * r - a * o, t);
|
|
1351
1351
|
const u = l > s, d = f > s;
|
|
1352
1352
|
if (u && (l = t - l), d && (f = t - f), l > s || f > s)
|
|
1353
1353
|
throw new Error("splitScalar: Endomorphism failed, k=" + e);
|
|
1354
1354
|
return { k1neg: u, k1: l, k2neg: d, k2: f };
|
|
1355
1355
|
}
|
|
1356
1356
|
}
|
|
1357
|
-
},
|
|
1357
|
+
}, Lt), ht = BigInt(0), Xn = (e) => typeof e == "bigint" && ht < e && e < ft, Gi = (e) => typeof e == "bigint" && ht < e && e < it, Bn = {};
|
|
1358
1358
|
function st(e, ...t) {
|
|
1359
1359
|
let n = Bn[e];
|
|
1360
1360
|
if (n === void 0) {
|
|
1361
|
-
const r =
|
|
1361
|
+
const r = Lt(Uint8Array.from(e, (i) => i.charCodeAt(0)));
|
|
1362
1362
|
n = Ie(r, r), Bn[e] = n;
|
|
1363
1363
|
}
|
|
1364
|
-
return
|
|
1364
|
+
return Lt(Ie(n, ...t));
|
|
1365
1365
|
}
|
|
1366
|
-
const Jt = (e) => e.toRawBytes(!0).slice(1),
|
|
1367
|
-
function
|
|
1366
|
+
const Jt = (e) => e.toRawBytes(!0).slice(1), Pt = (e) => xe(e, 32), Nt = (e) => V(e, ft), We = (e) => V(e, it), Yt = Ue.ProjectivePoint, Ji = (e, t, n) => Yt.BASE.multiplyAndAddUnsafe(e, t, n);
|
|
1367
|
+
function Ot(e) {
|
|
1368
1368
|
let t = Ue.utils.normPrivateKeyToScalar(e), n = Yt.fromPrivateKey(t);
|
|
1369
1369
|
return { scalar: n.hasEvenY() ? t : We(-t), bytes: Jt(n) };
|
|
1370
1370
|
}
|
|
1371
1371
|
function Qn(e) {
|
|
1372
1372
|
if (!Xn(e))
|
|
1373
1373
|
throw new Error("bad x: need 0 < x < p");
|
|
1374
|
-
const t =
|
|
1374
|
+
const t = Nt(e * e), n = Nt(t * e + BigInt(7));
|
|
1375
1375
|
let r = Yn(n);
|
|
1376
|
-
r % ot !==
|
|
1376
|
+
r % ot !== ht && (r = Nt(-r));
|
|
1377
1377
|
const i = new Yt(e, r, Jn);
|
|
1378
1378
|
return i.assertValidity(), i;
|
|
1379
1379
|
}
|
|
1380
1380
|
function er(...e) {
|
|
1381
|
-
return We(
|
|
1381
|
+
return We(G(st("BIP0340/challenge", ...e)));
|
|
1382
1382
|
}
|
|
1383
1383
|
function Yi(e) {
|
|
1384
|
-
return
|
|
1384
|
+
return Ot(e).bytes;
|
|
1385
1385
|
}
|
|
1386
1386
|
function Xi(e, t, n = Hn(32)) {
|
|
1387
|
-
const r = Z("message", e), { bytes: i, scalar: o } =
|
|
1388
|
-
if (l ===
|
|
1387
|
+
const r = Z("message", e), { bytes: i, scalar: o } = Ot(t), s = Z("auxRand", n, 32), c = Pt(o ^ G(st("BIP0340/aux", s))), a = st("BIP0340/nonce", c, i, r), l = We(G(a));
|
|
1388
|
+
if (l === ht)
|
|
1389
1389
|
throw new Error("sign failed: k is zero");
|
|
1390
|
-
const { bytes: f, scalar: u } =
|
|
1391
|
-
if (
|
|
1390
|
+
const { bytes: f, scalar: u } = Ot(l), d = er(f, i, r), p = new Uint8Array(64);
|
|
1391
|
+
if (p.set(f, 0), p.set(Pt(We(u + d * o)), 32), !tr(p, r, i))
|
|
1392
1392
|
throw new Error("sign: Invalid signature produced");
|
|
1393
|
-
return
|
|
1393
|
+
return p;
|
|
1394
1394
|
}
|
|
1395
1395
|
function tr(e, t, n) {
|
|
1396
1396
|
const r = Z("signature", e, 64), i = Z("message", t), o = Z("publicKey", n, 32);
|
|
1397
1397
|
try {
|
|
1398
|
-
const s = Qn(
|
|
1398
|
+
const s = Qn(G(o)), c = G(r.subarray(0, 32));
|
|
1399
1399
|
if (!Xn(c))
|
|
1400
1400
|
return !1;
|
|
1401
|
-
const a =
|
|
1401
|
+
const a = G(r.subarray(32, 64));
|
|
1402
1402
|
if (!Gi(a))
|
|
1403
1403
|
return !1;
|
|
1404
|
-
const l = er(
|
|
1404
|
+
const l = er(Pt(c), Jt(s), i), f = Ji(s, a, We(-l));
|
|
1405
1405
|
return !(!f || !f.hasEvenY() || f.toAffine().x !== c);
|
|
1406
1406
|
} catch {
|
|
1407
1407
|
return !1;
|
|
1408
1408
|
}
|
|
1409
1409
|
}
|
|
1410
|
-
const
|
|
1410
|
+
const Ve = {
|
|
1411
1411
|
getPublicKey: Yi,
|
|
1412
1412
|
sign: Xi,
|
|
1413
1413
|
verify: tr,
|
|
@@ -1416,13 +1416,13 @@ const ze = {
|
|
|
1416
1416
|
lift_x: Qn,
|
|
1417
1417
|
pointToBytes: Jt,
|
|
1418
1418
|
numberToBytesBE: xe,
|
|
1419
|
-
bytesToNumberBE:
|
|
1419
|
+
bytesToNumberBE: G,
|
|
1420
1420
|
taggedHash: st,
|
|
1421
|
-
mod:
|
|
1421
|
+
mod: V
|
|
1422
1422
|
}
|
|
1423
|
-
},
|
|
1423
|
+
}, Ct = typeof globalThis == "object" && "crypto" in globalThis ? globalThis.crypto : void 0;
|
|
1424
1424
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
1425
|
-
const Xt = (e) => e instanceof Uint8Array,
|
|
1425
|
+
const Xt = (e) => e instanceof Uint8Array, It = (e) => new DataView(e.buffer, e.byteOffset, e.byteLength), re = (e, t) => e << 32 - t | e >>> t, Qi = new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68;
|
|
1426
1426
|
if (!Qi)
|
|
1427
1427
|
throw new Error("Non little-endian hardware is not supported");
|
|
1428
1428
|
const eo = Array.from({ length: 256 }, (e, t) => t.toString(16).padStart(2, "0"));
|
|
@@ -1434,7 +1434,7 @@ function M(e) {
|
|
|
1434
1434
|
t += eo[e[n]];
|
|
1435
1435
|
return t;
|
|
1436
1436
|
}
|
|
1437
|
-
function
|
|
1437
|
+
function W(e) {
|
|
1438
1438
|
if (typeof e != "string")
|
|
1439
1439
|
throw new Error("hex string expected, got " + typeof e);
|
|
1440
1440
|
const t = e.length;
|
|
@@ -1459,7 +1459,7 @@ function Ge(e) {
|
|
|
1459
1459
|
throw new Error(`expected Uint8Array, got ${typeof e}`);
|
|
1460
1460
|
return e;
|
|
1461
1461
|
}
|
|
1462
|
-
function
|
|
1462
|
+
function dt(...e) {
|
|
1463
1463
|
const t = new Uint8Array(e.reduce((r, i) => r + i.length, 0));
|
|
1464
1464
|
let n = 0;
|
|
1465
1465
|
return e.forEach((r) => {
|
|
@@ -1479,11 +1479,11 @@ function rr(e) {
|
|
|
1479
1479
|
return t.outputLen = n.outputLen, t.blockLen = n.blockLen, t.create = () => e(), t;
|
|
1480
1480
|
}
|
|
1481
1481
|
function ir(e = 32) {
|
|
1482
|
-
if (
|
|
1483
|
-
return
|
|
1482
|
+
if (Ct && typeof Ct.getRandomValues == "function")
|
|
1483
|
+
return Ct.getRandomValues(new Uint8Array(e));
|
|
1484
1484
|
throw new Error("crypto.getRandomValues must be defined");
|
|
1485
1485
|
}
|
|
1486
|
-
function
|
|
1486
|
+
function Mt(e) {
|
|
1487
1487
|
if (!Number.isSafeInteger(e) || e < 0)
|
|
1488
1488
|
throw new Error(`Wrong positive integer: ${e}`);
|
|
1489
1489
|
}
|
|
@@ -1500,7 +1500,7 @@ function or(e, ...t) {
|
|
|
1500
1500
|
function ro(e) {
|
|
1501
1501
|
if (typeof e != "function" || typeof e.create != "function")
|
|
1502
1502
|
throw new Error("Hash should be wrapped by utils.wrapConstructor");
|
|
1503
|
-
|
|
1503
|
+
Mt(e.outputLen), Mt(e.blockLen);
|
|
1504
1504
|
}
|
|
1505
1505
|
function io(e, t = !0) {
|
|
1506
1506
|
if (e.destroyed)
|
|
@@ -1515,7 +1515,7 @@ function oo(e, t) {
|
|
|
1515
1515
|
throw new Error(`digestInto() expects output buffer of length at least ${n}`);
|
|
1516
1516
|
}
|
|
1517
1517
|
const oe = {
|
|
1518
|
-
number:
|
|
1518
|
+
number: Mt,
|
|
1519
1519
|
bool: no,
|
|
1520
1520
|
bytes: or,
|
|
1521
1521
|
hash: ro,
|
|
@@ -1530,7 +1530,7 @@ function so(e, t, n, r) {
|
|
|
1530
1530
|
}
|
|
1531
1531
|
class ao extends nr {
|
|
1532
1532
|
constructor(t, n, r, i) {
|
|
1533
|
-
super(), this.blockLen = t, this.outputLen = n, this.padOffset = r, this.isLE = i, this.finished = !1, this.length = 0, this.pos = 0, this.destroyed = !1, this.buffer = new Uint8Array(t), this.view =
|
|
1533
|
+
super(), this.blockLen = t, this.outputLen = n, this.padOffset = r, this.isLE = i, this.finished = !1, this.length = 0, this.pos = 0, this.destroyed = !1, this.buffer = new Uint8Array(t), this.view = It(this.buffer);
|
|
1534
1534
|
}
|
|
1535
1535
|
update(t) {
|
|
1536
1536
|
oe.exists(this);
|
|
@@ -1540,7 +1540,7 @@ class ao extends nr {
|
|
|
1540
1540
|
for (let s = 0; s < o; ) {
|
|
1541
1541
|
const c = Math.min(i - this.pos, o - s);
|
|
1542
1542
|
if (c === i) {
|
|
1543
|
-
const a =
|
|
1543
|
+
const a = It(t);
|
|
1544
1544
|
for (; i <= o - s; s += i)
|
|
1545
1545
|
this.process(a, s);
|
|
1546
1546
|
continue;
|
|
@@ -1557,7 +1557,7 @@ class ao extends nr {
|
|
|
1557
1557
|
for (let u = s; u < i; u++)
|
|
1558
1558
|
n[u] = 0;
|
|
1559
1559
|
so(r, i - 8, BigInt(this.length * 8), o), this.process(r, 0);
|
|
1560
|
-
const c =
|
|
1560
|
+
const c = It(t), a = this.outputLen;
|
|
1561
1561
|
if (a % 4)
|
|
1562
1562
|
throw new Error("_sha2: outputLen should be aligned to 32bit");
|
|
1563
1563
|
const l = a / 4, f = this.get();
|
|
@@ -1669,13 +1669,13 @@ class sr extends ao {
|
|
|
1669
1669
|
for (let u = 0; u < 16; u++, n += 4)
|
|
1670
1670
|
ve[u] = t.getUint32(n, !1);
|
|
1671
1671
|
for (let u = 16; u < 64; u++) {
|
|
1672
|
-
const d = ve[u - 15],
|
|
1673
|
-
ve[u] = h + ve[u - 7] +
|
|
1672
|
+
const d = ve[u - 15], p = ve[u - 2], g = re(d, 7) ^ re(d, 18) ^ d >>> 3, h = re(p, 17) ^ re(p, 19) ^ p >>> 10;
|
|
1673
|
+
ve[u] = h + ve[u - 7] + g + ve[u - 16] | 0;
|
|
1674
1674
|
}
|
|
1675
1675
|
let { A: r, B: i, C: o, D: s, E: c, F: a, G: l, H: f } = this;
|
|
1676
1676
|
for (let u = 0; u < 64; u++) {
|
|
1677
|
-
const d = re(c, 6) ^ re(c, 11) ^ re(c, 25),
|
|
1678
|
-
f = l, l = a, a = c, c = s +
|
|
1677
|
+
const d = re(c, 6) ^ re(c, 11) ^ re(c, 25), p = f + d + co(c, a, l) + uo[u] + ve[u] | 0, h = (re(r, 2) ^ re(r, 13) ^ re(r, 22)) + lo(r, i, o) | 0;
|
|
1678
|
+
f = l, l = a, a = c, c = s + p | 0, s = o, o = i, i = r, r = p + h | 0;
|
|
1679
1679
|
}
|
|
1680
1680
|
r = r + this.A | 0, i = i + this.B | 0, o = o + this.C | 0, s = s + this.D | 0, c = c + this.E | 0, a = a + this.F | 0, l = l + this.G | 0, f = f + this.H | 0, this.set(r, i, o, s, c, a, l, f);
|
|
1681
1681
|
}
|
|
@@ -1746,7 +1746,7 @@ function de(e = "") {
|
|
|
1746
1746
|
}
|
|
1747
1747
|
};
|
|
1748
1748
|
}
|
|
1749
|
-
function
|
|
1749
|
+
function yt(e, t = "=") {
|
|
1750
1750
|
if (je(e), typeof t != "string")
|
|
1751
1751
|
throw new Error("padding chr should be string");
|
|
1752
1752
|
return {
|
|
@@ -1815,7 +1815,7 @@ function Nn(e, t, n) {
|
|
|
1815
1815
|
return i.reverse();
|
|
1816
1816
|
}
|
|
1817
1817
|
const cr = (e, t) => t ? cr(t, e % t) : e, at = (e, t) => e + (t - cr(e, t));
|
|
1818
|
-
function
|
|
1818
|
+
function Ht(e, t, n, r) {
|
|
1819
1819
|
if (!Array.isArray(e))
|
|
1820
1820
|
throw new Error("convertRadix2: data should be array");
|
|
1821
1821
|
if (t <= 0 || t > 32)
|
|
@@ -1864,12 +1864,12 @@ function Se(e, t = !1) {
|
|
|
1864
1864
|
encode: (n) => {
|
|
1865
1865
|
if (!(n instanceof Uint8Array))
|
|
1866
1866
|
throw new Error("radix2.encode input should be Uint8Array");
|
|
1867
|
-
return
|
|
1867
|
+
return Ht(Array.from(n), 8, e, !t);
|
|
1868
1868
|
},
|
|
1869
1869
|
decode: (n) => {
|
|
1870
1870
|
if (!Array.isArray(n) || n.length && typeof n[0] != "number")
|
|
1871
1871
|
throw new Error("radix2.decode input should be array of strings");
|
|
1872
|
-
return Uint8Array.from(
|
|
1872
|
+
return Uint8Array.from(Ht(n, e, 8, t));
|
|
1873
1873
|
}
|
|
1874
1874
|
};
|
|
1875
1875
|
}
|
|
@@ -1883,10 +1883,10 @@ function Cn(e) {
|
|
|
1883
1883
|
}
|
|
1884
1884
|
};
|
|
1885
1885
|
}
|
|
1886
|
-
const yo = fe(Se(4), he("0123456789ABCDEF"), de("")),
|
|
1887
|
-
fe(Se(5), he("0123456789ABCDEFGHIJKLMNOPQRSTUV"),
|
|
1886
|
+
const yo = fe(Se(4), he("0123456789ABCDEF"), de("")), po = fe(Se(5), he("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"), yt(5), de(""));
|
|
1887
|
+
fe(Se(5), he("0123456789ABCDEFGHIJKLMNOPQRSTUV"), yt(5), de(""));
|
|
1888
1888
|
fe(Se(5), he("0123456789ABCDEFGHJKMNPQRSTVWXYZ"), de(""), ar((e) => e.toUpperCase().replace(/O/g, "0").replace(/[IL]/g, "1")));
|
|
1889
|
-
const ue = fe(Se(6), he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),
|
|
1889
|
+
const ue = fe(Se(6), he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"), yt(6), de("")), go = fe(Se(6), he("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"), yt(6), de("")), Qt = (e) => fe(ho(58), he(e), de("")), qt = Qt("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");
|
|
1890
1890
|
Qt("123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ");
|
|
1891
1891
|
Qt("rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz");
|
|
1892
1892
|
const In = [0, 2, 3, 5, 6, 7, 9, 10, 11], wo = {
|
|
@@ -1894,14 +1894,14 @@ const In = [0, 2, 3, 5, 6, 7, 9, 10, 11], wo = {
|
|
|
1894
1894
|
let t = "";
|
|
1895
1895
|
for (let n = 0; n < e.length; n += 8) {
|
|
1896
1896
|
const r = e.subarray(n, n + 8);
|
|
1897
|
-
t +=
|
|
1897
|
+
t += qt.encode(r).padStart(In[r.length], "1");
|
|
1898
1898
|
}
|
|
1899
1899
|
return t;
|
|
1900
1900
|
},
|
|
1901
1901
|
decode(e) {
|
|
1902
1902
|
let t = [];
|
|
1903
1903
|
for (let n = 0; n < e.length; n += 11) {
|
|
1904
|
-
const r = e.slice(n, n + 11), i = In.indexOf(r.length), o =
|
|
1904
|
+
const r = e.slice(n, n + 11), i = In.indexOf(r.length), o = qt.decode(r);
|
|
1905
1905
|
for (let s = 0; s < o.length - i; s++)
|
|
1906
1906
|
if (o[s] !== 0)
|
|
1907
1907
|
throw new Error("base58xmr: wrong padding");
|
|
@@ -1917,7 +1917,7 @@ function Ze(e) {
|
|
|
1917
1917
|
(t >> r & 1) === 1 && (n ^= Un[r]);
|
|
1918
1918
|
return n;
|
|
1919
1919
|
}
|
|
1920
|
-
function
|
|
1920
|
+
function kn(e, t, n = 1) {
|
|
1921
1921
|
const r = e.length;
|
|
1922
1922
|
let i = 1;
|
|
1923
1923
|
for (let o = 0; o < r; o++) {
|
|
@@ -1933,7 +1933,7 @@ function _n(e, t, n = 1) {
|
|
|
1933
1933
|
i = Ze(i) ^ o;
|
|
1934
1934
|
for (let o = 0; o < 6; o++)
|
|
1935
1935
|
i = Ze(i);
|
|
1936
|
-
return i ^= n, Dt.encode(
|
|
1936
|
+
return i ^= n, Dt.encode(Ht([i % 2 ** 30], 30, 5, !1));
|
|
1937
1937
|
}
|
|
1938
1938
|
function lr(e) {
|
|
1939
1939
|
const t = e === "bech32" ? 1 : 734539939, n = Se(5), r = n.decode, i = n.encode, o = Cn(r);
|
|
@@ -1942,10 +1942,10 @@ function lr(e) {
|
|
|
1942
1942
|
throw new Error(`bech32.encode prefix should be string, not ${typeof f}`);
|
|
1943
1943
|
if (!Array.isArray(u) || u.length && typeof u[0] != "number")
|
|
1944
1944
|
throw new Error(`bech32.encode words should be array of numbers, not ${typeof u}`);
|
|
1945
|
-
const
|
|
1946
|
-
if (d !== !1 &&
|
|
1947
|
-
throw new TypeError(`Length ${
|
|
1948
|
-
return f = f.toLowerCase(), `${f}1${Dt.encode(u)}${
|
|
1945
|
+
const p = f.length + 7 + u.length;
|
|
1946
|
+
if (d !== !1 && p > d)
|
|
1947
|
+
throw new TypeError(`Length ${p} exceeds limit ${d}`);
|
|
1948
|
+
return f = f.toLowerCase(), `${f}1${Dt.encode(u)}${kn(f, u, t)}`;
|
|
1949
1949
|
}
|
|
1950
1950
|
function c(f, u = 90) {
|
|
1951
1951
|
if (typeof f != "string")
|
|
@@ -1956,16 +1956,16 @@ function lr(e) {
|
|
|
1956
1956
|
if (f !== d && f !== f.toUpperCase())
|
|
1957
1957
|
throw new Error("String must be lowercase or uppercase");
|
|
1958
1958
|
f = d;
|
|
1959
|
-
const
|
|
1960
|
-
if (
|
|
1959
|
+
const p = f.lastIndexOf("1");
|
|
1960
|
+
if (p === 0 || p === -1)
|
|
1961
1961
|
throw new Error('Letter "1" must be present between prefix and data only');
|
|
1962
|
-
const
|
|
1962
|
+
const g = f.slice(0, p), h = f.slice(p + 1);
|
|
1963
1963
|
if (h.length < 6)
|
|
1964
1964
|
throw new Error("Data must be at least 6 characters long");
|
|
1965
|
-
const y = Dt.decode(h).slice(0, -6),
|
|
1966
|
-
if (!h.endsWith(
|
|
1967
|
-
throw new Error(`Invalid checksum in ${f}: expected "${
|
|
1968
|
-
return { prefix:
|
|
1965
|
+
const y = Dt.decode(h).slice(0, -6), w = kn(g, y, t);
|
|
1966
|
+
if (!h.endsWith(w))
|
|
1967
|
+
throw new Error(`Invalid checksum in ${f}: expected "${w}"`);
|
|
1968
|
+
return { prefix: g, words: y };
|
|
1969
1969
|
}
|
|
1970
1970
|
const a = Cn(c);
|
|
1971
1971
|
function l(f) {
|
|
@@ -1987,18 +1987,18 @@ const bo = {
|
|
|
1987
1987
|
utf8: bo,
|
|
1988
1988
|
hex: vo,
|
|
1989
1989
|
base16: yo,
|
|
1990
|
-
base32:
|
|
1990
|
+
base32: po,
|
|
1991
1991
|
base64: ue,
|
|
1992
|
-
base64url:
|
|
1993
|
-
base58:
|
|
1992
|
+
base64url: go,
|
|
1993
|
+
base58: qt,
|
|
1994
1994
|
base58xmr: wo
|
|
1995
1995
|
};
|
|
1996
1996
|
`${Object.keys(mo).join(", ")}`;
|
|
1997
|
-
function
|
|
1997
|
+
function Ut(e) {
|
|
1998
1998
|
if (!Number.isSafeInteger(e) || e < 0)
|
|
1999
1999
|
throw new Error(`positive integer expected, not ${e}`);
|
|
2000
2000
|
}
|
|
2001
|
-
function
|
|
2001
|
+
function _n(e) {
|
|
2002
2002
|
if (typeof e != "boolean")
|
|
2003
2003
|
throw new Error(`boolean expected, not ${e}`);
|
|
2004
2004
|
}
|
|
@@ -2103,24 +2103,24 @@ function Ln(e, t, n, r, i) {
|
|
|
2103
2103
|
let a = 0;
|
|
2104
2104
|
t ^= e[a++], n ^= e[a++], r ^= e[a++], i ^= e[a++];
|
|
2105
2105
|
const l = e.length / 4 - 2;
|
|
2106
|
-
for (let
|
|
2107
|
-
const h = e[a++] ^ me(s, c, t, n, r, i), y = e[a++] ^ me(s, c, n, r, i, t),
|
|
2108
|
-
t = h, n = y, r =
|
|
2106
|
+
for (let g = 0; g < l; g++) {
|
|
2107
|
+
const h = e[a++] ^ me(s, c, t, n, r, i), y = e[a++] ^ me(s, c, n, r, i, t), w = e[a++] ^ me(s, c, r, i, t, n), E = e[a++] ^ me(s, c, i, t, n, r);
|
|
2108
|
+
t = h, n = y, r = w, i = E;
|
|
2109
2109
|
}
|
|
2110
|
-
const f = e[a++] ^ se(o, t, n, r, i), u = e[a++] ^ se(o, n, r, i, t), d = e[a++] ^ se(o, r, i, t, n),
|
|
2111
|
-
return { s0: f, s1: u, s2: d, s3:
|
|
2110
|
+
const f = e[a++] ^ se(o, t, n, r, i), u = e[a++] ^ se(o, n, r, i, t), d = e[a++] ^ se(o, r, i, t, n), p = e[a++] ^ se(o, i, t, n, r);
|
|
2111
|
+
return { s0: f, s1: u, s2: d, s3: p };
|
|
2112
2112
|
}
|
|
2113
|
-
function
|
|
2113
|
+
function ko(e, t, n, r, i) {
|
|
2114
2114
|
const { sbox2: o, T01: s, T23: c } = fr;
|
|
2115
2115
|
let a = 0;
|
|
2116
2116
|
t ^= e[a++], n ^= e[a++], r ^= e[a++], i ^= e[a++];
|
|
2117
2117
|
const l = e.length / 4 - 2;
|
|
2118
|
-
for (let
|
|
2119
|
-
const h = e[a++] ^ me(s, c, t, i, r, n), y = e[a++] ^ me(s, c, n, t, i, r),
|
|
2120
|
-
t = h, n = y, r =
|
|
2118
|
+
for (let g = 0; g < l; g++) {
|
|
2119
|
+
const h = e[a++] ^ me(s, c, t, i, r, n), y = e[a++] ^ me(s, c, n, t, i, r), w = e[a++] ^ me(s, c, r, n, t, i), E = e[a++] ^ me(s, c, i, r, n, t);
|
|
2120
|
+
t = h, n = y, r = w, i = E;
|
|
2121
2121
|
}
|
|
2122
|
-
const f = e[a++] ^ se(o, t, i, r, n), u = e[a++] ^ se(o, n, t, i, r), d = e[a++] ^ se(o, r, n, t, i),
|
|
2123
|
-
return { s0: f, s1: u, s2: d, s3:
|
|
2122
|
+
const f = e[a++] ^ se(o, t, i, r, n), u = e[a++] ^ se(o, n, t, i, r), d = e[a++] ^ se(o, r, n, t, i), p = e[a++] ^ se(o, i, r, n, t);
|
|
2123
|
+
return { s0: f, s1: u, s2: d, s3: p };
|
|
2124
2124
|
}
|
|
2125
2125
|
function dr(e, t) {
|
|
2126
2126
|
if (!t)
|
|
@@ -2129,7 +2129,7 @@ function dr(e, t) {
|
|
|
2129
2129
|
throw new Error(`aes: wrong destination length, expected at least ${e}, got: ${t.length}`);
|
|
2130
2130
|
return t;
|
|
2131
2131
|
}
|
|
2132
|
-
function
|
|
2132
|
+
function _o(e) {
|
|
2133
2133
|
if (le(e), e.length % Ee !== 0)
|
|
2134
2134
|
throw new Error(`aes/(cbc-ecb).decrypt ciphertext should consist of blocks with size ${Ee}`);
|
|
2135
2135
|
}
|
|
@@ -2175,102 +2175,102 @@ const yr = /* @__PURE__ */ Ko({ blockSize: 16, nonceLength: 16 }, function(t, n,
|
|
|
2175
2175
|
return {
|
|
2176
2176
|
encrypt: (o, s) => {
|
|
2177
2177
|
const c = hr(t), { b: a, o: l, out: f } = Lo(o, i, s), u = F(n);
|
|
2178
|
-
let d = u[0],
|
|
2178
|
+
let d = u[0], p = u[1], g = u[2], h = u[3], y = 0;
|
|
2179
2179
|
for (; y + 4 <= a.length; )
|
|
2180
|
-
d ^= a[y + 0],
|
|
2180
|
+
d ^= a[y + 0], p ^= a[y + 1], g ^= a[y + 2], h ^= a[y + 3], { s0: d, s1: p, s2: g, s3: h } = Ln(c, d, p, g, h), l[y++] = d, l[y++] = p, l[y++] = g, l[y++] = h;
|
|
2181
2181
|
if (i) {
|
|
2182
|
-
const
|
|
2183
|
-
d ^=
|
|
2182
|
+
const w = To(o.subarray(y * 4));
|
|
2183
|
+
d ^= w[0], p ^= w[1], g ^= w[2], h ^= w[3], { s0: d, s1: p, s2: g, s3: h } = Ln(c, d, p, g, h), l[y++] = d, l[y++] = p, l[y++] = g, l[y++] = h;
|
|
2184
2184
|
}
|
|
2185
2185
|
return c.fill(0), f;
|
|
2186
2186
|
},
|
|
2187
2187
|
decrypt: (o, s) => {
|
|
2188
|
-
|
|
2188
|
+
_o(o);
|
|
2189
2189
|
const c = Uo(t), a = F(n), l = dr(o.length, s), f = F(o), u = F(l);
|
|
2190
|
-
let d = a[0],
|
|
2190
|
+
let d = a[0], p = a[1], g = a[2], h = a[3];
|
|
2191
2191
|
for (let y = 0; y + 4 <= f.length; ) {
|
|
2192
|
-
const
|
|
2193
|
-
d = f[y + 0],
|
|
2194
|
-
const { s0: C, s1: m, s2: x, s3: A } =
|
|
2195
|
-
u[y++] = C ^
|
|
2192
|
+
const w = d, E = p, K = g, k = h;
|
|
2193
|
+
d = f[y + 0], p = f[y + 1], g = f[y + 2], h = f[y + 3];
|
|
2194
|
+
const { s0: C, s1: m, s2: x, s3: A } = ko(c, d, p, g, h);
|
|
2195
|
+
u[y++] = C ^ w, u[y++] = m ^ E, u[y++] = x ^ K, u[y++] = A ^ k;
|
|
2196
2196
|
}
|
|
2197
2197
|
return c.fill(0), $o(l, i);
|
|
2198
2198
|
}
|
|
2199
2199
|
};
|
|
2200
|
-
}),
|
|
2201
|
-
|
|
2200
|
+
}), pr = (e) => Uint8Array.from(e.split("").map((t) => t.charCodeAt(0))), Ro = pr("expand 16-byte k"), Po = pr("expand 32-byte k"), Oo = F(Ro), gr = F(Po);
|
|
2201
|
+
gr.slice();
|
|
2202
2202
|
function L(e, t) {
|
|
2203
2203
|
return e << t | e >>> 32 - t;
|
|
2204
2204
|
}
|
|
2205
|
-
function
|
|
2205
|
+
function zt(e) {
|
|
2206
2206
|
return e.byteOffset % 4 === 0;
|
|
2207
2207
|
}
|
|
2208
2208
|
const Xe = 64, Mo = 16, wr = 2 ** 32 - 1, $n = new Uint32Array();
|
|
2209
2209
|
function Ho(e, t, n, r, i, o, s, c) {
|
|
2210
|
-
const a = i.length, l = new Uint8Array(Xe), f = F(l), u =
|
|
2211
|
-
for (let
|
|
2210
|
+
const a = i.length, l = new Uint8Array(Xe), f = F(l), u = zt(i) && zt(o), d = u ? F(i) : $n, p = u ? F(o) : $n;
|
|
2211
|
+
for (let g = 0; g < a; s++) {
|
|
2212
2212
|
if (e(t, n, r, f, s, c), s >= wr)
|
|
2213
2213
|
throw new Error("arx: counter overflow");
|
|
2214
|
-
const h = Math.min(Xe, a -
|
|
2214
|
+
const h = Math.min(Xe, a - g);
|
|
2215
2215
|
if (u && h === Xe) {
|
|
2216
|
-
const y =
|
|
2217
|
-
if (
|
|
2216
|
+
const y = g / 4;
|
|
2217
|
+
if (g % 4 !== 0)
|
|
2218
2218
|
throw new Error("arx: invalid block position");
|
|
2219
|
-
for (let
|
|
2220
|
-
E = y +
|
|
2221
|
-
|
|
2219
|
+
for (let w = 0, E; w < Mo; w++)
|
|
2220
|
+
E = y + w, p[E] = d[E] ^ f[w];
|
|
2221
|
+
g += Xe;
|
|
2222
2222
|
continue;
|
|
2223
2223
|
}
|
|
2224
|
-
for (let y = 0,
|
|
2225
|
-
|
|
2226
|
-
|
|
2224
|
+
for (let y = 0, w; y < h; y++)
|
|
2225
|
+
w = g + y, o[w] = i[w] ^ l[y];
|
|
2226
|
+
g += h;
|
|
2227
2227
|
}
|
|
2228
2228
|
}
|
|
2229
2229
|
function qo(e, t) {
|
|
2230
2230
|
const { allowShortKeys: n, extendNonceFn: r, counterLength: i, counterRight: o, rounds: s } = Ao({ allowShortKeys: !1, counterLength: 8, counterRight: !1, rounds: 20 }, t);
|
|
2231
2231
|
if (typeof e != "function")
|
|
2232
2232
|
throw new Error("core must be a function");
|
|
2233
|
-
return
|
|
2233
|
+
return Ut(i), Ut(s), _n(o), _n(n), (c, a, l, f, u = 0) => {
|
|
2234
2234
|
le(c), le(a), le(l);
|
|
2235
2235
|
const d = l.length;
|
|
2236
|
-
if (f || (f = new Uint8Array(d)), le(f),
|
|
2236
|
+
if (f || (f = new Uint8Array(d)), le(f), Ut(u), u < 0 || u >= wr)
|
|
2237
2237
|
throw new Error("arx: counter overflow");
|
|
2238
2238
|
if (f.length < d)
|
|
2239
2239
|
throw new Error(`arx: output (${f.length}) is shorter than data (${d})`);
|
|
2240
|
-
const
|
|
2241
|
-
let
|
|
2242
|
-
if (
|
|
2243
|
-
h = c.slice(),
|
|
2244
|
-
else if (
|
|
2245
|
-
h = new Uint8Array(32), h.set(c), h.set(c, 16), y = Oo,
|
|
2240
|
+
const p = [];
|
|
2241
|
+
let g = c.length, h, y;
|
|
2242
|
+
if (g === 32)
|
|
2243
|
+
h = c.slice(), p.push(h), y = gr;
|
|
2244
|
+
else if (g === 16 && n)
|
|
2245
|
+
h = new Uint8Array(32), h.set(c), h.set(c, 16), y = Oo, p.push(h);
|
|
2246
2246
|
else
|
|
2247
|
-
throw new Error(`arx: invalid 32-byte key, got length=${
|
|
2248
|
-
|
|
2249
|
-
const
|
|
2247
|
+
throw new Error(`arx: invalid 32-byte key, got length=${g}`);
|
|
2248
|
+
zt(a) || (a = a.slice(), p.push(a));
|
|
2249
|
+
const w = F(h);
|
|
2250
2250
|
if (r) {
|
|
2251
2251
|
if (a.length !== 24)
|
|
2252
2252
|
throw new Error("arx: extended nonce must be 24 bytes");
|
|
2253
|
-
r(y,
|
|
2253
|
+
r(y, w, F(a.subarray(0, 16)), w), a = a.subarray(16);
|
|
2254
2254
|
}
|
|
2255
2255
|
const E = 16 - i;
|
|
2256
2256
|
if (E !== a.length)
|
|
2257
2257
|
throw new Error(`arx: nonce must be ${E} or 16 bytes`);
|
|
2258
2258
|
if (E !== 12) {
|
|
2259
|
-
const
|
|
2260
|
-
|
|
2259
|
+
const k = new Uint8Array(12);
|
|
2260
|
+
k.set(a, o ? 0 : 12 - a.length), a = k, p.push(a);
|
|
2261
2261
|
}
|
|
2262
2262
|
const K = F(a);
|
|
2263
|
-
for (Ho(e, y,
|
|
2264
|
-
|
|
2263
|
+
for (Ho(e, y, w, K, l, f, u, s); p.length > 0; )
|
|
2264
|
+
p.pop().fill(0);
|
|
2265
2265
|
return f;
|
|
2266
2266
|
};
|
|
2267
2267
|
}
|
|
2268
2268
|
function Do(e, t, n, r, i, o = 20) {
|
|
2269
|
-
let s = e[0], c = e[1], a = e[2], l = e[3], f = t[0], u = t[1], d = t[2],
|
|
2269
|
+
let s = e[0], c = e[1], a = e[2], l = e[3], f = t[0], u = t[1], d = t[2], p = t[3], g = t[4], h = t[5], y = t[6], w = t[7], E = i, K = n[0], k = n[1], C = n[2], m = s, x = c, A = a, O = l, U = f, B = u, T = d, R = p, H = g, b = h, v = y, S = w, I = E, N = K, _ = k, P = C;
|
|
2270
2270
|
for (let X = 0; X < o; X += 2)
|
|
2271
|
-
m = m + U | 0, I = L(I ^ m, 16), H = H + I | 0, U = L(U ^ H, 12), m = m + U | 0, I = L(I ^ m, 8), H = H + I | 0, U = L(U ^ H, 7), x = x + B | 0, N = L(N ^ x, 16), b = b + N | 0, B = L(B ^ b, 12), x = x + B | 0, N = L(N ^ x, 8), b = b + N | 0, B = L(B ^ b, 7), A = A + T | 0,
|
|
2271
|
+
m = m + U | 0, I = L(I ^ m, 16), H = H + I | 0, U = L(U ^ H, 12), m = m + U | 0, I = L(I ^ m, 8), H = H + I | 0, U = L(U ^ H, 7), x = x + B | 0, N = L(N ^ x, 16), b = b + N | 0, B = L(B ^ b, 12), x = x + B | 0, N = L(N ^ x, 8), b = b + N | 0, B = L(B ^ b, 7), A = A + T | 0, _ = L(_ ^ A, 16), v = v + _ | 0, T = L(T ^ v, 12), A = A + T | 0, _ = L(_ ^ A, 8), v = v + _ | 0, T = L(T ^ v, 7), O = O + R | 0, P = L(P ^ O, 16), S = S + P | 0, R = L(R ^ S, 12), O = O + R | 0, P = L(P ^ O, 8), S = S + P | 0, R = L(R ^ S, 7), m = m + B | 0, P = L(P ^ m, 16), v = v + P | 0, B = L(B ^ v, 12), m = m + B | 0, P = L(P ^ m, 8), v = v + P | 0, B = L(B ^ v, 7), x = x + T | 0, I = L(I ^ x, 16), S = S + I | 0, T = L(T ^ S, 12), x = x + T | 0, I = L(I ^ x, 8), S = S + I | 0, T = L(T ^ S, 7), A = A + R | 0, N = L(N ^ A, 16), H = H + N | 0, R = L(R ^ H, 12), A = A + R | 0, N = L(N ^ A, 8), H = H + N | 0, R = L(R ^ H, 7), O = O + U | 0, _ = L(_ ^ O, 16), b = b + _ | 0, U = L(U ^ b, 12), O = O + U | 0, _ = L(_ ^ O, 8), b = b + _ | 0, U = L(U ^ b, 7);
|
|
2272
2272
|
let $ = 0;
|
|
2273
|
-
r[$++] = s + m | 0, r[$++] = c + x | 0, r[$++] = a + A | 0, r[$++] = l + O | 0, r[$++] = f + U | 0, r[$++] = u + B | 0, r[$++] = d + T | 0, r[$++] =
|
|
2273
|
+
r[$++] = s + m | 0, r[$++] = c + x | 0, r[$++] = a + A | 0, r[$++] = l + O | 0, r[$++] = f + U | 0, r[$++] = u + B | 0, r[$++] = d + T | 0, r[$++] = p + R | 0, r[$++] = g + H | 0, r[$++] = h + b | 0, r[$++] = y + v | 0, r[$++] = w + S | 0, r[$++] = E + I | 0, r[$++] = K + N | 0, r[$++] = k + _ | 0, r[$++] = C + P | 0;
|
|
2274
2274
|
}
|
|
2275
2275
|
const br = /* @__PURE__ */ qo(Do, {
|
|
2276
2276
|
counterRight: !1,
|
|
@@ -2317,7 +2317,7 @@ pt.create = (e, t) => new vr(e, t);
|
|
|
2317
2317
|
function nn(e, t, n) {
|
|
2318
2318
|
return oe.hash(e), n === void 0 && (n = new Uint8Array(e.outputLen)), pt(e, Ge(n), Ge(t));
|
|
2319
2319
|
}
|
|
2320
|
-
const
|
|
2320
|
+
const _t = new Uint8Array([0]), Tn = new Uint8Array();
|
|
2321
2321
|
function mr(e, t, n, r = 32) {
|
|
2322
2322
|
if (oe.hash(e), oe.number(r), r > 255 * e.outputLen)
|
|
2323
2323
|
throw new Error("Length should be <= 255*HashLen");
|
|
@@ -2325,15 +2325,15 @@ function mr(e, t, n, r = 32) {
|
|
|
2325
2325
|
n === void 0 && (n = Tn);
|
|
2326
2326
|
const o = new Uint8Array(i * e.outputLen), s = pt.create(e, t), c = s._cloneInto(), a = new Uint8Array(s.outputLen);
|
|
2327
2327
|
for (let l = 0; l < i; l++)
|
|
2328
|
-
|
|
2329
|
-
return s.destroy(), c.destroy(), a.fill(0),
|
|
2328
|
+
_t[0] = l + 1, c.update(l === 0 ? Tn : a).update(n).update(_t).digestInto(a), o.set(a, e.outputLen * l), s._cloneInto(c);
|
|
2329
|
+
return s.destroy(), c.destroy(), a.fill(0), _t.fill(0), o.slice(0, r);
|
|
2330
2330
|
}
|
|
2331
2331
|
var jo = Object.defineProperty, D = (e, t) => {
|
|
2332
2332
|
for (var n in t)
|
|
2333
2333
|
jo(e, n, { get: t[n], enumerable: !0 });
|
|
2334
|
-
}, Te = Symbol("verified"),
|
|
2334
|
+
}, Te = Symbol("verified"), zo = (e) => e instanceof Object;
|
|
2335
2335
|
function Er(e) {
|
|
2336
|
-
if (!
|
|
2336
|
+
if (!zo(e) || typeof e.kind != "number" || typeof e.content != "string" || typeof e.created_at != "number" || typeof e.pubkey != "string" || !e.pubkey.match(/^[a-f0-9]{64}$/) || !Array.isArray(e.tags))
|
|
2337
2337
|
return !1;
|
|
2338
2338
|
for (let t = 0; t < e.tags.length; t++) {
|
|
2339
2339
|
let n = e.tags[t];
|
|
@@ -2345,8 +2345,8 @@ function Er(e) {
|
|
|
2345
2345
|
}
|
|
2346
2346
|
return !0;
|
|
2347
2347
|
}
|
|
2348
|
-
var
|
|
2349
|
-
D(
|
|
2348
|
+
var Vo = {};
|
|
2349
|
+
D(Vo, {
|
|
2350
2350
|
Queue: () => Go,
|
|
2351
2351
|
QueueNode: () => xr,
|
|
2352
2352
|
binarySearch: () => rn,
|
|
@@ -2409,14 +2409,14 @@ var xr = class {
|
|
|
2409
2409
|
}
|
|
2410
2410
|
}, Jo = class {
|
|
2411
2411
|
generateSecretKey() {
|
|
2412
|
-
return
|
|
2412
|
+
return Ve.utils.randomPrivateKey();
|
|
2413
2413
|
}
|
|
2414
2414
|
getPublicKey(e) {
|
|
2415
|
-
return M(
|
|
2415
|
+
return M(Ve.getPublicKey(e));
|
|
2416
2416
|
}
|
|
2417
2417
|
finalizeEvent(e, t) {
|
|
2418
2418
|
const n = e;
|
|
2419
|
-
return n.pubkey = M(
|
|
2419
|
+
return n.pubkey = M(Ve.getPublicKey(t)), n.id = tt(n), n.sig = M(Ve.sign(tt(n), t)), n[Te] = !0, n;
|
|
2420
2420
|
}
|
|
2421
2421
|
verifyEvent(e) {
|
|
2422
2422
|
if (typeof e[Te] == "boolean")
|
|
@@ -2425,7 +2425,7 @@ var xr = class {
|
|
|
2425
2425
|
if (t !== e.id)
|
|
2426
2426
|
return e[Te] = !1, !1;
|
|
2427
2427
|
try {
|
|
2428
|
-
const n =
|
|
2428
|
+
const n = Ve.verify(e.sig, t, e.pubkey);
|
|
2429
2429
|
return e[Te] = n, n;
|
|
2430
2430
|
} catch {
|
|
2431
2431
|
return e[Te] = !1, !1;
|
|
@@ -2441,11 +2441,11 @@ function tt(e) {
|
|
|
2441
2441
|
let t = Ae(te.encode(Yo(e)));
|
|
2442
2442
|
return M(t);
|
|
2443
2443
|
}
|
|
2444
|
-
var
|
|
2444
|
+
var gt = new Jo(), Oe = gt.generateSecretKey, Ce = gt.getPublicKey, ae = gt.finalizeEvent, on = gt.verifyEvent, Xo = {};
|
|
2445
2445
|
D(Xo, {
|
|
2446
2446
|
Application: () => Xs,
|
|
2447
2447
|
BadgeAward: () => as,
|
|
2448
|
-
BadgeDefinition: () =>
|
|
2448
|
+
BadgeDefinition: () => Vs,
|
|
2449
2449
|
BlockedRelaysList: () => Us,
|
|
2450
2450
|
BookmarkList: () => Ns,
|
|
2451
2451
|
Bookmarksets: () => Ds,
|
|
@@ -2455,12 +2455,12 @@ D(Xo, {
|
|
|
2455
2455
|
ChannelHideMessage: () => Ur,
|
|
2456
2456
|
ChannelMessage: () => Ir,
|
|
2457
2457
|
ChannelMetadata: () => Cr,
|
|
2458
|
-
ChannelMuteUser: () =>
|
|
2458
|
+
ChannelMuteUser: () => kr,
|
|
2459
2459
|
ClassifiedListing: () => ta,
|
|
2460
|
-
ClientAuth: () =>
|
|
2460
|
+
ClientAuth: () => _r,
|
|
2461
2461
|
CommunitiesList: () => Cs,
|
|
2462
2462
|
CommunityDefinition: () => la,
|
|
2463
|
-
CommunityPostApproval: () =>
|
|
2463
|
+
CommunityPostApproval: () => gs,
|
|
2464
2464
|
Contacts: () => rs,
|
|
2465
2465
|
CreateOrUpdateProduct: () => Ws,
|
|
2466
2466
|
CreateOrUpdateStall: () => Fs,
|
|
@@ -2481,12 +2481,12 @@ D(Xo, {
|
|
|
2481
2481
|
Handlerinformation: () => ca,
|
|
2482
2482
|
Handlerrecommendation: () => aa,
|
|
2483
2483
|
Highlights: () => As,
|
|
2484
|
-
InterestsList: () =>
|
|
2484
|
+
InterestsList: () => _s,
|
|
2485
2485
|
Interestsets: () => Zs,
|
|
2486
2486
|
JobFeedback: () => vs,
|
|
2487
2487
|
JobRequest: () => ws,
|
|
2488
2488
|
JobResult: () => bs,
|
|
2489
|
-
Label: () =>
|
|
2489
|
+
Label: () => ps,
|
|
2490
2490
|
LightningPubRPC: () => Rs,
|
|
2491
2491
|
LiveChatMessage: () => fs,
|
|
2492
2492
|
LiveEvent: () => Qs,
|
|
@@ -2500,7 +2500,7 @@ D(Xo, {
|
|
|
2500
2500
|
OpenTimestamps: () => ls,
|
|
2501
2501
|
Pinlist: () => Ks,
|
|
2502
2502
|
ProblemTracker: () => hs,
|
|
2503
|
-
ProfileBadges: () =>
|
|
2503
|
+
ProfileBadges: () => zs,
|
|
2504
2504
|
PublicChatsList: () => Is,
|
|
2505
2505
|
Reaction: () => an,
|
|
2506
2506
|
RecommendRelay: () => ns,
|
|
@@ -2509,7 +2509,7 @@ D(Xo, {
|
|
|
2509
2509
|
Report: () => ds,
|
|
2510
2510
|
Reporting: () => ys,
|
|
2511
2511
|
Repost: () => sn,
|
|
2512
|
-
SearchRelaysList: () =>
|
|
2512
|
+
SearchRelaysList: () => ks,
|
|
2513
2513
|
ShortTextNote: () => ts,
|
|
2514
2514
|
Time: () => ia,
|
|
2515
2515
|
UserEmojiList: () => Ls,
|
|
@@ -2538,7 +2538,7 @@ function Br(e) {
|
|
|
2538
2538
|
function Qo(e) {
|
|
2539
2539
|
return Ar(e) ? "regular" : Sr(e) ? "replaceable" : Kr(e) ? "ephemeral" : Br(e) ? "parameterized" : "unknown";
|
|
2540
2540
|
}
|
|
2541
|
-
var es = 0, ts = 1, ns = 2, rs = 3, is = 4, os = 4, ss = 5, sn = 6, an = 7, as = 8, cs = 16, Nr = 40, Cr = 41, Ir = 42, Ur = 43,
|
|
2541
|
+
var es = 0, ts = 1, ns = 2, rs = 3, is = 4, os = 4, ss = 5, sn = 6, an = 7, as = 8, cs = 16, Nr = 40, Cr = 41, Ir = 42, Ur = 43, kr = 44, ls = 1040, us = 1063, fs = 1311, hs = 1971, ds = 1984, ys = 1984, ps = 1985, gs = 4550, ws = 5999, bs = 6999, vs = 7e3, ms = 9041, Es = 9734, xs = 9735, As = 9802, Ss = 1e4, Ks = 10001, Bs = 10002, Ns = 10003, Cs = 10004, Is = 10005, Us = 10006, ks = 10007, _s = 10015, Ls = 10030, $s = 10096, Ts = 13194, Rs = 21e3, _r = 22242, Lr = 23194, Ps = 23195, Os = 24133, cn = 27235, Ms = 3e4, Hs = 30001, qs = 30002, Ds = 30003, js = 30004, zs = 30008, Vs = 30009, Zs = 30015, Fs = 30017, Ws = 30018, Gs = 30023, Js = 30024, Ys = 30030, Xs = 30078, Qs = 30311, ea = 30315, ta = 30402, na = 30403, ra = 31922, ia = 31923, oa = 31924, sa = 31925, aa = 31989, ca = 31990, la = 34550, ua = {};
|
|
2542
2542
|
D(ua, {
|
|
2543
2543
|
getHex64: () => ln,
|
|
2544
2544
|
getInt: () => $r,
|
|
@@ -2577,13 +2577,13 @@ function da(e, t) {
|
|
|
2577
2577
|
function ya(e, t) {
|
|
2578
2578
|
return t === $r(e, "kind");
|
|
2579
2579
|
}
|
|
2580
|
-
var
|
|
2581
|
-
D(
|
|
2582
|
-
makeAuthEvent: () =>
|
|
2580
|
+
var pa = {};
|
|
2581
|
+
D(pa, {
|
|
2582
|
+
makeAuthEvent: () => ga
|
|
2583
2583
|
});
|
|
2584
|
-
function
|
|
2584
|
+
function ga(e, t) {
|
|
2585
2585
|
return {
|
|
2586
|
-
kind:
|
|
2586
|
+
kind: _r,
|
|
2587
2587
|
created_at: Math.floor(Date.now() / 1e3),
|
|
2588
2588
|
tags: [
|
|
2589
2589
|
["relay", e],
|
|
@@ -2606,8 +2606,8 @@ var Fe = {};
|
|
|
2606
2606
|
D(Fe, {
|
|
2607
2607
|
BECH32_REGEX: () => Tr,
|
|
2608
2608
|
Bech32MaxSize: () => un,
|
|
2609
|
-
decode: () =>
|
|
2610
|
-
encodeBytes: () =>
|
|
2609
|
+
decode: () => wt,
|
|
2610
|
+
encodeBytes: () => bt,
|
|
2611
2611
|
naddrEncode: () => Ka,
|
|
2612
2612
|
neventEncode: () => Sa,
|
|
2613
2613
|
noteEncode: () => xa,
|
|
@@ -2621,7 +2621,7 @@ function va(e) {
|
|
|
2621
2621
|
const t = new Uint8Array(4);
|
|
2622
2622
|
return t[0] = e >> 24 & 255, t[1] = e >> 16 & 255, t[2] = e >> 8 & 255, t[3] = e & 255, t;
|
|
2623
2623
|
}
|
|
2624
|
-
function
|
|
2624
|
+
function wt(e) {
|
|
2625
2625
|
var i, o, s, c, a, l, f, u;
|
|
2626
2626
|
let { prefix: t, words: n } = De.decode(e, un), r = new Uint8Array(De.fromWords(n));
|
|
2627
2627
|
switch (t) {
|
|
@@ -2635,7 +2635,7 @@ function bt(e) {
|
|
|
2635
2635
|
type: "nprofile",
|
|
2636
2636
|
data: {
|
|
2637
2637
|
pubkey: M(d[0][0]),
|
|
2638
|
-
relays: d[1] ? d[1].map((
|
|
2638
|
+
relays: d[1] ? d[1].map((p) => ie.decode(p)) : []
|
|
2639
2639
|
}
|
|
2640
2640
|
};
|
|
2641
2641
|
}
|
|
@@ -2653,7 +2653,7 @@ function bt(e) {
|
|
|
2653
2653
|
type: "nevent",
|
|
2654
2654
|
data: {
|
|
2655
2655
|
id: M(d[0][0]),
|
|
2656
|
-
relays: d[1] ? d[1].map((
|
|
2656
|
+
relays: d[1] ? d[1].map((p) => ie.decode(p)) : [],
|
|
2657
2657
|
author: (s = d[2]) != null && s[0] ? M(d[2][0]) : void 0,
|
|
2658
2658
|
kind: (c = d[3]) != null && c[0] ? parseInt(M(d[3][0]), 16) : void 0
|
|
2659
2659
|
}
|
|
@@ -2677,7 +2677,7 @@ function bt(e) {
|
|
|
2677
2677
|
identifier: ie.decode(d[0][0]),
|
|
2678
2678
|
pubkey: M(d[2][0]),
|
|
2679
2679
|
kind: parseInt(M(d[3][0]), 16),
|
|
2680
|
-
relays: d[1] ? d[1].map((
|
|
2680
|
+
relays: d[1] ? d[1].map((p) => ie.decode(p)) : []
|
|
2681
2681
|
}
|
|
2682
2682
|
};
|
|
2683
2683
|
}
|
|
@@ -2710,24 +2710,24 @@ function Qe(e) {
|
|
|
2710
2710
|
return t;
|
|
2711
2711
|
}
|
|
2712
2712
|
function ma(e) {
|
|
2713
|
-
return
|
|
2713
|
+
return bt("nsec", e);
|
|
2714
2714
|
}
|
|
2715
2715
|
function Ea(e) {
|
|
2716
|
-
return
|
|
2716
|
+
return bt("npub", W(e));
|
|
2717
2717
|
}
|
|
2718
2718
|
function xa(e) {
|
|
2719
|
-
return
|
|
2719
|
+
return bt("note", W(e));
|
|
2720
2720
|
}
|
|
2721
2721
|
function Ye(e, t) {
|
|
2722
2722
|
let n = De.toWords(t);
|
|
2723
2723
|
return De.encode(e, n, un);
|
|
2724
2724
|
}
|
|
2725
|
-
function
|
|
2725
|
+
function bt(e, t) {
|
|
2726
2726
|
return Ye(e, t);
|
|
2727
2727
|
}
|
|
2728
2728
|
function Aa(e) {
|
|
2729
|
-
let t =
|
|
2730
|
-
0: [
|
|
2729
|
+
let t = vt({
|
|
2730
|
+
0: [W(e.pubkey)],
|
|
2731
2731
|
1: (e.relays || []).map((n) => te.encode(n))
|
|
2732
2732
|
});
|
|
2733
2733
|
return Ye("nprofile", t);
|
|
@@ -2735,10 +2735,10 @@ function Aa(e) {
|
|
|
2735
2735
|
function Sa(e) {
|
|
2736
2736
|
let t;
|
|
2737
2737
|
e.kind !== void 0 && (t = va(e.kind));
|
|
2738
|
-
let n =
|
|
2739
|
-
0: [
|
|
2738
|
+
let n = vt({
|
|
2739
|
+
0: [W(e.id)],
|
|
2740
2740
|
1: (e.relays || []).map((r) => te.encode(r)),
|
|
2741
|
-
2: e.author ? [
|
|
2741
|
+
2: e.author ? [W(e.author)] : [],
|
|
2742
2742
|
3: t ? [new Uint8Array(t)] : []
|
|
2743
2743
|
});
|
|
2744
2744
|
return Ye("nevent", n);
|
|
@@ -2746,28 +2746,28 @@ function Sa(e) {
|
|
|
2746
2746
|
function Ka(e) {
|
|
2747
2747
|
let t = new ArrayBuffer(4);
|
|
2748
2748
|
new DataView(t).setUint32(0, e.kind, !1);
|
|
2749
|
-
let n =
|
|
2749
|
+
let n = vt({
|
|
2750
2750
|
0: [te.encode(e.identifier)],
|
|
2751
2751
|
1: (e.relays || []).map((r) => te.encode(r)),
|
|
2752
|
-
2: [
|
|
2752
|
+
2: [W(e.pubkey)],
|
|
2753
2753
|
3: [new Uint8Array(t)]
|
|
2754
2754
|
});
|
|
2755
2755
|
return Ye("naddr", n);
|
|
2756
2756
|
}
|
|
2757
2757
|
function Ba(e) {
|
|
2758
|
-
let t =
|
|
2758
|
+
let t = vt({
|
|
2759
2759
|
0: [te.encode(e)]
|
|
2760
2760
|
});
|
|
2761
2761
|
return Ye("nrelay", t);
|
|
2762
2762
|
}
|
|
2763
|
-
function
|
|
2763
|
+
function vt(e) {
|
|
2764
2764
|
let t = [];
|
|
2765
2765
|
return Object.entries(e).reverse().forEach(([n, r]) => {
|
|
2766
2766
|
r.forEach((i) => {
|
|
2767
2767
|
let o = new Uint8Array(i.length + 2);
|
|
2768
2768
|
o.set([parseInt(n)], 0), o.set([i.length], 1), o.set(i, 2), t.push(o);
|
|
2769
2769
|
});
|
|
2770
|
-
}),
|
|
2770
|
+
}), dt(...t);
|
|
2771
2771
|
}
|
|
2772
2772
|
var Na = {};
|
|
2773
2773
|
D(Na, {
|
|
@@ -2790,23 +2790,23 @@ function Pr(e) {
|
|
|
2790
2790
|
var Ia = {};
|
|
2791
2791
|
D(Ia, {
|
|
2792
2792
|
NIP05_REGEX: () => Or,
|
|
2793
|
-
isValid: () =>
|
|
2793
|
+
isValid: () => _a,
|
|
2794
2794
|
queryProfile: () => Mr,
|
|
2795
|
-
searchDomain: () =>
|
|
2795
|
+
searchDomain: () => ka,
|
|
2796
2796
|
useFetchImplementation: () => Ua
|
|
2797
2797
|
});
|
|
2798
|
-
var Or = /^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/,
|
|
2798
|
+
var Or = /^(?:([\w.+-]+)@)?([\w_-]+(\.[\w_-]+)+)$/, mt;
|
|
2799
2799
|
try {
|
|
2800
|
-
|
|
2800
|
+
mt = fetch;
|
|
2801
2801
|
} catch {
|
|
2802
2802
|
}
|
|
2803
2803
|
function Ua(e) {
|
|
2804
|
-
|
|
2804
|
+
mt = e;
|
|
2805
2805
|
}
|
|
2806
|
-
async function
|
|
2806
|
+
async function ka(e, t = "") {
|
|
2807
2807
|
try {
|
|
2808
2808
|
const n = `https://${e}/.well-known/nostr.json?name=${t}`;
|
|
2809
|
-
return (await (await
|
|
2809
|
+
return (await (await mt(n, { redirect: "error" })).json()).names;
|
|
2810
2810
|
} catch {
|
|
2811
2811
|
return {};
|
|
2812
2812
|
}
|
|
@@ -2818,14 +2818,14 @@ async function Mr(e) {
|
|
|
2818
2818
|
return null;
|
|
2819
2819
|
const [n, r = "_", i] = t;
|
|
2820
2820
|
try {
|
|
2821
|
-
const s = `https://${i}/.well-known/nostr.json?name=${r}`, c = await (await
|
|
2821
|
+
const s = `https://${i}/.well-known/nostr.json?name=${r}`, c = await (await mt(s, { redirect: "error" })).json();
|
|
2822
2822
|
let a = c.names[r];
|
|
2823
2823
|
return a ? { pubkey: a, relays: (o = c.relays) == null ? void 0 : o[a] } : null;
|
|
2824
2824
|
} catch {
|
|
2825
2825
|
return null;
|
|
2826
2826
|
}
|
|
2827
2827
|
}
|
|
2828
|
-
async function
|
|
2828
|
+
async function _a(e, t) {
|
|
2829
2829
|
let n = await Mr(t);
|
|
2830
2830
|
return n ? n.pubkey === e : !1;
|
|
2831
2831
|
}
|
|
@@ -2967,22 +2967,22 @@ function Da(e, { skipVerification: t } = {}) {
|
|
|
2967
2967
|
}
|
|
2968
2968
|
var ja = {};
|
|
2969
2969
|
D(ja, {
|
|
2970
|
-
NOSTR_URI_REGEX: () =>
|
|
2971
|
-
parse: () =>
|
|
2972
|
-
test: () =>
|
|
2970
|
+
NOSTR_URI_REGEX: () => Et,
|
|
2971
|
+
parse: () => Va,
|
|
2972
|
+
test: () => za
|
|
2973
2973
|
});
|
|
2974
|
-
var
|
|
2975
|
-
function Va(e) {
|
|
2976
|
-
return typeof e == "string" && new RegExp(`^${xt.source}$`).test(e);
|
|
2977
|
-
}
|
|
2974
|
+
var Et = new RegExp(`nostr:(${Tr.source})`);
|
|
2978
2975
|
function za(e) {
|
|
2979
|
-
|
|
2976
|
+
return typeof e == "string" && new RegExp(`^${Et.source}$`).test(e);
|
|
2977
|
+
}
|
|
2978
|
+
function Va(e) {
|
|
2979
|
+
const t = e.match(new RegExp(`^${Et.source}$`));
|
|
2980
2980
|
if (!t)
|
|
2981
2981
|
throw new Error(`Invalid Nostr URI: ${e}`);
|
|
2982
2982
|
return {
|
|
2983
2983
|
uri: t[0],
|
|
2984
2984
|
value: t[1],
|
|
2985
|
-
decoded:
|
|
2985
|
+
decoded: wt(t[1])
|
|
2986
2986
|
};
|
|
2987
2987
|
}
|
|
2988
2988
|
var Za = {};
|
|
@@ -3023,7 +3023,7 @@ D(Ga, {
|
|
|
3023
3023
|
regex: () => fn,
|
|
3024
3024
|
replaceAll: () => Ya
|
|
3025
3025
|
});
|
|
3026
|
-
var fn = () => new RegExp(`\\b${
|
|
3026
|
+
var fn = () => new RegExp(`\\b${Et.source}\\b`, "g");
|
|
3027
3027
|
function* Ja(e) {
|
|
3028
3028
|
const t = e.matchAll(fn());
|
|
3029
3029
|
for (const n of t)
|
|
@@ -3032,7 +3032,7 @@ function* Ja(e) {
|
|
|
3032
3032
|
yield {
|
|
3033
3033
|
uri: r,
|
|
3034
3034
|
value: i,
|
|
3035
|
-
decoded:
|
|
3035
|
+
decoded: wt(i),
|
|
3036
3036
|
start: n.index,
|
|
3037
3037
|
end: n.index + r.length
|
|
3038
3038
|
};
|
|
@@ -3043,7 +3043,7 @@ function Ya(e, t) {
|
|
|
3043
3043
|
return e.replaceAll(fn(), (n, r) => t({
|
|
3044
3044
|
uri: n,
|
|
3045
3045
|
value: r,
|
|
3046
|
-
decoded:
|
|
3046
|
+
decoded: wt(r)
|
|
3047
3047
|
}));
|
|
3048
3048
|
}
|
|
3049
3049
|
var Xa = {};
|
|
@@ -3126,7 +3126,7 @@ var Qa = (e, t) => {
|
|
|
3126
3126
|
return;
|
|
3127
3127
|
return ae(
|
|
3128
3128
|
{
|
|
3129
|
-
kind:
|
|
3129
|
+
kind: kr,
|
|
3130
3130
|
tags: [["p", e.pubkey_to_mute], ...e.tags ?? []],
|
|
3131
3131
|
content: n,
|
|
3132
3132
|
created_at: e.created_at
|
|
@@ -3181,14 +3181,14 @@ async function lc(e, t, n) {
|
|
|
3181
3181
|
return !1;
|
|
3182
3182
|
}
|
|
3183
3183
|
}
|
|
3184
|
-
var
|
|
3185
|
-
D(
|
|
3184
|
+
var z = {};
|
|
3185
|
+
D(z, {
|
|
3186
3186
|
decrypt: () => Jr,
|
|
3187
3187
|
encrypt: () => Gr,
|
|
3188
3188
|
getConversationKey: () => Zr,
|
|
3189
3189
|
v2: () => yc
|
|
3190
3190
|
});
|
|
3191
|
-
var
|
|
3191
|
+
var zr = 1, Vr = 65535;
|
|
3192
3192
|
function Zr(e, t) {
|
|
3193
3193
|
const n = Ue.getSharedSecret(e, "02" + t).subarray(1, 33);
|
|
3194
3194
|
return nn(Ae, n, "nip44-v2");
|
|
@@ -3210,25 +3210,25 @@ function yn(e) {
|
|
|
3210
3210
|
return n * (Math.floor((e - 1) / n) + 1);
|
|
3211
3211
|
}
|
|
3212
3212
|
function uc(e) {
|
|
3213
|
-
if (!Number.isSafeInteger(e) || e <
|
|
3213
|
+
if (!Number.isSafeInteger(e) || e < zr || e > Vr)
|
|
3214
3214
|
throw new Error("invalid plaintext size: must be between 1 and 65535 bytes");
|
|
3215
3215
|
const t = new Uint8Array(2);
|
|
3216
3216
|
return new DataView(t.buffer).setUint16(0, e, !1), t;
|
|
3217
3217
|
}
|
|
3218
3218
|
function fc(e) {
|
|
3219
3219
|
const t = te.encode(e), n = t.length, r = uc(n), i = new Uint8Array(yn(n) - n);
|
|
3220
|
-
return
|
|
3220
|
+
return dt(r, t, i);
|
|
3221
3221
|
}
|
|
3222
3222
|
function hc(e) {
|
|
3223
3223
|
const t = new DataView(e.buffer).getUint16(0), n = e.subarray(2, 2 + t);
|
|
3224
|
-
if (t <
|
|
3224
|
+
if (t < zr || t > Vr || n.length !== t || e.length !== 2 + yn(t))
|
|
3225
3225
|
throw new Error("invalid padding");
|
|
3226
3226
|
return ie.decode(n);
|
|
3227
3227
|
}
|
|
3228
3228
|
function Wr(e, t, n) {
|
|
3229
3229
|
if (n.length !== 32)
|
|
3230
3230
|
throw new Error("AAD associated data must be 32 bytes");
|
|
3231
|
-
const r =
|
|
3231
|
+
const r = dt(n, t);
|
|
3232
3232
|
return pt(Ae, e, r);
|
|
3233
3233
|
}
|
|
3234
3234
|
function dc(e) {
|
|
@@ -3259,7 +3259,7 @@ function dc(e) {
|
|
|
3259
3259
|
}
|
|
3260
3260
|
function Gr(e, t, n = ir(32)) {
|
|
3261
3261
|
const { chacha_key: r, chacha_nonce: i, hmac_key: o } = Fr(t, n), s = fc(e), c = br(r, i, s), a = Wr(o, c, n);
|
|
3262
|
-
return ue.encode(
|
|
3262
|
+
return ue.encode(dt(new Uint8Array([2]), n, c, a));
|
|
3263
3263
|
}
|
|
3264
3264
|
function Jr(e, t) {
|
|
3265
3265
|
const { nonce: n, ciphertext: r, mac: i } = dc(e), { chacha_key: o, chacha_nonce: s, hmac_key: c } = Fr(t, n), a = Wr(c, r, n);
|
|
@@ -3275,12 +3275,12 @@ var yc = {
|
|
|
3275
3275
|
},
|
|
3276
3276
|
encrypt: Gr,
|
|
3277
3277
|
decrypt: Jr
|
|
3278
|
-
},
|
|
3279
|
-
D(
|
|
3278
|
+
}, pc = {};
|
|
3279
|
+
D(pc, {
|
|
3280
3280
|
makeNwcRequestEvent: () => wc,
|
|
3281
|
-
parseConnectionString: () =>
|
|
3281
|
+
parseConnectionString: () => gc
|
|
3282
3282
|
});
|
|
3283
|
-
function
|
|
3283
|
+
function gc(e) {
|
|
3284
3284
|
const { pathname: t, searchParams: n } = new URL(e), r = t, i = n.get("relay"), o = n.get("secret");
|
|
3285
3285
|
if (!r || !i || !o)
|
|
3286
3286
|
throw new Error("invalid connection string");
|
|
@@ -3308,13 +3308,13 @@ D(bc, {
|
|
|
3308
3308
|
useFetchImplementation: () => vc,
|
|
3309
3309
|
validateZapRequest: () => xc
|
|
3310
3310
|
});
|
|
3311
|
-
var
|
|
3311
|
+
var pn;
|
|
3312
3312
|
try {
|
|
3313
|
-
|
|
3313
|
+
pn = fetch;
|
|
3314
3314
|
} catch {
|
|
3315
3315
|
}
|
|
3316
3316
|
function vc(e) {
|
|
3317
|
-
|
|
3317
|
+
pn = e;
|
|
3318
3318
|
}
|
|
3319
3319
|
async function mc(e) {
|
|
3320
3320
|
try {
|
|
@@ -3327,7 +3327,7 @@ async function mc(e) {
|
|
|
3327
3327
|
t = new URL(`/.well-known/lnurlp/${s}`, `https://${c}`).toString();
|
|
3328
3328
|
} else
|
|
3329
3329
|
return null;
|
|
3330
|
-
let o = await (await
|
|
3330
|
+
let o = await (await pn(t)).json();
|
|
3331
3331
|
if (o.allowsNostr && o.nostrPubkey)
|
|
3332
3332
|
return o.callback;
|
|
3333
3333
|
} catch {
|
|
@@ -3393,7 +3393,7 @@ function Ac({
|
|
|
3393
3393
|
var Sc = {};
|
|
3394
3394
|
D(Sc, {
|
|
3395
3395
|
getToken: () => Kc,
|
|
3396
|
-
hashPayload: () =>
|
|
3396
|
+
hashPayload: () => gn,
|
|
3397
3397
|
unpackEventFromToken: () => Xr,
|
|
3398
3398
|
validateEvent: () => ii,
|
|
3399
3399
|
validateEventKind: () => ei,
|
|
@@ -3414,7 +3414,7 @@ async function Kc(e, t, n, r = !1, i) {
|
|
|
3414
3414
|
created_at: Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3),
|
|
3415
3415
|
content: ""
|
|
3416
3416
|
};
|
|
3417
|
-
i && o.tags.push(["payload",
|
|
3417
|
+
i && o.tags.push(["payload", gn(i)]);
|
|
3418
3418
|
const s = await n(o);
|
|
3419
3419
|
return (r ? Yr : "") + ue.encode(te.encode(JSON.stringify(s)));
|
|
3420
3420
|
}
|
|
@@ -3449,7 +3449,7 @@ function ni(e, t) {
|
|
|
3449
3449
|
const n = e.tags.find((r) => r[0] === "method");
|
|
3450
3450
|
return n ? n.length > 0 && n[1].toLowerCase() === t.toLowerCase() : !1;
|
|
3451
3451
|
}
|
|
3452
|
-
function
|
|
3452
|
+
function gn(e) {
|
|
3453
3453
|
const t = Ae(te.encode(JSON.stringify(e)));
|
|
3454
3454
|
return M(t);
|
|
3455
3455
|
}
|
|
@@ -3457,7 +3457,7 @@ function ri(e, t) {
|
|
|
3457
3457
|
const n = e.tags.find((i) => i[0] === "payload");
|
|
3458
3458
|
if (!n)
|
|
3459
3459
|
return !1;
|
|
3460
|
-
const r =
|
|
3460
|
+
const r = gn(t);
|
|
3461
3461
|
return n.length > 0 && n[1] === r;
|
|
3462
3462
|
}
|
|
3463
3463
|
async function ii(e, t, n, r) {
|
|
@@ -3505,25 +3505,25 @@ function Rc(e) {
|
|
|
3505
3505
|
function Pc(e) {
|
|
3506
3506
|
const t = JSON.parse(e);
|
|
3507
3507
|
return {
|
|
3508
|
-
rootKey:
|
|
3508
|
+
rootKey: W(t.rootKey),
|
|
3509
3509
|
theirNostrPublicKey: t.theirNostrPublicKey,
|
|
3510
3510
|
ourCurrentNostrKey: t.ourCurrentNostrKey ? {
|
|
3511
3511
|
publicKey: t.ourCurrentNostrKey.publicKey,
|
|
3512
|
-
privateKey:
|
|
3512
|
+
privateKey: W(t.ourCurrentNostrKey.privateKey)
|
|
3513
3513
|
} : void 0,
|
|
3514
3514
|
ourNextNostrKey: {
|
|
3515
3515
|
publicKey: t.ourNextNostrKey.publicKey,
|
|
3516
|
-
privateKey:
|
|
3516
|
+
privateKey: W(t.ourNextNostrKey.privateKey)
|
|
3517
3517
|
},
|
|
3518
|
-
receivingChainKey: t.receivingChainKey ?
|
|
3519
|
-
sendingChainKey: t.sendingChainKey ?
|
|
3518
|
+
receivingChainKey: t.receivingChainKey ? W(t.receivingChainKey) : void 0,
|
|
3519
|
+
sendingChainKey: t.sendingChainKey ? W(t.sendingChainKey) : void 0,
|
|
3520
3520
|
sendingChainMessageNumber: t.sendingChainMessageNumber,
|
|
3521
3521
|
receivingChainMessageNumber: t.receivingChainMessageNumber,
|
|
3522
3522
|
previousSendingChainMessageCount: t.previousSendingChainMessageCount,
|
|
3523
3523
|
skippedMessageKeys: Object.fromEntries(
|
|
3524
3524
|
Object.entries(t.skippedMessageKeys).map(([n, r]) => [
|
|
3525
3525
|
n,
|
|
3526
|
-
|
|
3526
|
+
W(r)
|
|
3527
3527
|
])
|
|
3528
3528
|
)
|
|
3529
3529
|
};
|
|
@@ -3553,7 +3553,8 @@ function Rn(e, t) {
|
|
|
3553
3553
|
return `${e}:${t}`;
|
|
3554
3554
|
}
|
|
3555
3555
|
const Cc = 1e3;
|
|
3556
|
-
class
|
|
3556
|
+
class ct {
|
|
3557
|
+
// 1. CHANNEL PUBLIC INTERFACE
|
|
3557
3558
|
constructor(t, n) {
|
|
3558
3559
|
ee(this, "nostrUnsubscribe");
|
|
3559
3560
|
ee(this, "nostrNextUnsubscribe");
|
|
@@ -3563,31 +3564,43 @@ class lt {
|
|
|
3563
3564
|
this.nostrSubscribe = t, this.state = n, this.name = Math.random().toString(36).substring(2, 6);
|
|
3564
3565
|
}
|
|
3565
3566
|
/**
|
|
3566
|
-
*
|
|
3567
|
-
* @param
|
|
3567
|
+
* Initializes a new secure communication channel
|
|
3568
|
+
* @param nostrSubscribe Function to subscribe to Nostr events
|
|
3569
|
+
* @param theirNostrPublicKey The public key of the other party
|
|
3570
|
+
* @param ourCurrentPrivateKey Our current private key for Nostr
|
|
3571
|
+
* @param isInitiator Whether we are initiating the conversation (true) or responding (false)
|
|
3572
|
+
* @param sharedSecret Initial shared secret for securing the first message chain
|
|
3573
|
+
* @param name Optional name for the channel (for debugging)
|
|
3574
|
+
* @returns A new Channel instance
|
|
3568
3575
|
*/
|
|
3569
|
-
static init(t, n, r, i
|
|
3570
|
-
const c = Oe(), [a, l] = Re(
|
|
3576
|
+
static init(t, n, r, i, o, s) {
|
|
3577
|
+
const c = Oe(), [a, l] = Re(o, z.getConversationKey(c, n), 2);
|
|
3571
3578
|
let f, u;
|
|
3572
|
-
|
|
3579
|
+
i ? (f = { publicKey: Ce(r), privateKey: r }, u = { publicKey: Ce(c), privateKey: c }) : u = { publicKey: Ce(r), privateKey: r };
|
|
3573
3580
|
const d = {
|
|
3574
|
-
rootKey:
|
|
3581
|
+
rootKey: i ? a : o,
|
|
3575
3582
|
theirNostrPublicKey: n,
|
|
3576
3583
|
ourCurrentNostrKey: f,
|
|
3577
3584
|
ourNextNostrKey: u,
|
|
3578
3585
|
receivingChainKey: void 0,
|
|
3579
|
-
sendingChainKey:
|
|
3586
|
+
sendingChainKey: i ? l : void 0,
|
|
3580
3587
|
sendingChainMessageNumber: 0,
|
|
3581
3588
|
receivingChainMessageNumber: 0,
|
|
3582
3589
|
previousSendingChainMessageCount: 0,
|
|
3583
3590
|
skippedMessageKeys: {}
|
|
3584
|
-
},
|
|
3585
|
-
return
|
|
3591
|
+
}, p = new ct(t, d);
|
|
3592
|
+
return s && (p.name = s), p;
|
|
3586
3593
|
}
|
|
3594
|
+
/**
|
|
3595
|
+
* Sends an encrypted message through the channel
|
|
3596
|
+
* @param data The plaintext message to send
|
|
3597
|
+
* @returns A verified Nostr event containing the encrypted message
|
|
3598
|
+
* @throws Error if we are not the initiator and trying to send the first message
|
|
3599
|
+
*/
|
|
3587
3600
|
send(t) {
|
|
3588
3601
|
if (!this.state.theirNostrPublicKey || !this.state.ourCurrentNostrKey)
|
|
3589
3602
|
throw new Error("we are not the initiator, so we can't send the first message");
|
|
3590
|
-
const [n, r] = this.ratchetEncrypt(t), i =
|
|
3603
|
+
const [n, r] = this.ratchetEncrypt(t), i = z.getConversationKey(this.state.ourCurrentNostrKey.privateKey, this.state.theirNostrPublicKey), o = z.encrypt(JSON.stringify(n), i);
|
|
3591
3604
|
return ae({
|
|
3592
3605
|
content: r,
|
|
3593
3606
|
kind: Me,
|
|
@@ -3595,10 +3608,16 @@ class lt {
|
|
|
3595
3608
|
created_at: Math.floor(Date.now() / 1e3)
|
|
3596
3609
|
}, this.state.ourCurrentNostrKey.privateKey);
|
|
3597
3610
|
}
|
|
3611
|
+
/**
|
|
3612
|
+
* Subscribes to incoming messages on this channel
|
|
3613
|
+
* @param callback Function to be called when a message is received
|
|
3614
|
+
* @returns Unsubscribe function to stop receiving messages
|
|
3615
|
+
*/
|
|
3598
3616
|
onMessage(t) {
|
|
3599
3617
|
const n = this.currentInternalSubscriptionId++;
|
|
3600
3618
|
return this.internalSubscriptions.set(n, t), this.subscribeToNostrEvents(), () => this.internalSubscriptions.delete(n);
|
|
3601
3619
|
}
|
|
3620
|
+
// 2. RATCHET FUNCTIONS
|
|
3602
3621
|
ratchetEncrypt(t) {
|
|
3603
3622
|
const [n, r] = Re(this.state.sendingChainKey, new Uint8Array([1]), 2);
|
|
3604
3623
|
return this.state.sendingChainKey = n, [{
|
|
@@ -3606,7 +3625,7 @@ class lt {
|
|
|
3606
3625
|
nextPublicKey: this.state.ourNextNostrKey.publicKey,
|
|
3607
3626
|
time: Date.now(),
|
|
3608
3627
|
previousChainLength: this.state.previousSendingChainMessageCount
|
|
3609
|
-
},
|
|
3628
|
+
}, z.encrypt(t, r)];
|
|
3610
3629
|
}
|
|
3611
3630
|
ratchetDecrypt(t, n, r) {
|
|
3612
3631
|
const i = this.trySkippedMessageKeys(t, n, r);
|
|
@@ -3615,7 +3634,7 @@ class lt {
|
|
|
3615
3634
|
const [o, s] = Re(this.state.receivingChainKey, new Uint8Array([1]), 2);
|
|
3616
3635
|
this.state.receivingChainKey = o, this.state.receivingChainMessageNumber++;
|
|
3617
3636
|
try {
|
|
3618
|
-
return
|
|
3637
|
+
return z.decrypt(n, s);
|
|
3619
3638
|
} catch (c) {
|
|
3620
3639
|
throw console.error(this.name, "Decryption failed:", c, {
|
|
3621
3640
|
messageKey: M(s).slice(0, 4),
|
|
@@ -3627,16 +3646,17 @@ class lt {
|
|
|
3627
3646
|
}
|
|
3628
3647
|
ratchetStep(t) {
|
|
3629
3648
|
this.state.previousSendingChainMessageCount = this.state.sendingChainMessageNumber, this.state.sendingChainMessageNumber = 0, this.state.receivingChainMessageNumber = 0, this.state.theirNostrPublicKey = t;
|
|
3630
|
-
const n =
|
|
3649
|
+
const n = z.getConversationKey(this.state.ourNextNostrKey.privateKey, this.state.theirNostrPublicKey), [r, i] = Re(this.state.rootKey, n, 2);
|
|
3631
3650
|
this.state.receivingChainKey = i, this.state.ourCurrentNostrKey = this.state.ourNextNostrKey;
|
|
3632
3651
|
const o = Oe();
|
|
3633
3652
|
this.state.ourNextNostrKey = {
|
|
3634
3653
|
publicKey: Ce(o),
|
|
3635
3654
|
privateKey: o
|
|
3636
3655
|
};
|
|
3637
|
-
const s =
|
|
3656
|
+
const s = z.getConversationKey(this.state.ourNextNostrKey.privateKey, this.state.theirNostrPublicKey), [c, a] = Re(r, s, 2);
|
|
3638
3657
|
this.state.rootKey = c, this.state.sendingChainKey = a;
|
|
3639
3658
|
}
|
|
3659
|
+
// 3. MESSAGE KEY FUNCTIONS
|
|
3640
3660
|
skipMessageKeys(t, n) {
|
|
3641
3661
|
if (this.state.receivingChainMessageNumber + Cc < t)
|
|
3642
3662
|
throw new Error("Too many skipped messages");
|
|
@@ -3651,22 +3671,23 @@ class lt {
|
|
|
3651
3671
|
const i = Rn(r, t.number);
|
|
3652
3672
|
if (i in this.state.skippedMessageKeys) {
|
|
3653
3673
|
const o = this.state.skippedMessageKeys[i];
|
|
3654
|
-
return delete this.state.skippedMessageKeys[i],
|
|
3674
|
+
return delete this.state.skippedMessageKeys[i], z.decrypt(n, o);
|
|
3655
3675
|
}
|
|
3656
3676
|
return null;
|
|
3657
3677
|
}
|
|
3678
|
+
// 4. NOSTR EVENT HANDLING
|
|
3658
3679
|
decryptHeader(t) {
|
|
3659
3680
|
const n = t.tags[0][1];
|
|
3660
3681
|
if (this.state.ourCurrentNostrKey) {
|
|
3661
|
-
const i =
|
|
3682
|
+
const i = z.getConversationKey(this.state.ourCurrentNostrKey.privateKey, t.pubkey);
|
|
3662
3683
|
try {
|
|
3663
|
-
return [JSON.parse(
|
|
3684
|
+
return [JSON.parse(z.decrypt(n, i)), !1];
|
|
3664
3685
|
} catch {
|
|
3665
3686
|
}
|
|
3666
3687
|
}
|
|
3667
|
-
const r =
|
|
3688
|
+
const r = z.getConversationKey(this.state.ourNextNostrKey.privateKey, t.pubkey);
|
|
3668
3689
|
try {
|
|
3669
|
-
return [JSON.parse(
|
|
3690
|
+
return [JSON.parse(z.decrypt(n, r)), !0];
|
|
3670
3691
|
} catch {
|
|
3671
3692
|
}
|
|
3672
3693
|
throw new Error("Failed to decrypt header with both current and next secrets");
|
|
@@ -3682,12 +3703,19 @@ class lt {
|
|
|
3682
3703
|
this.internalSubscriptions.forEach((s) => s({ id: t.id, data: i, pubkey: n.nextPublicKey, time: n.time }));
|
|
3683
3704
|
}
|
|
3684
3705
|
subscribeToNostrEvents() {
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
(t) => this.handleNostrEvent(t)
|
|
3688
|
-
)), this.nostrNextUnsubscribe = this.nostrSubscribe(
|
|
3706
|
+
if (this.nostrNextUnsubscribe) return;
|
|
3707
|
+
this.nostrNextUnsubscribe = this.nostrSubscribe(
|
|
3689
3708
|
{ authors: [this.state.theirNostrPublicKey], kinds: [Me] },
|
|
3690
|
-
(
|
|
3709
|
+
(n) => this.handleNostrEvent(n)
|
|
3710
|
+
);
|
|
3711
|
+
const t = /* @__PURE__ */ new Set();
|
|
3712
|
+
for (const n of Object.keys(this.state.skippedMessageKeys)) {
|
|
3713
|
+
const [r] = n.split(":");
|
|
3714
|
+
r !== this.state.theirNostrPublicKey && t.add(r);
|
|
3715
|
+
}
|
|
3716
|
+
t.size > 0 && (this.nostrUnsubscribe = this.nostrSubscribe(
|
|
3717
|
+
{ authors: Array.from(t), kinds: [Me] },
|
|
3718
|
+
(n) => this.handleNostrEvent(n)
|
|
3691
3719
|
));
|
|
3692
3720
|
}
|
|
3693
3721
|
}
|
|
@@ -3702,7 +3730,7 @@ class nt {
|
|
|
3702
3730
|
this.inviterSessionPublicKey = t, this.linkSecret = n, this.inviter = r, this.inviterSessionPrivateKey = i, this.label = o, this.maxUses = s, this.usedBy = c;
|
|
3703
3731
|
}
|
|
3704
3732
|
static createNew(t, n, r) {
|
|
3705
|
-
const i = Oe(), o = Ce(i), s =
|
|
3733
|
+
const i = Oe(), o = Ce(i), s = M(Oe());
|
|
3706
3734
|
return new nt(
|
|
3707
3735
|
o,
|
|
3708
3736
|
s,
|
|
@@ -3769,19 +3797,19 @@ class nt {
|
|
|
3769
3797
|
* so the inviter can create the channel on their side.
|
|
3770
3798
|
*/
|
|
3771
3799
|
async acceptInvite(t, n, r) {
|
|
3772
|
-
const i = Oe(), o = Ce(i), s = this.inviter || this.inviterSessionPublicKey, c =
|
|
3800
|
+
const i = Oe(), o = Ce(i), s = this.inviter || this.inviterSessionPublicKey, c = W(this.linkSecret), a = ct.init(t, this.inviterSessionPublicKey, i, !0, c, void 0), l = Oe(), f = Ce(l), u = typeof r == "function" ? r : (g, h) => Promise.resolve(z.encrypt(g, et(r, h))), d = {
|
|
3773
3801
|
pubkey: n,
|
|
3774
3802
|
tags: [["secret", this.linkSecret]],
|
|
3775
|
-
content: await
|
|
3803
|
+
content: await u(o, s),
|
|
3776
3804
|
created_at: Math.floor(Date.now() / 1e3)
|
|
3777
|
-
},
|
|
3805
|
+
}, p = {
|
|
3778
3806
|
kind: Me,
|
|
3779
|
-
pubkey:
|
|
3780
|
-
content:
|
|
3807
|
+
pubkey: f,
|
|
3808
|
+
content: z.encrypt(JSON.stringify(d), et(l, this.inviterSessionPublicKey)),
|
|
3781
3809
|
created_at: Math.floor(Date.now() / 1e3),
|
|
3782
3810
|
tags: [["p", this.inviterSessionPublicKey]]
|
|
3783
3811
|
};
|
|
3784
|
-
return { channel:
|
|
3812
|
+
return { channel: a, event: ae(p, l) };
|
|
3785
3813
|
}
|
|
3786
3814
|
listen(t, n, r) {
|
|
3787
3815
|
if (!this.inviterSessionPrivateKey)
|
|
@@ -3792,13 +3820,13 @@ class nt {
|
|
|
3792
3820
|
};
|
|
3793
3821
|
return n(i, async (o) => {
|
|
3794
3822
|
try {
|
|
3795
|
-
const s = await
|
|
3796
|
-
if (!c.tags || !c.tags.some(([
|
|
3823
|
+
const s = await z.decrypt(o.content, et(this.inviterSessionPrivateKey, o.pubkey)), c = JSON.parse(s);
|
|
3824
|
+
if (!c.tags || !c.tags.some(([p, g]) => p === "secret" && g === this.linkSecret)) {
|
|
3797
3825
|
console.error("Invalid secret from event", o);
|
|
3798
3826
|
return;
|
|
3799
3827
|
}
|
|
3800
|
-
const l = await (typeof t == "function" ? t : (
|
|
3801
|
-
r(
|
|
3828
|
+
const l = await (typeof t == "function" ? t : (p, g) => Promise.resolve(z.decrypt(p, et(t, g))))(c.content, c.pubkey), f = W(this.linkSecret), u = o.id, d = ct.init(n, l, this.inviterSessionPrivateKey, !1, f, u);
|
|
3829
|
+
r(d, c.pubkey);
|
|
3802
3830
|
} catch (s) {
|
|
3803
3831
|
console.error("Error processing invite message:", s);
|
|
3804
3832
|
}
|
|
@@ -3806,7 +3834,7 @@ class nt {
|
|
|
3806
3834
|
}
|
|
3807
3835
|
}
|
|
3808
3836
|
export {
|
|
3809
|
-
|
|
3837
|
+
ct as Channel,
|
|
3810
3838
|
Me as EVENT_KIND,
|
|
3811
3839
|
nt as InviteLink,
|
|
3812
3840
|
Tc as MAX_SKIP,
|