@leofcoin/peernet 1.1.56 → 1.1.58
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/.esdoc.json +10 -10
- package/.eslintrc.json +24 -24
- package/.gitattributes +2 -2
- package/.travis.yml +27 -27
- package/BREAKING_CHANGES.md +34 -34
- package/LICENSE +21 -21
- package/README.md +72 -72
- package/deploy.js +8 -8
- package/exports/browser/browser-store.js +4 -3
- package/exports/browser/identity.d.ts +18 -0
- package/exports/browser/{index-9c85cd32.js → index-8868bdd8.js} +1 -1
- package/exports/browser/messages/chat.d.ts +1 -1
- package/exports/browser/messages/data-response.d.ts +1 -1
- package/exports/browser/messages/dht-response.d.ts +1 -1
- package/exports/browser/messages/dht.d.ts +1 -1
- package/exports/browser/messages/peer-response.d.ts +1 -1
- package/exports/browser/messages/peer.d.ts +1 -1
- package/exports/browser/messages/peernet.d.ts +1 -1
- package/exports/browser/messages/ps.d.ts +1 -1
- package/exports/browser/messages/request.d.ts +1 -1
- package/exports/browser/messages/response.d.ts +1 -1
- package/exports/browser/{messages-b66f5393.js → messages-eb6e5c71.js} +174 -174
- package/exports/browser/{peernet-2797014a.js → peernet-87ea02a4.js} +1402 -1334
- package/exports/browser/peernet.d.ts +43 -23
- package/exports/browser/peernet.js +1 -1
- package/exports/{messages-dc960cb3.js → messages-b9a32987.js} +173 -173
- package/exports/peernet.js +305 -251
- package/exports/src/prompts/password.js +3 -3
- package/exports/store.js +15 -14
- package/exports/types/identity.d.ts +18 -0
- package/exports/types/messages/chat.d.ts +1 -1
- package/exports/types/messages/data-response.d.ts +1 -1
- package/exports/types/messages/dht-response.d.ts +1 -1
- package/exports/types/messages/dht.d.ts +1 -1
- package/exports/types/messages/peer-response.d.ts +1 -1
- package/exports/types/messages/peer.d.ts +1 -1
- package/exports/types/messages/peernet.d.ts +1 -1
- package/exports/types/messages/ps.d.ts +1 -1
- package/exports/types/messages/request.d.ts +1 -1
- package/exports/types/messages/response.d.ts +1 -1
- package/exports/types/peernet.d.ts +43 -23
- package/index.html +19 -19
- package/package.json +70 -69
- package/rollup.config.js +76 -69
- package/src/dht/dht.ts +141 -141
- package/src/discovery/peer-discovery.js +75 -75
- package/src/errors/errors.js +12 -12
- package/src/handlers/data.js +11 -11
- package/src/handlers/message.js +34 -34
- package/src/identity.ts +101 -94
- package/src/messages/chat.js +14 -14
- package/src/messages/data-response.js +14 -14
- package/src/messages/data.js +18 -18
- package/src/messages/dht-response.js +14 -14
- package/src/messages/dht.js +22 -22
- package/src/messages/file-link.js +18 -18
- package/src/messages/file.js +18 -18
- package/src/messages/peer-response.js +14 -14
- package/src/messages/peer.js +13 -13
- package/src/messages/peernet.js +14 -14
- package/src/messages/ps.js +13 -13
- package/src/messages/request.js +14 -14
- package/src/messages/response.js +14 -14
- package/src/messages.js +13 -13
- package/src/peer-info.js +9 -9
- package/src/peernet.ts +848 -753
- package/src/prompts/password/node.js +5 -5
- package/src/proto/chat-message.proto.js +6 -6
- package/src/proto/data-response.proto.js +4 -4
- package/src/proto/data.proto.js +4 -4
- package/src/proto/dht-response.proto.js +4 -4
- package/src/proto/dht.proto.js +4 -4
- package/src/proto/file-link.proto.js +5 -5
- package/src/proto/file.proto.js +5 -5
- package/src/proto/peer-response.proto.js +3 -3
- package/src/proto/peer.proto.js +3 -3
- package/src/proto/peernet.proto.js +7 -7
- package/src/proto/ps.proto.js +4 -4
- package/src/proto/request.proto.js +4 -4
- package/src/proto/response.proto.js +3 -3
- package/src/types.ts +27 -27
- package/src/utils/utils.js +78 -78
- package/test/client.js +14 -14
- package/test/codec.js +56 -56
- package/test/hash.js +13 -13
- package/test/index.js +3 -3
- package/test/lastBlock.js +7 -7
- package/test/messages.js +26 -26
- package/test/peernet.js +17 -17
- package/test.js +64 -64
- package/test2.js +9 -9
- package/test3.js +15 -15
- package/test4.js +7 -7
- package/tsconfig.json +12 -12
|
@@ -209,16 +209,16 @@ const ALPHABET$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
|
209
209
|
const ALPHABET_HEX$1 = '0123456789ABCDEFGHIJKLMNOPQRSTUV';
|
|
210
210
|
const base32 = base$1(ALPHABET$3);
|
|
211
211
|
const base32Hex = base$1(ALPHABET_HEX$1);
|
|
212
|
-
const decode$
|
|
213
|
-
const decodeHex$
|
|
214
|
-
const encode$
|
|
215
|
-
const encodeHex$
|
|
212
|
+
const decode$9 = base32.decode;
|
|
213
|
+
const decodeHex$2 = base32Hex.decode;
|
|
214
|
+
const encode$8 = base32.encode;
|
|
215
|
+
const encodeHex$2 = base32Hex.encode;
|
|
216
216
|
const isBase32 = (string, hex = false) => {
|
|
217
217
|
try {
|
|
218
218
|
if (hex)
|
|
219
|
-
decodeHex$
|
|
219
|
+
decodeHex$2(string);
|
|
220
220
|
else
|
|
221
|
-
decode$
|
|
221
|
+
decode$9(string);
|
|
222
222
|
return true;
|
|
223
223
|
}
|
|
224
224
|
catch (e) {
|
|
@@ -229,10 +229,10 @@ const isBase32Hex = (string) => {
|
|
|
229
229
|
return isBase32(string, true);
|
|
230
230
|
};
|
|
231
231
|
var index$9 = {
|
|
232
|
-
encode: encode$
|
|
233
|
-
decode: decode$
|
|
234
|
-
encodeHex: encodeHex$
|
|
235
|
-
decodeHex: decodeHex$
|
|
232
|
+
encode: encode$8,
|
|
233
|
+
decode: decode$9,
|
|
234
|
+
encodeHex: encodeHex$2,
|
|
235
|
+
decodeHex: decodeHex$2,
|
|
236
236
|
isBase32,
|
|
237
237
|
isBase32Hex
|
|
238
238
|
};
|
|
@@ -241,13 +241,13 @@ var ALPHABET$2 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
|
241
241
|
var ALPHABET_HEX = '0123456789ABCDEFGHJKLMNPQRSTUVabcdefghijklmnopqrstuv';
|
|
242
242
|
var base58 = base$1(ALPHABET$2);
|
|
243
243
|
var base58Hex = base$1(ALPHABET_HEX);
|
|
244
|
-
var encode$
|
|
245
|
-
var decode$
|
|
246
|
-
var encodeHex$
|
|
247
|
-
var decodeHex$
|
|
244
|
+
var encode$7 = base58.encode;
|
|
245
|
+
var decode$8 = base58.decode;
|
|
246
|
+
var encodeHex$1 = base58Hex.encode;
|
|
247
|
+
var decodeHex$1 = base58Hex.decode;
|
|
248
248
|
var isBase58 = function (string) {
|
|
249
249
|
try {
|
|
250
|
-
decode$
|
|
250
|
+
decode$8(string);
|
|
251
251
|
return true;
|
|
252
252
|
}
|
|
253
253
|
catch (e) {
|
|
@@ -256,7 +256,7 @@ var isBase58 = function (string) {
|
|
|
256
256
|
};
|
|
257
257
|
var isBase58Hex = function (string) {
|
|
258
258
|
try {
|
|
259
|
-
decodeHex$
|
|
259
|
+
decodeHex$1(string);
|
|
260
260
|
return true;
|
|
261
261
|
}
|
|
262
262
|
catch (e) {
|
|
@@ -265,12 +265,12 @@ var isBase58Hex = function (string) {
|
|
|
265
265
|
};
|
|
266
266
|
var whatType = function (string) {
|
|
267
267
|
try {
|
|
268
|
-
decode$
|
|
268
|
+
decode$8(string);
|
|
269
269
|
return 'base58';
|
|
270
270
|
}
|
|
271
271
|
catch (e) {
|
|
272
272
|
try {
|
|
273
|
-
decodeHex$
|
|
273
|
+
decodeHex$1(string);
|
|
274
274
|
return 'base58Hex';
|
|
275
275
|
}
|
|
276
276
|
catch (_a) {
|
|
@@ -278,15 +278,21 @@ var whatType = function (string) {
|
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
};
|
|
281
|
-
var base58$1 = { encode: encode$
|
|
281
|
+
var base58$1 = { encode: encode$7, decode: decode$8, isBase58: isBase58, isBase58Hex: isBase58Hex, encodeHex: encodeHex$1, decodeHex: decodeHex$1, whatType: whatType };
|
|
282
|
+
|
|
283
|
+
var isHex = string => /^[A-F0-9]+$/i.test(
|
|
284
|
+
string.startsWith('0x') ?
|
|
285
|
+
string.slice(2) :
|
|
286
|
+
string
|
|
287
|
+
);
|
|
282
288
|
|
|
283
289
|
const MSB$3 = 0x80;
|
|
284
290
|
const REST$3 = 0x7F;
|
|
285
291
|
const MSBALL$1 = ~REST$3;
|
|
286
292
|
const INT$1 = Math.pow(2, 31);
|
|
287
|
-
const encode$
|
|
293
|
+
const encode$6 = (num, out, offset) => {
|
|
288
294
|
if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
|
|
289
|
-
encode$
|
|
295
|
+
encode$6.bytes = 0;
|
|
290
296
|
throw new RangeError('Could not encode varint');
|
|
291
297
|
}
|
|
292
298
|
out = out || [];
|
|
@@ -301,13 +307,13 @@ const encode$7 = (num, out, offset) => {
|
|
|
301
307
|
num >>>= 7;
|
|
302
308
|
}
|
|
303
309
|
out[offset] = num | 0;
|
|
304
|
-
encode$
|
|
310
|
+
encode$6.bytes = offset - oldOffset + 1;
|
|
305
311
|
return out;
|
|
306
312
|
};
|
|
307
313
|
|
|
308
314
|
const MSB$2 = 0x80;
|
|
309
315
|
const REST$2 = 0x7F;
|
|
310
|
-
const decode$
|
|
316
|
+
const decode$7 = (buf, offset) => {
|
|
311
317
|
offset = offset || 0;
|
|
312
318
|
const l = buf.length;
|
|
313
319
|
let counter = offset;
|
|
@@ -316,7 +322,7 @@ const decode$8 = (buf, offset) => {
|
|
|
316
322
|
let b;
|
|
317
323
|
do {
|
|
318
324
|
if (counter >= l || shift > 49) {
|
|
319
|
-
decode$
|
|
325
|
+
decode$7.bytes = 0;
|
|
320
326
|
throw new RangeError('Could not decode varint');
|
|
321
327
|
}
|
|
322
328
|
b = buf[counter++];
|
|
@@ -325,7 +331,7 @@ const decode$8 = (buf, offset) => {
|
|
|
325
331
|
: (b & REST$2) * Math.pow(2, shift);
|
|
326
332
|
shift += 7;
|
|
327
333
|
} while (b >= MSB$2);
|
|
328
|
-
decode$
|
|
334
|
+
decode$7.bytes = counter - offset;
|
|
329
335
|
return result;
|
|
330
336
|
};
|
|
331
337
|
|
|
@@ -350,8 +356,8 @@ var encodingLength$1 = (value) => (value < N1$1 ? 1
|
|
|
350
356
|
: 10);
|
|
351
357
|
|
|
352
358
|
var index$8 = {
|
|
353
|
-
encode: encode$
|
|
354
|
-
decode: decode$
|
|
359
|
+
encode: encode$6,
|
|
360
|
+
decode: decode$7,
|
|
355
361
|
encodingLength: encodingLength$1
|
|
356
362
|
};
|
|
357
363
|
|
|
@@ -401,11 +407,11 @@ var index$6 = (typedArray, prefix) => {
|
|
|
401
407
|
|
|
402
408
|
const ALPHABET$1 = '0123456789ABCDEF';
|
|
403
409
|
const base16 = base$1(ALPHABET$1);
|
|
404
|
-
const decode$
|
|
405
|
-
const encode$
|
|
410
|
+
const decode$6 = base16.decode;
|
|
411
|
+
const encode$5 = base16.encode;
|
|
406
412
|
const isBase16 = (string) => {
|
|
407
413
|
try {
|
|
408
|
-
decode$
|
|
414
|
+
decode$6(string);
|
|
409
415
|
return true;
|
|
410
416
|
}
|
|
411
417
|
catch (e) {
|
|
@@ -413,18 +419,18 @@ const isBase16 = (string) => {
|
|
|
413
419
|
}
|
|
414
420
|
};
|
|
415
421
|
var index$5 = {
|
|
416
|
-
encode: encode$
|
|
417
|
-
decode: decode$
|
|
422
|
+
encode: encode$5,
|
|
423
|
+
decode: decode$6,
|
|
418
424
|
isBase16
|
|
419
425
|
};
|
|
420
426
|
|
|
421
427
|
const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
|
|
422
428
|
const base64 = base$1(ALPHABET);
|
|
423
|
-
const decode$
|
|
424
|
-
const encode$
|
|
429
|
+
const decode$5 = base64.decode;
|
|
430
|
+
const encode$4 = base64.encode;
|
|
425
431
|
const isBase64 = (string) => {
|
|
426
432
|
try {
|
|
427
|
-
decode$
|
|
433
|
+
decode$5(string);
|
|
428
434
|
return true;
|
|
429
435
|
}
|
|
430
436
|
catch (e) {
|
|
@@ -432,8 +438,8 @@ const isBase64 = (string) => {
|
|
|
432
438
|
}
|
|
433
439
|
};
|
|
434
440
|
var index$4 = {
|
|
435
|
-
encode: encode$
|
|
436
|
-
decode: decode$
|
|
441
|
+
encode: encode$4,
|
|
442
|
+
decode: decode$5,
|
|
437
443
|
isBase64
|
|
438
444
|
};
|
|
439
445
|
|
|
@@ -4809,7 +4815,7 @@ const toType = (data) => {
|
|
|
4809
4815
|
return new TextEncoder().encode(data.toString());
|
|
4810
4816
|
throw new Error(`unsuported type ${typeof data || data}`);
|
|
4811
4817
|
};
|
|
4812
|
-
const encode$
|
|
4818
|
+
const encode$3 = (proto, input, compress) => {
|
|
4813
4819
|
const keys = Object.keys(proto);
|
|
4814
4820
|
const values = Object.values(proto);
|
|
4815
4821
|
const set = [];
|
|
@@ -4826,7 +4832,7 @@ const encode$4 = (proto, input, compress) => {
|
|
|
4826
4832
|
}
|
|
4827
4833
|
return index$7(set);
|
|
4828
4834
|
};
|
|
4829
|
-
const decode$
|
|
4835
|
+
const decode$4 = (proto, uint8Array, compressed) => {
|
|
4830
4836
|
let deconcated = index$6(uint8Array);
|
|
4831
4837
|
const output = {};
|
|
4832
4838
|
const keys = Object.keys(proto);
|
|
@@ -4857,558 +4863,120 @@ const decode$5 = (proto, uint8Array, compressed) => {
|
|
|
4857
4863
|
return output;
|
|
4858
4864
|
};
|
|
4859
4865
|
var index$2 = {
|
|
4860
|
-
encode: encode$
|
|
4861
|
-
decode: decode$
|
|
4866
|
+
encode: encode$3,
|
|
4867
|
+
decode: decode$4
|
|
4862
4868
|
};
|
|
4863
4869
|
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
|
|
4874
|
-
purpose with or without fee is hereby granted.
|
|
4875
|
-
|
|
4876
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
4877
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
4878
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
4879
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
4880
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
4881
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
4882
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
4883
|
-
***************************************************************************** */
|
|
4884
|
-
|
|
4885
|
-
function __awaiter(thisArg, _arguments, P, generator) {
|
|
4886
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4887
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4888
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
4889
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
4890
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
4891
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
4892
|
-
});
|
|
4893
|
-
}
|
|
4894
|
-
|
|
4895
|
-
class Mutex {
|
|
4896
|
-
constructor() {
|
|
4897
|
-
this.mutex = Promise.resolve();
|
|
4870
|
+
class BasicInterface {
|
|
4871
|
+
#encoded;
|
|
4872
|
+
#decoded;
|
|
4873
|
+
keys;
|
|
4874
|
+
name;
|
|
4875
|
+
#proto;
|
|
4876
|
+
get encoded() {
|
|
4877
|
+
if (!this.#encoded)
|
|
4878
|
+
this.#encoded = this.encode();
|
|
4879
|
+
return this.#encoded;
|
|
4898
4880
|
}
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
this.mutex = this.mutex.then(() => new Promise(begin));
|
|
4902
|
-
return new Promise((res) => {
|
|
4903
|
-
begin = res;
|
|
4904
|
-
});
|
|
4881
|
+
set encoded(value) {
|
|
4882
|
+
this.#encoded = value;
|
|
4905
4883
|
}
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
return yield Promise.resolve(fn());
|
|
4911
|
-
}
|
|
4912
|
-
finally {
|
|
4913
|
-
unlock();
|
|
4914
|
-
}
|
|
4915
|
-
});
|
|
4884
|
+
get decoded() {
|
|
4885
|
+
if (!this.#decoded)
|
|
4886
|
+
this.#decoded = this.decode();
|
|
4887
|
+
return this.#decoded;
|
|
4916
4888
|
}
|
|
4917
|
-
|
|
4918
|
-
|
|
4919
|
-
/* eslint-disable import/prefer-default-export */
|
|
4920
|
-
/* eslint-disable no-bitwise */
|
|
4921
|
-
var _a;
|
|
4922
|
-
function getGlobal() {
|
|
4923
|
-
if (typeof globalThis !== 'undefined')
|
|
4924
|
-
return globalThis;
|
|
4925
|
-
// eslint-disable-next-line no-restricted-globals
|
|
4926
|
-
if (typeof self !== 'undefined')
|
|
4927
|
-
return self;
|
|
4928
|
-
if (typeof window !== 'undefined')
|
|
4929
|
-
return window;
|
|
4930
|
-
return global;
|
|
4931
|
-
}
|
|
4932
|
-
const globalObject = getGlobal();
|
|
4933
|
-
const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
|
|
4934
|
-
const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
|
|
4935
|
-
function hexCharCodesToInt(a, b) {
|
|
4936
|
-
return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
|
|
4937
|
-
}
|
|
4938
|
-
function writeHexToUInt8(buf, str) {
|
|
4939
|
-
const size = str.length >> 1;
|
|
4940
|
-
for (let i = 0; i < size; i++) {
|
|
4941
|
-
const index = i << 1;
|
|
4942
|
-
buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
|
|
4889
|
+
set decoded(value) {
|
|
4890
|
+
this.#decoded = value;
|
|
4943
4891
|
}
|
|
4944
|
-
|
|
4945
|
-
|
|
4946
|
-
|
|
4947
|
-
return false;
|
|
4892
|
+
set proto(value) {
|
|
4893
|
+
this.#proto = value;
|
|
4894
|
+
this.keys = Object.keys(value);
|
|
4948
4895
|
}
|
|
4949
|
-
|
|
4950
|
-
|
|
4951
|
-
if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
|
|
4952
|
-
return false;
|
|
4953
|
-
}
|
|
4896
|
+
get proto() {
|
|
4897
|
+
return this.#proto;
|
|
4954
4898
|
}
|
|
4955
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
4958
|
-
const digit = '0'.charCodeAt(0);
|
|
4959
|
-
function getDigestHex(tmpBuffer, input, hashLength) {
|
|
4960
|
-
let p = 0;
|
|
4961
|
-
/* eslint-disable no-plusplus */
|
|
4962
|
-
for (let i = 0; i < hashLength; i++) {
|
|
4963
|
-
let nibble = input[i] >>> 4;
|
|
4964
|
-
tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
|
|
4965
|
-
nibble = input[i] & 0xF;
|
|
4966
|
-
tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
|
|
4899
|
+
decode(encoded) {
|
|
4900
|
+
encoded = encoded || this.encoded;
|
|
4901
|
+
return new Object();
|
|
4967
4902
|
}
|
|
4968
|
-
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
const getUInt8Buffer = nodeBuffer !== null
|
|
4972
|
-
? (data) => {
|
|
4973
|
-
if (typeof data === 'string') {
|
|
4974
|
-
const buf = nodeBuffer.from(data, 'utf8');
|
|
4975
|
-
return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
|
|
4976
|
-
}
|
|
4977
|
-
if (nodeBuffer.isBuffer(data)) {
|
|
4978
|
-
return new Uint8Array(data.buffer, data.byteOffset, data.length);
|
|
4979
|
-
}
|
|
4980
|
-
if (ArrayBuffer.isView(data)) {
|
|
4981
|
-
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
4982
|
-
}
|
|
4983
|
-
throw new Error('Invalid data type!');
|
|
4903
|
+
encode(decoded) {
|
|
4904
|
+
decoded = decoded || this.decoded;
|
|
4905
|
+
return new Uint8Array();
|
|
4984
4906
|
}
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
}
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
4907
|
+
// get Codec(): Codec {}
|
|
4908
|
+
protoEncode(data) {
|
|
4909
|
+
// check schema
|
|
4910
|
+
return index$2.encode(this.proto, data, false);
|
|
4911
|
+
}
|
|
4912
|
+
protoDecode(data) {
|
|
4913
|
+
// check schema
|
|
4914
|
+
return index$2.decode(this.proto, data, false);
|
|
4915
|
+
}
|
|
4916
|
+
isHex(string) {
|
|
4917
|
+
return isHex(string);
|
|
4918
|
+
}
|
|
4919
|
+
isBase32(string) {
|
|
4920
|
+
return index$9.isBase32(string);
|
|
4921
|
+
}
|
|
4922
|
+
isBase58(string) {
|
|
4923
|
+
return base58$1.isBase58(string);
|
|
4924
|
+
}
|
|
4925
|
+
fromBs32(encoded) {
|
|
4926
|
+
return this.decode(index$9.decode(encoded));
|
|
4927
|
+
}
|
|
4928
|
+
fromBs58(encoded) {
|
|
4929
|
+
return this.decode(fromBase58(encoded));
|
|
4930
|
+
}
|
|
4931
|
+
async toArray() {
|
|
4932
|
+
const array = [];
|
|
4933
|
+
for await (const value of this.encoded.values()) {
|
|
4934
|
+
array.push(value);
|
|
5006
4935
|
}
|
|
4936
|
+
return array;
|
|
5007
4937
|
}
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5014
|
-
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
|
|
5025
|
-
|
|
4938
|
+
fromString(string) {
|
|
4939
|
+
const array = string.split(',');
|
|
4940
|
+
const arrayLike = array.map(string => Number(string));
|
|
4941
|
+
return this.decode(Uint8Array.from(arrayLike));
|
|
4942
|
+
}
|
|
4943
|
+
fromHex(string) {
|
|
4944
|
+
return this.decode(fromHex(string));
|
|
4945
|
+
}
|
|
4946
|
+
fromArray(array) {
|
|
4947
|
+
return this.decode(Uint8Array.from([...array]));
|
|
4948
|
+
}
|
|
4949
|
+
fromEncoded(encoded) {
|
|
4950
|
+
return this.decode(encoded);
|
|
4951
|
+
}
|
|
4952
|
+
toString() {
|
|
4953
|
+
if (!this.encoded)
|
|
4954
|
+
this.encode();
|
|
4955
|
+
return this.encoded.toString();
|
|
4956
|
+
}
|
|
4957
|
+
toHex() {
|
|
4958
|
+
if (!this.encoded)
|
|
4959
|
+
this.encode();
|
|
4960
|
+
return toHex$2(this.encoded.toString().split(',').map(number => Number(number)));
|
|
4961
|
+
}
|
|
4962
|
+
/**
|
|
4963
|
+
* @return {String} encoded
|
|
4964
|
+
*/
|
|
4965
|
+
toBs32() {
|
|
4966
|
+
if (!this.encoded)
|
|
4967
|
+
this.encode();
|
|
4968
|
+
return toBase32(this.encoded);
|
|
4969
|
+
}
|
|
4970
|
+
/**
|
|
4971
|
+
* @return {String} encoded
|
|
4972
|
+
*/
|
|
4973
|
+
toBs58() {
|
|
4974
|
+
if (!this.encoded)
|
|
4975
|
+
this.encode();
|
|
4976
|
+
return toBase58(this.encoded);
|
|
5026
4977
|
}
|
|
5027
|
-
return bytes;
|
|
5028
4978
|
}
|
|
5029
4979
|
|
|
5030
|
-
const MAX_HEAP = 16 * 1024;
|
|
5031
|
-
const WASM_FUNC_HASH_LENGTH = 4;
|
|
5032
|
-
const wasmMutex = new Mutex();
|
|
5033
|
-
const wasmModuleCache = new Map();
|
|
5034
|
-
function WASMInterface(binary, hashLength) {
|
|
5035
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
5036
|
-
let wasmInstance = null;
|
|
5037
|
-
let memoryView = null;
|
|
5038
|
-
let initialized = false;
|
|
5039
|
-
if (typeof WebAssembly === 'undefined') {
|
|
5040
|
-
throw new Error('WebAssembly is not supported in this environment!');
|
|
5041
|
-
}
|
|
5042
|
-
const writeMemory = (data, offset = 0) => {
|
|
5043
|
-
memoryView.set(data, offset);
|
|
5044
|
-
};
|
|
5045
|
-
const getMemory = () => memoryView;
|
|
5046
|
-
const getExports = () => wasmInstance.exports;
|
|
5047
|
-
const setMemorySize = (totalSize) => {
|
|
5048
|
-
wasmInstance.exports.Hash_SetMemorySize(totalSize);
|
|
5049
|
-
const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
|
|
5050
|
-
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
5051
|
-
memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
|
|
5052
|
-
};
|
|
5053
|
-
const getStateSize = () => {
|
|
5054
|
-
const view = new DataView(wasmInstance.exports.memory.buffer);
|
|
5055
|
-
const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
|
|
5056
|
-
return stateSize;
|
|
5057
|
-
};
|
|
5058
|
-
const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
|
|
5059
|
-
if (!wasmModuleCache.has(binary.name)) {
|
|
5060
|
-
const asm = decodeBase64(binary.data);
|
|
5061
|
-
const promise = WebAssembly.compile(asm);
|
|
5062
|
-
wasmModuleCache.set(binary.name, promise);
|
|
5063
|
-
}
|
|
5064
|
-
const module = yield wasmModuleCache.get(binary.name);
|
|
5065
|
-
wasmInstance = yield WebAssembly.instantiate(module, {
|
|
5066
|
-
// env: {
|
|
5067
|
-
// emscripten_memcpy_big: (dest, src, num) => {
|
|
5068
|
-
// const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
5069
|
-
// const memView = new Uint8Array(memoryBuffer, 0);
|
|
5070
|
-
// memView.set(memView.subarray(src, src + num), dest);
|
|
5071
|
-
// },
|
|
5072
|
-
// print_memory: (offset, len) => {
|
|
5073
|
-
// const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
5074
|
-
// const memView = new Uint8Array(memoryBuffer, 0);
|
|
5075
|
-
// console.log('print_int32', memView.subarray(offset, offset + len));
|
|
5076
|
-
// },
|
|
5077
|
-
// },
|
|
5078
|
-
});
|
|
5079
|
-
// wasmInstance.exports._start();
|
|
5080
|
-
}));
|
|
5081
|
-
const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
|
|
5082
|
-
if (!wasmInstance) {
|
|
5083
|
-
yield loadWASMPromise;
|
|
5084
|
-
}
|
|
5085
|
-
const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
|
|
5086
|
-
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
5087
|
-
memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
|
|
5088
|
-
});
|
|
5089
|
-
const init = (bits = null) => {
|
|
5090
|
-
initialized = true;
|
|
5091
|
-
wasmInstance.exports.Hash_Init(bits);
|
|
5092
|
-
};
|
|
5093
|
-
const updateUInt8Array = (data) => {
|
|
5094
|
-
let read = 0;
|
|
5095
|
-
while (read < data.length) {
|
|
5096
|
-
const chunk = data.subarray(read, read + MAX_HEAP);
|
|
5097
|
-
read += chunk.length;
|
|
5098
|
-
memoryView.set(chunk);
|
|
5099
|
-
wasmInstance.exports.Hash_Update(chunk.length);
|
|
5100
|
-
}
|
|
5101
|
-
};
|
|
5102
|
-
const update = (data) => {
|
|
5103
|
-
if (!initialized) {
|
|
5104
|
-
throw new Error('update() called before init()');
|
|
5105
|
-
}
|
|
5106
|
-
const Uint8Buffer = getUInt8Buffer(data);
|
|
5107
|
-
updateUInt8Array(Uint8Buffer);
|
|
5108
|
-
};
|
|
5109
|
-
const digestChars = new Uint8Array(hashLength * 2);
|
|
5110
|
-
const digest = (outputType, padding = null) => {
|
|
5111
|
-
if (!initialized) {
|
|
5112
|
-
throw new Error('digest() called before init()');
|
|
5113
|
-
}
|
|
5114
|
-
initialized = false;
|
|
5115
|
-
wasmInstance.exports.Hash_Final(padding);
|
|
5116
|
-
if (outputType === 'binary') {
|
|
5117
|
-
// the data is copied to allow GC of the original memory object
|
|
5118
|
-
return memoryView.slice(0, hashLength);
|
|
5119
|
-
}
|
|
5120
|
-
return getDigestHex(digestChars, memoryView, hashLength);
|
|
5121
|
-
};
|
|
5122
|
-
const save = () => {
|
|
5123
|
-
if (!initialized) {
|
|
5124
|
-
throw new Error('save() can only be called after init() and before digest()');
|
|
5125
|
-
}
|
|
5126
|
-
const stateOffset = wasmInstance.exports.Hash_GetState();
|
|
5127
|
-
const stateLength = getStateSize();
|
|
5128
|
-
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
5129
|
-
const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
|
|
5130
|
-
// prefix is 4 bytes from SHA1 hash of the WASM binary
|
|
5131
|
-
// it is used to detect incompatible internal states between different versions of hash-wasm
|
|
5132
|
-
const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
|
|
5133
|
-
writeHexToUInt8(prefixedState, binary.hash);
|
|
5134
|
-
prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
|
|
5135
|
-
return prefixedState;
|
|
5136
|
-
};
|
|
5137
|
-
const load = (state) => {
|
|
5138
|
-
if (!(state instanceof Uint8Array)) {
|
|
5139
|
-
throw new Error('load() expects an Uint8Array generated by save()');
|
|
5140
|
-
}
|
|
5141
|
-
const stateOffset = wasmInstance.exports.Hash_GetState();
|
|
5142
|
-
const stateLength = getStateSize();
|
|
5143
|
-
const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
|
|
5144
|
-
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
5145
|
-
if (state.length !== overallLength) {
|
|
5146
|
-
throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
|
|
5147
|
-
}
|
|
5148
|
-
if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
|
|
5149
|
-
throw new Error('This state was written by an incompatible hash implementation');
|
|
5150
|
-
}
|
|
5151
|
-
const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
|
|
5152
|
-
new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
|
|
5153
|
-
initialized = true;
|
|
5154
|
-
};
|
|
5155
|
-
const isDataShort = (data) => {
|
|
5156
|
-
if (typeof data === 'string') {
|
|
5157
|
-
// worst case is 4 bytes / char
|
|
5158
|
-
return data.length < MAX_HEAP / 4;
|
|
5159
|
-
}
|
|
5160
|
-
return data.byteLength < MAX_HEAP;
|
|
5161
|
-
};
|
|
5162
|
-
let canSimplify = isDataShort;
|
|
5163
|
-
switch (binary.name) {
|
|
5164
|
-
case 'argon2':
|
|
5165
|
-
case 'scrypt':
|
|
5166
|
-
canSimplify = () => true;
|
|
5167
|
-
break;
|
|
5168
|
-
case 'blake2b':
|
|
5169
|
-
case 'blake2s':
|
|
5170
|
-
// if there is a key at blake2 then cannot simplify
|
|
5171
|
-
canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
|
|
5172
|
-
break;
|
|
5173
|
-
case 'blake3':
|
|
5174
|
-
// if there is a key at blake3 then cannot simplify
|
|
5175
|
-
canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
|
|
5176
|
-
break;
|
|
5177
|
-
case 'xxhash64': // cannot simplify
|
|
5178
|
-
case 'xxhash3':
|
|
5179
|
-
case 'xxhash128':
|
|
5180
|
-
canSimplify = () => false;
|
|
5181
|
-
break;
|
|
5182
|
-
}
|
|
5183
|
-
// shorthand for (init + update + digest) for better performance
|
|
5184
|
-
const calculate = (data, initParam = null, digestParam = null) => {
|
|
5185
|
-
if (!canSimplify(data, initParam)) {
|
|
5186
|
-
init(initParam);
|
|
5187
|
-
update(data);
|
|
5188
|
-
return digest('hex', digestParam);
|
|
5189
|
-
}
|
|
5190
|
-
const buffer = getUInt8Buffer(data);
|
|
5191
|
-
memoryView.set(buffer);
|
|
5192
|
-
wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
|
|
5193
|
-
return getDigestHex(digestChars, memoryView, hashLength);
|
|
5194
|
-
};
|
|
5195
|
-
yield setupInterface();
|
|
5196
|
-
return {
|
|
5197
|
-
getMemory,
|
|
5198
|
-
writeMemory,
|
|
5199
|
-
getExports,
|
|
5200
|
-
setMemorySize,
|
|
5201
|
-
init,
|
|
5202
|
-
update,
|
|
5203
|
-
digest,
|
|
5204
|
-
save,
|
|
5205
|
-
load,
|
|
5206
|
-
calculate,
|
|
5207
|
-
hashLength,
|
|
5208
|
-
};
|
|
5209
|
-
});
|
|
5210
|
-
}
|
|
5211
|
-
|
|
5212
|
-
new Mutex();
|
|
5213
|
-
|
|
5214
|
-
new Mutex();
|
|
5215
|
-
|
|
5216
|
-
new Mutex();
|
|
5217
|
-
|
|
5218
|
-
new Mutex();
|
|
5219
|
-
|
|
5220
|
-
new Mutex();
|
|
5221
|
-
|
|
5222
|
-
new Mutex();
|
|
5223
|
-
|
|
5224
|
-
new Mutex();
|
|
5225
|
-
|
|
5226
|
-
new Mutex();
|
|
5227
|
-
|
|
5228
|
-
new Mutex();
|
|
5229
|
-
|
|
5230
|
-
var name$b = "sha3";
|
|
5231
|
-
var data$b = "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";
|
|
5232
|
-
var hash$b = "ec266d91";
|
|
5233
|
-
var wasmJson$b = {
|
|
5234
|
-
name: name$b,
|
|
5235
|
-
data: data$b,
|
|
5236
|
-
hash: hash$b
|
|
5237
|
-
};
|
|
5238
|
-
|
|
5239
|
-
new Mutex();
|
|
5240
|
-
|
|
5241
|
-
new Mutex();
|
|
5242
|
-
function validateBits(bits) {
|
|
5243
|
-
if (![224, 256, 384, 512].includes(bits)) {
|
|
5244
|
-
return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
|
|
5245
|
-
}
|
|
5246
|
-
return null;
|
|
5247
|
-
}
|
|
5248
|
-
/**
|
|
5249
|
-
* Creates a new Keccak hash instance
|
|
5250
|
-
* @param bits Number of output bits. Valid values: 224, 256, 384, 512
|
|
5251
|
-
*/
|
|
5252
|
-
function createKeccak(bits = 512) {
|
|
5253
|
-
if (validateBits(bits)) {
|
|
5254
|
-
return Promise.reject(validateBits(bits));
|
|
5255
|
-
}
|
|
5256
|
-
const outputSize = bits / 8;
|
|
5257
|
-
return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
|
|
5258
|
-
wasm.init(bits);
|
|
5259
|
-
const obj = {
|
|
5260
|
-
init: () => { wasm.init(bits); return obj; },
|
|
5261
|
-
update: (data) => { wasm.update(data); return obj; },
|
|
5262
|
-
digest: (outputType) => wasm.digest(outputType, 0x01),
|
|
5263
|
-
save: () => wasm.save(),
|
|
5264
|
-
load: (data) => { wasm.load(data); return obj; },
|
|
5265
|
-
blockSize: 200 - 2 * outputSize,
|
|
5266
|
-
digestSize: outputSize,
|
|
5267
|
-
};
|
|
5268
|
-
return obj;
|
|
5269
|
-
});
|
|
5270
|
-
}
|
|
5271
|
-
|
|
5272
|
-
new Mutex();
|
|
5273
|
-
|
|
5274
|
-
new Mutex();
|
|
5275
|
-
|
|
5276
|
-
var name$9 = "sha512";
|
|
5277
|
-
var data$9 = "AGFzbQEAAAABEQRgAAF/YAF/AGACf38AYAAAAwgHAAEBAgMAAgQFAXABAQEFBAEBAgIGDgJ/AUHQigULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCvhnBwUAQYAJC5sCAEEAQgA3A4CKAUEAQTBBwAAgAEGAA0YiABs2AsiKAUEAQqSf6ffbg9LaxwBC+cL4m5Gjs/DbACAAGzcDwIoBQQBCp5/mp9bBi4ZbQuv6htq/tfbBHyAAGzcDuIoBQQBCkargwvbQktqOf0Kf2PnZwpHagpt/IAAbNwOwigFBAEKxloD+/8zJmecAQtGFmu/6z5SH0QAgABs3A6iKAUEAQrmyubiPm/uXFULx7fT4paf9p6V/IAAbNwOgigFBAEKXusODo6vArJF/Qqvw0/Sv7ry3PCAAGzcDmIoBQQBCh6rzs6Olis3iAEK7zqqm2NDrs7t/IAAbNwOQigFBAELYvZaI3Kvn3UtCiJLznf/M+YTqACAAGzcDiIoBC4MCAgF+Bn9BAEEAKQOAigEiASAArXw3A4CKAQJAAkACQCABp0H/AHEiAg0AQYAJIQIMAQsCQCAAQYABIAJrIgMgAyAASyIEGyIFRQ0AIAJBgIkBaiEGQQAhAkEAIQcDQCAGIAJqIAJBgAlqLQAAOgAAIAUgB0EBaiIHQf8BcSICSw0ACwsgBA0BQYiKAUGAiQEQAyAAIANrIQAgA0GACWohAgsCQCAAQYABSQ0AA0BBiIoBIAIQAyACQYABaiECIABBgH9qIgBB/wBLDQALCyAARQ0AQQAhB0EAIQUDQCAHQYCJAWogAiAHai0AADoAACAAIAVBAWoiBUH/AXEiB0sNAAsLC9xXAVZ+IAAgASkDCCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIDQjiJIANCB4iFIANCP4mFIAEpAwAiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiBHwgASkDSCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIFfCABKQNwIgJCOIYgAkIohkKAgICAgIDA/wCDhCACQhiGQoCAgICA4D+DIAJCCIZCgICAgPAfg4SEIAJCCIhCgICA+A+DIAJCGIhCgID8B4OEIAJCKIhCgP4DgyACQjiIhISEIgZCA4kgBkIGiIUgBkItiYV8IgdCOIkgB0IHiIUgB0I/iYUgASkDeCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIIfCAFQjiJIAVCB4iFIAVCP4mFIAEpA0AiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiCXwgASkDECICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIKQjiJIApCB4iFIApCP4mFIAN8IAEpA1AiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiC3wgCEIDiSAIQgaIhSAIQi2JhXwiDHwgASkDOCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCINQjiJIA1CB4iFIA1CP4mFIAEpAzAiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiDnwgCHwgASkDKCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIPQjiJIA9CB4iFIA9CP4mFIAEpAyAiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiEHwgASkDaCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIRfCABKQMYIgJCOIYgAkIohkKAgICAgIDA/wCDhCACQhiGQoCAgICA4D+DIAJCCIZCgICAgPAfg4SEIAJCCIhCgICA+A+DIAJCGIhCgID8B4OEIAJCKIhCgP4DgyACQjiIhISEIhJCOIkgEkIHiIUgEkI/iYUgCnwgASkDWCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCITfCAHQgOJIAdCBoiFIAdCLYmFfCIUQgOJIBRCBoiFIBRCLYmFfCIVQgOJIBVCBoiFIBVCLYmFfCIWQgOJIBZCBoiFIBZCLYmFfCIXfCAGQjiJIAZCB4iFIAZCP4mFIBF8IBZ8IAEpA2AiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiGEI4iSAYQgeIhSAYQj+JhSATfCAVfCALQjiJIAtCB4iFIAtCP4mFIAV8IBR8IAlCOIkgCUIHiIUgCUI/iYUgDXwgB3wgDkI4iSAOQgeIhSAOQj+JhSAPfCAGfCAQQjiJIBBCB4iFIBBCP4mFIBJ8IBh8IAxCA4kgDEIGiIUgDEItiYV8IhlCA4kgGUIGiIUgGUItiYV8IhpCA4kgGkIGiIUgGkItiYV8IhtCA4kgG0IGiIUgG0ItiYV8IhxCA4kgHEIGiIUgHEItiYV8Ih1CA4kgHUIGiIUgHUItiYV8Ih5CA4kgHkIGiIUgHkItiYV8Ih9COIkgH0IHiIUgH0I/iYUgCEI4iSAIQgeIhSAIQj+JhSAGfCAbfCARQjiJIBFCB4iFIBFCP4mFIBh8IBp8IBNCOIkgE0IHiIUgE0I/iYUgC3wgGXwgF0IDiSAXQgaIhSAXQi2JhXwiIEIDiSAgQgaIhSAgQi2JhXwiIUIDiSAhQgaIhSAhQi2JhXwiInwgF0I4iSAXQgeIhSAXQj+JhSAbfCAMQjiJIAxCB4iFIAxCP4mFIAd8IBx8ICJCA4kgIkIGiIUgIkItiYV8IiN8IBZCOIkgFkIHiIUgFkI/iYUgGnwgInwgFUI4iSAVQgeIhSAVQj+JhSAZfCAhfCAUQjiJIBRCB4iFIBRCP4mFIAx8ICB8IB9CA4kgH0IGiIUgH0ItiYV8IiRCA4kgJEIGiIUgJEItiYV8IiVCA4kgJUIGiIUgJUItiYV8IiZCA4kgJkIGiIUgJkItiYV8Iid8IB5COIkgHkIHiIUgHkI/iYUgIXwgJnwgHUI4iSAdQgeIhSAdQj+JhSAgfCAlfCAcQjiJIBxCB4iFIBxCP4mFIBd8ICR8IBtCOIkgG0IHiIUgG0I/iYUgFnwgH3wgGkI4iSAaQgeIhSAaQj+JhSAVfCAefCAZQjiJIBlCB4iFIBlCP4mFIBR8IB18ICNCA4kgI0IGiIUgI0ItiYV8IihCA4kgKEIGiIUgKEItiYV8IilCA4kgKUIGiIUgKUItiYV8IipCA4kgKkIGiIUgKkItiYV8IitCA4kgK0IGiIUgK0ItiYV8IixCA4kgLEIGiIUgLEItiYV8Ii1CA4kgLUIGiIUgLUItiYV8Ii5COIkgLkIHiIUgLkI/iYUgIkI4iSAiQgeIhSAiQj+JhSAefCAqfCAhQjiJICFCB4iFICFCP4mFIB18ICl8ICBCOIkgIEIHiIUgIEI/iYUgHHwgKHwgJ0IDiSAnQgaIhSAnQi2JhXwiL0IDiSAvQgaIhSAvQi2JhXwiMEIDiSAwQgaIhSAwQi2JhXwiMXwgJ0I4iSAnQgeIhSAnQj+JhSAqfCAjQjiJICNCB4iFICNCP4mFIB98ICt8IDFCA4kgMUIGiIUgMUItiYV8IjJ8ICZCOIkgJkIHiIUgJkI/iYUgKXwgMXwgJUI4iSAlQgeIhSAlQj+JhSAofCAwfCAkQjiJICRCB4iFICRCP4mFICN8IC98IC5CA4kgLkIGiIUgLkItiYV8IjNCA4kgM0IGiIUgM0ItiYV8IjRCA4kgNEIGiIUgNEItiYV8IjVCA4kgNUIGiIUgNUItiYV8IjZ8IC1COIkgLUIHiIUgLUI/iYUgMHwgNXwgLEI4iSAsQgeIhSAsQj+JhSAvfCA0fCArQjiJICtCB4iFICtCP4mFICd8IDN8ICpCOIkgKkIHiIUgKkI/iYUgJnwgLnwgKUI4iSApQgeIhSApQj+JhSAlfCAtfCAoQjiJIChCB4iFIChCP4mFICR8ICx8IDJCA4kgMkIGiIUgMkItiYV8IjdCA4kgN0IGiIUgN0ItiYV8IjhCA4kgOEIGiIUgOEItiYV8IjlCA4kgOUIGiIUgOUItiYV8IjpCA4kgOkIGiIUgOkItiYV8IjtCA4kgO0IGiIUgO0ItiYV8IjxCA4kgPEIGiIUgPEItiYV8Ij1COIkgPUIHiIUgPUI/iYUgMUI4iSAxQgeIhSAxQj+JhSAtfCA5fCAwQjiJIDBCB4iFIDBCP4mFICx8IDh8IC9COIkgL0IHiIUgL0I/iYUgK3wgN3wgNkIDiSA2QgaIhSA2Qi2JhXwiPkIDiSA+QgaIhSA+Qi2JhXwiP0IDiSA/QgaIhSA/Qi2JhXwiQHwgNkI4iSA2QgeIhSA2Qj+JhSA5fCAyQjiJIDJCB4iFIDJCP4mFIC58IDp8IEBCA4kgQEIGiIUgQEItiYV8IkF8IDVCOIkgNUIHiIUgNUI/iYUgOHwgQHwgNEI4iSA0QgeIhSA0Qj+JhSA3fCA/fCAzQjiJIDNCB4iFIDNCP4mFIDJ8ID58ID1CA4kgPUIGiIUgPUItiYV8IkJCA4kgQkIGiIUgQkItiYV8IkNCA4kgQ0IGiIUgQ0ItiYV8IkRCA4kgREIGiIUgREItiYV8IkV8IDxCOIkgPEIHiIUgPEI/iYUgP3wgRHwgO0I4iSA7QgeIhSA7Qj+JhSA+fCBDfCA6QjiJIDpCB4iFIDpCP4mFIDZ8IEJ8IDlCOIkgOUIHiIUgOUI/iYUgNXwgPXwgOEI4iSA4QgeIhSA4Qj+JhSA0fCA8fCA3QjiJIDdCB4iFIDdCP4mFIDN8IDt8IEFCA4kgQUIGiIUgQUItiYV8IkZCA4kgRkIGiIUgRkItiYV8IkdCA4kgR0IGiIUgR0ItiYV8IkhCA4kgSEIGiIUgSEItiYV8IklCA4kgSUIGiIUgSUItiYV8IkpCA4kgSkIGiIUgSkItiYV8IktCA4kgS0IGiIUgS0ItiYV8IkwgSiBCIDwgOiA4IDIgMCAnICUgHyAdIBsgGSAIIBMgDSAAKQMgIk0gEnwgACkDKCJOIAp8IAApAzAiTyADfCAAKQM4IlAgTUIyiSBNQi6JhSBNQheJhXwgTyBOhSBNgyBPhXwgBHxCotyiuY3zi8XCAHwiUSAAKQMYIlJ8IgMgTiBNhYMgToV8IANCMokgA0IuiYUgA0IXiYV8Qs3LvZ+SktGb8QB8IlMgACkDECJUfCIKIAMgTYWDIE2FfCAKQjKJIApCLomFIApCF4mFfEKv9rTi/vm+4LV/fCJVIAApAwgiVnwiEiAKIAOFgyADhXwgEkIyiSASQi6JhSASQheJhXxCvLenjNj09tppfCJXIAApAwAiAnwiBHwgDiASfCAPIAp8IAMgEHwgBCASIAqFgyAKhXwgBEIyiSAEQi6JhSAEQheJhXxCuOqimr/LsKs5fCIQIFQgViAChYMgViACg4UgAkIkiSACQh6JhSACQhmJhXwgUXwiA3wiDSAEIBKFgyAShXwgDUIyiSANQi6JhSANQheJhXxCmaCXsJu+xPjZAHwiUSADQiSJIANCHomFIANCGYmFIAMgAoUgVoMgAyACg4V8IFN8Igp8Ig4gDSAEhYMgBIV8IA5CMokgDkIuiYUgDkIXiYV8Qpuf5fjK1OCfkn98IlMgCkIkiSAKQh6JhSAKQhmJhSAKIAOFIAKDIAogA4OFfCBVfCISfCIEIA4gDYWDIA2FfCAEQjKJIARCLomFIARCF4mFfEKYgrbT3dqXjqt/fCJVIBJCJIkgEkIeiYUgEkIZiYUgEiAKhSADgyASIAqDhXwgV3wiA3wiD3wgCyAEfCAFIA58IAkgDXwgDyAEIA6FgyAOhXwgD0IyiSAPQi6JhSAPQheJhXxCwoSMmIrT6oNYfCIFIANCJIkgA0IeiYUgA0IZiYUgAyAShSAKgyADIBKDhXwgEHwiCnwiDSAPIASFgyAEhXwgDUIyiSANQi6JhSANQheJhXxCvt/Bq5Tg1sESfCILIApCJIkgCkIeiYUgCkIZiYUgCiADhSASgyAKIAODhXwgUXwiEnwiBCANIA+FgyAPhXwgBEIyiSAEQi6JhSAEQheJhXxCjOWS9+S34ZgkfCITIBJCJIkgEkIeiYUgEkIZiYUgEiAKhSADgyASIAqDhXwgU3wiA3wiDiAEIA2FgyANhXwgDkIyiSAOQi6JhSAOQheJhXxC4un+r724n4bVAHwiCSADQiSJIANCHomFIANCGYmFIAMgEoUgCoMgAyASg4V8IFV8Igp8Ig98IAYgDnwgESAEfCAYIA18IA8gDiAEhYMgBIV8IA9CMokgD0IuiYUgD0IXiYV8Qu+S7pPPrpff8gB8IhEgCkIkiSAKQh6JhSAKQhmJhSAKIAOFIBKDIAogA4OFfCAFfCIGfCISIA8gDoWDIA6FfCASQjKJIBJCLomFIBJCF4mFfEKxrdrY47+s74B/fCIOIAZCJIkgBkIeiYUgBkIZiYUgBiAKhSADgyAGIAqDhXwgC3wiCHwiBCASIA+FgyAPhXwgBEIyiSAEQi6JhSAEQheJhXxCtaScrvLUge6bf3wiDyAIQiSJIAhCHomFIAhCGYmFIAggBoUgCoMgCCAGg4V8IBN8IgN8IgogBCAShYMgEoV8IApCMokgCkIuiYUgCkIXiYV8QpTNpPvMrvzNQXwiBSADQiSJIANCHomFIANCGYmFIAMgCIUgBoMgAyAIg4V8IAl8IgZ8Ig18IBQgCnwgDCAEfCANIAogBIWDIASFIBJ8IAd8IA1CMokgDUIuiYUgDUIXiYV8QtKVxfeZuNrNZHwiEiAGQiSJIAZCHomFIAZCGYmFIAYgA4UgCIMgBiADg4V8IBF8Igd8IgwgDSAKhYMgCoV8IAxCMokgDEIuiYUgDEIXiYV8QuPLvMLj8JHfb3wiCiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgA4MgByAGg4V8IA58Igh8IhQgDCANhYMgDYV8IBRCMokgFEIuiYUgFEIXiYV8QrWrs9zouOfgD3wiBCAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IA98IgZ8IhkgFCAMhYMgDIV8IBlCMokgGUIuiYUgGUIXiYV8QuW4sr3HuaiGJHwiDSAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IAV8Igd8IgN8IBYgGXwgGiAUfCAMIBV8IAMgGSAUhYMgFIV8IANCMokgA0IuiYUgA0IXiYV8QvWErMn1jcv0LXwiGiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBJ8Igh8IgwgAyAZhYMgGYV8IAxCMokgDEIuiYUgDEIXiYV8QoPJm/WmlaG6ygB8IhkgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAKfCIGfCIUIAwgA4WDIAOFfCAUQjKJIBRCLomFIBRCF4mFfELU94fqy7uq2NwAfCIbIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgBHwiB3wiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxCtafFmKib4vz2AHwiAyAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IA18Igh8IhZ8ICAgFXwgHCAUfCAXIAx8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qqu/m/OuqpSfmH98IhcgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAafCIGfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKQ5NDt0s3xmKh/fCIaIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgGXwiB3wiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxCv8Lsx4n5yYGwf3wiGSAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBt8Igh8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QuSdvPf7+N+sv398IhsgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCADfCIGfCIWfCAiIBV8IB4gFHwgISAMfCAWIBUgFIWDIBSFfCAWQjKJIBZCLomFIBZCF4mFfELCn6Lts/6C8EZ8IhwgBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAXfCIHfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKlzqqY+ajk01V8IhcgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAafCIIfCIUIAwgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELvhI6AnuqY5QZ8IhogCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAZfCIGfCIVIBQgDIWDIAyFfCAVQjKJIBVCLomFIBVCF4mFfELw3LnQ8KzKlBR8IhkgBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAbfCIHfCIWfCAoIBV8ICQgFHwgFiAVIBSFgyAUhSAMfCAjfCAWQjKJIBZCLomFIBZCF4mFfEL838i21NDC2yd8IhsgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAcfCIIfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKmkpvhhafIjS58IhwgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAXfCIGfCIUIAwgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELt1ZDWxb+bls0AfCIXIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgGnwiB3wiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxC3+fW7Lmig5zTAHwiGiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBl8Igh8IhZ8ICogFXwgJiAUfCAMICl8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qt7Hvd3I6pyF5QB8IhkgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAbfCIGfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKo5d7js9eCtfYAfCIbIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgHHwiB3wiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxC5t22v+SlsuGBf3wiHCAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBd8Igh8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QrvqiKTRkIu5kn98IhcgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAafCIGfCIWfCAsIBV8IC8gFHwgKyAMfCAWIBUgFIWDIBSFfCAWQjKJIBZCLomFIBZCF4mFfELkhsTnlJT636J/fCIaIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgGXwiB3wiDCAWIBWFgyAVhXwgDEIyiSAMQi6JhSAMQheJhXxCgeCI4rvJmY2of3wiGSAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBt8Igh8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QpGv4oeN7uKlQnwiGyAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBx8IgZ8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QrD80rKwtJS2R3wiHCAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBd8Igd8IhZ8IC4gFXwgMSAUfCAtIAx8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qpikvbedg7rJUXwiFyAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBp8Igh8IgwgFiAVhYMgFYV8IAxCMokgDEIuiYUgDEIXiYV8QpDSlqvFxMHMVnwiGiAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBl8IgZ8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QqrAxLvVsI2HdHwiGSAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBt8Igd8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8Qrij75WDjqi1EHwiGyAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBx8Igh8IhZ8IDQgFXwgNyAUfCAWIBUgFIWDIBSFIAx8IDN8IBZCMokgFkIuiYUgFkIXiYV8Qsihy8brorDSGXwiHCAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBd8IgZ8IgwgFiAVhYMgFYV8IAxCMokgDEIuiYUgDEIXiYV8QtPWhoqFgdubHnwiFyAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBp8Igd8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QpnXu/zN6Z2kJ3wiGiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBl8Igh8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QqiR7Yzelq/YNHwiGSAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBt8IgZ8IhZ8IDYgFXwgOSAUfCAMIDV8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8QuO0pa68loOOOXwiGyAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBx8Igd8IgwgFiAVhYMgFYV8IAxCMokgDEIuiYUgDEIXiYV8QsuVhpquyarszgB8IhwgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAXfCIIfCIUIAwgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELzxo+798myztsAfCIXIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgGnwiBnwiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxCo/HKtb3+m5foAHwiGiAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBl8Igd8IhZ8ID8gFXwgOyAUfCA+IAx8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qvzlvu/l3eDH9AB8IhkgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAbfCIIfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfELg3tyY9O3Y0vgAfCIbIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgHHwiBnwiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxC8tbCj8qCnuSEf3wiHCAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBd8Igd8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QuzzkNOBwcDjjH98IhcgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAafCIIfCIWfCBBIBV8ID0gFHwgQCAMfCAWIBUgFIWDIBSFfCAWQjKJIBZCLomFIBZCF4mFfEKovIybov+/35B/fCIaIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgGXwiBnwiDCAWIBWFgyAVhXwgDEIyiSAMQi6JhSAMQheJhXxC6fuK9L2dm6ikf3wiGSAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBt8Igd8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QpXymZb7/uj8vn98IhsgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAcfCIIfCIVIBQgDIWDIAyFfCAVQjKJIBVCLomFIBVCF4mFfEKrpsmbrp7euEZ8IhwgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAXfCIGfCIWIBUgFIWDIBSFIAx8IEZ8IBZCMokgFkIuiYUgFkIXiYV8QpzDmdHu2c+TSnwiFyAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBp8Igd8IgwgSHwgRCAWfCBHIBV8IEMgFHwgDCAWIBWFgyAVhXwgDEIyiSAMQi6JhSAMQheJhXxCh4SDjvKYrsNRfCIaIAdCJIkgB0IeiYUgB0IZiYUgByAGhSAIgyAHIAaDhXwgGXwiCHwiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxCntaD7+y6n+1qfCIdIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgG3wiBnwiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxC+KK78/7v0751fCIbIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgHHwiB3wiDCAVIBSFgyAUhXwgDEIyiSAMQi6JhSAMQheJhXxCut/dkKf1mfgGfCIcIAdCJIkgB0IeiYUgB0IZiYUgByAGhSAIgyAHIAaDhXwgF3wiCHwiFnwgPkI4iSA+QgeIhSA+Qj+JhSA6fCBGfCBFQgOJIEVCBoiFIEVCLYmFfCIZIAx8IEkgFXwgRSAUfCAWIAwgFYWDIBWFfCAWQjKJIBZCLomFIBZCF4mFfEKmsaKW2rjfsQp8Ih4gCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAafCIGfCIUIBYgDIWDIAyFfCAUQjKJIBRCLomFIBRCF4mFfEKum+T3y4DmnxF8Ih8gBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAdfCIHfCIMIBQgFoWDIBaFfCAMQjKJIAxCLomFIAxCF4mFfEKbjvGY0ebCuBt8Ih0gB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAbfCIIfCIVIAwgFIWDIBSFfCAVQjKJIBVCLomFIBVCF4mFfEKE+5GY0v7d7Sh8IhsgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAcfCIGfCIWfCBAQjiJIEBCB4iFIEBCP4mFIDx8IEh8ID9COIkgP0IHiIUgP0I/iYUgO3wgR3wgGUIDiSAZQgaIhSAZQi2JhXwiF0IDiSAXQgaIhSAXQi2JhXwiGiAVfCBLIAx8IBcgFHwgFiAVIAyFgyAMhXwgFkIyiSAWQi6JhSAWQheJhXxCk8mchrTvquUyfCIMIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgHnwiB3wiFCAWIBWFgyAVhXwgFEIyiSAUQi6JhSAUQheJhXxCvP2mrqHBr888fCIcIAdCJIkgB0IeiYUgB0IZiYUgByAGhSAIgyAHIAaDhXwgH3wiCHwiFSAUIBaFgyAWhXwgFUIyiSAVQi6JhSAVQheJhXxCzJrA4Mn42Y7DAHwiHiAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IB18IgZ8IhYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8QraF+dnsl/XizAB8Ih0gBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAbfCIHfCIXIFB8NwM4IAAgUiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IAx8IghCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgHHwiBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAefCIHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IB18Igx8NwMYIAAgTyBBQjiJIEFCB4iFIEFCP4mFID18IEl8IBpCA4kgGkIGiIUgGkItiYV8IhogFHwgFyAWIBWFgyAVhXwgF0IyiSAXQi6JhSAXQheJhXxCqvyV48+zyr/ZAHwiGyAIfCIUfDcDMCAAIFQgDEIkiSAMQh6JhSAMQhmJhSAMIAeFIAaDIAwgB4OFfCAbfCIIfDcDECAAIE4gQkI4iSBCQgeIhSBCQj+JhSBBfCAZfCBMQgOJIExCBoiFIExCLYmFfCAVfCAUIBcgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELs9dvWs/Xb5d8AfCIZIAZ8IhV8NwMoIAAgViAIQiSJIAhCHomFIAhCGYmFIAggDIUgB4MgCCAMg4V8IBl8IgZ8NwMIIAAgTSBGQjiJIEZCB4iFIEZCP4mFIEJ8IEp8IBpCA4kgGkIGiIUgGkItiYV8IBZ8IBUgFCAXhYMgF4V8IBVCMokgFUIuiYUgFUIXiYV8QpewndLEsYai7AB8IhQgB3x8NwMgIAAgAiAGQiSJIAZCHomFIAZCGYmFIAYgCIUgDIMgBiAIg4V8IBR8fDcDAAvFCQIBfgR/QQApA4CKASIAp0EDdkEPcSIBQQN0QYCJAWoiAiACKQMAQn8gAEIDhkI4gyIAhkJ/hYNCgAEgAIaFNwMAIAFBAWohAgJAIAFBDkkNAAJAIAJBD0cNAEEAQgA3A/iJAQtBiIoBQYCJARADQQAhAgsgAkEDdCEBA0AgAUGAiQFqQgA3AwAgAUEIaiIBQfgARw0AC0EAQQApA4CKASIAQjuGIABCK4ZCgICAgICAwP8Ag4QgAEIbhkKAgICAgOA/gyAAQguGQoCAgIDwH4OEhCAAQgWIQoCAgPgPgyAAQhWIQoCA/AeDhCAAQiWIQoD+A4MgAEIDhkI4iISEhDcD+IkBQYiKAUGAiQEQA0EAQQApA8CKASIAQjiGIABCKIZCgICAgICAwP8Ag4QgAEIYhkKAgICAgOA/gyAAQgiGQoCAgIDwH4OEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDwIoBQQBBACkDuIoBIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwO4igFBAEEAKQOwigEiAEI4hiAAQiiGQoCAgICAgMD/AIOEIABCGIZCgICAgIDgP4MgAEIIhkKAgICA8B+DhIQgAEIIiEKAgID4D4MgAEIYiEKAgPwHg4QgAEIoiEKA/gODIABCOIiEhIQ3A7CKAUEAQQApA6iKASIAQjiGIABCKIZCgICAgICAwP8Ag4QgAEIYhkKAgICAgOA/gyAAQgiGQoCAgIDwH4OEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDqIoBQQBBACkDoIoBIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOgigFBAEEAKQOYigEiAEI4hiAAQiiGQoCAgICAgMD/AIOEIABCGIZCgICAgIDgP4MgAEIIhkKAgICA8B+DhIQgAEIIiEKAgID4D4MgAEIYiEKAgPwHg4QgAEIoiEKA/gODIABCOIiEhIQ3A5iKAUEAQQApA5CKASIAQjiGIABCKIZCgICAgICAwP8Ag4QgAEIYhkKAgICAgOA/gyAAQgiGQoCAgIDwH4OEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDkIoBQQBBACkDiIoBIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISEIgA3A4iKAQJAQQAoAsiKASIDRQ0AQQAgADwAgAkgA0EBRg0AIABCCIinIQRBASEBQQEhAgNAIAFBgAlqIAQ6AAAgAyACQQFqIgJB/wFxIgFNDQEgAUGIigFqLQAAIQQMAAsLCwYAQYCJAQuhAgBBAEIANwOAigFBAEEwQcAAIAFBgANGIgEbNgLIigFBAEKkn+n324PS2scAQvnC+JuRo7Pw2wAgARs3A8CKAUEAQqef5qfWwYuGW0Lr+obav7X2wR8gARs3A7iKAUEAQpGq4ML20JLajn9Cn9j52cKR2oKbfyABGzcDsIoBQQBCsZaA/v/MyZnnAELRhZrv+s+Uh9EAIAEbNwOoigFBAEK5srm4j5v7lxVC8e30+KWn/aelfyABGzcDoIoBQQBCl7rDg6OrwKyRf0Kr8NP0r+68tzwgARs3A5iKAUEAQoeq87OjpYrN4gBCu86qptjQ67O7fyABGzcDkIoBQQBC2L2WiNyr591LQoiS853/zPmE6gAgARs3A4iKASAAEAIQBAsLCwEAQYAICwTQAAAA";
|
|
5278
|
-
var hash$9 = "a5d1ca7c";
|
|
5279
|
-
var wasmJson$9 = {
|
|
5280
|
-
name: name$9,
|
|
5281
|
-
data: data$9,
|
|
5282
|
-
hash: hash$9
|
|
5283
|
-
};
|
|
5284
|
-
|
|
5285
|
-
new Mutex();
|
|
5286
|
-
|
|
5287
|
-
new Mutex();
|
|
5288
|
-
/**
|
|
5289
|
-
* Creates a new SHA-2 (SHA-512) hash instance
|
|
5290
|
-
*/
|
|
5291
|
-
function createSHA512() {
|
|
5292
|
-
return WASMInterface(wasmJson$9, 64).then((wasm) => {
|
|
5293
|
-
wasm.init(512);
|
|
5294
|
-
const obj = {
|
|
5295
|
-
init: () => { wasm.init(512); return obj; },
|
|
5296
|
-
update: (data) => { wasm.update(data); return obj; },
|
|
5297
|
-
digest: (outputType) => wasm.digest(outputType),
|
|
5298
|
-
save: () => wasm.save(),
|
|
5299
|
-
load: (data) => { wasm.load(data); return obj; },
|
|
5300
|
-
blockSize: 128,
|
|
5301
|
-
digestSize: 64,
|
|
5302
|
-
};
|
|
5303
|
-
return obj;
|
|
5304
|
-
});
|
|
5305
|
-
}
|
|
5306
|
-
|
|
5307
|
-
new Mutex();
|
|
5308
|
-
|
|
5309
|
-
new Mutex();
|
|
5310
|
-
|
|
5311
|
-
new Mutex();
|
|
5312
|
-
|
|
5313
|
-
new Mutex();
|
|
5314
|
-
|
|
5315
|
-
var name$4 = "ripemd160";
|
|
5316
|
-
var data$4 = "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";
|
|
5317
|
-
var hash$4 = "42f1de39";
|
|
5318
|
-
var wasmJson$4 = {
|
|
5319
|
-
name: name$4,
|
|
5320
|
-
data: data$4,
|
|
5321
|
-
hash: hash$4
|
|
5322
|
-
};
|
|
5323
|
-
|
|
5324
|
-
new Mutex();
|
|
5325
|
-
/**
|
|
5326
|
-
* Creates a new RIPEMD-160 hash instance
|
|
5327
|
-
*/
|
|
5328
|
-
function createRIPEMD160() {
|
|
5329
|
-
return WASMInterface(wasmJson$4, 20).then((wasm) => {
|
|
5330
|
-
wasm.init();
|
|
5331
|
-
const obj = {
|
|
5332
|
-
init: () => { wasm.init(); return obj; },
|
|
5333
|
-
update: (data) => { wasm.update(data); return obj; },
|
|
5334
|
-
digest: (outputType) => wasm.digest(outputType),
|
|
5335
|
-
save: () => wasm.save(),
|
|
5336
|
-
load: (data) => { wasm.load(data); return obj; },
|
|
5337
|
-
blockSize: 64,
|
|
5338
|
-
digestSize: 20,
|
|
5339
|
-
};
|
|
5340
|
-
return obj;
|
|
5341
|
-
});
|
|
5342
|
-
}
|
|
5343
|
-
|
|
5344
|
-
function calculateKeyBuffer(hasher, key) {
|
|
5345
|
-
const { blockSize } = hasher;
|
|
5346
|
-
const buf = getUInt8Buffer(key);
|
|
5347
|
-
if (buf.length > blockSize) {
|
|
5348
|
-
hasher.update(buf);
|
|
5349
|
-
const uintArr = hasher.digest('binary');
|
|
5350
|
-
hasher.init();
|
|
5351
|
-
return uintArr;
|
|
5352
|
-
}
|
|
5353
|
-
return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
|
|
5354
|
-
}
|
|
5355
|
-
function calculateHmac(hasher, key) {
|
|
5356
|
-
hasher.init();
|
|
5357
|
-
const { blockSize } = hasher;
|
|
5358
|
-
const keyBuf = calculateKeyBuffer(hasher, key);
|
|
5359
|
-
const keyBuffer = new Uint8Array(blockSize);
|
|
5360
|
-
keyBuffer.set(keyBuf);
|
|
5361
|
-
const opad = new Uint8Array(blockSize);
|
|
5362
|
-
for (let i = 0; i < blockSize; i++) {
|
|
5363
|
-
const v = keyBuffer[i];
|
|
5364
|
-
opad[i] = v ^ 0x5C;
|
|
5365
|
-
keyBuffer[i] = v ^ 0x36;
|
|
5366
|
-
}
|
|
5367
|
-
hasher.update(keyBuffer);
|
|
5368
|
-
const obj = {
|
|
5369
|
-
init: () => {
|
|
5370
|
-
hasher.init();
|
|
5371
|
-
hasher.update(keyBuffer);
|
|
5372
|
-
return obj;
|
|
5373
|
-
},
|
|
5374
|
-
update: (data) => {
|
|
5375
|
-
hasher.update(data);
|
|
5376
|
-
return obj;
|
|
5377
|
-
},
|
|
5378
|
-
digest: ((outputType) => {
|
|
5379
|
-
const uintArr = hasher.digest('binary');
|
|
5380
|
-
hasher.init();
|
|
5381
|
-
hasher.update(opad);
|
|
5382
|
-
hasher.update(uintArr);
|
|
5383
|
-
return hasher.digest(outputType);
|
|
5384
|
-
}),
|
|
5385
|
-
save: () => {
|
|
5386
|
-
throw new Error('save() not supported');
|
|
5387
|
-
},
|
|
5388
|
-
load: () => {
|
|
5389
|
-
throw new Error('load() not supported');
|
|
5390
|
-
},
|
|
5391
|
-
blockSize: hasher.blockSize,
|
|
5392
|
-
digestSize: hasher.digestSize,
|
|
5393
|
-
};
|
|
5394
|
-
return obj;
|
|
5395
|
-
}
|
|
5396
|
-
/**
|
|
5397
|
-
* Calculates HMAC hash
|
|
5398
|
-
* @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
|
|
5399
|
-
* @param key Key (string, Buffer or TypedArray)
|
|
5400
|
-
*/
|
|
5401
|
-
function createHMAC(hash, key) {
|
|
5402
|
-
if (!hash || !hash.then) {
|
|
5403
|
-
throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
|
|
5404
|
-
}
|
|
5405
|
-
return hash.then((hasher) => calculateHmac(hasher, key));
|
|
5406
|
-
}
|
|
5407
|
-
|
|
5408
|
-
new Mutex();
|
|
5409
|
-
|
|
5410
|
-
new Mutex();
|
|
5411
|
-
|
|
5412
4980
|
const blockchainCodecs = [
|
|
5413
4981
|
{
|
|
5414
4982
|
name: 'leofcoin-block',
|
|
@@ -5600,106 +5168,7 @@ var utils$p = {
|
|
|
5600
5168
|
codecs: globalThis.peernetCodecs
|
|
5601
5169
|
};
|
|
5602
5170
|
|
|
5603
|
-
|
|
5604
|
-
* @param {string}
|
|
5605
|
-
*/
|
|
5606
|
-
var isHex = (function (string) { return /^[A-F0-9]+$/i.test(string); });
|
|
5607
|
-
|
|
5608
|
-
let BasicInterface$1 = class BasicInterface {
|
|
5609
|
-
encoded;
|
|
5610
|
-
decoded;
|
|
5611
|
-
keys;
|
|
5612
|
-
name;
|
|
5613
|
-
#proto;
|
|
5614
|
-
set proto(value) {
|
|
5615
|
-
this.#proto = value;
|
|
5616
|
-
this.keys = Object.keys(value);
|
|
5617
|
-
}
|
|
5618
|
-
get proto() {
|
|
5619
|
-
return this.#proto;
|
|
5620
|
-
}
|
|
5621
|
-
decode(encoded) {
|
|
5622
|
-
encoded = encoded || this.encoded;
|
|
5623
|
-
return new Object();
|
|
5624
|
-
}
|
|
5625
|
-
encode(decoded) {
|
|
5626
|
-
decoded = decoded || this.decoded;
|
|
5627
|
-
return new Uint8Array();
|
|
5628
|
-
}
|
|
5629
|
-
// get Codec(): Codec {}
|
|
5630
|
-
protoEncode(data) {
|
|
5631
|
-
// check schema
|
|
5632
|
-
return index$2.encode(this.proto, data, false);
|
|
5633
|
-
}
|
|
5634
|
-
protoDecode(data) {
|
|
5635
|
-
// check schema
|
|
5636
|
-
return index$2.decode(this.proto, data, false);
|
|
5637
|
-
}
|
|
5638
|
-
isHex(string) {
|
|
5639
|
-
return isHex(string);
|
|
5640
|
-
}
|
|
5641
|
-
isBase32(string) {
|
|
5642
|
-
return index$9.isBase32(string);
|
|
5643
|
-
}
|
|
5644
|
-
isBase58(string) {
|
|
5645
|
-
return base58$1.isBase58(string);
|
|
5646
|
-
}
|
|
5647
|
-
fromBs32(encoded) {
|
|
5648
|
-
return this.decode(index$9.decode(encoded));
|
|
5649
|
-
}
|
|
5650
|
-
fromBs58(encoded) {
|
|
5651
|
-
return this.decode(fromBase58(encoded));
|
|
5652
|
-
}
|
|
5653
|
-
async toArray() {
|
|
5654
|
-
const array = [];
|
|
5655
|
-
for await (const value of this.encoded.values()) {
|
|
5656
|
-
array.push(value);
|
|
5657
|
-
}
|
|
5658
|
-
return array;
|
|
5659
|
-
}
|
|
5660
|
-
fromString(string) {
|
|
5661
|
-
const array = string.split(',');
|
|
5662
|
-
const arrayLike = array.map(string => Number(string));
|
|
5663
|
-
return this.decode(Uint8Array.from(arrayLike));
|
|
5664
|
-
}
|
|
5665
|
-
fromHex(string) {
|
|
5666
|
-
return this.decode(fromHex(string));
|
|
5667
|
-
}
|
|
5668
|
-
fromArray(array) {
|
|
5669
|
-
return this.decode(Uint8Array.from([...array]));
|
|
5670
|
-
}
|
|
5671
|
-
fromEncoded(encoded) {
|
|
5672
|
-
return this.decode(encoded);
|
|
5673
|
-
}
|
|
5674
|
-
toString() {
|
|
5675
|
-
if (!this.encoded)
|
|
5676
|
-
this.encode();
|
|
5677
|
-
return this.encoded.toString();
|
|
5678
|
-
}
|
|
5679
|
-
toHex() {
|
|
5680
|
-
if (!this.encoded)
|
|
5681
|
-
this.encode();
|
|
5682
|
-
return toHex$2(this.encoded.toString().split(',').map(number => Number(number)));
|
|
5683
|
-
}
|
|
5684
|
-
/**
|
|
5685
|
-
* @return {String} encoded
|
|
5686
|
-
*/
|
|
5687
|
-
toBs32() {
|
|
5688
|
-
if (!this.encoded)
|
|
5689
|
-
this.encode();
|
|
5690
|
-
return toBase32(this.encoded);
|
|
5691
|
-
}
|
|
5692
|
-
/**
|
|
5693
|
-
* @return {String} encoded
|
|
5694
|
-
*/
|
|
5695
|
-
toBs58() {
|
|
5696
|
-
if (!this.encoded)
|
|
5697
|
-
this.encode();
|
|
5698
|
-
return toBase58(this.encoded);
|
|
5699
|
-
}
|
|
5700
|
-
};
|
|
5701
|
-
|
|
5702
|
-
let Codec$1 = class Codec extends BasicInterface$1 {
|
|
5171
|
+
let Codec$1 = class Codec extends BasicInterface {
|
|
5703
5172
|
codecBuffer;
|
|
5704
5173
|
codec;
|
|
5705
5174
|
hashAlg;
|
|
@@ -5719,7 +5188,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5719
5188
|
}
|
|
5720
5189
|
}
|
|
5721
5190
|
else if (buffer instanceof ArrayBuffer) {
|
|
5722
|
-
const codec = index$8.decode(
|
|
5191
|
+
const codec = index$8.decode(buffer);
|
|
5723
5192
|
const name = this.getCodecName(codec);
|
|
5724
5193
|
if (name) {
|
|
5725
5194
|
this.name = name;
|
|
@@ -5767,6 +5236,12 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5767
5236
|
this.hashAlg = this.getHashAlg(this.name);
|
|
5768
5237
|
this.codec = this.getCodec(this.name);
|
|
5769
5238
|
this.codecBuffer = index$8.encode(this.codec);
|
|
5239
|
+
this.decoded = {
|
|
5240
|
+
name: this.name,
|
|
5241
|
+
hashAlg: this.hashAlg,
|
|
5242
|
+
codec: this.codec,
|
|
5243
|
+
codecBuffer: this.codecBuffer
|
|
5244
|
+
};
|
|
5770
5245
|
}
|
|
5771
5246
|
fromName(name) {
|
|
5772
5247
|
const codec = this.getCodec(name);
|
|
@@ -5774,6 +5249,12 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5774
5249
|
this.codec = codec;
|
|
5775
5250
|
this.hashAlg = this.getHashAlg(name);
|
|
5776
5251
|
this.codecBuffer = index$8.encode(this.codec);
|
|
5252
|
+
this.decoded = {
|
|
5253
|
+
name: this.name,
|
|
5254
|
+
hashAlg: this.hashAlg,
|
|
5255
|
+
codec: this.codec,
|
|
5256
|
+
codecBuffer: this.codecBuffer
|
|
5257
|
+
};
|
|
5777
5258
|
}
|
|
5778
5259
|
decode(encoded) {
|
|
5779
5260
|
encoded = encoded || this.encoded;
|
|
@@ -5788,12 +5269,10 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5788
5269
|
}
|
|
5789
5270
|
};
|
|
5790
5271
|
|
|
5791
|
-
|
|
5272
|
+
class CodecHash extends BasicInterface {
|
|
5792
5273
|
codec;
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
size;
|
|
5796
|
-
constructor(buffer, options) {
|
|
5274
|
+
discoCodec;
|
|
5275
|
+
constructor(buffer, options = {}) {
|
|
5797
5276
|
super();
|
|
5798
5277
|
if (options.name)
|
|
5799
5278
|
this.name = options.name;
|
|
@@ -5806,8 +5285,8 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5806
5285
|
async init(uint8Array) {
|
|
5807
5286
|
if (uint8Array) {
|
|
5808
5287
|
if (uint8Array instanceof Uint8Array) {
|
|
5809
|
-
this.
|
|
5810
|
-
const name = this.
|
|
5288
|
+
this.discoCodec = new Codec$1(uint8Array, this.codecs);
|
|
5289
|
+
const name = this.discoCodec.name;
|
|
5811
5290
|
if (name) {
|
|
5812
5291
|
this.name = name;
|
|
5813
5292
|
this.decode(uint8Array);
|
|
@@ -5833,9 +5312,9 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5833
5312
|
}
|
|
5834
5313
|
get prefix() {
|
|
5835
5314
|
const length = this.length;
|
|
5836
|
-
const uint8Array = new Uint8Array(length.length + this.
|
|
5315
|
+
const uint8Array = new Uint8Array(length.length + this.discoCodec.codecBuffer.length);
|
|
5837
5316
|
uint8Array.set(length);
|
|
5838
|
-
uint8Array.set(this.
|
|
5317
|
+
uint8Array.set(this.discoCodec.codecBuffer, length.length);
|
|
5839
5318
|
return uint8Array;
|
|
5840
5319
|
}
|
|
5841
5320
|
get length() {
|
|
@@ -5855,22 +5334,29 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5855
5334
|
this.name = name;
|
|
5856
5335
|
if (!buffer)
|
|
5857
5336
|
buffer = this.buffer;
|
|
5858
|
-
this.
|
|
5859
|
-
this.
|
|
5860
|
-
let hashAlg = this.
|
|
5337
|
+
this.discoCodec = new Codec$1(this.name);
|
|
5338
|
+
this.discoCodec.fromName(this.name);
|
|
5339
|
+
let hashAlg = this.discoCodec.hashAlg;
|
|
5861
5340
|
const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1]);
|
|
5862
5341
|
if (hashAlg.includes('dbl')) {
|
|
5863
5342
|
hashAlg = hashAlg.replace('dbl-', '');
|
|
5864
|
-
const hasher = await createKeccak(hashVariant)
|
|
5865
|
-
await hasher.init()
|
|
5866
|
-
hasher.update(buffer)
|
|
5867
|
-
buffer = hasher.digest('binary')
|
|
5343
|
+
// const hasher = await createKeccak(hashVariant)
|
|
5344
|
+
// await hasher.init()
|
|
5345
|
+
// hasher.update(buffer)
|
|
5346
|
+
// buffer = hasher.digest('binary')
|
|
5347
|
+
buffer = await crypto.subtle.digest(`SHA-${hashVariant}`, buffer);
|
|
5348
|
+
}
|
|
5349
|
+
// const hasher = await createKeccak(hashVariant)
|
|
5350
|
+
// await hasher.init()
|
|
5351
|
+
// hasher.update(buffer)
|
|
5352
|
+
// this.digest = hasher.digest('binary')
|
|
5353
|
+
this.digest = await crypto.subtle.digest(`SHA-${hashVariant}`, buffer);
|
|
5354
|
+
if (this.digest instanceof ArrayBuffer) {
|
|
5355
|
+
this.digest = new Uint8Array(this.digest);
|
|
5868
5356
|
}
|
|
5869
|
-
const hasher = await createKeccak(hashVariant);
|
|
5870
|
-
await hasher.init();
|
|
5871
|
-
hasher.update(buffer);
|
|
5872
|
-
this.digest = hasher.digest('binary');
|
|
5873
5357
|
this.size = this.digest.length;
|
|
5358
|
+
this.codec = this.discoCodec.encode();
|
|
5359
|
+
this.codec = this.discoCodec.codecBuffer;
|
|
5874
5360
|
const uint8Array = new Uint8Array(this.digest.length + this.prefix.length);
|
|
5875
5361
|
uint8Array.set(this.prefix);
|
|
5876
5362
|
uint8Array.set(this.digest, this.prefix.length);
|
|
@@ -5899,16 +5385,16 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5899
5385
|
decode(buffer) {
|
|
5900
5386
|
this.encoded = buffer;
|
|
5901
5387
|
const codec = index$8.decode(buffer);
|
|
5902
|
-
this.
|
|
5388
|
+
this.discoCodec = new Codec$1(codec, this.codecs);
|
|
5903
5389
|
// TODO: validate codec
|
|
5904
5390
|
buffer = buffer.slice(index$8.decode.bytes);
|
|
5905
5391
|
this.size = index$8.decode(buffer);
|
|
5906
5392
|
this.digest = buffer.slice(index$8.decode.bytes);
|
|
5907
5393
|
if (this.digest.length !== this.size) {
|
|
5908
|
-
throw new Error(`hash length inconsistent: ${this.encoded.toString()}`);
|
|
5394
|
+
throw new Error(`hash length inconsistent: 0x${this.encoded.toString('hex')}`);
|
|
5909
5395
|
}
|
|
5910
|
-
// const
|
|
5911
|
-
this.name = this.
|
|
5396
|
+
// const discoCodec = new Codec(codec, this.codecs)
|
|
5397
|
+
this.name = this.discoCodec.name;
|
|
5912
5398
|
this.size = this.digest.length;
|
|
5913
5399
|
return {
|
|
5914
5400
|
codec: this.codec,
|
|
@@ -5918,10 +5404,11 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5918
5404
|
digest: this.digest,
|
|
5919
5405
|
};
|
|
5920
5406
|
}
|
|
5921
|
-
}
|
|
5407
|
+
}
|
|
5922
5408
|
|
|
5923
|
-
let FormatInterface$1 = class FormatInterface extends BasicInterface
|
|
5409
|
+
let FormatInterface$1 = class FormatInterface extends BasicInterface {
|
|
5924
5410
|
hashFormat;
|
|
5411
|
+
#hash;
|
|
5925
5412
|
init(buffer) {
|
|
5926
5413
|
if (buffer instanceof Uint8Array)
|
|
5927
5414
|
this.fromUint8Array(buffer);
|
|
@@ -5953,7 +5440,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
|
|
|
5953
5440
|
}
|
|
5954
5441
|
decode(encoded) {
|
|
5955
5442
|
encoded = encoded || this.encoded;
|
|
5956
|
-
const codec = new Codec$1(
|
|
5443
|
+
const codec = new Codec$1(encoded);
|
|
5957
5444
|
if (codec.codecBuffer) {
|
|
5958
5445
|
encoded = encoded.slice(codec.codecBuffer.length);
|
|
5959
5446
|
this.name = codec.name;
|
|
@@ -5970,8 +5457,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
|
|
|
5970
5457
|
}
|
|
5971
5458
|
encode(decoded) {
|
|
5972
5459
|
let encoded;
|
|
5973
|
-
|
|
5974
|
-
decoded = this.decoded;
|
|
5460
|
+
decoded = decoded || this.decoded;
|
|
5975
5461
|
const codec = new Codec$1(this.name);
|
|
5976
5462
|
if (decoded instanceof Uint8Array)
|
|
5977
5463
|
encoded = decoded;
|
|
@@ -6001,19 +5487,29 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
|
|
|
6001
5487
|
this.name = options.name;
|
|
6002
5488
|
this.init(buffer);
|
|
6003
5489
|
}
|
|
5490
|
+
get format() {
|
|
5491
|
+
const upper = this.hashFormat.charAt(0).toUpperCase();
|
|
5492
|
+
return `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`;
|
|
5493
|
+
}
|
|
6004
5494
|
/**
|
|
6005
5495
|
* @return {PeernetHash}
|
|
6006
5496
|
*/
|
|
6007
5497
|
get peernetHash() {
|
|
6008
|
-
|
|
5498
|
+
const decoded = this.decoded;
|
|
5499
|
+
// @ts-ignore
|
|
5500
|
+
delete decoded.hash;
|
|
5501
|
+
return new CodecHash(decoded, { name: this.name });
|
|
6009
5502
|
}
|
|
6010
5503
|
/**
|
|
6011
5504
|
* @return {peernetHash}
|
|
6012
5505
|
*/
|
|
6013
5506
|
async hash() {
|
|
5507
|
+
if (this.#hash)
|
|
5508
|
+
return this.#hash;
|
|
6014
5509
|
const upper = this.hashFormat.charAt(0).toUpperCase();
|
|
6015
5510
|
const format = `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`;
|
|
6016
|
-
|
|
5511
|
+
this.#hash = (await this.peernetHash)[`to${format}`]();
|
|
5512
|
+
return this.#hash;
|
|
6017
5513
|
}
|
|
6018
5514
|
fromUint8Array(buffer) {
|
|
6019
5515
|
this.encoded = buffer;
|
|
@@ -6028,152 +5524,155 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
|
|
|
6028
5524
|
*/
|
|
6029
5525
|
create(data) {
|
|
6030
5526
|
const decoded = {};
|
|
5527
|
+
if (data.hash)
|
|
5528
|
+
this.#hash = data.hash;
|
|
6031
5529
|
if (this.keys?.length > 0) {
|
|
6032
5530
|
for (const key of this.keys) {
|
|
6033
5531
|
decoded[key] = data[key];
|
|
6034
5532
|
}
|
|
6035
5533
|
this.decoded = decoded;
|
|
6036
|
-
return this.encode(decoded)
|
|
5534
|
+
// return this.encode(decoded)
|
|
6037
5535
|
}
|
|
6038
|
-
}
|
|
6039
|
-
};
|
|
6040
|
-
const FormatInterface = FormatInterface$1;
|
|
6041
|
-
const Codec = Codec$1;
|
|
6042
|
-
|
|
6043
|
-
const BufferToUint8Array = data => {
|
|
6044
|
-
if (data.type === 'Buffer') {
|
|
6045
|
-
data = new Uint8Array(data.data);
|
|
6046
|
-
}
|
|
6047
|
-
return data
|
|
6048
|
-
};
|
|
6049
|
-
|
|
6050
|
-
const protoFor = (message) => {
|
|
6051
|
-
const codec = new Codec(message);
|
|
6052
|
-
if (!codec.name) throw new Error('proto not found')
|
|
6053
|
-
const Proto = globalThis.peernet.protos[codec.name];
|
|
6054
|
-
if (!Proto) throw (new Error(`No proto defined for ${codec.name}`))
|
|
6055
|
-
return new Proto(message)
|
|
6056
|
-
};
|
|
6057
|
-
|
|
6058
|
-
/**
|
|
6059
|
-
* wether or not a peernet daemon is active
|
|
6060
|
-
* @return {Boolean}
|
|
6061
|
-
*/
|
|
6062
|
-
const hasDaemon = async () => {
|
|
6063
|
-
try {
|
|
6064
|
-
let response = await fetch('http://127.0.0.1:1000/api/version');
|
|
6065
|
-
response = await response.json();
|
|
6066
|
-
return Boolean(response.client === '@peernet/api/http')
|
|
6067
|
-
} catch (e) {
|
|
6068
|
-
return false
|
|
6069
|
-
}
|
|
6070
|
-
};
|
|
6071
|
-
|
|
6072
|
-
const https = () => {
|
|
6073
|
-
if (!globalThis.location) return false;
|
|
6074
|
-
return Boolean(globalThis.location.protocol === 'https:')
|
|
6075
|
-
};
|
|
6076
|
-
|
|
6077
|
-
/**
|
|
6078
|
-
* Get current environment
|
|
6079
|
-
* @return {String} current environment [node, electron, browser]
|
|
6080
|
-
*/
|
|
6081
|
-
const environment = () => {
|
|
6082
|
-
const _navigator = globalThis.navigator;
|
|
6083
|
-
if (!_navigator) {
|
|
6084
|
-
return 'node'
|
|
6085
|
-
} else if (_navigator && /electron/i.test(_navigator.userAgent)) {
|
|
6086
|
-
return 'electron'
|
|
6087
|
-
} else {
|
|
6088
|
-
return 'browser'
|
|
6089
|
-
}
|
|
5536
|
+
}
|
|
6090
5537
|
};
|
|
6091
5538
|
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
* @return {Object} result
|
|
6095
|
-
* @property {Boolean} reult.daemon whether or not daemon is running
|
|
6096
|
-
* @property {Boolean} reult.environment Current environment
|
|
6097
|
-
*/
|
|
6098
|
-
const target = async () => {
|
|
6099
|
-
let daemon = false;
|
|
6100
|
-
if (!https()) daemon = await hasDaemon();
|
|
5539
|
+
const FormatInterface = FormatInterface$1;
|
|
5540
|
+
const Codec = Codec$1;
|
|
6101
5541
|
|
|
6102
|
-
|
|
5542
|
+
const BufferToUint8Array = data => {
|
|
5543
|
+
if (data.type === 'Buffer') {
|
|
5544
|
+
data = new Uint8Array(data.data);
|
|
5545
|
+
}
|
|
5546
|
+
return data
|
|
5547
|
+
};
|
|
5548
|
+
|
|
5549
|
+
const protoFor = (message) => {
|
|
5550
|
+
const codec = new Codec(message);
|
|
5551
|
+
if (!codec.name) throw new Error('proto not found')
|
|
5552
|
+
const Proto = globalThis.peernet.protos[codec.name];
|
|
5553
|
+
if (!Proto) throw (new Error(`No proto defined for ${codec.name}`))
|
|
5554
|
+
return new Proto(message)
|
|
5555
|
+
};
|
|
5556
|
+
|
|
5557
|
+
/**
|
|
5558
|
+
* wether or not a peernet daemon is active
|
|
5559
|
+
* @return {Boolean}
|
|
5560
|
+
*/
|
|
5561
|
+
const hasDaemon = async () => {
|
|
5562
|
+
try {
|
|
5563
|
+
let response = await fetch('http://127.0.0.1:1000/api/version');
|
|
5564
|
+
response = await response.json();
|
|
5565
|
+
return Boolean(response.client === '@peernet/api/http')
|
|
5566
|
+
} catch (e) {
|
|
5567
|
+
return false
|
|
5568
|
+
}
|
|
5569
|
+
};
|
|
5570
|
+
|
|
5571
|
+
const https = () => {
|
|
5572
|
+
if (!globalThis.location) return false;
|
|
5573
|
+
return Boolean(globalThis.location.protocol === 'https:')
|
|
5574
|
+
};
|
|
5575
|
+
|
|
5576
|
+
/**
|
|
5577
|
+
* Get current environment
|
|
5578
|
+
* @return {String} current environment [node, electron, browser]
|
|
5579
|
+
*/
|
|
5580
|
+
const environment = () => {
|
|
5581
|
+
const _navigator = globalThis.navigator;
|
|
5582
|
+
if (!_navigator) {
|
|
5583
|
+
return 'node'
|
|
5584
|
+
} else if (_navigator && /electron/i.test(_navigator.userAgent)) {
|
|
5585
|
+
return 'electron'
|
|
5586
|
+
} else {
|
|
5587
|
+
return 'browser'
|
|
5588
|
+
}
|
|
5589
|
+
};
|
|
5590
|
+
|
|
5591
|
+
/**
|
|
5592
|
+
* * Get current environment
|
|
5593
|
+
* @return {Object} result
|
|
5594
|
+
* @property {Boolean} reult.daemon whether or not daemon is running
|
|
5595
|
+
* @property {Boolean} reult.environment Current environment
|
|
5596
|
+
*/
|
|
5597
|
+
const target = async () => {
|
|
5598
|
+
let daemon = false;
|
|
5599
|
+
if (!https()) daemon = await hasDaemon();
|
|
5600
|
+
|
|
5601
|
+
return {daemon, environment: environment()}
|
|
6103
5602
|
};
|
|
6104
5603
|
|
|
6105
|
-
class PeerDiscovery {
|
|
6106
|
-
constructor(id) {
|
|
6107
|
-
this.id = id;
|
|
6108
|
-
}
|
|
6109
|
-
|
|
6110
|
-
_getPeerId(id) {
|
|
6111
|
-
if (!peernet.peerMap || peernet.peerMap && peernet.peerMap.size === 0) return false
|
|
6112
|
-
|
|
6113
|
-
for (const entry of [...peernet.peerMap.entries()]) {
|
|
6114
|
-
for (const _id of entry[1]) {
|
|
6115
|
-
if (_id === id) return entry[0]
|
|
6116
|
-
}
|
|
6117
|
-
}
|
|
6118
|
-
}
|
|
6119
|
-
|
|
6120
|
-
async discover(peer) {
|
|
6121
|
-
let id = this._getPeerId(peer.id);
|
|
6122
|
-
if (id) return id
|
|
6123
|
-
const data = await new peernet.protos['peernet-peer']({id: this.id});
|
|
6124
|
-
const node = await peernet.prepareMessage(peer.id, data.encoded);
|
|
6125
|
-
|
|
6126
|
-
let response = await peer.request(node.encoded);
|
|
6127
|
-
response = await protoFor(response);
|
|
6128
|
-
response = await new peernet.protos['peernet-peer-response'](response.decoded.data);
|
|
6129
|
-
|
|
6130
|
-
id = response.decoded.id;
|
|
6131
|
-
if (id === this.id) return;
|
|
6132
|
-
|
|
6133
|
-
if (!peernet.peerMap.has(id)) peernet.peerMap.set(id, [peer.id]);
|
|
6134
|
-
else {
|
|
6135
|
-
const connections = peernet.peerMap.get(id);
|
|
6136
|
-
if (connections.indexOf(peer.id) === -1) {
|
|
6137
|
-
connections.push(peer.id);
|
|
6138
|
-
peernet.peerMap.set(peer.id, connections);
|
|
6139
|
-
}
|
|
6140
|
-
}
|
|
6141
|
-
return id
|
|
6142
|
-
}
|
|
6143
|
-
|
|
6144
|
-
async discoverHandler(message, peer) {
|
|
6145
|
-
const {id, proto} = message;
|
|
6146
|
-
// if (typeof message.data === 'string') message.data = Buffer.from(message.data)
|
|
6147
|
-
if (proto.name === 'peernet-peer') {
|
|
6148
|
-
const from = proto.decoded.id;
|
|
6149
|
-
if (from === this.id) return;
|
|
6150
|
-
|
|
6151
|
-
if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
|
|
6152
|
-
else {
|
|
6153
|
-
const connections = peernet.peerMap.get(from);
|
|
6154
|
-
if (connections.indexOf(peer.id) === -1) {
|
|
6155
|
-
connections.push(peer.id);
|
|
6156
|
-
peernet.peerMap.set(from, connections);
|
|
6157
|
-
}
|
|
6158
|
-
}
|
|
6159
|
-
const data = await new peernet.protos['peernet-peer-response']({id: this.id});
|
|
6160
|
-
const node = await peernet.prepareMessage(from, data.encoded);
|
|
6161
|
-
|
|
6162
|
-
peer.write(Buffer.from(JSON.stringify({id, data: node.encoded})));
|
|
6163
|
-
} else if (proto.name === 'peernet-peer-response') {
|
|
6164
|
-
const from = proto.decoded.id;
|
|
6165
|
-
if (from === this.id) return;
|
|
6166
|
-
|
|
6167
|
-
if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
|
|
6168
|
-
else {
|
|
6169
|
-
const connections = peernet.peerMap.get(from);
|
|
6170
|
-
if (connections.indexOf(peer.id) === -1) {
|
|
6171
|
-
connections.push(peer.id);
|
|
6172
|
-
peernet.peerMap.set(from, connections);
|
|
6173
|
-
}
|
|
6174
|
-
}
|
|
6175
|
-
}
|
|
6176
|
-
}
|
|
5604
|
+
class PeerDiscovery {
|
|
5605
|
+
constructor(id) {
|
|
5606
|
+
this.id = id;
|
|
5607
|
+
}
|
|
5608
|
+
|
|
5609
|
+
_getPeerId(id) {
|
|
5610
|
+
if (!peernet.peerMap || peernet.peerMap && peernet.peerMap.size === 0) return false
|
|
5611
|
+
|
|
5612
|
+
for (const entry of [...peernet.peerMap.entries()]) {
|
|
5613
|
+
for (const _id of entry[1]) {
|
|
5614
|
+
if (_id === id) return entry[0]
|
|
5615
|
+
}
|
|
5616
|
+
}
|
|
5617
|
+
}
|
|
5618
|
+
|
|
5619
|
+
async discover(peer) {
|
|
5620
|
+
let id = this._getPeerId(peer.id);
|
|
5621
|
+
if (id) return id
|
|
5622
|
+
const data = await new peernet.protos['peernet-peer']({id: this.id});
|
|
5623
|
+
const node = await peernet.prepareMessage(peer.id, data.encoded);
|
|
5624
|
+
|
|
5625
|
+
let response = await peer.request(node.encoded);
|
|
5626
|
+
response = await protoFor(response);
|
|
5627
|
+
response = await new peernet.protos['peernet-peer-response'](response.decoded.data);
|
|
5628
|
+
|
|
5629
|
+
id = response.decoded.id;
|
|
5630
|
+
if (id === this.id) return;
|
|
5631
|
+
|
|
5632
|
+
if (!peernet.peerMap.has(id)) peernet.peerMap.set(id, [peer.id]);
|
|
5633
|
+
else {
|
|
5634
|
+
const connections = peernet.peerMap.get(id);
|
|
5635
|
+
if (connections.indexOf(peer.id) === -1) {
|
|
5636
|
+
connections.push(peer.id);
|
|
5637
|
+
peernet.peerMap.set(peer.id, connections);
|
|
5638
|
+
}
|
|
5639
|
+
}
|
|
5640
|
+
return id
|
|
5641
|
+
}
|
|
5642
|
+
|
|
5643
|
+
async discoverHandler(message, peer) {
|
|
5644
|
+
const {id, proto} = message;
|
|
5645
|
+
// if (typeof message.data === 'string') message.data = Buffer.from(message.data)
|
|
5646
|
+
if (proto.name === 'peernet-peer') {
|
|
5647
|
+
const from = proto.decoded.id;
|
|
5648
|
+
if (from === this.id) return;
|
|
5649
|
+
|
|
5650
|
+
if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
|
|
5651
|
+
else {
|
|
5652
|
+
const connections = peernet.peerMap.get(from);
|
|
5653
|
+
if (connections.indexOf(peer.id) === -1) {
|
|
5654
|
+
connections.push(peer.id);
|
|
5655
|
+
peernet.peerMap.set(from, connections);
|
|
5656
|
+
}
|
|
5657
|
+
}
|
|
5658
|
+
const data = await new peernet.protos['peernet-peer-response']({id: this.id});
|
|
5659
|
+
const node = await peernet.prepareMessage(from, data.encoded);
|
|
5660
|
+
|
|
5661
|
+
peer.write(Buffer.from(JSON.stringify({id, data: node.encoded})));
|
|
5662
|
+
} else if (proto.name === 'peernet-peer-response') {
|
|
5663
|
+
const from = proto.decoded.id;
|
|
5664
|
+
if (from === this.id) return;
|
|
5665
|
+
|
|
5666
|
+
if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
|
|
5667
|
+
else {
|
|
5668
|
+
const connections = peernet.peerMap.get(from);
|
|
5669
|
+
if (connections.indexOf(peer.id) === -1) {
|
|
5670
|
+
connections.push(peer.id);
|
|
5671
|
+
peernet.peerMap.set(from, connections);
|
|
5672
|
+
}
|
|
5673
|
+
}
|
|
5674
|
+
}
|
|
5675
|
+
}
|
|
6177
5676
|
}
|
|
6178
5677
|
|
|
6179
5678
|
/**
|
|
@@ -6283,58 +5782,59 @@ class DhtEarth {
|
|
|
6283
5782
|
}
|
|
6284
5783
|
}
|
|
6285
5784
|
|
|
6286
|
-
class MessageHandler {
|
|
6287
|
-
constructor(network) {
|
|
6288
|
-
this.network = network;
|
|
6289
|
-
}
|
|
6290
|
-
/**
|
|
6291
|
-
* hash and sign message
|
|
6292
|
-
*
|
|
6293
|
-
* @param {object} message
|
|
6294
|
-
* @param {Buffer} message.from peer id
|
|
6295
|
-
* @param {Buffer} message.to peer id
|
|
6296
|
-
* @param {string} message.data Peernet message
|
|
6297
|
-
* (PeernetMessage excluded) encoded as a string
|
|
6298
|
-
* @return message
|
|
6299
|
-
*/
|
|
6300
|
-
async hashAndSignMessage(message) {
|
|
6301
|
-
const hash = await message.peernetHash;
|
|
6302
|
-
message.decoded.signature = globalThis.identity.sign(hash.buffer);
|
|
6303
|
-
return message
|
|
6304
|
-
}
|
|
6305
|
-
|
|
6306
|
-
/**
|
|
6307
|
-
* @param {String} from - peer id
|
|
6308
|
-
* @param {String} to - peer id
|
|
6309
|
-
* @param {String|PeernetMessage} data - data encoded message string
|
|
6310
|
-
* or the messageNode itself
|
|
6311
|
-
*/
|
|
6312
|
-
async prepareMessage(message) {
|
|
6313
|
-
if (message.keys.includes('signature')) {
|
|
6314
|
-
message = await this.hashAndSignMessage(message);
|
|
6315
|
-
}
|
|
6316
|
-
|
|
6317
|
-
return message
|
|
6318
|
-
}
|
|
5785
|
+
class MessageHandler {
|
|
5786
|
+
constructor(network) {
|
|
5787
|
+
this.network = network;
|
|
5788
|
+
}
|
|
5789
|
+
/**
|
|
5790
|
+
* hash and sign message
|
|
5791
|
+
*
|
|
5792
|
+
* @param {object} message
|
|
5793
|
+
* @param {Buffer} message.from peer id
|
|
5794
|
+
* @param {Buffer} message.to peer id
|
|
5795
|
+
* @param {string} message.data Peernet message
|
|
5796
|
+
* (PeernetMessage excluded) encoded as a string
|
|
5797
|
+
* @return message
|
|
5798
|
+
*/
|
|
5799
|
+
async hashAndSignMessage(message) {
|
|
5800
|
+
const hash = await message.peernetHash;
|
|
5801
|
+
message.decoded.signature = globalThis.identity.sign(hash.buffer);
|
|
5802
|
+
return message
|
|
5803
|
+
}
|
|
5804
|
+
|
|
5805
|
+
/**
|
|
5806
|
+
* @param {String} from - peer id
|
|
5807
|
+
* @param {String} to - peer id
|
|
5808
|
+
* @param {String|PeernetMessage} data - data encoded message string
|
|
5809
|
+
* or the messageNode itself
|
|
5810
|
+
*/
|
|
5811
|
+
async prepareMessage(message) {
|
|
5812
|
+
if (message.keys.includes('signature')) {
|
|
5813
|
+
message = await this.hashAndSignMessage(message);
|
|
5814
|
+
}
|
|
5815
|
+
|
|
5816
|
+
return message
|
|
5817
|
+
}
|
|
6319
5818
|
}
|
|
6320
5819
|
|
|
6321
|
-
const dataHandler = async message => {
|
|
6322
|
-
if (!message) return
|
|
6323
|
-
|
|
6324
|
-
const {data, id, from, peer} = message;
|
|
6325
|
-
const proto = await protoFor(data);
|
|
6326
|
-
peernet._protoHandler({id, proto}, peernet.connections[from] || peer, from);
|
|
6327
|
-
};
|
|
6328
|
-
|
|
6329
|
-
const dhtError = (proto) => {
|
|
6330
|
-
const text = `Received proto ${proto.name} expected peernet-dht-response`;
|
|
6331
|
-
return new Error(`Routing error: ${text}`)
|
|
5820
|
+
const dataHandler = async message => {
|
|
5821
|
+
if (!message) return
|
|
5822
|
+
|
|
5823
|
+
const {data, id, from, peer} = message;
|
|
5824
|
+
const proto = await protoFor(data);
|
|
5825
|
+
peernet._protoHandler({id, proto}, peernet.connections[from] || peer, from);
|
|
6332
5826
|
};
|
|
6333
5827
|
|
|
6334
|
-
const
|
|
6335
|
-
|
|
5828
|
+
const dhtError = (proto) => {
|
|
5829
|
+
const text = `Received proto ${proto.name} expected peernet-dht-response`;
|
|
5830
|
+
return new Error(`Routing error: ${text}`)
|
|
5831
|
+
};
|
|
5832
|
+
|
|
5833
|
+
const nothingFoundError = (hash) => {
|
|
5834
|
+
return new Error(`nothing found for ${hash}`)
|
|
6336
5835
|
};
|
|
6337
5836
|
|
|
5837
|
+
const isBrowser = globalThis.navigator ? true : false;
|
|
6338
5838
|
let LeofcoinStorage$1 = class LeofcoinStorage {
|
|
6339
5839
|
name;
|
|
6340
5840
|
root;
|
|
@@ -6344,9 +5844,12 @@ let LeofcoinStorage$1 = class LeofcoinStorage {
|
|
|
6344
5844
|
this.root = root;
|
|
6345
5845
|
}
|
|
6346
5846
|
async init() {
|
|
6347
|
-
const importee = await import(
|
|
6348
|
-
|
|
6349
|
-
|
|
5847
|
+
const importee = await import(isBrowser ? './browser-store.js' : './store.js');
|
|
5848
|
+
this.db = new importee.default();
|
|
5849
|
+
if (!isBrowser) {
|
|
5850
|
+
// @ts-ignore
|
|
5851
|
+
await this.db.init(this.name, this.root);
|
|
5852
|
+
}
|
|
6350
5853
|
}
|
|
6351
5854
|
async get(key) {
|
|
6352
5855
|
if (typeof key === 'object')
|
|
@@ -6399,6 +5902,7 @@ let LeofcoinStorage$1 = class LeofcoinStorage {
|
|
|
6399
5902
|
let size = 0;
|
|
6400
5903
|
const query = await this.db.iterate();
|
|
6401
5904
|
for await (const item of query) {
|
|
5905
|
+
// @ts-ignore
|
|
6402
5906
|
size += item.value ? item.value.length : item[1].length;
|
|
6403
5907
|
}
|
|
6404
5908
|
return size;
|
|
@@ -6488,15 +5992,15 @@ var typedArrayConcat = (input, options = {length: undefined, seperator: undefine
|
|
|
6488
5992
|
return typedArray
|
|
6489
5993
|
};
|
|
6490
5994
|
|
|
6491
|
-
const concatAndDoubleHash
|
|
5995
|
+
const concatAndDoubleHash = async (input) => {
|
|
6492
5996
|
return new Uint8Array(await createDoubleHash(typedArrayConcat(input), 'SHA-256'));
|
|
6493
5997
|
};
|
|
6494
5998
|
|
|
6495
|
-
const encode$
|
|
5999
|
+
const encode$2 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
|
|
6496
6000
|
if (!(source instanceof Uint8Array) || !(prefix instanceof Uint8Array)) {
|
|
6497
6001
|
throw new TypeError('Expected Uint8Array');
|
|
6498
6002
|
}
|
|
6499
|
-
const hash = await concatAndDoubleHash
|
|
6003
|
+
const hash = await concatAndDoubleHash([
|
|
6500
6004
|
prefix,
|
|
6501
6005
|
source
|
|
6502
6006
|
]);
|
|
@@ -6509,11 +6013,11 @@ const encode$3 = async (source, prefix = new TextEncoder().encode('00'), hex) =>
|
|
|
6509
6013
|
return base58$1.encodeHex(uint8Array);
|
|
6510
6014
|
return base58$1.encode(uint8Array);
|
|
6511
6015
|
};
|
|
6512
|
-
const decode$
|
|
6016
|
+
const decode$3 = async (string, hex) => {
|
|
6513
6017
|
let uint8Array = hex ? base58$1.decodeHex(string) : base58$1.decode(string);
|
|
6514
6018
|
const prefix = uint8Array.subarray(0, 2);
|
|
6515
6019
|
const source = uint8Array.subarray(2, -4);
|
|
6516
|
-
const hash = await concatAndDoubleHash
|
|
6020
|
+
const hash = await concatAndDoubleHash([
|
|
6517
6021
|
prefix,
|
|
6518
6022
|
source
|
|
6519
6023
|
]);
|
|
@@ -6527,21 +6031,21 @@ const decode$4 = async (string, hex) => {
|
|
|
6527
6031
|
}
|
|
6528
6032
|
return { prefix, data: source };
|
|
6529
6033
|
};
|
|
6530
|
-
const isBase58check
|
|
6034
|
+
const isBase58check = (string, hex) => {
|
|
6531
6035
|
try {
|
|
6532
|
-
hex ? decode$
|
|
6036
|
+
hex ? decode$3(string, true) : decode$3(string);
|
|
6533
6037
|
return true;
|
|
6534
6038
|
}
|
|
6535
6039
|
catch (e) {
|
|
6536
6040
|
return false;
|
|
6537
6041
|
}
|
|
6538
6042
|
};
|
|
6539
|
-
const encodeHex
|
|
6540
|
-
const decodeHex
|
|
6541
|
-
const isBase58checkHex
|
|
6542
|
-
var base58check
|
|
6043
|
+
const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$2(uint8Array, prefix, true);
|
|
6044
|
+
const decodeHex = (string) => decode$3(string, true);
|
|
6045
|
+
const isBase58checkHex = (string) => isBase58check(string, true);
|
|
6046
|
+
var base58check = { encode: encode$2, decode: decode$3, encodeHex, decodeHex, isBase58check, isBase58checkHex };
|
|
6543
6047
|
|
|
6544
|
-
const decode$
|
|
6048
|
+
const decode$2 = (multiWif, expectedVersion, expectedCodec) => {
|
|
6545
6049
|
const decoded = base58$1.decode(multiWif);
|
|
6546
6050
|
let [version, codec, privateKey] = index$6(decoded);
|
|
6547
6051
|
version = Number(new TextDecoder().decode(version));
|
|
@@ -6560,10 +6064,10 @@ var index$1 = {
|
|
|
6560
6064
|
privateKey
|
|
6561
6065
|
]));
|
|
6562
6066
|
},
|
|
6563
|
-
decode: decode$
|
|
6067
|
+
decode: decode$2,
|
|
6564
6068
|
isMultiWif: (multiWif) => {
|
|
6565
6069
|
try {
|
|
6566
|
-
const { version, codec, privateKey } = decode$
|
|
6070
|
+
const { version, codec, privateKey } = decode$2(multiWif);
|
|
6567
6071
|
if (version === undefined)
|
|
6568
6072
|
return false;
|
|
6569
6073
|
if (codec === undefined)
|
|
@@ -15977,412 +15481,914 @@ var elliptic$1 = {
|
|
|
15977
15481
|
for (let i = 1; i < pairs.length; ++i) point = point.add(pairs[i].pub);
|
|
15978
15482
|
if (point.isInfinity()) return 2
|
|
15979
15483
|
|
|
15980
|
-
savePublicKey(output, point);
|
|
15484
|
+
savePublicKey(output, point);
|
|
15485
|
+
|
|
15486
|
+
return 0
|
|
15487
|
+
},
|
|
15488
|
+
|
|
15489
|
+
publicKeyTweakAdd (output, pubkey, tweak) {
|
|
15490
|
+
const pair = loadPublicKey(pubkey);
|
|
15491
|
+
if (pair === null) return 1
|
|
15492
|
+
|
|
15493
|
+
tweak = new BN(tweak);
|
|
15494
|
+
if (tweak.cmp(ecparams.n) >= 0) return 2
|
|
15495
|
+
|
|
15496
|
+
const point = pair.getPublic().add(ecparams.g.mul(tweak));
|
|
15497
|
+
if (point.isInfinity()) return 2
|
|
15498
|
+
|
|
15499
|
+
savePublicKey(output, point);
|
|
15500
|
+
|
|
15501
|
+
return 0
|
|
15502
|
+
},
|
|
15503
|
+
|
|
15504
|
+
publicKeyTweakMul (output, pubkey, tweak) {
|
|
15505
|
+
const pair = loadPublicKey(pubkey);
|
|
15506
|
+
if (pair === null) return 1
|
|
15507
|
+
|
|
15508
|
+
tweak = new BN(tweak);
|
|
15509
|
+
if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) return 2
|
|
15510
|
+
|
|
15511
|
+
const point = pair.getPublic().mul(tweak);
|
|
15512
|
+
savePublicKey(output, point);
|
|
15513
|
+
|
|
15514
|
+
return 0
|
|
15515
|
+
},
|
|
15516
|
+
|
|
15517
|
+
signatureNormalize (sig) {
|
|
15518
|
+
const r = new BN(sig.subarray(0, 32));
|
|
15519
|
+
const s = new BN(sig.subarray(32, 64));
|
|
15520
|
+
if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1
|
|
15521
|
+
|
|
15522
|
+
if (s.cmp(ec.nh) === 1) {
|
|
15523
|
+
sig.set(ecparams.n.sub(s).toArrayLike(Uint8Array, 'be', 32), 32);
|
|
15524
|
+
}
|
|
15525
|
+
|
|
15526
|
+
return 0
|
|
15527
|
+
},
|
|
15528
|
+
|
|
15529
|
+
// Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js
|
|
15530
|
+
// Adapted for Uint8Array instead Buffer
|
|
15531
|
+
signatureExport (obj, sig) {
|
|
15532
|
+
const sigR = sig.subarray(0, 32);
|
|
15533
|
+
const sigS = sig.subarray(32, 64);
|
|
15534
|
+
if (new BN(sigR).cmp(ecparams.n) >= 0) return 1
|
|
15535
|
+
if (new BN(sigS).cmp(ecparams.n) >= 0) return 1
|
|
15536
|
+
|
|
15537
|
+
const { output } = obj;
|
|
15538
|
+
|
|
15539
|
+
// Prepare R
|
|
15540
|
+
let r = output.subarray(4, 4 + 33);
|
|
15541
|
+
r[0] = 0x00;
|
|
15542
|
+
r.set(sigR, 1);
|
|
15543
|
+
|
|
15544
|
+
let lenR = 33;
|
|
15545
|
+
let posR = 0;
|
|
15546
|
+
for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
|
|
15547
|
+
|
|
15548
|
+
r = r.subarray(posR);
|
|
15549
|
+
if (r[0] & 0x80) return 1
|
|
15550
|
+
if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1
|
|
15551
|
+
|
|
15552
|
+
// Prepare S
|
|
15553
|
+
let s = output.subarray(6 + 33, 6 + 33 + 33);
|
|
15554
|
+
s[0] = 0x00;
|
|
15555
|
+
s.set(sigS, 1);
|
|
15556
|
+
|
|
15557
|
+
let lenS = 33;
|
|
15558
|
+
let posS = 0;
|
|
15559
|
+
for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
|
|
15560
|
+
|
|
15561
|
+
s = s.subarray(posS);
|
|
15562
|
+
if (s[0] & 0x80) return 1
|
|
15563
|
+
if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1
|
|
15564
|
+
|
|
15565
|
+
// Set output length for return
|
|
15566
|
+
obj.outputlen = 6 + lenR + lenS;
|
|
15567
|
+
|
|
15568
|
+
// Output in specified format
|
|
15569
|
+
// 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
|
|
15570
|
+
output[0] = 0x30;
|
|
15571
|
+
output[1] = obj.outputlen - 2;
|
|
15572
|
+
output[2] = 0x02;
|
|
15573
|
+
output[3] = r.length;
|
|
15574
|
+
output.set(r, 4);
|
|
15575
|
+
output[4 + lenR] = 0x02;
|
|
15576
|
+
output[5 + lenR] = s.length;
|
|
15577
|
+
output.set(s, 6 + lenR);
|
|
15578
|
+
|
|
15579
|
+
return 0
|
|
15580
|
+
},
|
|
15581
|
+
|
|
15582
|
+
// Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js
|
|
15583
|
+
// Adapted for Uint8Array instead Buffer
|
|
15584
|
+
signatureImport (output, sig) {
|
|
15585
|
+
if (sig.length < 8) return 1
|
|
15586
|
+
if (sig.length > 72) return 1
|
|
15587
|
+
if (sig[0] !== 0x30) return 1
|
|
15588
|
+
if (sig[1] !== sig.length - 2) return 1
|
|
15589
|
+
if (sig[2] !== 0x02) return 1
|
|
15590
|
+
|
|
15591
|
+
const lenR = sig[3];
|
|
15592
|
+
if (lenR === 0) return 1
|
|
15593
|
+
if (5 + lenR >= sig.length) return 1
|
|
15594
|
+
if (sig[4 + lenR] !== 0x02) return 1
|
|
15595
|
+
|
|
15596
|
+
const lenS = sig[5 + lenR];
|
|
15597
|
+
if (lenS === 0) return 1
|
|
15598
|
+
if ((6 + lenR + lenS) !== sig.length) return 1
|
|
15599
|
+
|
|
15600
|
+
if (sig[4] & 0x80) return 1
|
|
15601
|
+
if (lenR > 1 && (sig[4] === 0x00) && !(sig[5] & 0x80)) return 1
|
|
15602
|
+
|
|
15603
|
+
if (sig[lenR + 6] & 0x80) return 1
|
|
15604
|
+
if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1
|
|
15605
|
+
|
|
15606
|
+
let sigR = sig.subarray(4, 4 + lenR);
|
|
15607
|
+
if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1);
|
|
15608
|
+
if (sigR.length > 32) return 1
|
|
15609
|
+
|
|
15610
|
+
let sigS = sig.subarray(6 + lenR);
|
|
15611
|
+
if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1);
|
|
15612
|
+
if (sigS.length > 32) throw new Error('S length is too long')
|
|
15613
|
+
|
|
15614
|
+
let r = new BN(sigR);
|
|
15615
|
+
if (r.cmp(ecparams.n) >= 0) r = new BN(0);
|
|
15616
|
+
|
|
15617
|
+
let s = new BN(sig.subarray(6 + lenR));
|
|
15618
|
+
if (s.cmp(ecparams.n) >= 0) s = new BN(0);
|
|
15619
|
+
|
|
15620
|
+
output.set(r.toArrayLike(Uint8Array, 'be', 32), 0);
|
|
15621
|
+
output.set(s.toArrayLike(Uint8Array, 'be', 32), 32);
|
|
15622
|
+
|
|
15623
|
+
return 0
|
|
15624
|
+
},
|
|
15625
|
+
|
|
15626
|
+
ecdsaSign (obj, message, seckey, data, noncefn) {
|
|
15627
|
+
if (noncefn) {
|
|
15628
|
+
const _noncefn = noncefn;
|
|
15629
|
+
noncefn = (counter) => {
|
|
15630
|
+
const nonce = _noncefn(message, seckey, null, data, counter);
|
|
15631
|
+
|
|
15632
|
+
const isValid = nonce instanceof Uint8Array && nonce.length === 32;
|
|
15633
|
+
if (!isValid) throw new Error('This is the way')
|
|
15634
|
+
|
|
15635
|
+
return new BN(nonce)
|
|
15636
|
+
};
|
|
15637
|
+
}
|
|
15638
|
+
|
|
15639
|
+
const d = new BN(seckey);
|
|
15640
|
+
if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1
|
|
15641
|
+
|
|
15642
|
+
let sig;
|
|
15643
|
+
try {
|
|
15644
|
+
sig = ec.sign(message, seckey, { canonical: true, k: noncefn, pers: data });
|
|
15645
|
+
} catch (err) {
|
|
15646
|
+
return 1
|
|
15647
|
+
}
|
|
15648
|
+
|
|
15649
|
+
obj.signature.set(sig.r.toArrayLike(Uint8Array, 'be', 32), 0);
|
|
15650
|
+
obj.signature.set(sig.s.toArrayLike(Uint8Array, 'be', 32), 32);
|
|
15651
|
+
obj.recid = sig.recoveryParam;
|
|
15981
15652
|
|
|
15982
15653
|
return 0
|
|
15983
15654
|
},
|
|
15984
15655
|
|
|
15985
|
-
|
|
15986
|
-
const
|
|
15987
|
-
if (pair === null) return 1
|
|
15988
|
-
|
|
15989
|
-
tweak = new BN(tweak);
|
|
15990
|
-
if (tweak.cmp(ecparams.n) >= 0) return 2
|
|
15656
|
+
ecdsaVerify (sig, msg32, pubkey) {
|
|
15657
|
+
const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) };
|
|
15991
15658
|
|
|
15992
|
-
const
|
|
15993
|
-
|
|
15659
|
+
const sigr = new BN(sigObj.r);
|
|
15660
|
+
const sigs = new BN(sigObj.s);
|
|
15661
|
+
if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
|
|
15662
|
+
if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3
|
|
15994
15663
|
|
|
15995
|
-
|
|
15664
|
+
const pair = loadPublicKey(pubkey);
|
|
15665
|
+
if (pair === null) return 2
|
|
15996
15666
|
|
|
15997
|
-
|
|
15667
|
+
const point = pair.getPublic();
|
|
15668
|
+
const isValid = ec.verify(msg32, sigObj, point);
|
|
15669
|
+
return isValid ? 0 : 3
|
|
15998
15670
|
},
|
|
15999
15671
|
|
|
16000
|
-
|
|
16001
|
-
const
|
|
16002
|
-
if (pair === null) return 1
|
|
15672
|
+
ecdsaRecover (output, sig, recid, msg32) {
|
|
15673
|
+
const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) };
|
|
16003
15674
|
|
|
16004
|
-
|
|
16005
|
-
|
|
15675
|
+
const sigr = new BN(sigObj.r);
|
|
15676
|
+
const sigs = new BN(sigObj.s);
|
|
15677
|
+
if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
|
|
15678
|
+
|
|
15679
|
+
if (sigr.isZero() || sigs.isZero()) return 2
|
|
15680
|
+
|
|
15681
|
+
// Can throw `throw new Error('Unable to find sencond key candinate');`
|
|
15682
|
+
let point;
|
|
15683
|
+
try {
|
|
15684
|
+
point = ec.recoverPubKey(msg32, sigObj, recid);
|
|
15685
|
+
} catch (err) {
|
|
15686
|
+
return 2
|
|
15687
|
+
}
|
|
16006
15688
|
|
|
16007
|
-
const point = pair.getPublic().mul(tweak);
|
|
16008
15689
|
savePublicKey(output, point);
|
|
16009
15690
|
|
|
16010
15691
|
return 0
|
|
16011
15692
|
},
|
|
16012
15693
|
|
|
16013
|
-
|
|
16014
|
-
const
|
|
16015
|
-
|
|
16016
|
-
if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1
|
|
15694
|
+
ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {
|
|
15695
|
+
const pair = loadPublicKey(pubkey);
|
|
15696
|
+
if (pair === null) return 1
|
|
16017
15697
|
|
|
16018
|
-
|
|
16019
|
-
|
|
16020
|
-
}
|
|
15698
|
+
const scalar = new BN(seckey);
|
|
15699
|
+
if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2
|
|
16021
15700
|
|
|
16022
|
-
|
|
16023
|
-
},
|
|
15701
|
+
const point = pair.getPublic().mul(scalar);
|
|
16024
15702
|
|
|
16025
|
-
|
|
16026
|
-
|
|
16027
|
-
|
|
16028
|
-
|
|
16029
|
-
|
|
16030
|
-
|
|
16031
|
-
|
|
15703
|
+
if (hashfn === undefined) {
|
|
15704
|
+
const data = point.encode(null, true);
|
|
15705
|
+
const sha256 = ec.hash().update(data).digest();
|
|
15706
|
+
for (let i = 0; i < 32; ++i) output[i] = sha256[i];
|
|
15707
|
+
} else {
|
|
15708
|
+
if (!xbuf) xbuf = new Uint8Array(32);
|
|
15709
|
+
const x = point.getX().toArray('be', 32);
|
|
15710
|
+
for (let i = 0; i < 32; ++i) xbuf[i] = x[i];
|
|
16032
15711
|
|
|
16033
|
-
|
|
15712
|
+
if (!ybuf) ybuf = new Uint8Array(32);
|
|
15713
|
+
const y = point.getY().toArray('be', 32);
|
|
15714
|
+
for (let i = 0; i < 32; ++i) ybuf[i] = y[i];
|
|
16034
15715
|
|
|
16035
|
-
|
|
16036
|
-
let r = output.subarray(4, 4 + 33);
|
|
16037
|
-
r[0] = 0x00;
|
|
16038
|
-
r.set(sigR, 1);
|
|
15716
|
+
const hash = hashfn(xbuf, ybuf, data);
|
|
16039
15717
|
|
|
16040
|
-
|
|
16041
|
-
|
|
16042
|
-
for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
|
|
15718
|
+
const isValid = hash instanceof Uint8Array && hash.length === output.length;
|
|
15719
|
+
if (!isValid) return 2
|
|
16043
15720
|
|
|
16044
|
-
|
|
16045
|
-
|
|
16046
|
-
if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1
|
|
15721
|
+
output.set(hash);
|
|
15722
|
+
}
|
|
16047
15723
|
|
|
16048
|
-
|
|
16049
|
-
|
|
16050
|
-
|
|
16051
|
-
s.set(sigS, 1);
|
|
15724
|
+
return 0
|
|
15725
|
+
}
|
|
15726
|
+
};
|
|
16052
15727
|
|
|
16053
|
-
|
|
16054
|
-
let posS = 0;
|
|
16055
|
-
for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
|
|
15728
|
+
var elliptic = lib(elliptic$1);
|
|
16056
15729
|
|
|
16057
|
-
|
|
16058
|
-
if (s[0] & 0x80) return 1
|
|
16059
|
-
if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1
|
|
15730
|
+
var secp256k1 = /*@__PURE__*/getDefaultExportFromCjs(elliptic);
|
|
16060
15731
|
|
|
16061
|
-
|
|
16062
|
-
|
|
15732
|
+
const leofcoinOlivia = {
|
|
15733
|
+
messagePrefix: '\u0019Leofcoin Signed Message:',
|
|
15734
|
+
version: 1,
|
|
15735
|
+
pubKeyHash: 0x73,
|
|
15736
|
+
scriptHash: 0x76,
|
|
15737
|
+
multiTxHash: 0x8b4125,
|
|
15738
|
+
payments: {
|
|
15739
|
+
version: 0,
|
|
15740
|
+
unspent: 0x1fa443d7 // ounsp
|
|
15741
|
+
},
|
|
15742
|
+
wif: 0x7D,
|
|
15743
|
+
multiCodec: 0x7c4,
|
|
15744
|
+
bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
|
|
15745
|
+
};
|
|
15746
|
+
const bitcoinTestnet = {
|
|
15747
|
+
messagePrefix: '\x18Bitcoin Signed Message:\n',
|
|
15748
|
+
version: 1,
|
|
15749
|
+
bech32: 'tb',
|
|
15750
|
+
pubKeyHash: 0x6f,
|
|
15751
|
+
scriptHash: 0xc4,
|
|
15752
|
+
wif: 0xef,
|
|
15753
|
+
bip32: {
|
|
15754
|
+
public: 0x043587cf,
|
|
15755
|
+
private: 0x04358394
|
|
15756
|
+
},
|
|
15757
|
+
multiCodec: 0
|
|
15758
|
+
};
|
|
15759
|
+
var testnets = {
|
|
15760
|
+
'leofcoin:olivia': leofcoinOlivia,
|
|
15761
|
+
'bitcoin:testnet': bitcoinTestnet
|
|
15762
|
+
};
|
|
16063
15763
|
|
|
16064
|
-
|
|
16065
|
-
|
|
16066
|
-
|
|
16067
|
-
|
|
16068
|
-
|
|
16069
|
-
|
|
16070
|
-
|
|
16071
|
-
|
|
16072
|
-
|
|
16073
|
-
|
|
15764
|
+
// https://en.bitcoin.it/wiki/List_of_address_prefixes
|
|
15765
|
+
// usage:
|
|
15766
|
+
// networks['bitcoin']['testnet']
|
|
15767
|
+
// networks.bitcoin.testnet
|
|
15768
|
+
/**
|
|
15769
|
+
* Main network
|
|
15770
|
+
* @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
|
|
15771
|
+
*/
|
|
15772
|
+
const leofcoin = {
|
|
15773
|
+
messagePrefix: '\u0019Leofcoin Signed Message:',
|
|
15774
|
+
version: 1,
|
|
15775
|
+
pubKeyHash: 0x30,
|
|
15776
|
+
scriptHash: 0x37,
|
|
15777
|
+
multiTxHash: 0x3adeed,
|
|
15778
|
+
payments: {
|
|
15779
|
+
version: 0,
|
|
15780
|
+
unspent: 0x0d6e0327 // Lunsp
|
|
15781
|
+
},
|
|
15782
|
+
coin_type: 640,
|
|
15783
|
+
wif: 0x3F,
|
|
15784
|
+
multiCodec: 0x3c4,
|
|
15785
|
+
bip32: { public: 0x13BBF2D4, private: 0x13BBCBC4 },
|
|
15786
|
+
testnet: testnets['leofcoin:olivia']
|
|
15787
|
+
};
|
|
15788
|
+
const bitcoin = {
|
|
15789
|
+
messagePrefix: '\x18Bitcoin Signed Message:\n',
|
|
15790
|
+
version: 1,
|
|
15791
|
+
bech32: 'bc',
|
|
15792
|
+
pubKeyHash: 0x00,
|
|
15793
|
+
multiCodec: 0x00,
|
|
15794
|
+
scriptHash: 0x05,
|
|
15795
|
+
wif: 0x80,
|
|
15796
|
+
coin_type: 0,
|
|
15797
|
+
bip32: {
|
|
15798
|
+
public: 0x0488b21e, private: 0x0488ade4
|
|
15799
|
+
},
|
|
15800
|
+
testnet: testnets['bitcoin:testnet']
|
|
15801
|
+
};
|
|
15802
|
+
const litecoin = {
|
|
15803
|
+
messagePrefix: '\x19Litecoin Signed Message:\n',
|
|
15804
|
+
version: 1,
|
|
15805
|
+
pubKeyHash: 0x30,
|
|
15806
|
+
scriptHash: 0x32,
|
|
15807
|
+
wif: 0xb0,
|
|
15808
|
+
bip32: {
|
|
15809
|
+
public: 0x019da462,
|
|
15810
|
+
private: 0x019d9cfe
|
|
15811
|
+
},
|
|
15812
|
+
bech32: '',
|
|
15813
|
+
multiCodec: 0
|
|
15814
|
+
};
|
|
15815
|
+
const ethereum = {
|
|
15816
|
+
messagePrefix: '\x19Ethereum Signed Message:\n',
|
|
15817
|
+
version: 1,
|
|
15818
|
+
pubKeyHash: 0x30,
|
|
15819
|
+
scriptHash: 0x32,
|
|
15820
|
+
bip32: {
|
|
15821
|
+
private: 0x0488ADE4, public: 0x0488B21E
|
|
15822
|
+
},
|
|
15823
|
+
coin_type: 60,
|
|
15824
|
+
wif: 0x45,
|
|
15825
|
+
multiCodec: 0x3c5
|
|
15826
|
+
};
|
|
15827
|
+
/**
|
|
15828
|
+
* Our & supported networks
|
|
15829
|
+
* @return {leofcoin, olivia}
|
|
15830
|
+
*/
|
|
15831
|
+
var networks = {
|
|
15832
|
+
leofcoin,
|
|
15833
|
+
bitcoin,
|
|
15834
|
+
litecoin,
|
|
15835
|
+
ethereum
|
|
15836
|
+
};
|
|
16074
15837
|
|
|
16075
|
-
|
|
16076
|
-
|
|
15838
|
+
/*!
|
|
15839
|
+
* hash-wasm (https://www.npmjs.com/package/hash-wasm)
|
|
15840
|
+
* (c) Dani Biro
|
|
15841
|
+
* @license MIT
|
|
15842
|
+
*/
|
|
16077
15843
|
|
|
16078
|
-
|
|
16079
|
-
|
|
16080
|
-
|
|
16081
|
-
|
|
16082
|
-
|
|
16083
|
-
|
|
16084
|
-
|
|
16085
|
-
|
|
15844
|
+
/******************************************************************************
|
|
15845
|
+
Copyright (c) Microsoft Corporation.
|
|
15846
|
+
|
|
15847
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
15848
|
+
purpose with or without fee is hereby granted.
|
|
15849
|
+
|
|
15850
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
15851
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
15852
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
15853
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
15854
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
15855
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15856
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
15857
|
+
***************************************************************************** */
|
|
15858
|
+
/* global Reflect, Promise, SuppressedError, Symbol */
|
|
15859
|
+
|
|
15860
|
+
|
|
15861
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
15862
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15863
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15864
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15865
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15866
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15867
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15868
|
+
});
|
|
15869
|
+
}
|
|
15870
|
+
|
|
15871
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
15872
|
+
var e = new Error(message);
|
|
15873
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
15874
|
+
};
|
|
16086
15875
|
|
|
16087
|
-
|
|
16088
|
-
|
|
16089
|
-
|
|
16090
|
-
|
|
15876
|
+
class Mutex {
|
|
15877
|
+
constructor() {
|
|
15878
|
+
this.mutex = Promise.resolve();
|
|
15879
|
+
}
|
|
15880
|
+
lock() {
|
|
15881
|
+
let begin = () => { };
|
|
15882
|
+
this.mutex = this.mutex.then(() => new Promise(begin));
|
|
15883
|
+
return new Promise((res) => {
|
|
15884
|
+
begin = res;
|
|
15885
|
+
});
|
|
15886
|
+
}
|
|
15887
|
+
dispatch(fn) {
|
|
15888
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15889
|
+
const unlock = yield this.lock();
|
|
15890
|
+
try {
|
|
15891
|
+
return yield Promise.resolve(fn());
|
|
15892
|
+
}
|
|
15893
|
+
finally {
|
|
15894
|
+
unlock();
|
|
15895
|
+
}
|
|
15896
|
+
});
|
|
15897
|
+
}
|
|
15898
|
+
}
|
|
16091
15899
|
|
|
16092
|
-
|
|
16093
|
-
|
|
16094
|
-
|
|
15900
|
+
/* eslint-disable import/prefer-default-export */
|
|
15901
|
+
/* eslint-disable no-bitwise */
|
|
15902
|
+
var _a;
|
|
15903
|
+
function getGlobal() {
|
|
15904
|
+
if (typeof globalThis !== 'undefined')
|
|
15905
|
+
return globalThis;
|
|
15906
|
+
// eslint-disable-next-line no-restricted-globals
|
|
15907
|
+
if (typeof self !== 'undefined')
|
|
15908
|
+
return self;
|
|
15909
|
+
if (typeof window !== 'undefined')
|
|
15910
|
+
return window;
|
|
15911
|
+
return global;
|
|
15912
|
+
}
|
|
15913
|
+
const globalObject = getGlobal();
|
|
15914
|
+
const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
|
|
15915
|
+
const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
|
|
15916
|
+
function hexCharCodesToInt(a, b) {
|
|
15917
|
+
return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
|
|
15918
|
+
}
|
|
15919
|
+
function writeHexToUInt8(buf, str) {
|
|
15920
|
+
const size = str.length >> 1;
|
|
15921
|
+
for (let i = 0; i < size; i++) {
|
|
15922
|
+
const index = i << 1;
|
|
15923
|
+
buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
|
|
15924
|
+
}
|
|
15925
|
+
}
|
|
15926
|
+
function hexStringEqualsUInt8(str, buf) {
|
|
15927
|
+
if (str.length !== buf.length * 2) {
|
|
15928
|
+
return false;
|
|
15929
|
+
}
|
|
15930
|
+
for (let i = 0; i < buf.length; i++) {
|
|
15931
|
+
const strIndex = i << 1;
|
|
15932
|
+
if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
|
|
15933
|
+
return false;
|
|
15934
|
+
}
|
|
15935
|
+
}
|
|
15936
|
+
return true;
|
|
15937
|
+
}
|
|
15938
|
+
const alpha = 'a'.charCodeAt(0) - 10;
|
|
15939
|
+
const digit = '0'.charCodeAt(0);
|
|
15940
|
+
function getDigestHex(tmpBuffer, input, hashLength) {
|
|
15941
|
+
let p = 0;
|
|
15942
|
+
/* eslint-disable no-plusplus */
|
|
15943
|
+
for (let i = 0; i < hashLength; i++) {
|
|
15944
|
+
let nibble = input[i] >>> 4;
|
|
15945
|
+
tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
|
|
15946
|
+
nibble = input[i] & 0xF;
|
|
15947
|
+
tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
|
|
15948
|
+
}
|
|
15949
|
+
/* eslint-enable no-plusplus */
|
|
15950
|
+
return String.fromCharCode.apply(null, tmpBuffer);
|
|
15951
|
+
}
|
|
15952
|
+
const getUInt8Buffer = nodeBuffer !== null
|
|
15953
|
+
? (data) => {
|
|
15954
|
+
if (typeof data === 'string') {
|
|
15955
|
+
const buf = nodeBuffer.from(data, 'utf8');
|
|
15956
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
|
|
15957
|
+
}
|
|
15958
|
+
if (nodeBuffer.isBuffer(data)) {
|
|
15959
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.length);
|
|
15960
|
+
}
|
|
15961
|
+
if (ArrayBuffer.isView(data)) {
|
|
15962
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
15963
|
+
}
|
|
15964
|
+
throw new Error('Invalid data type!');
|
|
15965
|
+
}
|
|
15966
|
+
: (data) => {
|
|
15967
|
+
if (typeof data === 'string') {
|
|
15968
|
+
return textEncoder.encode(data);
|
|
15969
|
+
}
|
|
15970
|
+
if (ArrayBuffer.isView(data)) {
|
|
15971
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
15972
|
+
}
|
|
15973
|
+
throw new Error('Invalid data type!');
|
|
15974
|
+
};
|
|
15975
|
+
const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
15976
|
+
const base64Lookup = new Uint8Array(256);
|
|
15977
|
+
for (let i = 0; i < base64Chars.length; i++) {
|
|
15978
|
+
base64Lookup[base64Chars.charCodeAt(i)] = i;
|
|
15979
|
+
}
|
|
15980
|
+
function getDecodeBase64Length(data) {
|
|
15981
|
+
let bufferLength = Math.floor(data.length * 0.75);
|
|
15982
|
+
const len = data.length;
|
|
15983
|
+
if (data[len - 1] === '=') {
|
|
15984
|
+
bufferLength -= 1;
|
|
15985
|
+
if (data[len - 2] === '=') {
|
|
15986
|
+
bufferLength -= 1;
|
|
15987
|
+
}
|
|
15988
|
+
}
|
|
15989
|
+
return bufferLength;
|
|
15990
|
+
}
|
|
15991
|
+
function decodeBase64(data) {
|
|
15992
|
+
const bufferLength = getDecodeBase64Length(data);
|
|
15993
|
+
const len = data.length;
|
|
15994
|
+
const bytes = new Uint8Array(bufferLength);
|
|
15995
|
+
let p = 0;
|
|
15996
|
+
for (let i = 0; i < len; i += 4) {
|
|
15997
|
+
const encoded1 = base64Lookup[data.charCodeAt(i)];
|
|
15998
|
+
const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
|
|
15999
|
+
const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
|
|
16000
|
+
const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
|
|
16001
|
+
bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
|
|
16002
|
+
p += 1;
|
|
16003
|
+
bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
|
|
16004
|
+
p += 1;
|
|
16005
|
+
bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
|
|
16006
|
+
p += 1;
|
|
16007
|
+
}
|
|
16008
|
+
return bytes;
|
|
16009
|
+
}
|
|
16095
16010
|
|
|
16096
|
-
|
|
16097
|
-
|
|
16011
|
+
const MAX_HEAP = 16 * 1024;
|
|
16012
|
+
const WASM_FUNC_HASH_LENGTH = 4;
|
|
16013
|
+
const wasmMutex = new Mutex();
|
|
16014
|
+
const wasmModuleCache = new Map();
|
|
16015
|
+
function WASMInterface(binary, hashLength) {
|
|
16016
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16017
|
+
let wasmInstance = null;
|
|
16018
|
+
let memoryView = null;
|
|
16019
|
+
let initialized = false;
|
|
16020
|
+
if (typeof WebAssembly === 'undefined') {
|
|
16021
|
+
throw new Error('WebAssembly is not supported in this environment!');
|
|
16022
|
+
}
|
|
16023
|
+
const writeMemory = (data, offset = 0) => {
|
|
16024
|
+
memoryView.set(data, offset);
|
|
16025
|
+
};
|
|
16026
|
+
const getMemory = () => memoryView;
|
|
16027
|
+
const getExports = () => wasmInstance.exports;
|
|
16028
|
+
const setMemorySize = (totalSize) => {
|
|
16029
|
+
wasmInstance.exports.Hash_SetMemorySize(totalSize);
|
|
16030
|
+
const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
|
|
16031
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
16032
|
+
memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
|
|
16033
|
+
};
|
|
16034
|
+
const getStateSize = () => {
|
|
16035
|
+
const view = new DataView(wasmInstance.exports.memory.buffer);
|
|
16036
|
+
const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
|
|
16037
|
+
return stateSize;
|
|
16038
|
+
};
|
|
16039
|
+
const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
|
|
16040
|
+
if (!wasmModuleCache.has(binary.name)) {
|
|
16041
|
+
const asm = decodeBase64(binary.data);
|
|
16042
|
+
const promise = WebAssembly.compile(asm);
|
|
16043
|
+
wasmModuleCache.set(binary.name, promise);
|
|
16044
|
+
}
|
|
16045
|
+
const module = yield wasmModuleCache.get(binary.name);
|
|
16046
|
+
wasmInstance = yield WebAssembly.instantiate(module, {
|
|
16047
|
+
// env: {
|
|
16048
|
+
// emscripten_memcpy_big: (dest, src, num) => {
|
|
16049
|
+
// const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
16050
|
+
// const memView = new Uint8Array(memoryBuffer, 0);
|
|
16051
|
+
// memView.set(memView.subarray(src, src + num), dest);
|
|
16052
|
+
// },
|
|
16053
|
+
// print_memory: (offset, len) => {
|
|
16054
|
+
// const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
16055
|
+
// const memView = new Uint8Array(memoryBuffer, 0);
|
|
16056
|
+
// console.log('print_int32', memView.subarray(offset, offset + len));
|
|
16057
|
+
// },
|
|
16058
|
+
// },
|
|
16059
|
+
});
|
|
16060
|
+
// wasmInstance.exports._start();
|
|
16061
|
+
}));
|
|
16062
|
+
const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
|
|
16063
|
+
if (!wasmInstance) {
|
|
16064
|
+
yield loadWASMPromise;
|
|
16065
|
+
}
|
|
16066
|
+
const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
|
|
16067
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
16068
|
+
memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
|
|
16069
|
+
});
|
|
16070
|
+
const init = (bits = null) => {
|
|
16071
|
+
initialized = true;
|
|
16072
|
+
wasmInstance.exports.Hash_Init(bits);
|
|
16073
|
+
};
|
|
16074
|
+
const updateUInt8Array = (data) => {
|
|
16075
|
+
let read = 0;
|
|
16076
|
+
while (read < data.length) {
|
|
16077
|
+
const chunk = data.subarray(read, read + MAX_HEAP);
|
|
16078
|
+
read += chunk.length;
|
|
16079
|
+
memoryView.set(chunk);
|
|
16080
|
+
wasmInstance.exports.Hash_Update(chunk.length);
|
|
16081
|
+
}
|
|
16082
|
+
};
|
|
16083
|
+
const update = (data) => {
|
|
16084
|
+
if (!initialized) {
|
|
16085
|
+
throw new Error('update() called before init()');
|
|
16086
|
+
}
|
|
16087
|
+
const Uint8Buffer = getUInt8Buffer(data);
|
|
16088
|
+
updateUInt8Array(Uint8Buffer);
|
|
16089
|
+
};
|
|
16090
|
+
const digestChars = new Uint8Array(hashLength * 2);
|
|
16091
|
+
const digest = (outputType, padding = null) => {
|
|
16092
|
+
if (!initialized) {
|
|
16093
|
+
throw new Error('digest() called before init()');
|
|
16094
|
+
}
|
|
16095
|
+
initialized = false;
|
|
16096
|
+
wasmInstance.exports.Hash_Final(padding);
|
|
16097
|
+
if (outputType === 'binary') {
|
|
16098
|
+
// the data is copied to allow GC of the original memory object
|
|
16099
|
+
return memoryView.slice(0, hashLength);
|
|
16100
|
+
}
|
|
16101
|
+
return getDigestHex(digestChars, memoryView, hashLength);
|
|
16102
|
+
};
|
|
16103
|
+
const save = () => {
|
|
16104
|
+
if (!initialized) {
|
|
16105
|
+
throw new Error('save() can only be called after init() and before digest()');
|
|
16106
|
+
}
|
|
16107
|
+
const stateOffset = wasmInstance.exports.Hash_GetState();
|
|
16108
|
+
const stateLength = getStateSize();
|
|
16109
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
16110
|
+
const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
|
|
16111
|
+
// prefix is 4 bytes from SHA1 hash of the WASM binary
|
|
16112
|
+
// it is used to detect incompatible internal states between different versions of hash-wasm
|
|
16113
|
+
const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
|
|
16114
|
+
writeHexToUInt8(prefixedState, binary.hash);
|
|
16115
|
+
prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
|
|
16116
|
+
return prefixedState;
|
|
16117
|
+
};
|
|
16118
|
+
const load = (state) => {
|
|
16119
|
+
if (!(state instanceof Uint8Array)) {
|
|
16120
|
+
throw new Error('load() expects an Uint8Array generated by save()');
|
|
16121
|
+
}
|
|
16122
|
+
const stateOffset = wasmInstance.exports.Hash_GetState();
|
|
16123
|
+
const stateLength = getStateSize();
|
|
16124
|
+
const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
|
|
16125
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
16126
|
+
if (state.length !== overallLength) {
|
|
16127
|
+
throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
|
|
16128
|
+
}
|
|
16129
|
+
if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
|
|
16130
|
+
throw new Error('This state was written by an incompatible hash implementation');
|
|
16131
|
+
}
|
|
16132
|
+
const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
|
|
16133
|
+
new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
|
|
16134
|
+
initialized = true;
|
|
16135
|
+
};
|
|
16136
|
+
const isDataShort = (data) => {
|
|
16137
|
+
if (typeof data === 'string') {
|
|
16138
|
+
// worst case is 4 bytes / char
|
|
16139
|
+
return data.length < MAX_HEAP / 4;
|
|
16140
|
+
}
|
|
16141
|
+
return data.byteLength < MAX_HEAP;
|
|
16142
|
+
};
|
|
16143
|
+
let canSimplify = isDataShort;
|
|
16144
|
+
switch (binary.name) {
|
|
16145
|
+
case 'argon2':
|
|
16146
|
+
case 'scrypt':
|
|
16147
|
+
canSimplify = () => true;
|
|
16148
|
+
break;
|
|
16149
|
+
case 'blake2b':
|
|
16150
|
+
case 'blake2s':
|
|
16151
|
+
// if there is a key at blake2 then cannot simplify
|
|
16152
|
+
canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
|
|
16153
|
+
break;
|
|
16154
|
+
case 'blake3':
|
|
16155
|
+
// if there is a key at blake3 then cannot simplify
|
|
16156
|
+
canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
|
|
16157
|
+
break;
|
|
16158
|
+
case 'xxhash64': // cannot simplify
|
|
16159
|
+
case 'xxhash3':
|
|
16160
|
+
case 'xxhash128':
|
|
16161
|
+
canSimplify = () => false;
|
|
16162
|
+
break;
|
|
16163
|
+
}
|
|
16164
|
+
// shorthand for (init + update + digest) for better performance
|
|
16165
|
+
const calculate = (data, initParam = null, digestParam = null) => {
|
|
16166
|
+
if (!canSimplify(data, initParam)) {
|
|
16167
|
+
init(initParam);
|
|
16168
|
+
update(data);
|
|
16169
|
+
return digest('hex', digestParam);
|
|
16170
|
+
}
|
|
16171
|
+
const buffer = getUInt8Buffer(data);
|
|
16172
|
+
memoryView.set(buffer);
|
|
16173
|
+
wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
|
|
16174
|
+
return getDigestHex(digestChars, memoryView, hashLength);
|
|
16175
|
+
};
|
|
16176
|
+
yield setupInterface();
|
|
16177
|
+
return {
|
|
16178
|
+
getMemory,
|
|
16179
|
+
writeMemory,
|
|
16180
|
+
getExports,
|
|
16181
|
+
setMemorySize,
|
|
16182
|
+
init,
|
|
16183
|
+
update,
|
|
16184
|
+
digest,
|
|
16185
|
+
save,
|
|
16186
|
+
load,
|
|
16187
|
+
calculate,
|
|
16188
|
+
hashLength,
|
|
16189
|
+
};
|
|
16190
|
+
});
|
|
16191
|
+
}
|
|
16098
16192
|
|
|
16099
|
-
|
|
16100
|
-
if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1
|
|
16193
|
+
new Mutex();
|
|
16101
16194
|
|
|
16102
|
-
|
|
16103
|
-
if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1);
|
|
16104
|
-
if (sigR.length > 32) return 1
|
|
16195
|
+
new Mutex();
|
|
16105
16196
|
|
|
16106
|
-
|
|
16107
|
-
if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1);
|
|
16108
|
-
if (sigS.length > 32) throw new Error('S length is too long')
|
|
16197
|
+
new Mutex();
|
|
16109
16198
|
|
|
16110
|
-
|
|
16111
|
-
if (r.cmp(ecparams.n) >= 0) r = new BN(0);
|
|
16199
|
+
new Mutex();
|
|
16112
16200
|
|
|
16113
|
-
|
|
16114
|
-
if (s.cmp(ecparams.n) >= 0) s = new BN(0);
|
|
16201
|
+
new Mutex();
|
|
16115
16202
|
|
|
16116
|
-
|
|
16117
|
-
output.set(s.toArrayLike(Uint8Array, 'be', 32), 32);
|
|
16203
|
+
new Mutex();
|
|
16118
16204
|
|
|
16119
|
-
|
|
16120
|
-
},
|
|
16205
|
+
new Mutex();
|
|
16121
16206
|
|
|
16122
|
-
|
|
16123
|
-
if (noncefn) {
|
|
16124
|
-
const _noncefn = noncefn;
|
|
16125
|
-
noncefn = (counter) => {
|
|
16126
|
-
const nonce = _noncefn(message, seckey, null, data, counter);
|
|
16207
|
+
new Mutex();
|
|
16127
16208
|
|
|
16128
|
-
|
|
16129
|
-
if (!isValid) throw new Error('This is the way')
|
|
16209
|
+
new Mutex();
|
|
16130
16210
|
|
|
16131
|
-
|
|
16132
|
-
|
|
16133
|
-
|
|
16211
|
+
var name$b = "sha3";
|
|
16212
|
+
var data$b = "AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKqBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAQgAEsNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+QLAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA9CKASEVQQApA+CKASEWQQApA9iKASEXDAELQQApA+CKASAAKQNghSEWQQApA9iKASAAKQNYhSEXQQApA9CKASAAKQNQhSEVIBQgACkDSIUhFCABQekASQ0AQQBBACkD6IoBIAApA2iFNwPoigFBAEEAKQPwigEgACkDcIU3A/CKAUEAQQApA/iKASAAKQN4hTcD+IoBQQBBACkDgIsBIAApA4ABhTcDgIsBIAFBiQFJDQBBAEEAKQOIiwEgACkDiAGFNwOIiwELIAMgAoUhGCAFIASFIRkgByAGhSEHIAkgCIUhCCALIAqFIRogDSAMhSEJIA8gDoUhCiARIBCFIQsgEyAShSEMQQApA7iLASESQQApA5CLASETQQApA+iKASEbQQApA6CLASEcQQApA/iKASENQQApA7CLASEdQQApA4iLASEOQQApA8CLASEPQQApA5iLASEeQQApA/CKASEQQQApA6iLASERQQApA4CLASEfQcB+IQADQCAaIAcgC4UgF4UgH4UgEYVCAYmFIBSFIBCFIB6FIA+FIQIgDCAZIAqFIBaFIA6FIB2FQgGJhSAIhSAVhSANhSAchSIDIAeFISAgCSAIIAyFIBWFIA2FIByFQgGJhSAYhSAbhSAThSAShSIEIA+FISEgGCAKIBQgGoUgEIUgHoUgD4VCAYmFIBmFIBaFIA6FIB2FIgWFQjeJIiIgCyAYIAmFIBuFIBOFIBKFQgGJhSAHhSAXhSAfhSARhSIGIAqFQj6JIiNCf4WDIAMgEYVCAokiJIUhDyANIAKFQimJIiUgBCAQhUIniSImQn+FgyAihSERIBIgBYVCOIkiEiAGIA6FQg+JIidCf4WDIAMgF4VCCokiKIUhDiAEIBqFQhuJIikgKCAIIAKFQiSJIipCf4WDhSENIAYgGYVCBokiKyADIAuFQgGJIixCf4WDIBwgAoVCEokiLYUhECArIAQgHoVCCIkiLiAbIAWFQhmJIhtCf4WDhSEXIAYgHYVCPYkiGSAEIBSFQhSJIgQgCSAFhUIciSIIQn+Fg4UhFCAIIBlCf4WDIAMgH4VCLYkiA4UhGCAZIANCf4WDIBUgAoVCA4kiCYUhGSAEIAMgCUJ/hYOFIQcgCSAEQn+FgyAIhSEIIAwgAoUiAiAhQg6JIgNCf4WDIBMgBYVCFYkiBIUhCSAGIBaFQiuJIgUgAyAEQn+Fg4UhCiAEIAVCf4WDICBCLIkiBIUhCyAAQdAJaikDACAFIARCf4WDhSAChSEMICcgKEJ/hYMgKoUiBSEfIAMgBCACQn+Fg4UiAiEaICogKUJ/hYMgEoUiAyEeIC0gLkJ/hYMgG4UiBCEWICYgJCAlQn+Fg4UiBiEdIBsgK0J/hYMgLIUiKCEVICMgJiAiQn+Fg4UiIiEcIC4gLCAtQn+Fg4UiJiEbICcgKSASQn+Fg4UiJyETICMgJEJ/hYMgJYUiIyESIABBCGoiAA0AC0EAIBE3A6iLAUEAIAU3A4CLAUEAIBc3A9iKAUEAIAc3A7CKAUEAIAs3A4iKAUEAIA83A8CLAUEAIAM3A5iLAUEAIBA3A/CKAUEAIBQ3A8iKAUEAIAI3A6CKAUEAIAY3A7CLAUEAIA43A4iLAUEAIAQ3A+CKAUEAIBk3A7iKAUEAIAo3A5CKAUEAICI3A6CLAUEAIA03A/iKAUEAICg3A9CKAUEAIAg3A6iKAUEAIAw3A4CKAUEAICM3A7iLAUEAICc3A5CLAUEAICY3A+iKAUEAIBg3A8CKAUEAIAk3A5iKAQv4AgEFf0HkAEEAKAKMjQEiAUEBdmshAgJAQQAoAoiNASIDQQBIDQAgASEEAkAgASADRg0AIANByIsBaiEFQQAhAwNAIAUgA2pBADoAACADQQFqIgMgAUEAKAKIjQEiBGtJDQALCyAEQciLAWoiAyADLQAAIAByOgAAIAFBx4sBaiIDIAMtAABBgAFyOgAAQciLASABEANBAEGAgICAeDYCiI0BCwJAIAJBBEkNACACQQJ2IgNBA3EhBUEAIQQCQCADQX9qQQNJDQAgA0H8////A3EhAUEAIQNBACEEA0AgA0GACmogA0GAigFqKAIANgIAIANBhApqIANBhIoBaigCADYCACADQYgKaiADQYiKAWooAgA2AgAgA0GMCmogA0GMigFqKAIANgIAIANBEGohAyABIARBBGoiBEcNAAsLIAVFDQAgBUECdCEBIARBAnQhAwNAIANBgApqIANBgIoBaigCADYCACADQQRqIQMgAUF8aiIBDQALCwsGAEGAigEL0QYBA39BAEIANwOAjQFBAEIANwP4jAFBAEIANwPwjAFBAEIANwPojAFBAEIANwPgjAFBAEIANwPYjAFBAEIANwPQjAFBAEIANwPIjAFBAEIANwPAjAFBAEIANwO4jAFBAEIANwOwjAFBAEIANwOojAFBAEIANwOgjAFBAEIANwOYjAFBAEIANwOQjAFBAEIANwOIjAFBAEIANwOAjAFBAEIANwP4iwFBAEIANwPwiwFBAEIANwPoiwFBAEIANwPgiwFBAEIANwPYiwFBAEIANwPQiwFBAEIANwPIiwFBAEIANwPAiwFBAEIANwO4iwFBAEIANwOwiwFBAEIANwOoiwFBAEIANwOgiwFBAEIANwOYiwFBAEIANwOQiwFBAEIANwOIiwFBAEIANwOAiwFBAEIANwP4igFBAEIANwPwigFBAEIANwPoigFBAEIANwPgigFBAEIANwPYigFBAEIANwPQigFBAEIANwPIigFBAEIANwPAigFBAEIANwO4igFBAEIANwOwigFBAEIANwOoigFBAEIANwOgigFBAEIANwOYigFBAEIANwOQigFBAEIANwOIigFBAEIANwOAigFBAEHADCABQQF0a0EDdjYCjI0BQQBBADYCiI0BIAAQAkHkAEEAKAKMjQEiAEEBdmshAwJAQQAoAoiNASIBQQBIDQAgACEEAkAgACABRg0AIAFByIsBaiEFQQAhAQNAIAUgAWpBADoAACABQQFqIgEgAEEAKAKIjQEiBGtJDQALCyAEQciLAWoiASABLQAAIAJyOgAAIABBx4sBaiIBIAEtAABBgAFyOgAAQciLASAAEANBAEGAgICAeDYCiI0BCwJAIANBBEkNACADQQJ2IgFBA3EhBUEAIQQCQCABQX9qQQNJDQAgAUH8////A3EhAEEAIQFBACEEA0AgAUGACmogAUGAigFqKAIANgIAIAFBhApqIAFBhIoBaigCADYCACABQYgKaiABQYiKAWooAgA2AgAgAUGMCmogAUGMigFqKAIANgIAIAFBEGohASAAIARBBGoiBEcNAAsLIAVFDQAgBUECdCEAIARBAnQhAQNAIAFBgApqIAFBgIoBaigCADYCACABQQRqIQEgAEF8aiIADQALCwsL2AEBAEGACAvQAZABAAAAAAAAAAAAAAAAAAABAAAAAAAAAIKAAAAAAAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAACIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKAAAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgAAAAIA=";
|
|
16213
|
+
var hash$b = "f2f6f5b2";
|
|
16214
|
+
var wasmJson$b = {
|
|
16215
|
+
name: name$b,
|
|
16216
|
+
data: data$b,
|
|
16217
|
+
hash: hash$b
|
|
16218
|
+
};
|
|
16134
16219
|
|
|
16135
|
-
|
|
16136
|
-
if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1
|
|
16220
|
+
new Mutex();
|
|
16137
16221
|
|
|
16138
|
-
|
|
16139
|
-
|
|
16140
|
-
|
|
16141
|
-
|
|
16142
|
-
return 1
|
|
16222
|
+
new Mutex();
|
|
16223
|
+
function validateBits(bits) {
|
|
16224
|
+
if (![224, 256, 384, 512].includes(bits)) {
|
|
16225
|
+
return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
|
|
16143
16226
|
}
|
|
16144
|
-
|
|
16145
|
-
|
|
16146
|
-
|
|
16147
|
-
|
|
16148
|
-
|
|
16149
|
-
|
|
16150
|
-
|
|
16151
|
-
|
|
16152
|
-
|
|
16153
|
-
const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) };
|
|
16154
|
-
|
|
16155
|
-
const sigr = new BN(sigObj.r);
|
|
16156
|
-
const sigs = new BN(sigObj.s);
|
|
16157
|
-
if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
|
|
16158
|
-
if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3
|
|
16159
|
-
|
|
16160
|
-
const pair = loadPublicKey(pubkey);
|
|
16161
|
-
if (pair === null) return 2
|
|
16162
|
-
|
|
16163
|
-
const point = pair.getPublic();
|
|
16164
|
-
const isValid = ec.verify(msg32, sigObj, point);
|
|
16165
|
-
return isValid ? 0 : 3
|
|
16166
|
-
},
|
|
16167
|
-
|
|
16168
|
-
ecdsaRecover (output, sig, recid, msg32) {
|
|
16169
|
-
const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) };
|
|
16170
|
-
|
|
16171
|
-
const sigr = new BN(sigObj.r);
|
|
16172
|
-
const sigs = new BN(sigObj.s);
|
|
16173
|
-
if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
|
|
16174
|
-
|
|
16175
|
-
if (sigr.isZero() || sigs.isZero()) return 2
|
|
16176
|
-
|
|
16177
|
-
// Can throw `throw new Error('Unable to find sencond key candinate');`
|
|
16178
|
-
let point;
|
|
16179
|
-
try {
|
|
16180
|
-
point = ec.recoverPubKey(msg32, sigObj, recid);
|
|
16181
|
-
} catch (err) {
|
|
16182
|
-
return 2
|
|
16227
|
+
return null;
|
|
16228
|
+
}
|
|
16229
|
+
/**
|
|
16230
|
+
* Creates a new Keccak hash instance
|
|
16231
|
+
* @param bits Number of output bits. Valid values: 224, 256, 384, 512
|
|
16232
|
+
*/
|
|
16233
|
+
function createKeccak(bits = 512) {
|
|
16234
|
+
if (validateBits(bits)) {
|
|
16235
|
+
return Promise.reject(validateBits(bits));
|
|
16183
16236
|
}
|
|
16237
|
+
const outputSize = bits / 8;
|
|
16238
|
+
return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
|
|
16239
|
+
wasm.init(bits);
|
|
16240
|
+
const obj = {
|
|
16241
|
+
init: () => { wasm.init(bits); return obj; },
|
|
16242
|
+
update: (data) => { wasm.update(data); return obj; },
|
|
16243
|
+
digest: (outputType) => wasm.digest(outputType, 0x01),
|
|
16244
|
+
save: () => wasm.save(),
|
|
16245
|
+
load: (data) => { wasm.load(data); return obj; },
|
|
16246
|
+
blockSize: 200 - 2 * outputSize,
|
|
16247
|
+
digestSize: outputSize,
|
|
16248
|
+
};
|
|
16249
|
+
return obj;
|
|
16250
|
+
});
|
|
16251
|
+
}
|
|
16184
16252
|
|
|
16185
|
-
|
|
16186
|
-
|
|
16187
|
-
return 0
|
|
16188
|
-
},
|
|
16189
|
-
|
|
16190
|
-
ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {
|
|
16191
|
-
const pair = loadPublicKey(pubkey);
|
|
16192
|
-
if (pair === null) return 1
|
|
16193
|
-
|
|
16194
|
-
const scalar = new BN(seckey);
|
|
16195
|
-
if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2
|
|
16196
|
-
|
|
16197
|
-
const point = pair.getPublic().mul(scalar);
|
|
16253
|
+
new Mutex();
|
|
16198
16254
|
|
|
16199
|
-
|
|
16200
|
-
const data = point.encode(null, true);
|
|
16201
|
-
const sha256 = ec.hash().update(data).digest();
|
|
16202
|
-
for (let i = 0; i < 32; ++i) output[i] = sha256[i];
|
|
16203
|
-
} else {
|
|
16204
|
-
if (!xbuf) xbuf = new Uint8Array(32);
|
|
16205
|
-
const x = point.getX().toArray('be', 32);
|
|
16206
|
-
for (let i = 0; i < 32; ++i) xbuf[i] = x[i];
|
|
16255
|
+
new Mutex();
|
|
16207
16256
|
|
|
16208
|
-
|
|
16209
|
-
const y = point.getY().toArray('be', 32);
|
|
16210
|
-
|
|
16257
|
+
var name$9 = "sha512";
|
|
16258
|
+
var data$9 = "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";
|
|
16259
|
+
var hash$9 = "cdd57f6a";
|
|
16260
|
+
var wasmJson$9 = {
|
|
16261
|
+
name: name$9,
|
|
16262
|
+
data: data$9,
|
|
16263
|
+
hash: hash$9
|
|
16264
|
+
};
|
|
16211
16265
|
|
|
16212
|
-
|
|
16266
|
+
new Mutex();
|
|
16213
16267
|
|
|
16214
|
-
|
|
16215
|
-
|
|
16268
|
+
new Mutex();
|
|
16269
|
+
/**
|
|
16270
|
+
* Creates a new SHA-2 (SHA-512) hash instance
|
|
16271
|
+
*/
|
|
16272
|
+
function createSHA512() {
|
|
16273
|
+
return WASMInterface(wasmJson$9, 64).then((wasm) => {
|
|
16274
|
+
wasm.init(512);
|
|
16275
|
+
const obj = {
|
|
16276
|
+
init: () => { wasm.init(512); return obj; },
|
|
16277
|
+
update: (data) => { wasm.update(data); return obj; },
|
|
16278
|
+
digest: (outputType) => wasm.digest(outputType),
|
|
16279
|
+
save: () => wasm.save(),
|
|
16280
|
+
load: (data) => { wasm.load(data); return obj; },
|
|
16281
|
+
blockSize: 128,
|
|
16282
|
+
digestSize: 64,
|
|
16283
|
+
};
|
|
16284
|
+
return obj;
|
|
16285
|
+
});
|
|
16286
|
+
}
|
|
16216
16287
|
|
|
16217
|
-
|
|
16218
|
-
}
|
|
16288
|
+
new Mutex();
|
|
16219
16289
|
|
|
16220
|
-
|
|
16221
|
-
}
|
|
16222
|
-
};
|
|
16290
|
+
new Mutex();
|
|
16223
16291
|
|
|
16224
|
-
|
|
16292
|
+
new Mutex();
|
|
16225
16293
|
|
|
16226
|
-
|
|
16294
|
+
new Mutex();
|
|
16227
16295
|
|
|
16228
|
-
|
|
16229
|
-
|
|
16230
|
-
|
|
16231
|
-
|
|
16232
|
-
|
|
16233
|
-
|
|
16234
|
-
|
|
16235
|
-
version: 0,
|
|
16236
|
-
unspent: 0x1fa443d7 // ounsp
|
|
16237
|
-
},
|
|
16238
|
-
wif: 0x7D,
|
|
16239
|
-
multiCodec: 0x7c4,
|
|
16240
|
-
bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
|
|
16241
|
-
};
|
|
16242
|
-
const bitcoinTestnet = {
|
|
16243
|
-
messagePrefix: '\x18Bitcoin Signed Message:\n',
|
|
16244
|
-
version: 1,
|
|
16245
|
-
bech32: 'tb',
|
|
16246
|
-
pubKeyHash: 0x6f,
|
|
16247
|
-
scriptHash: 0xc4,
|
|
16248
|
-
wif: 0xef,
|
|
16249
|
-
bip32: {
|
|
16250
|
-
public: 0x043587cf,
|
|
16251
|
-
private: 0x04358394
|
|
16252
|
-
},
|
|
16253
|
-
multiCodec: 0
|
|
16254
|
-
};
|
|
16255
|
-
var testnets = {
|
|
16256
|
-
'leofcoin:olivia': leofcoinOlivia,
|
|
16257
|
-
'bitcoin:testnet': bitcoinTestnet
|
|
16296
|
+
var name$4 = "ripemd160";
|
|
16297
|
+
var data$4 = "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";
|
|
16298
|
+
var hash$4 = "c089a7ca";
|
|
16299
|
+
var wasmJson$4 = {
|
|
16300
|
+
name: name$4,
|
|
16301
|
+
data: data$4,
|
|
16302
|
+
hash: hash$4
|
|
16258
16303
|
};
|
|
16259
16304
|
|
|
16260
|
-
|
|
16261
|
-
// usage:
|
|
16262
|
-
// networks['bitcoin']['testnet']
|
|
16263
|
-
// networks.bitcoin.testnet
|
|
16305
|
+
new Mutex();
|
|
16264
16306
|
/**
|
|
16265
|
-
*
|
|
16266
|
-
* @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
|
|
16307
|
+
* Creates a new RIPEMD-160 hash instance
|
|
16267
16308
|
*/
|
|
16268
|
-
|
|
16269
|
-
|
|
16270
|
-
|
|
16271
|
-
|
|
16272
|
-
|
|
16273
|
-
|
|
16274
|
-
|
|
16275
|
-
|
|
16276
|
-
|
|
16277
|
-
|
|
16278
|
-
|
|
16279
|
-
|
|
16280
|
-
|
|
16281
|
-
|
|
16282
|
-
|
|
16283
|
-
|
|
16284
|
-
|
|
16285
|
-
|
|
16286
|
-
|
|
16287
|
-
|
|
16288
|
-
|
|
16289
|
-
|
|
16290
|
-
|
|
16291
|
-
|
|
16292
|
-
|
|
16293
|
-
|
|
16294
|
-
|
|
16295
|
-
|
|
16296
|
-
|
|
16297
|
-
};
|
|
16298
|
-
const
|
|
16299
|
-
|
|
16300
|
-
|
|
16301
|
-
|
|
16302
|
-
|
|
16303
|
-
|
|
16304
|
-
|
|
16305
|
-
|
|
16306
|
-
|
|
16307
|
-
|
|
16308
|
-
|
|
16309
|
-
|
|
16310
|
-
|
|
16311
|
-
|
|
16312
|
-
|
|
16313
|
-
|
|
16314
|
-
|
|
16315
|
-
|
|
16316
|
-
|
|
16317
|
-
|
|
16318
|
-
|
|
16319
|
-
|
|
16320
|
-
|
|
16321
|
-
|
|
16322
|
-
|
|
16309
|
+
function createRIPEMD160() {
|
|
16310
|
+
return WASMInterface(wasmJson$4, 20).then((wasm) => {
|
|
16311
|
+
wasm.init();
|
|
16312
|
+
const obj = {
|
|
16313
|
+
init: () => { wasm.init(); return obj; },
|
|
16314
|
+
update: (data) => { wasm.update(data); return obj; },
|
|
16315
|
+
digest: (outputType) => wasm.digest(outputType),
|
|
16316
|
+
save: () => wasm.save(),
|
|
16317
|
+
load: (data) => { wasm.load(data); return obj; },
|
|
16318
|
+
blockSize: 64,
|
|
16319
|
+
digestSize: 20,
|
|
16320
|
+
};
|
|
16321
|
+
return obj;
|
|
16322
|
+
});
|
|
16323
|
+
}
|
|
16324
|
+
|
|
16325
|
+
function calculateKeyBuffer(hasher, key) {
|
|
16326
|
+
const { blockSize } = hasher;
|
|
16327
|
+
const buf = getUInt8Buffer(key);
|
|
16328
|
+
if (buf.length > blockSize) {
|
|
16329
|
+
hasher.update(buf);
|
|
16330
|
+
const uintArr = hasher.digest('binary');
|
|
16331
|
+
hasher.init();
|
|
16332
|
+
return uintArr;
|
|
16333
|
+
}
|
|
16334
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
|
|
16335
|
+
}
|
|
16336
|
+
function calculateHmac(hasher, key) {
|
|
16337
|
+
hasher.init();
|
|
16338
|
+
const { blockSize } = hasher;
|
|
16339
|
+
const keyBuf = calculateKeyBuffer(hasher, key);
|
|
16340
|
+
const keyBuffer = new Uint8Array(blockSize);
|
|
16341
|
+
keyBuffer.set(keyBuf);
|
|
16342
|
+
const opad = new Uint8Array(blockSize);
|
|
16343
|
+
for (let i = 0; i < blockSize; i++) {
|
|
16344
|
+
const v = keyBuffer[i];
|
|
16345
|
+
opad[i] = v ^ 0x5C;
|
|
16346
|
+
keyBuffer[i] = v ^ 0x36;
|
|
16347
|
+
}
|
|
16348
|
+
hasher.update(keyBuffer);
|
|
16349
|
+
const obj = {
|
|
16350
|
+
init: () => {
|
|
16351
|
+
hasher.init();
|
|
16352
|
+
hasher.update(keyBuffer);
|
|
16353
|
+
return obj;
|
|
16354
|
+
},
|
|
16355
|
+
update: (data) => {
|
|
16356
|
+
hasher.update(data);
|
|
16357
|
+
return obj;
|
|
16358
|
+
},
|
|
16359
|
+
digest: ((outputType) => {
|
|
16360
|
+
const uintArr = hasher.digest('binary');
|
|
16361
|
+
hasher.init();
|
|
16362
|
+
hasher.update(opad);
|
|
16363
|
+
hasher.update(uintArr);
|
|
16364
|
+
return hasher.digest(outputType);
|
|
16365
|
+
}),
|
|
16366
|
+
save: () => {
|
|
16367
|
+
throw new Error('save() not supported');
|
|
16368
|
+
},
|
|
16369
|
+
load: () => {
|
|
16370
|
+
throw new Error('load() not supported');
|
|
16371
|
+
},
|
|
16372
|
+
blockSize: hasher.blockSize,
|
|
16373
|
+
digestSize: hasher.digestSize,
|
|
16374
|
+
};
|
|
16375
|
+
return obj;
|
|
16376
|
+
}
|
|
16323
16377
|
/**
|
|
16324
|
-
*
|
|
16325
|
-
* @return
|
|
16378
|
+
* Calculates HMAC hash
|
|
16379
|
+
* @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
|
|
16380
|
+
* @param key Key (string, Buffer or TypedArray)
|
|
16326
16381
|
*/
|
|
16327
|
-
|
|
16328
|
-
|
|
16329
|
-
|
|
16330
|
-
|
|
16331
|
-
|
|
16332
|
-
}
|
|
16382
|
+
function createHMAC(hash, key) {
|
|
16383
|
+
if (!hash || !hash.then) {
|
|
16384
|
+
throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
|
|
16385
|
+
}
|
|
16386
|
+
return hash.then((hasher) => calculateHmac(hasher, key));
|
|
16387
|
+
}
|
|
16333
16388
|
|
|
16334
|
-
|
|
16335
|
-
|
|
16336
|
-
|
|
16337
|
-
|
|
16338
|
-
const encode$2 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
|
|
16339
|
-
if (!(source instanceof Uint8Array) || !(prefix instanceof Uint8Array)) {
|
|
16340
|
-
throw new TypeError('Expected Uint8Array');
|
|
16341
|
-
}
|
|
16342
|
-
const hash = await concatAndDoubleHash([
|
|
16343
|
-
prefix,
|
|
16344
|
-
source
|
|
16345
|
-
]);
|
|
16346
|
-
const uint8Array = typedArrayConcat([
|
|
16347
|
-
prefix,
|
|
16348
|
-
source,
|
|
16349
|
-
hash.subarray(0, 4)
|
|
16350
|
-
]);
|
|
16351
|
-
if (hex)
|
|
16352
|
-
return base58$1.encodeHex(uint8Array);
|
|
16353
|
-
return base58$1.encode(uint8Array);
|
|
16354
|
-
};
|
|
16355
|
-
const decode$2 = async (string, hex) => {
|
|
16356
|
-
let uint8Array = hex ? base58$1.decodeHex(string) : base58$1.decode(string);
|
|
16357
|
-
const prefix = uint8Array.subarray(0, 2);
|
|
16358
|
-
const source = uint8Array.subarray(2, -4);
|
|
16359
|
-
const hash = await concatAndDoubleHash([
|
|
16360
|
-
prefix,
|
|
16361
|
-
source
|
|
16362
|
-
]);
|
|
16363
|
-
let index = 0;
|
|
16364
|
-
const slice = uint8Array.subarray(-4);
|
|
16365
|
-
for (const check of slice) {
|
|
16366
|
-
if (check !== hash[index]) {
|
|
16367
|
-
throw new Error('Invalid checksum');
|
|
16368
|
-
}
|
|
16369
|
-
index++;
|
|
16370
|
-
}
|
|
16371
|
-
return { prefix, data: source };
|
|
16372
|
-
};
|
|
16373
|
-
const isBase58check = (string, hex) => {
|
|
16374
|
-
try {
|
|
16375
|
-
hex ? decode$2(string, true) : decode$2(string);
|
|
16376
|
-
return true;
|
|
16377
|
-
}
|
|
16378
|
-
catch (e) {
|
|
16379
|
-
return false;
|
|
16380
|
-
}
|
|
16381
|
-
};
|
|
16382
|
-
const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$2(uint8Array, prefix, true);
|
|
16383
|
-
const decodeHex = (string) => decode$2(string, true);
|
|
16384
|
-
const isBase58checkHex = (string) => isBase58check(string, true);
|
|
16385
|
-
var base58check = { encode: encode$2, decode: decode$2, encodeHex, decodeHex, isBase58check, isBase58checkHex };
|
|
16389
|
+
new Mutex();
|
|
16390
|
+
|
|
16391
|
+
new Mutex();
|
|
16386
16392
|
|
|
16387
16393
|
const encode$1 = (version, privateKey, compressed) => {
|
|
16388
16394
|
if (privateKey.length !== 32)
|
|
@@ -16429,6 +16435,7 @@ class HdNode {
|
|
|
16429
16435
|
this.#privateKey = privateKey;
|
|
16430
16436
|
this.#publicKey = publicKey;
|
|
16431
16437
|
this.#chainCode = chainCode;
|
|
16438
|
+
// @ts-ignore
|
|
16432
16439
|
this.#network = network || networks.leofcoin;
|
|
16433
16440
|
this.#depth = depth;
|
|
16434
16441
|
this.#index = index;
|
|
@@ -16503,7 +16510,7 @@ class HdNode {
|
|
|
16503
16510
|
else {
|
|
16504
16511
|
set.push(new Uint8Array(this.publicKey));
|
|
16505
16512
|
}
|
|
16506
|
-
return base58check
|
|
16513
|
+
return base58check.encode(index$7(set));
|
|
16507
16514
|
}
|
|
16508
16515
|
toWIF() {
|
|
16509
16516
|
if (!this.#privateKey)
|
|
@@ -16577,24 +16584,31 @@ class HdNode {
|
|
|
16577
16584
|
let index;
|
|
16578
16585
|
if (indexString.slice(-1) === `'`) {
|
|
16579
16586
|
index = parseInt(indexString.slice(0, -1), 10);
|
|
16587
|
+
// @ts-ignore
|
|
16580
16588
|
prevHd = await prevHd.deriveHardened(index);
|
|
16581
16589
|
}
|
|
16582
16590
|
else {
|
|
16583
16591
|
index = parseInt(indexString, 10);
|
|
16592
|
+
// @ts-ignore
|
|
16584
16593
|
prevHd = await prevHd.derive(index);
|
|
16585
16594
|
}
|
|
16586
16595
|
}
|
|
16587
16596
|
return prevHd;
|
|
16588
16597
|
}
|
|
16589
16598
|
async fromBase58(string, network) {
|
|
16590
|
-
let buffer = (await base58check
|
|
16599
|
+
let buffer = (await base58check.decode(string)).data;
|
|
16600
|
+
// @ts-ignore
|
|
16591
16601
|
network = network || networks.leofcoin;
|
|
16592
|
-
// 4 bytes: version bytes
|
|
16593
16602
|
let [version, depth, parentFingerprint, index, chainCode, k, privateKey] = index$6(buffer);
|
|
16603
|
+
// @ts-ignore
|
|
16594
16604
|
version = Number(new TextDecoder().decode(version));
|
|
16605
|
+
// @ts-ignore
|
|
16595
16606
|
depth = Number(new TextDecoder().decode(depth));
|
|
16607
|
+
// @ts-ignore
|
|
16596
16608
|
parentFingerprint = Number(new TextDecoder().decode(parentFingerprint));
|
|
16609
|
+
// @ts-ignore
|
|
16597
16610
|
index = Number(new TextDecoder().decode(index));
|
|
16611
|
+
// @ts-ignore
|
|
16598
16612
|
k = privateKey ? 0 : k;
|
|
16599
16613
|
if (version !== network.bip32.private && version !== network.bip32.public)
|
|
16600
16614
|
throw new TypeError('Invalid network version');
|
|
@@ -16698,7 +16712,7 @@ class HDWallet {
|
|
|
16698
16712
|
return address;
|
|
16699
16713
|
}
|
|
16700
16714
|
leofcoinAddress() {
|
|
16701
|
-
return base58check
|
|
16715
|
+
return base58check.encode(this.publicKey);
|
|
16702
16716
|
}
|
|
16703
16717
|
get address() {
|
|
16704
16718
|
return this.getAddressForCoin();
|
|
@@ -16720,7 +16734,7 @@ class HDWallet {
|
|
|
16720
16734
|
// if (coin_type === 0) return this.bitcoinAddress()
|
|
16721
16735
|
}
|
|
16722
16736
|
get accountAddress() {
|
|
16723
|
-
return this.ifNotLocked(async () => base58check
|
|
16737
|
+
return this.ifNotLocked(async () => base58check.encode(this.hdnode.publicKey));
|
|
16724
16738
|
}
|
|
16725
16739
|
get isTestnet() {
|
|
16726
16740
|
return this.network.coin_type === 1;
|
|
@@ -16786,7 +16800,7 @@ class HDWallet {
|
|
|
16786
16800
|
}
|
|
16787
16801
|
async fromAddress(address, chainCode, network) {
|
|
16788
16802
|
network = this.validateNetwork(network);
|
|
16789
|
-
address = (await base58check
|
|
16803
|
+
address = (await base58check.decode(address)).data;
|
|
16790
16804
|
if (!chainCode || chainCode && !Buffer.isBuffer(chainCode))
|
|
16791
16805
|
chainCode = address.slice(1);
|
|
16792
16806
|
await this.defineHDNode(await (new HdNode()).fromPublicKey(address, chainCode, network));
|
|
@@ -17045,7 +17059,7 @@ class MultiHDNode extends HDWallet {
|
|
|
17045
17059
|
super(network, hdnode);
|
|
17046
17060
|
}
|
|
17047
17061
|
get id() {
|
|
17048
|
-
return base58check
|
|
17062
|
+
return base58check.encode(index$7([
|
|
17049
17063
|
new TextEncoder().encode(this.version.toString()),
|
|
17050
17064
|
this.account(0).hdnode.neutered.publicKey
|
|
17051
17065
|
]));
|
|
@@ -17054,18 +17068,18 @@ class MultiHDNode extends HDWallet {
|
|
|
17054
17068
|
return this.toMultiWif();
|
|
17055
17069
|
}
|
|
17056
17070
|
async fromId(id) {
|
|
17057
|
-
let buffer = (await base58check
|
|
17071
|
+
let buffer = (await base58check.decode(id)).data;
|
|
17058
17072
|
index.decode(buffer);
|
|
17059
17073
|
buffer = buffer.slice(index.decode.bytes);
|
|
17060
17074
|
this.fromPublicKey(buffer, null, this.networkName);
|
|
17061
17075
|
}
|
|
17062
17076
|
async import(password, encrypted) {
|
|
17063
|
-
const { prefix, data } = await base58check
|
|
17077
|
+
const { prefix, data } = await base58check.decode(encrypted);
|
|
17064
17078
|
const decrypted = await decrypt(password, data);
|
|
17065
17079
|
await this.fromMultiWif(decrypted);
|
|
17066
17080
|
}
|
|
17067
17081
|
async export(password) {
|
|
17068
|
-
return base58check
|
|
17082
|
+
return base58check.encode(await encrypt(password, await this.toMultiWif()));
|
|
17069
17083
|
}
|
|
17070
17084
|
async lock(password) {
|
|
17071
17085
|
// todo redefine hdnode
|
|
@@ -17073,7 +17087,7 @@ class MultiHDNode extends HDWallet {
|
|
|
17073
17087
|
this.locked = true;
|
|
17074
17088
|
}
|
|
17075
17089
|
async unlock(password) {
|
|
17076
|
-
const { prefix, data } = await base58check
|
|
17090
|
+
const { prefix, data } = await base58check.decode(this.#encrypted);
|
|
17077
17091
|
await decrypt(password, data);
|
|
17078
17092
|
this.locked = false;
|
|
17079
17093
|
}
|
|
@@ -17136,7 +17150,7 @@ class MultiWallet extends MultiHDNode {
|
|
|
17136
17150
|
super(network, hdnode);
|
|
17137
17151
|
}
|
|
17138
17152
|
get id() {
|
|
17139
|
-
return base58check
|
|
17153
|
+
return base58check.encode(index$7([
|
|
17140
17154
|
new TextEncoder().encode(this.version.toString()),
|
|
17141
17155
|
this.account(0).hdnode.neutered.publicKey
|
|
17142
17156
|
]));
|
|
@@ -20127,6 +20141,7 @@ class Identity {
|
|
|
20127
20141
|
#wallet;
|
|
20128
20142
|
network;
|
|
20129
20143
|
id;
|
|
20144
|
+
selectedAccount;
|
|
20130
20145
|
constructor(network) {
|
|
20131
20146
|
this.network = network;
|
|
20132
20147
|
}
|
|
@@ -20149,6 +20164,7 @@ class Identity {
|
|
|
20149
20164
|
}
|
|
20150
20165
|
}
|
|
20151
20166
|
if (!password) {
|
|
20167
|
+
// @ts-ignore
|
|
20152
20168
|
const importee = await import('./src/prompts/password.js');
|
|
20153
20169
|
password = await importee.default();
|
|
20154
20170
|
}
|
|
@@ -20157,17 +20173,17 @@ class Identity {
|
|
|
20157
20173
|
const pub = await globalThis.accountStore.get('public');
|
|
20158
20174
|
this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
|
|
20159
20175
|
const selected = await globalThis.walletStore.get('selected-account');
|
|
20160
|
-
|
|
20176
|
+
this.selectedAccount = new TextDecoder().decode(selected);
|
|
20161
20177
|
}
|
|
20162
20178
|
else {
|
|
20163
|
-
const importee = await import(/* webpackChunkName: "generate-account" */ './index-
|
|
20179
|
+
const importee = await import(/* webpackChunkName: "generate-account" */ './index-8868bdd8.js');
|
|
20164
20180
|
const { identity, accounts } = await importee.default(password, this.network);
|
|
20165
20181
|
await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
|
|
20166
20182
|
await globalThis.walletStore.put('version', String(1));
|
|
20167
20183
|
await globalThis.walletStore.put('accounts', JSON.stringify(accounts));
|
|
20168
20184
|
await globalThis.walletStore.put('selected-account', accounts[0][1]);
|
|
20169
20185
|
await globalThis.walletStore.put('identity', JSON.stringify(identity));
|
|
20170
|
-
|
|
20186
|
+
this.selectedAccount = accounts[0][1];
|
|
20171
20187
|
this.id = identity.walletId;
|
|
20172
20188
|
}
|
|
20173
20189
|
const identity = JSON.parse(new TextDecoder().decode(await globalThis.walletStore.get('identity')));
|
|
@@ -20175,6 +20191,10 @@ class Identity {
|
|
|
20175
20191
|
const multiWIF = await decrypt(password, base58$1.decode(identity.multiWIF));
|
|
20176
20192
|
await this.#wallet.fromMultiWif(multiWIF);
|
|
20177
20193
|
}
|
|
20194
|
+
selectAccount(account) {
|
|
20195
|
+
this.selectedAccount = account;
|
|
20196
|
+
return walletStore.put('selected-account', account);
|
|
20197
|
+
}
|
|
20178
20198
|
sign(hash) {
|
|
20179
20199
|
return this.#wallet.sign(hash.subarray(0, 32));
|
|
20180
20200
|
}
|
|
@@ -20195,7 +20215,7 @@ class Identity {
|
|
|
20195
20215
|
return globalThis.navigator ? await browser.toDataURL(exported) : await browser.toString(exported, { type: 'terminal' });
|
|
20196
20216
|
}
|
|
20197
20217
|
async importQR(image, password) {
|
|
20198
|
-
const multiWIF = e.scanImage(image);
|
|
20218
|
+
const multiWIF = await e.default.scanImage(image);
|
|
20199
20219
|
return this.import(password, multiWIF);
|
|
20200
20220
|
}
|
|
20201
20221
|
}
|
|
@@ -20252,17 +20272,20 @@ class Peernet {
|
|
|
20252
20272
|
/**
|
|
20253
20273
|
* @property {String} network - current network
|
|
20254
20274
|
*/
|
|
20255
|
-
this.network = options.network ||
|
|
20275
|
+
this.network = options.network || "leofcoin";
|
|
20256
20276
|
this.autoStart = options.autoStart === undefined ? true : options.autoStart;
|
|
20257
20277
|
this.stars = options.stars;
|
|
20258
|
-
const parts = this.network.split(
|
|
20259
|
-
this.networkVersion =
|
|
20278
|
+
const parts = this.network.split(":");
|
|
20279
|
+
this.networkVersion =
|
|
20280
|
+
options.networkVersion || parts.length > 1 ? parts[1] : "mainnet";
|
|
20260
20281
|
if (!options.storePrefix)
|
|
20261
|
-
options.storePrefix =
|
|
20282
|
+
options.storePrefix = "lfc";
|
|
20262
20283
|
if (!options.port)
|
|
20263
20284
|
options.port = 2000;
|
|
20264
20285
|
if (!options.root) {
|
|
20265
|
-
parts[1]
|
|
20286
|
+
parts[1]
|
|
20287
|
+
? (options.root = `.${parts[0]}/${parts[1]}`)
|
|
20288
|
+
: (options.root = `.${this.network}`);
|
|
20266
20289
|
}
|
|
20267
20290
|
globalThis.peernet = this;
|
|
20268
20291
|
this.bw = {
|
|
@@ -20275,11 +20298,25 @@ class Peernet {
|
|
|
20275
20298
|
get id() {
|
|
20276
20299
|
return this.identity.id;
|
|
20277
20300
|
}
|
|
20301
|
+
get selectedAccount() {
|
|
20302
|
+
return this.identity.selectedAccount;
|
|
20303
|
+
}
|
|
20278
20304
|
get accounts() {
|
|
20279
20305
|
return this.identity.accounts;
|
|
20280
20306
|
}
|
|
20281
20307
|
get defaultStores() {
|
|
20282
|
-
return [
|
|
20308
|
+
return [
|
|
20309
|
+
"account",
|
|
20310
|
+
"wallet",
|
|
20311
|
+
"block",
|
|
20312
|
+
"transaction",
|
|
20313
|
+
"chain",
|
|
20314
|
+
"data",
|
|
20315
|
+
"message",
|
|
20316
|
+
];
|
|
20317
|
+
}
|
|
20318
|
+
selectAccount(account) {
|
|
20319
|
+
return this.identity.selectAccount(account);
|
|
20283
20320
|
}
|
|
20284
20321
|
addProto(name, proto) {
|
|
20285
20322
|
if (!globalThis.peernet.protos[name])
|
|
@@ -20289,11 +20326,16 @@ class Peernet {
|
|
|
20289
20326
|
return utils$p.addCodec(codec);
|
|
20290
20327
|
}
|
|
20291
20328
|
async addStore(name, prefix, root, isPrivate = true) {
|
|
20292
|
-
if (name ===
|
|
20293
|
-
name ===
|
|
20329
|
+
if (name === "block" ||
|
|
20330
|
+
name === "transaction" ||
|
|
20331
|
+
name === "chain" ||
|
|
20332
|
+
name === "data" ||
|
|
20333
|
+
name === "message")
|
|
20294
20334
|
isPrivate = false;
|
|
20295
20335
|
let Storage;
|
|
20296
|
-
this.hasDaemon
|
|
20336
|
+
this.hasDaemon
|
|
20337
|
+
? (Storage = LeofcoinStorageClient)
|
|
20338
|
+
: (Storage = LeofcoinStorage);
|
|
20297
20339
|
if (!globalThis[`${name}Store`]) {
|
|
20298
20340
|
globalThis[`${name}Store`] = new Storage(name, root);
|
|
20299
20341
|
await globalThis[`${name}Store`].init();
|
|
@@ -20326,7 +20368,7 @@ class Peernet {
|
|
|
20326
20368
|
* @return {String} id - peerId
|
|
20327
20369
|
*/
|
|
20328
20370
|
getConnection(id) {
|
|
20329
|
-
return this.
|
|
20371
|
+
return this.connections[id];
|
|
20330
20372
|
}
|
|
20331
20373
|
/**
|
|
20332
20374
|
* @private
|
|
@@ -20339,9 +20381,9 @@ class Peernet {
|
|
|
20339
20381
|
async _init(options, password) {
|
|
20340
20382
|
this.storePrefix = options.storePrefix;
|
|
20341
20383
|
this.root = options.root;
|
|
20342
|
-
const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
|
|
20384
|
+
const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile,
|
|
20343
20385
|
// FolderMessageResponse
|
|
20344
|
-
} = await import(/* webpackChunkName: "messages" */ './messages-
|
|
20386
|
+
} = await import(/* webpackChunkName: "messages" */ './messages-eb6e5c71.js');
|
|
20345
20387
|
/**
|
|
20346
20388
|
* proto Object containing protos
|
|
20347
20389
|
* @type {Object}
|
|
@@ -20352,18 +20394,18 @@ class Peernet {
|
|
|
20352
20394
|
* @property {DataMessageResponse} protos[peernet-data-response] messageNode
|
|
20353
20395
|
*/
|
|
20354
20396
|
globalThis.peernet.protos = {
|
|
20355
|
-
|
|
20356
|
-
|
|
20357
|
-
|
|
20358
|
-
|
|
20359
|
-
|
|
20360
|
-
|
|
20361
|
-
|
|
20362
|
-
|
|
20363
|
-
|
|
20364
|
-
|
|
20365
|
-
|
|
20366
|
-
|
|
20397
|
+
"peernet-request": RequestMessage,
|
|
20398
|
+
"peernet-response": ResponseMessage,
|
|
20399
|
+
"peernet-peer": PeerMessage,
|
|
20400
|
+
"peernet-peer-response": PeerMessageResponse,
|
|
20401
|
+
"peernet-message": PeernetMessage,
|
|
20402
|
+
"peernet-dht": DHTMessage,
|
|
20403
|
+
"peernet-dht-response": DHTMessageResponse,
|
|
20404
|
+
"peernet-data": DataMessage,
|
|
20405
|
+
"peernet-data-response": DataMessageResponse,
|
|
20406
|
+
"peernet-ps": PsMessage,
|
|
20407
|
+
"chat-message": ChatMessage,
|
|
20408
|
+
"peernet-file": PeernetFile,
|
|
20367
20409
|
};
|
|
20368
20410
|
this._messageHandler = new MessageHandler(this.network);
|
|
20369
20411
|
const { daemon, environment } = await target();
|
|
@@ -20375,38 +20417,44 @@ class Peernet {
|
|
|
20375
20417
|
await this.identity.load(password);
|
|
20376
20418
|
this._peerHandler = new PeerDiscovery(this.id);
|
|
20377
20419
|
this.peerId = this.id;
|
|
20378
|
-
this.addRequestHandler(
|
|
20379
|
-
return new peernet.protos[
|
|
20420
|
+
this.addRequestHandler("handshake", () => {
|
|
20421
|
+
return new peernet.protos["peernet-response"]({
|
|
20422
|
+
response: { peerId: this.id },
|
|
20423
|
+
});
|
|
20380
20424
|
});
|
|
20381
|
-
pubsub.subscribe(
|
|
20425
|
+
pubsub.subscribe("peer:discovered", async (peer) => {
|
|
20382
20426
|
// console.log(peer);
|
|
20383
|
-
if (this.requestProtos[
|
|
20384
|
-
let data = await new globalThis.peernet.protos[
|
|
20427
|
+
if (this.requestProtos["version"]) {
|
|
20428
|
+
let data = await new globalThis.peernet.protos["peernet-request"]({
|
|
20429
|
+
request: "version",
|
|
20430
|
+
});
|
|
20385
20431
|
let node = await globalThis.peernet.prepareMessage(data);
|
|
20386
20432
|
let response = await peer.request(node.encoded);
|
|
20387
|
-
response = await new globalThis.peernet.protos[
|
|
20433
|
+
response = await new globalThis.peernet.protos["peernet-response"](new Uint8Array(Object.values(response)));
|
|
20388
20434
|
peer.version = response.decoded.response.version;
|
|
20389
20435
|
}
|
|
20390
|
-
let data = await new globalThis.peernet.protos[
|
|
20436
|
+
let data = await new globalThis.peernet.protos["peernet-request"]({
|
|
20437
|
+
request: "handshake",
|
|
20438
|
+
});
|
|
20391
20439
|
let node = await globalThis.peernet.prepareMessage(data);
|
|
20392
20440
|
let response = await peer.request(node.encoded);
|
|
20393
|
-
response = await new globalThis.peernet.protos[
|
|
20441
|
+
response = await new globalThis.peernet.protos["peernet-response"](new Uint8Array(Object.values(response)));
|
|
20394
20442
|
// todo: response.decoded should be the response and not response.peerId
|
|
20395
20443
|
this.#connections[response.decoded.response.peerId] = peer;
|
|
20396
|
-
pubsub.publish(
|
|
20444
|
+
pubsub.publish("peer:connected", peer);
|
|
20397
20445
|
// todo: cleanup discovered
|
|
20398
20446
|
});
|
|
20399
|
-
pubsub.subscribe(
|
|
20447
|
+
pubsub.subscribe("peer:left", this.#peerLeft.bind(this));
|
|
20400
20448
|
/**
|
|
20401
20449
|
* converts data -> message -> proto
|
|
20402
20450
|
* @see DataHandler
|
|
20403
20451
|
*/
|
|
20404
|
-
pubsub.subscribe(
|
|
20452
|
+
pubsub.subscribe("peer:data", dataHandler);
|
|
20405
20453
|
if (globalThis.navigator) {
|
|
20406
|
-
globalThis.addEventListener(
|
|
20454
|
+
globalThis.addEventListener("beforeunload", async () => this.client.destroy());
|
|
20407
20455
|
}
|
|
20408
20456
|
else {
|
|
20409
|
-
process.on(
|
|
20457
|
+
process.on("SIGTERM", async () => {
|
|
20410
20458
|
process.stdin.resume();
|
|
20411
20459
|
try {
|
|
20412
20460
|
await this.client.destroy();
|
|
@@ -20437,7 +20485,9 @@ class Peernet {
|
|
|
20437
20485
|
}
|
|
20438
20486
|
#peerLeft(peer) {
|
|
20439
20487
|
for (const [id, _peer] of Object.entries(this.#connections)) {
|
|
20440
|
-
if (_peer.id === peer.id &&
|
|
20488
|
+
if (_peer.id === peer.id &&
|
|
20489
|
+
this.#connections[id] &&
|
|
20490
|
+
!this.#connections[id].connected) {
|
|
20441
20491
|
delete this.#connections[id];
|
|
20442
20492
|
this.removePeer(_peer);
|
|
20443
20493
|
}
|
|
@@ -20464,18 +20514,26 @@ class Peernet {
|
|
|
20464
20514
|
else {
|
|
20465
20515
|
has = await this.has(hash);
|
|
20466
20516
|
}
|
|
20467
|
-
const data = await new globalThis.peernet.protos[
|
|
20517
|
+
const data = await new globalThis.peernet.protos["peernet-dht-response"]({
|
|
20518
|
+
hash,
|
|
20519
|
+
has,
|
|
20520
|
+
});
|
|
20468
20521
|
const node = await this.prepareMessage(data);
|
|
20469
20522
|
this.sendMessage(peer, id, node.encoded);
|
|
20470
20523
|
}
|
|
20471
20524
|
async handleData(peer, id, proto) {
|
|
20472
20525
|
let { hash, store } = proto.decoded;
|
|
20473
20526
|
let data;
|
|
20474
|
-
store =
|
|
20527
|
+
store =
|
|
20528
|
+
globalThis[`${store}Store`] ||
|
|
20529
|
+
(await this.whichStore([...this.stores], hash));
|
|
20475
20530
|
if (store && !store.private) {
|
|
20476
20531
|
data = await store.get(hash);
|
|
20477
20532
|
if (data) {
|
|
20478
|
-
data = await new globalThis.peernet.protos[
|
|
20533
|
+
data = await new globalThis.peernet.protos["peernet-data-response"]({
|
|
20534
|
+
hash,
|
|
20535
|
+
data,
|
|
20536
|
+
});
|
|
20479
20537
|
const node = await this.prepareMessage(data);
|
|
20480
20538
|
this.sendMessage(peer, id, node.encoded);
|
|
20481
20539
|
}
|
|
@@ -20499,21 +20557,20 @@ class Peernet {
|
|
|
20499
20557
|
const { id, proto } = message;
|
|
20500
20558
|
this.bw.down += proto.encoded.length;
|
|
20501
20559
|
switch (proto.name) {
|
|
20502
|
-
case
|
|
20560
|
+
case "peernet-dht": {
|
|
20503
20561
|
this.handleDHT(peer, id, proto);
|
|
20504
20562
|
break;
|
|
20505
20563
|
}
|
|
20506
|
-
case
|
|
20564
|
+
case "peernet-data": {
|
|
20507
20565
|
this.handleData(peer, id, proto);
|
|
20508
20566
|
break;
|
|
20509
20567
|
}
|
|
20510
|
-
case
|
|
20568
|
+
case "peernet-request": {
|
|
20511
20569
|
this.handleRequest(peer, id, proto);
|
|
20512
20570
|
break;
|
|
20513
20571
|
}
|
|
20514
|
-
case
|
|
20515
|
-
|
|
20516
|
-
globalSub.publish(proto.decoded.topic, proto.decoded.data);
|
|
20572
|
+
case "peernet-ps": {
|
|
20573
|
+
globalSub.publish(new TextDecoder().decode(proto.decoded.topic), proto.decoded.data);
|
|
20517
20574
|
}
|
|
20518
20575
|
}
|
|
20519
20576
|
}
|
|
@@ -20524,14 +20581,14 @@ class Peernet {
|
|
|
20524
20581
|
*/
|
|
20525
20582
|
async walk(hash) {
|
|
20526
20583
|
if (!hash)
|
|
20527
|
-
throw new Error(
|
|
20528
|
-
const data = await new globalThis.peernet.protos[
|
|
20584
|
+
throw new Error("hash expected, received undefined");
|
|
20585
|
+
const data = await new globalThis.peernet.protos["peernet-dht"]({ hash });
|
|
20529
20586
|
const walk = async (peer, peerId) => {
|
|
20530
20587
|
const node = await this.prepareMessage(data);
|
|
20531
20588
|
let result = await peer.request(node.encoded);
|
|
20532
20589
|
result = new Uint8Array(Object.values(result));
|
|
20533
20590
|
const proto = await protoFor(result);
|
|
20534
|
-
if (proto.name !==
|
|
20591
|
+
if (proto.name !== "peernet-dht-response")
|
|
20535
20592
|
throw dhtError(proto.name);
|
|
20536
20593
|
const peerInfo = {
|
|
20537
20594
|
...peer.connectionStats,
|
|
@@ -20557,7 +20614,8 @@ class Peernet {
|
|
|
20557
20614
|
let providers = this.dht.providersFor(hash);
|
|
20558
20615
|
// walk the network to find a provider
|
|
20559
20616
|
let tries = 0;
|
|
20560
|
-
while (!providers && tries < 3 ||
|
|
20617
|
+
while ((!providers && tries < 3) ||
|
|
20618
|
+
(Object.keys(providers).length === 0 && tries < 3)) {
|
|
20561
20619
|
tries += 1;
|
|
20562
20620
|
await this.walk(hash);
|
|
20563
20621
|
providers = this.dht.providersFor(hash);
|
|
@@ -20571,14 +20629,14 @@ class Peernet {
|
|
|
20571
20629
|
const data = await blockStore.has(hash);
|
|
20572
20630
|
if (data)
|
|
20573
20631
|
return blockStore.get(hash);
|
|
20574
|
-
return this.requestData(hash,
|
|
20632
|
+
return this.requestData(hash, "block");
|
|
20575
20633
|
},
|
|
20576
20634
|
put: async (hash, data) => {
|
|
20577
20635
|
if (await blockStore.has(hash))
|
|
20578
20636
|
return;
|
|
20579
20637
|
return await blockStore.put(hash, data);
|
|
20580
20638
|
},
|
|
20581
|
-
has: async (hash) => await blockStore.has(hash
|
|
20639
|
+
has: async (hash) => await blockStore.has(hash),
|
|
20582
20640
|
};
|
|
20583
20641
|
}
|
|
20584
20642
|
get transaction() {
|
|
@@ -20587,7 +20645,7 @@ class Peernet {
|
|
|
20587
20645
|
const data = await transactionStore.has(hash);
|
|
20588
20646
|
if (data)
|
|
20589
20647
|
return await transactionStore.get(hash);
|
|
20590
|
-
return this.requestData(hash,
|
|
20648
|
+
return this.requestData(hash, "transaction");
|
|
20591
20649
|
},
|
|
20592
20650
|
put: async (hash, data) => {
|
|
20593
20651
|
if (await transactionStore.has(hash))
|
|
@@ -20599,7 +20657,7 @@ class Peernet {
|
|
|
20599
20657
|
}
|
|
20600
20658
|
async requestData(hash, store) {
|
|
20601
20659
|
const providers = await this.providersFor(hash);
|
|
20602
|
-
if (!providers || providers && Object.keys(providers).length === 0)
|
|
20660
|
+
if (!providers || (providers && Object.keys(providers).length === 0))
|
|
20603
20661
|
throw nothingFoundError(hash);
|
|
20604
20662
|
debug(`found ${Object.keys(providers).length} provider(s) for ${hash}`);
|
|
20605
20663
|
// get closest peer on earth
|
|
@@ -20610,7 +20668,10 @@ class Peernet {
|
|
|
20610
20668
|
const id = closestPeer.id;
|
|
20611
20669
|
const peer = this.#connections[id];
|
|
20612
20670
|
if (peer?.connected) {
|
|
20613
|
-
let data = await new globalThis.peernet.protos[
|
|
20671
|
+
let data = await new globalThis.peernet.protos["peernet-data"]({
|
|
20672
|
+
hash,
|
|
20673
|
+
store: store?.name || store,
|
|
20674
|
+
});
|
|
20614
20675
|
const node = await this.prepareMessage(data);
|
|
20615
20676
|
if (peer)
|
|
20616
20677
|
data = await peer.request(node.encoded);
|
|
@@ -20649,7 +20710,7 @@ class Peernet {
|
|
|
20649
20710
|
const message = await messageStore.has(hash);
|
|
20650
20711
|
if (message)
|
|
20651
20712
|
return await messageStore.get(hash);
|
|
20652
|
-
return this.requestData(hash,
|
|
20713
|
+
return this.requestData(hash, "message");
|
|
20653
20714
|
},
|
|
20654
20715
|
/**
|
|
20655
20716
|
* put message content
|
|
@@ -20677,7 +20738,7 @@ class Peernet {
|
|
|
20677
20738
|
const data = await dataStore.has(hash);
|
|
20678
20739
|
if (data)
|
|
20679
20740
|
return await dataStore.get(hash);
|
|
20680
|
-
return this.requestData(hash,
|
|
20741
|
+
return this.requestData(hash, "data");
|
|
20681
20742
|
},
|
|
20682
20743
|
/**
|
|
20683
20744
|
* put data content
|
|
@@ -20705,7 +20766,7 @@ class Peernet {
|
|
|
20705
20766
|
const data = await dataStore.has(hash);
|
|
20706
20767
|
if (data)
|
|
20707
20768
|
return await dataStore.get(hash);
|
|
20708
|
-
return this.requestData(hash,
|
|
20769
|
+
return this.requestData(hash, "data");
|
|
20709
20770
|
},
|
|
20710
20771
|
/**
|
|
20711
20772
|
* put data content
|
|
@@ -20724,12 +20785,15 @@ class Peernet {
|
|
|
20724
20785
|
async addFolder(files) {
|
|
20725
20786
|
const links = [];
|
|
20726
20787
|
for (const file of files) {
|
|
20727
|
-
const fileNode = await new globalThis.peernet.protos[
|
|
20788
|
+
const fileNode = await new globalThis.peernet.protos["peernet-file"](file);
|
|
20728
20789
|
const hash = await fileNode.hash;
|
|
20729
20790
|
await dataStore.put(hash, fileNode.encoded);
|
|
20730
20791
|
links.push({ hash, path: file.path });
|
|
20731
20792
|
}
|
|
20732
|
-
const node = await new globalThis.peernet.protos[
|
|
20793
|
+
const node = await new globalThis.peernet.protos["peernet-file"]({
|
|
20794
|
+
path: "/",
|
|
20795
|
+
links,
|
|
20796
|
+
});
|
|
20733
20797
|
const hash = await node.hash;
|
|
20734
20798
|
await dataStore.put(hash, node.encoded);
|
|
20735
20799
|
return hash;
|
|
@@ -20737,8 +20801,10 @@ class Peernet {
|
|
|
20737
20801
|
async ls(hash, options) {
|
|
20738
20802
|
let data;
|
|
20739
20803
|
const has = await dataStore.has(hash);
|
|
20740
|
-
data = has
|
|
20741
|
-
|
|
20804
|
+
data = has
|
|
20805
|
+
? await dataStore.get(hash)
|
|
20806
|
+
: await this.requestData(hash, "data");
|
|
20807
|
+
const node = await new peernet.protos["peernet-file"](data);
|
|
20742
20808
|
await node.decode();
|
|
20743
20809
|
console.log(data);
|
|
20744
20810
|
const paths = [];
|
|
@@ -20754,8 +20820,10 @@ class Peernet {
|
|
|
20754
20820
|
async cat(hash, options) {
|
|
20755
20821
|
let data;
|
|
20756
20822
|
const has = await dataStore.has(hash);
|
|
20757
|
-
data = has
|
|
20758
|
-
|
|
20823
|
+
data = has
|
|
20824
|
+
? await dataStore.get(hash)
|
|
20825
|
+
: await this.requestData(hash, "data");
|
|
20826
|
+
const node = await new peernet.protos["peernet-file"](data);
|
|
20759
20827
|
if (node.decoded?.links.length > 0)
|
|
20760
20828
|
throw new Error(`${hash} is a directory`);
|
|
20761
20829
|
if (options?.pin)
|
|
@@ -20793,7 +20861,7 @@ class Peernet {
|
|
|
20793
20861
|
store = globalThis[`${store}Store`];
|
|
20794
20862
|
if (!store)
|
|
20795
20863
|
store = await this.whichStore([...this.stores], hash);
|
|
20796
|
-
if (store && await store.has(hash))
|
|
20864
|
+
if (store && (await store.has(hash)))
|
|
20797
20865
|
data = await store.get(hash);
|
|
20798
20866
|
if (data)
|
|
20799
20867
|
return data;
|
|
@@ -20806,7 +20874,7 @@ class Peernet {
|
|
|
20806
20874
|
* @param {Buffer} data
|
|
20807
20875
|
* @param {String} storeName - storeName to access
|
|
20808
20876
|
*/
|
|
20809
|
-
async put(hash, data, storeName =
|
|
20877
|
+
async put(hash, data, storeName = "data") {
|
|
20810
20878
|
const store = globalThis[`${storeName}Store`];
|
|
20811
20879
|
return store.put(hash, data);
|
|
20812
20880
|
}
|
|
@@ -20829,7 +20897,7 @@ class Peernet {
|
|
|
20829
20897
|
async publish(topic, data) {
|
|
20830
20898
|
// globalSub.publish(topic, data)
|
|
20831
20899
|
const id = Math.random().toString(36).slice(-12);
|
|
20832
|
-
data = await new globalThis.peernet.protos[
|
|
20900
|
+
data = await new globalThis.peernet.protos["peernet-ps"]({ data, topic });
|
|
20833
20901
|
for (const [peerId, peer] of Object.entries(this.#connections)) {
|
|
20834
20902
|
if (peerId !== this.id) {
|
|
20835
20903
|
const node = await this.prepareMessage(data);
|
|
@@ -20851,7 +20919,7 @@ class Peernet {
|
|
|
20851
20919
|
globalSub.subscribe(topic, callback);
|
|
20852
20920
|
}
|
|
20853
20921
|
async removePeer(peer) {
|
|
20854
|
-
console.log(
|
|
20922
|
+
console.log("removepeer", peer.id);
|
|
20855
20923
|
const id = peer.id;
|
|
20856
20924
|
await this.client._removePeer(peer);
|
|
20857
20925
|
if (this.client.peers[id]) {
|
|
@@ -20859,7 +20927,7 @@ class Peernet {
|
|
|
20859
20927
|
// if (this.client.peers[id][connection].connected === false) delete this.client.peers[id][connection]
|
|
20860
20928
|
// @ts-ignore
|
|
20861
20929
|
if (this.client.peers[id][connection].connected)
|
|
20862
|
-
return this.client.emit(
|
|
20930
|
+
return this.client.emit("peerconnect", connection);
|
|
20863
20931
|
}
|
|
20864
20932
|
}
|
|
20865
20933
|
}
|