cafe-utility 26.6.1 → 26.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +16 -0
- package/index.js +204 -78
- package/module.mjs +1 -0
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -512,6 +512,13 @@ declare function commonPrefix(one: Uint8Array, other: Uint8Array): Uint8Array;
|
|
|
512
512
|
declare function setBit(bytes: Uint8Array, index: number, value: 0 | 1): void;
|
|
513
513
|
declare function getBit(bytes: Uint8Array, index: number): 0 | 1;
|
|
514
514
|
declare function binaryIndexOf(array: Uint8Array, value: Uint8Array, start?: number): number;
|
|
515
|
+
declare function binaryEquals(a: Uint8Array, b: Uint8Array): boolean;
|
|
516
|
+
declare function privateKeyToPublicKey(privateKey: bigint): [bigint, bigint];
|
|
517
|
+
declare function publicKeyToAddress(publicKey: [bigint, bigint]): Uint8Array;
|
|
518
|
+
declare function signMessage(message: Uint8Array, privateKey: bigint, nonce?: bigint): [bigint, bigint, 27n | 28n];
|
|
519
|
+
declare function signHash(hash: bigint, privateKey: bigint, nonce?: bigint): [bigint, bigint, 27n | 28n];
|
|
520
|
+
declare function recoverPublicKey(message: Uint8Array, r: bigint, s: bigint, v: 27n | 28n): [bigint, bigint];
|
|
521
|
+
declare function verifySignature(message: Uint8Array, publicKey: [bigint, bigint], r: bigint, s: bigint): boolean;
|
|
515
522
|
interface Uint8ArrayIO {
|
|
516
523
|
max: () => number;
|
|
517
524
|
}
|
|
@@ -625,6 +632,15 @@ export declare const Binary: {
|
|
|
625
632
|
setBit: typeof setBit;
|
|
626
633
|
getBit: typeof getBit;
|
|
627
634
|
indexOf: typeof binaryIndexOf;
|
|
635
|
+
equals: typeof binaryEquals;
|
|
636
|
+
};
|
|
637
|
+
export declare const Elliptic: {
|
|
638
|
+
privateKeyToPublicKey: typeof privateKeyToPublicKey;
|
|
639
|
+
publicKeyToAddress: typeof publicKeyToAddress;
|
|
640
|
+
signMessage: typeof signMessage;
|
|
641
|
+
signHash: typeof signHash;
|
|
642
|
+
verifySignature: typeof verifySignature;
|
|
643
|
+
recoverPublicKey: typeof recoverPublicKey;
|
|
628
644
|
};
|
|
629
645
|
export declare const Random: {
|
|
630
646
|
intBetween: typeof intBetween;
|
package/index.js
CHANGED
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, '__esModule', { value: !0 }),
|
|
|
12
12
|
exports.System =
|
|
13
13
|
exports.Arrays =
|
|
14
14
|
exports.Random =
|
|
15
|
+
exports.Elliptic =
|
|
15
16
|
exports.Binary =
|
|
16
17
|
exports.AsyncQueue =
|
|
17
18
|
exports.PubSubChannel =
|
|
@@ -2133,7 +2134,10 @@ function uint64ToNumber(n, e) {
|
|
|
2133
2134
|
function numberToUint256(n, e) {
|
|
2134
2135
|
const r = new Uint8Array(32)
|
|
2135
2136
|
let o = n
|
|
2136
|
-
if (e === 'LE')
|
|
2137
|
+
if (e === 'LE') {
|
|
2138
|
+
for (let i = 0; i < 32; i++) (r[i] = Number(o & 0xffn)), (o >>= 8n)
|
|
2139
|
+
return r
|
|
2140
|
+
}
|
|
2137
2141
|
for (let i = 32 - 1; i >= 0; i--) (r[i] = Number(o & 0xffn)), (o >>= 8n)
|
|
2138
2142
|
return r
|
|
2139
2143
|
}
|
|
@@ -2183,24 +2187,24 @@ function keccakPermutate(n) {
|
|
|
2183
2187
|
An = (s << 1) | (u >>> 31),
|
|
2184
2188
|
m = t ^ $n,
|
|
2185
2189
|
g = r ^ An,
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2190
|
+
En = (c << 1) | (f >>> 31),
|
|
2191
|
+
Mn = (f << 1) | (c >>> 31),
|
|
2192
|
+
w = o ^ En,
|
|
2193
|
+
y = i ^ Mn,
|
|
2194
|
+
On = (l << 1) | (a >>> 31),
|
|
2191
2195
|
Tn = (a << 1) | (l >>> 31),
|
|
2192
|
-
x = u ^
|
|
2196
|
+
x = u ^ On,
|
|
2193
2197
|
b = s ^ Tn,
|
|
2194
2198
|
kn = (t << 1) | (r >>> 31),
|
|
2195
|
-
|
|
2199
|
+
Sn = (r << 1) | (t >>> 31),
|
|
2196
2200
|
$ = c ^ kn,
|
|
2197
|
-
A = f ^
|
|
2201
|
+
A = f ^ Sn
|
|
2198
2202
|
;(n[0] ^= p),
|
|
2199
2203
|
(n[1] ^= d),
|
|
2200
2204
|
(n[2] ^= m),
|
|
2201
2205
|
(n[3] ^= g),
|
|
2202
|
-
(n[4] ^=
|
|
2203
|
-
(n[5] ^=
|
|
2206
|
+
(n[4] ^= w),
|
|
2207
|
+
(n[5] ^= y),
|
|
2204
2208
|
(n[6] ^= x),
|
|
2205
2209
|
(n[7] ^= b),
|
|
2206
2210
|
(n[8] ^= $),
|
|
@@ -2209,8 +2213,8 @@ function keccakPermutate(n) {
|
|
|
2209
2213
|
(n[11] ^= d),
|
|
2210
2214
|
(n[12] ^= m),
|
|
2211
2215
|
(n[13] ^= g),
|
|
2212
|
-
(n[14] ^=
|
|
2213
|
-
(n[15] ^=
|
|
2216
|
+
(n[14] ^= w),
|
|
2217
|
+
(n[15] ^= y),
|
|
2214
2218
|
(n[16] ^= x),
|
|
2215
2219
|
(n[17] ^= b),
|
|
2216
2220
|
(n[18] ^= $),
|
|
@@ -2219,8 +2223,8 @@ function keccakPermutate(n) {
|
|
|
2219
2223
|
(n[21] ^= d),
|
|
2220
2224
|
(n[22] ^= m),
|
|
2221
2225
|
(n[23] ^= g),
|
|
2222
|
-
(n[24] ^=
|
|
2223
|
-
(n[25] ^=
|
|
2226
|
+
(n[24] ^= w),
|
|
2227
|
+
(n[25] ^= y),
|
|
2224
2228
|
(n[26] ^= x),
|
|
2225
2229
|
(n[27] ^= b),
|
|
2226
2230
|
(n[28] ^= $),
|
|
@@ -2229,8 +2233,8 @@ function keccakPermutate(n) {
|
|
|
2229
2233
|
(n[31] ^= d),
|
|
2230
2234
|
(n[32] ^= m),
|
|
2231
2235
|
(n[33] ^= g),
|
|
2232
|
-
(n[34] ^=
|
|
2233
|
-
(n[35] ^=
|
|
2236
|
+
(n[34] ^= w),
|
|
2237
|
+
(n[35] ^= y),
|
|
2234
2238
|
(n[36] ^= x),
|
|
2235
2239
|
(n[37] ^= b),
|
|
2236
2240
|
(n[38] ^= $),
|
|
@@ -2239,39 +2243,39 @@ function keccakPermutate(n) {
|
|
|
2239
2243
|
(n[41] ^= d),
|
|
2240
2244
|
(n[42] ^= m),
|
|
2241
2245
|
(n[43] ^= g),
|
|
2242
|
-
(n[44] ^=
|
|
2243
|
-
(n[45] ^=
|
|
2246
|
+
(n[44] ^= w),
|
|
2247
|
+
(n[45] ^= y),
|
|
2244
2248
|
(n[46] ^= x),
|
|
2245
2249
|
(n[47] ^= b),
|
|
2246
2250
|
(n[48] ^= $),
|
|
2247
2251
|
(n[49] ^= A)
|
|
2248
|
-
const
|
|
2249
|
-
|
|
2250
|
-
|
|
2252
|
+
const E = n[0],
|
|
2253
|
+
M = n[1],
|
|
2254
|
+
O = (n[2] << 1) | (n[3] >>> 31),
|
|
2251
2255
|
T = (n[3] << 1) | (n[2] >>> 31),
|
|
2252
2256
|
k = (n[5] << 30) | (n[4] >>> 2),
|
|
2253
|
-
|
|
2257
|
+
S = (n[4] << 30) | (n[5] >>> 2),
|
|
2254
2258
|
R = (n[6] << 28) | (n[7] >>> 4),
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2259
|
+
D = (n[7] << 28) | (n[6] >>> 4),
|
|
2260
|
+
I = (n[8] << 27) | (n[9] >>> 5),
|
|
2261
|
+
C = (n[9] << 27) | (n[8] >>> 5),
|
|
2262
|
+
P = (n[11] << 4) | (n[10] >>> 28),
|
|
2263
|
+
B = (n[10] << 4) | (n[11] >>> 28),
|
|
2264
|
+
L = (n[13] << 12) | (n[12] >>> 20),
|
|
2261
2265
|
N = (n[12] << 12) | (n[13] >>> 20),
|
|
2262
2266
|
j = (n[14] << 6) | (n[15] >>> 26),
|
|
2263
2267
|
U = (n[15] << 6) | (n[14] >>> 26),
|
|
2264
|
-
|
|
2265
|
-
|
|
2268
|
+
z = (n[17] << 23) | (n[16] >>> 9),
|
|
2269
|
+
F = (n[16] << 23) | (n[17] >>> 9),
|
|
2266
2270
|
q = (n[18] << 20) | (n[19] >>> 12),
|
|
2267
|
-
|
|
2271
|
+
v = (n[19] << 20) | (n[18] >>> 12),
|
|
2268
2272
|
H = (n[20] << 3) | (n[21] >>> 29),
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2273
|
+
W = (n[21] << 3) | (n[20] >>> 29),
|
|
2274
|
+
V = (n[22] << 10) | (n[23] >>> 22),
|
|
2275
|
+
_ = (n[23] << 10) | (n[22] >>> 22),
|
|
2276
|
+
J = (n[25] << 11) | (n[24] >>> 21),
|
|
2277
|
+
K = (n[24] << 11) | (n[25] >>> 21),
|
|
2278
|
+
Z = (n[26] << 25) | (n[27] >>> 7),
|
|
2275
2279
|
Q = (n[27] << 25) | (n[26] >>> 7),
|
|
2276
2280
|
G = (n[29] << 7) | (n[28] >>> 25),
|
|
2277
2281
|
Y = (n[28] << 7) | (n[29] >>> 25),
|
|
@@ -2292,59 +2296,59 @@ function keccakPermutate(n) {
|
|
|
2292
2296
|
dn = (n[45] << 29) | (n[44] >>> 3),
|
|
2293
2297
|
mn = (n[44] << 29) | (n[45] >>> 3),
|
|
2294
2298
|
gn = (n[47] << 24) | (n[46] >>> 8),
|
|
2295
|
-
|
|
2296
|
-
|
|
2299
|
+
wn = (n[46] << 24) | (n[47] >>> 8),
|
|
2300
|
+
yn = (n[48] << 14) | (n[49] >>> 18),
|
|
2297
2301
|
xn = (n[49] << 14) | (n[48] >>> 18)
|
|
2298
|
-
;(n[0] =
|
|
2299
|
-
(n[1] =
|
|
2300
|
-
(n[2] =
|
|
2301
|
-
(n[3] = N ^ (~
|
|
2302
|
-
(n[4] =
|
|
2303
|
-
(n[5] =
|
|
2304
|
-
(n[6] = un ^ (~
|
|
2305
|
-
(n[7] = cn ^ (~xn &
|
|
2306
|
-
(n[8] =
|
|
2307
|
-
(n[9] = xn ^ (~
|
|
2302
|
+
;(n[0] = E ^ (~L & J)),
|
|
2303
|
+
(n[1] = M ^ (~N & K)),
|
|
2304
|
+
(n[2] = L ^ (~J & un)),
|
|
2305
|
+
(n[3] = N ^ (~K & cn)),
|
|
2306
|
+
(n[4] = J ^ (~un & yn)),
|
|
2307
|
+
(n[5] = K ^ (~cn & xn)),
|
|
2308
|
+
(n[6] = un ^ (~yn & E)),
|
|
2309
|
+
(n[7] = cn ^ (~xn & M)),
|
|
2310
|
+
(n[8] = yn ^ (~E & L)),
|
|
2311
|
+
(n[9] = xn ^ (~M & N)),
|
|
2308
2312
|
(n[10] = R ^ (~q & H)),
|
|
2309
|
-
(n[11] =
|
|
2313
|
+
(n[11] = D ^ (~v & W)),
|
|
2310
2314
|
(n[12] = q ^ (~H & en)),
|
|
2311
|
-
(n[13] =
|
|
2315
|
+
(n[13] = v ^ (~W & tn)),
|
|
2312
2316
|
(n[14] = H ^ (~en & dn)),
|
|
2313
|
-
(n[15] =
|
|
2317
|
+
(n[15] = W ^ (~tn & mn)),
|
|
2314
2318
|
(n[16] = en ^ (~dn & R)),
|
|
2315
|
-
(n[17] = tn ^ (~mn &
|
|
2319
|
+
(n[17] = tn ^ (~mn & D)),
|
|
2316
2320
|
(n[18] = dn ^ (~R & q)),
|
|
2317
|
-
(n[19] = mn ^ (~
|
|
2318
|
-
(n[20] =
|
|
2321
|
+
(n[19] = mn ^ (~D & v)),
|
|
2322
|
+
(n[20] = O ^ (~j & Z)),
|
|
2319
2323
|
(n[21] = T ^ (~U & Q)),
|
|
2320
|
-
(n[22] = j ^ (~
|
|
2324
|
+
(n[22] = j ^ (~Z & sn)),
|
|
2321
2325
|
(n[23] = U ^ (~Q & fn)),
|
|
2322
|
-
(n[24] =
|
|
2326
|
+
(n[24] = Z ^ (~sn & ln)),
|
|
2323
2327
|
(n[25] = Q ^ (~fn & an)),
|
|
2324
|
-
(n[26] = sn ^ (~ln &
|
|
2328
|
+
(n[26] = sn ^ (~ln & O)),
|
|
2325
2329
|
(n[27] = fn ^ (~an & T)),
|
|
2326
|
-
(n[28] = ln ^ (~
|
|
2330
|
+
(n[28] = ln ^ (~O & j)),
|
|
2327
2331
|
(n[29] = an ^ (~T & U)),
|
|
2328
|
-
(n[30] =
|
|
2329
|
-
(n[31] =
|
|
2330
|
-
(n[32] =
|
|
2331
|
-
(n[33] =
|
|
2332
|
-
(n[34] =
|
|
2333
|
-
(n[35] =
|
|
2334
|
-
(n[36] = rn ^ (~gn &
|
|
2335
|
-
(n[37] = on ^ (~
|
|
2336
|
-
(n[38] = gn ^ (~
|
|
2337
|
-
(n[39] =
|
|
2338
|
-
(n[40] = k ^ (~
|
|
2339
|
-
(n[41] =
|
|
2340
|
-
(n[42] =
|
|
2341
|
-
(n[43] =
|
|
2332
|
+
(n[30] = I ^ (~P & V)),
|
|
2333
|
+
(n[31] = C ^ (~B & _)),
|
|
2334
|
+
(n[32] = P ^ (~V & rn)),
|
|
2335
|
+
(n[33] = B ^ (~_ & on)),
|
|
2336
|
+
(n[34] = V ^ (~rn & gn)),
|
|
2337
|
+
(n[35] = _ ^ (~on & wn)),
|
|
2338
|
+
(n[36] = rn ^ (~gn & I)),
|
|
2339
|
+
(n[37] = on ^ (~wn & C)),
|
|
2340
|
+
(n[38] = gn ^ (~I & P)),
|
|
2341
|
+
(n[39] = wn ^ (~C & B)),
|
|
2342
|
+
(n[40] = k ^ (~z & G)),
|
|
2343
|
+
(n[41] = S ^ (~F & Y)),
|
|
2344
|
+
(n[42] = z ^ (~G & X)),
|
|
2345
|
+
(n[43] = F ^ (~Y & nn)),
|
|
2342
2346
|
(n[44] = G ^ (~X & hn)),
|
|
2343
2347
|
(n[45] = Y ^ (~nn & pn)),
|
|
2344
2348
|
(n[46] = X ^ (~hn & k)),
|
|
2345
|
-
(n[47] = nn ^ (~pn &
|
|
2346
|
-
(n[48] = hn ^ (~k &
|
|
2347
|
-
(n[49] = pn ^ (~
|
|
2349
|
+
(n[47] = nn ^ (~pn & S)),
|
|
2350
|
+
(n[48] = hn ^ (~k & z)),
|
|
2351
|
+
(n[49] = pn ^ (~S & F)),
|
|
2348
2352
|
(n[0] ^= IOTA_CONSTANTS[e * 2]),
|
|
2349
2353
|
(n[1] ^= IOTA_CONSTANTS[e * 2 + 1])
|
|
2350
2354
|
}
|
|
@@ -2448,6 +2452,119 @@ function binaryIndexOf(n, e, t = 0) {
|
|
|
2448
2452
|
for (let o = 0; o < e.length && n[r + o] === e[o]; o++) if (o === e.length - 1) return r
|
|
2449
2453
|
return -1
|
|
2450
2454
|
}
|
|
2455
|
+
function binaryEquals(n, e) {
|
|
2456
|
+
if (n.length !== e.length) return !1
|
|
2457
|
+
for (let t = 0; t < n.length; t++) if (n[t] !== e[t]) return !1
|
|
2458
|
+
return !0
|
|
2459
|
+
}
|
|
2460
|
+
function mod(n, e) {
|
|
2461
|
+
return ((n % e) + e) % e
|
|
2462
|
+
}
|
|
2463
|
+
function modInverse(n, e) {
|
|
2464
|
+
n = mod(n, e)
|
|
2465
|
+
let [t, r] = [0n, 1n],
|
|
2466
|
+
[o, i] = [e, n]
|
|
2467
|
+
for (; i !== 0n; ) {
|
|
2468
|
+
const u = o / i
|
|
2469
|
+
;([t, r] = [r, t - u * r]), ([o, i] = [i, o - u * i])
|
|
2470
|
+
}
|
|
2471
|
+
if (o > 1n) throw new Error('a is not invertible')
|
|
2472
|
+
return t < 0n && (t += e), t
|
|
2473
|
+
}
|
|
2474
|
+
function modPow(n, e, t) {
|
|
2475
|
+
let r = 1n
|
|
2476
|
+
for (n = mod(n, t); e > 0; ) e % 2n === 1n && (r = mod(r * n, t)), (n = mod(n * n, t)), (e = e / 2n)
|
|
2477
|
+
return r
|
|
2478
|
+
}
|
|
2479
|
+
function modSqrt(n, e) {
|
|
2480
|
+
return mod(n, e) === 0n ? 0n : e % 4n === 3n ? modPow(n, (e + 1n) / 4n, e) : null
|
|
2481
|
+
}
|
|
2482
|
+
const SECP256K1_P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,
|
|
2483
|
+
SECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,
|
|
2484
|
+
SECP256K1_X = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,
|
|
2485
|
+
SECP256K1_Y = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n
|
|
2486
|
+
function ellipticDouble(n, e, t) {
|
|
2487
|
+
if (e === 0n) return [0n, 0n]
|
|
2488
|
+
const r = mod(3n * n * n * modInverse(2n * e, t), t),
|
|
2489
|
+
o = mod(r * r - 2n * n, t),
|
|
2490
|
+
i = mod(r * (n - o) - e, t)
|
|
2491
|
+
return [o, i]
|
|
2492
|
+
}
|
|
2493
|
+
function ellipticAdd(n, e, t, r, o) {
|
|
2494
|
+
if (n === 0n && e === 0n) return [t, r]
|
|
2495
|
+
if (t === 0n && r === 0n) return [n, e]
|
|
2496
|
+
if (n === t && e === mod(-r, o)) return [0n, 0n]
|
|
2497
|
+
if (n === t && e === r) return ellipticDouble(n, e, o)
|
|
2498
|
+
const i = mod((r - e) * modInverse(t - n, o), o),
|
|
2499
|
+
u = mod(i * i - n - t, o),
|
|
2500
|
+
s = mod(i * (n - u) - e, o)
|
|
2501
|
+
return [u, s]
|
|
2502
|
+
}
|
|
2503
|
+
function privateKeyToPublicKey(n) {
|
|
2504
|
+
if (n <= 0n || n >= SECP256K1_N) throw new Error('Invalid private key')
|
|
2505
|
+
return doubleAndAdd(SECP256K1_X, SECP256K1_Y, n, SECP256K1_P)
|
|
2506
|
+
}
|
|
2507
|
+
function publicKeyToAddress(n) {
|
|
2508
|
+
const e = new Uint8Array(20),
|
|
2509
|
+
t = keccak256(concatBytes(numberToUint256(n[0], 'BE'), numberToUint256(n[1], 'BE')))
|
|
2510
|
+
return e.set(t.subarray(12)), e
|
|
2511
|
+
}
|
|
2512
|
+
function doubleAndAdd(n, e, t, r) {
|
|
2513
|
+
let o = [0n, 0n],
|
|
2514
|
+
i = [n, e]
|
|
2515
|
+
const u = t.toString(2)
|
|
2516
|
+
for (const s of u)
|
|
2517
|
+
s === '0'
|
|
2518
|
+
? ((i = ellipticAdd(o[0], o[1], i[0], i[1], r)), (o = ellipticDouble(o[0], o[1], r)))
|
|
2519
|
+
: ((o = ellipticAdd(o[0], o[1], i[0], i[1], r)), (i = ellipticDouble(i[0], i[1], r)))
|
|
2520
|
+
return o
|
|
2521
|
+
}
|
|
2522
|
+
function signMessage(n, e, t) {
|
|
2523
|
+
return signHash(uint256ToNumber(keccak256(n), 'BE'), e, t)
|
|
2524
|
+
}
|
|
2525
|
+
function signHash(n, e, t) {
|
|
2526
|
+
if (e <= 0n || e >= SECP256K1_N) throw new Error('Invalid private key')
|
|
2527
|
+
if (
|
|
2528
|
+
(t ||
|
|
2529
|
+
(t = mod(
|
|
2530
|
+
uint256ToNumber(
|
|
2531
|
+
keccak256(concatBytes(keccak256(numberToUint256(e, 'BE')), numberToUint256(n, 'BE'))),
|
|
2532
|
+
'BE'
|
|
2533
|
+
),
|
|
2534
|
+
SECP256K1_N
|
|
2535
|
+
)),
|
|
2536
|
+
t <= 0n || t >= SECP256K1_N)
|
|
2537
|
+
)
|
|
2538
|
+
throw new Error('Invalid nonce')
|
|
2539
|
+
const r = mod(n, SECP256K1_N),
|
|
2540
|
+
o = doubleAndAdd(SECP256K1_X, SECP256K1_Y, t, SECP256K1_P),
|
|
2541
|
+
i = mod(o[0], SECP256K1_N)
|
|
2542
|
+
let u = mod((r + mod(i, SECP256K1_N) * e) * modInverse(t, SECP256K1_N), SECP256K1_N)
|
|
2543
|
+
if (i === 0n || u === 0n) throw new Error('Invalid r or s value')
|
|
2544
|
+
let s = o[1] % 2n === 0n ? 27n : 28n
|
|
2545
|
+
return u > SECP256K1_N / 2n && ((u = SECP256K1_N - u), (s = s === 27n ? 28n : 27n)), [i, u, s]
|
|
2546
|
+
}
|
|
2547
|
+
function recoverPublicKey(n, e, t, r) {
|
|
2548
|
+
const o = modSqrt(mod(e ** 3n + 7n, SECP256K1_P), SECP256K1_P)
|
|
2549
|
+
if (!o) throw new Error('Invalid r: does not correspond to a valid curve point')
|
|
2550
|
+
const i = r === 27n ? 0n : 1n,
|
|
2551
|
+
u = o % 2n === i ? o : SECP256K1_P - o,
|
|
2552
|
+
s = mod(uint256ToNumber(keccak256(n), 'BE'), SECP256K1_N),
|
|
2553
|
+
c = doubleAndAdd(e, u, t, SECP256K1_P),
|
|
2554
|
+
f = doubleAndAdd(SECP256K1_X, SECP256K1_Y, s, SECP256K1_P),
|
|
2555
|
+
l = ellipticAdd(c[0], c[1], f[0], mod(-f[1], SECP256K1_P), SECP256K1_P)
|
|
2556
|
+
return doubleAndAdd(l[0], l[1], modInverse(e, SECP256K1_N), SECP256K1_P)
|
|
2557
|
+
}
|
|
2558
|
+
function verifySignature(n, e, t, r) {
|
|
2559
|
+
const o = mod(uint256ToNumber(keccak256(n), 'BE'), SECP256K1_N),
|
|
2560
|
+
i = modInverse(r, SECP256K1_N),
|
|
2561
|
+
u = mod(o * i, SECP256K1_N),
|
|
2562
|
+
s = mod(t * i, SECP256K1_N),
|
|
2563
|
+
c = doubleAndAdd(SECP256K1_X, SECP256K1_Y, u, SECP256K1_P),
|
|
2564
|
+
f = doubleAndAdd(e[0], e[1], s, SECP256K1_P),
|
|
2565
|
+
l = ellipticAdd(c[0], c[1], f[0], f[1], SECP256K1_P)
|
|
2566
|
+
return t === mod(l[0], SECP256K1_N)
|
|
2567
|
+
}
|
|
2451
2568
|
class Uint8ArrayReader {
|
|
2452
2569
|
constructor(e) {
|
|
2453
2570
|
;(this.cursor = 0), (this.buffer = e)
|
|
@@ -2807,7 +2924,16 @@ class AsyncQueue {
|
|
|
2807
2924
|
commonPrefix,
|
|
2808
2925
|
setBit,
|
|
2809
2926
|
getBit,
|
|
2810
|
-
indexOf: binaryIndexOf
|
|
2927
|
+
indexOf: binaryIndexOf,
|
|
2928
|
+
equals: binaryEquals
|
|
2929
|
+
}),
|
|
2930
|
+
(exports.Elliptic = {
|
|
2931
|
+
privateKeyToPublicKey,
|
|
2932
|
+
publicKeyToAddress,
|
|
2933
|
+
signMessage,
|
|
2934
|
+
signHash,
|
|
2935
|
+
verifySignature,
|
|
2936
|
+
recoverPublicKey
|
|
2811
2937
|
}),
|
|
2812
2938
|
(exports.Random = {
|
|
2813
2939
|
intBetween,
|
package/module.mjs
CHANGED
|
@@ -5,6 +5,7 @@ export const Assertions = utility.Assertions
|
|
|
5
5
|
export const Binary = utility.Binary
|
|
6
6
|
export const Cache = utility.Cache
|
|
7
7
|
export const Dates = utility.Dates
|
|
8
|
+
export const Elliptic = utility.Elliptic
|
|
8
9
|
export const Numbers = utility.Numbers
|
|
9
10
|
export const Objects = utility.Objects
|
|
10
11
|
export const Pagination = utility.Pagination
|