From 53be1b8416fda2b275a75619df51bef73ae2888e Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 22 Jan 2021 12:16:41 +0100 Subject: [PATCH] List of known phishing addresses (for use in wallets) (#57) * Add list of known addresses * Sorted * Add polkadot.express * typo * Add checkAddress & tests * Update comments * Return error * U8a cache --- packages/phishing/package.json | 4 +- packages/phishing/src/index.spec.ts | 22 +- packages/phishing/src/index.ts | 82 ++++++- packages/phishing/src/types.ts | 2 + scripts/sortAll.mjs | 16 +- yarn.lock | 326 +++++++++++++++++++++++++++- 6 files changed, 428 insertions(+), 24 deletions(-) diff --git a/packages/phishing/package.json b/packages/phishing/package.json index ed95b6606..9f7d8c49f 100644 --- a/packages/phishing/package.json +++ b/packages/phishing/package.json @@ -14,7 +14,9 @@ "homepage": "https://github.com/polkadot-js/common/tree/master/packages/phishing#readme", "dependencies": { "@babel/runtime": "^7.12.5", - "@polkadot/x-fetch": "^5.3.1" + "@polkadot/util": "^5.3.2-6", + "@polkadot/util-crypto": "^5.3.2-6", + "@polkadot/x-fetch": "^5.3.2-6" }, "devDependencies": { "@types/js-yaml": "^4.0.0", diff --git a/packages/phishing/src/index.spec.ts b/packages/phishing/src/index.spec.ts index 3225e0774..23d9b3433 100644 --- a/packages/phishing/src/index.spec.ts +++ b/packages/phishing/src/index.spec.ts @@ -1,7 +1,7 @@ // Copyright 2020-2021 @polkadot/phishing authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { checkIfDenied } from '.'; +import { checkAddress, checkIfDenied } from '.'; describe('checkIfDenied', (): void => { it('returns false when host in list', async (): Promise => { @@ -40,3 +40,23 @@ describe('checkIfDenied', (): void => { ).toEqual(true); }); }); + +describe('checkAddress', (): void => { + it('returns null if the address is not found', async (): Promise => { + expect( + await checkAddress('5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY') + ).toEqual(null); + }); + + it('returns the site when the address is found', async (): Promise => { + expect( + await checkAddress('14Vxs7UB9FqfQ53wwTJUBAJThs5N7b3bg89HscRU6eBqrFhQ') + ).toEqual('polkadot.center'); + }); + + it('returns the site even if the ss58 is different', async (): Promise => { + expect( + await checkAddress('5FkmzcdNekhdSA7j4teSSyHGUnKT8bzNBFvVVeZSGmbSpYHH') + ).toEqual('polkadots.network'); + }); +}); diff --git a/packages/phishing/src/index.ts b/packages/phishing/src/index.ts index 684fb0240..9ece6c96f 100644 --- a/packages/phishing/src/index.ts +++ b/packages/phishing/src/index.ts @@ -1,17 +1,23 @@ // Copyright 2020-2021 @polkadot/phishing authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { HostList } from './types'; +import type { AddressList, HostList } from './types'; +import { u8aEq } from '@polkadot/util'; +import { decodeAddress } from '@polkadot/util-crypto'; import { fetch } from '@polkadot/x-fetch'; -// Equivalent to https://raw.githubusercontent.com/polkadot-js/phishing/master/all.json +// Equivalent to https://raw.githubusercontent.com/polkadot-js/phishing/master/{address,all}.json +const ADDRESS_JSON = 'https://polkadot.js.org/phishing/address.json'; const ALL_JSON = 'https://polkadot.js.org/phishing/all.json'; // 1 hour cache refresh -const CACHE_TIMEOUT = 1 * 60 * 60 * 1000; +const CACHE_TIMEOUT = 45 * 60 * 1000; -let cacheEnd = 0; -let cacheList: HostList | null = null; +let cacheAddrEnd = 0; +let cacheAddrList: AddressList | null = null; +let cacheAddrU8a: [string, Uint8Array[]][] | null = null; +let cacheHostEnd = 0; +let cacheHostList: HostList | null = null; // gets the host-only part for a host function extractHost (path: string): string { @@ -20,21 +26,56 @@ function extractHost (path: string): string { .split('/')[0]; } +/** + * Retrieve a list of known phishing addresses + */ +export async function retrieveAddrList (allowCached = true): Promise { + const now = Date.now(); + + if (allowCached && cacheAddrList && (now < cacheAddrEnd)) { + return cacheAddrList; + } + + const response = await fetch(ADDRESS_JSON); + const list = (await response.json()) as AddressList; + + cacheAddrEnd = now + CACHE_TIMEOUT; + cacheAddrList = list; + + return list; +} + +async function retrieveAddrU8a (allowCached = true): Promise<[string, Uint8Array[]][]> { + const now = Date.now(); + + if (allowCached && cacheAddrU8a && (now < cacheAddrEnd)) { + return cacheAddrU8a; + } + + const all = await retrieveAddrList(allowCached); + + cacheAddrU8a = Object + .entries(all) + .map(([key, addresses]): [string, Uint8Array[]] => [key, addresses.map((a) => decodeAddress(a))]); + + return cacheAddrU8a; +} + /** * Retrieve allow/deny from our list provider */ export async function retrieveHostList (allowCached = true): Promise { const now = Date.now(); - if (allowCached && cacheList && (now < cacheEnd)) { - return cacheList; + if (allowCached && cacheHostList && (now < cacheHostEnd)) { + return cacheHostList; } const response = await fetch(ALL_JSON); const list = (await response.json()) as HostList; - cacheEnd = now + CACHE_TIMEOUT; - cacheList = list; + cacheHostEnd = now + CACHE_TIMEOUT; + cacheHostList = list; return list; } @@ -58,9 +99,28 @@ export function checkHost (items: string[], host: string): boolean { }); } +/** + * Determines if a host is in our deny list. Returns a string containing the phishing site if host is a + * problematic one. Returns null if the address is not associated with phishing. + */ +export async function checkAddress (address: string | Uint8Array, allowCached = true): Promise { + try { + const all = await retrieveAddrU8a(allowCached); + const u8a = decodeAddress(address); + const entry = all.find(([, all]) => all.some((a) => u8aEq(a, u8a))) || [null]; + + return entry[0]; + } catch (error) { + console.error('Exception while checking address, assuming non-phishing'); + console.error(error); + + return null; + } +} + /** * Determines if a host is in our deny list. Returns true if host is a problematic one. Returns - * true if the host provided is in our list of less-than-honest sites. + * false if the host provided is not in our list of less-than-honest sites. */ export async function checkIfDenied (host: string, allowCached = true): Promise { try { @@ -68,7 +128,7 @@ export async function checkIfDenied (host: string, allowCached = true): Promise< return checkHost(deny, host); } catch (error) { - console.error('Exception while checking host, assuming false'); + console.error('Exception while checking host, assuming non-phishing'); console.error(error); return false; diff --git a/packages/phishing/src/types.ts b/packages/phishing/src/types.ts index 68863da6d..e9002ec5e 100644 --- a/packages/phishing/src/types.ts +++ b/packages/phishing/src/types.ts @@ -5,3 +5,5 @@ export interface HostList { allow: string[]; deny: string[]; } + +export type AddressList = Record; diff --git a/scripts/sortAll.mjs b/scripts/sortAll.mjs index 0bc58278b..0a1a61b01 100644 --- a/scripts/sortAll.mjs +++ b/scripts/sortAll.mjs @@ -7,14 +7,24 @@ function sortSection (values) { return values.sort((a, b) => a.localeCompare(b)); } -const original = JSON.parse(fs.readFileSync('all.json', 'utf-8')); +function sortAddress (values) { + return Object + .entries(values) + .sort(([a], [b]) => a.localeCompare(b)) + .map(([key, addresses]) => [key, sortSection(addresses)]) + .reduce((all, [key, addresses]) => ({ ...all, [key]: addresses }), {}); +} + +const addr = JSON.parse(fs.readFileSync('address.json', 'utf-8')); +const all = JSON.parse(fs.readFileSync('all.json', 'utf-8')); const meta = JSON.parse(fs.readFileSync('urlmeta.json', 'utf-8')); // sorted order for all entries -const allow = sortSection(original.allow); -const deny = sortSection(original.deny); +const allow = sortSection(all.allow); +const deny = sortSection(all.deny); // rewrite with all our entries (newline included) +fs.writeFileSync('address.json', `${JSON.stringify(sortAddress(addr), null, 2)}\n`); fs.writeFileSync('all.json', `${JSON.stringify({ allow, deny }, null, 2)}\n`); // find out what we don't have diff --git a/yarn.lock b/yarn.lock index 8cba13661..395ac3060 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1708,12 +1708,23 @@ __metadata: languageName: node linkType: hard +"@polkadot/networks@npm:5.3.2-7": + version: 5.3.2-7 + resolution: "@polkadot/networks@npm:5.3.2-7" + dependencies: + "@babel/runtime": ^7.12.5 + checksum: 4bd6193b653dfb1f7fd0e3b59e201ccc53c85da37a090bcbe06de1a4ab9fa64364057b372335158a3d4e522a8fb716deb592f8bbdbbf5654410b0fc91dde7b26 + languageName: node + linkType: hard + "@polkadot/phishing@workspace:packages/phishing": version: 0.0.0-use.local resolution: "@polkadot/phishing@workspace:packages/phishing" dependencies: "@babel/runtime": ^7.12.5 - "@polkadot/x-fetch": ^5.3.1 + "@polkadot/util": ^5.3.2-6 + "@polkadot/util-crypto": ^5.3.2-6 + "@polkadot/x-fetch": ^5.3.2-6 "@types/js-yaml": ^4.0.0 js-yaml: ^4.0.0 languageName: unknown @@ -1725,14 +1736,113 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/x-fetch@npm:^5.3.1": - version: 5.3.1 - resolution: "@polkadot/x-fetch@npm:5.3.1" +"@polkadot/util-crypto@npm:^5.3.2-6": + version: 5.3.2-7 + resolution: "@polkadot/util-crypto@npm:5.3.2-7" + dependencies: + "@babel/runtime": ^7.12.5 + "@polkadot/networks": 5.3.2-7 + "@polkadot/util": 5.3.2-7 + "@polkadot/wasm-crypto": ^3.2.1 + "@polkadot/x-randomvalues": 5.3.2-7 + base-x: ^3.0.8 + blakejs: ^1.1.0 + bn.js: ^4.11.9 + create-hash: ^1.2.0 + elliptic: ^6.5.3 + hash.js: ^1.1.7 + js-sha3: ^0.8.0 + scryptsy: ^2.1.0 + tweetnacl: ^1.0.3 + xxhashjs: ^0.2.2 + peerDependencies: + "@polkadot/util": 5.3.2-7 + checksum: 9c0a231fe5b1a2513d2f17c2ca12cc8aecf33c91d78716f5631b341252eb0b1c556c2f61410dcc34b4997311eed26f6e06635d71a93139d71521268e97d2fcbd + languageName: node + linkType: hard + +"@polkadot/util@npm:5.3.2-7, @polkadot/util@npm:^5.3.2-6": + version: 5.3.2-7 + resolution: "@polkadot/util@npm:5.3.2-7" + dependencies: + "@babel/runtime": ^7.12.5 + "@polkadot/x-textdecoder": 5.3.2-7 + "@polkadot/x-textencoder": 5.3.2-7 + "@types/bn.js": ^4.11.6 + bn.js: ^4.11.9 + camelcase: ^5.3.1 + ip-regex: ^4.2.0 + checksum: fe179b893f238f632f8434688ad94811f3ee72f100c5e92dc335851e6bb0c1f800f2cbabf08325ccc913ae9660d00b26d1900bb266d71a62fbc294ebb09fa476 + languageName: node + linkType: hard + +"@polkadot/wasm-crypto-asmjs@npm:^3.2.1": + version: 3.2.1 + resolution: "@polkadot/wasm-crypto-asmjs@npm:3.2.1" + dependencies: + "@babel/runtime": ^7.12.5 + checksum: 8aa86a954d33a562b6f1efb4beb0fc512f43bc36e5465455b3efd05edbc67626055464c7bec06e6ce2c152a8535988459b89a800b5dc044299c5b24a790ad4cf + languageName: node + linkType: hard + +"@polkadot/wasm-crypto-wasm@npm:^3.2.1": + version: 3.2.1 + resolution: "@polkadot/wasm-crypto-wasm@npm:3.2.1" + dependencies: + "@babel/runtime": ^7.12.5 + checksum: 974372b4dff99b2ec7620a1ba9bb69e181e30ca0f0e814560311cbbc1d851e820676883c5a73b683eb2b0d82765c3256add074586983aa89b46d0d43c6d14507 + languageName: node + linkType: hard + +"@polkadot/wasm-crypto@npm:^3.2.1": + version: 3.2.1 + resolution: "@polkadot/wasm-crypto@npm:3.2.1" + dependencies: + "@babel/runtime": ^7.12.5 + "@polkadot/wasm-crypto-asmjs": ^3.2.1 + "@polkadot/wasm-crypto-wasm": ^3.2.1 + peerDependencies: + "@polkadot/util": "*" + "@polkadot/x-randomvalues": "*" + checksum: 388f77a79db8c5d99acae56e5b9cf0a855710a2dd468b4bec4f7687da00f64ebf7cb914b3b7d1613374068556971619220fd4ccf7f8de190ece2387e18c176a9 + languageName: node + linkType: hard + +"@polkadot/x-fetch@npm:^5.3.2-6": + version: 5.3.2-6 + resolution: "@polkadot/x-fetch@npm:5.3.2-6" dependencies: "@babel/runtime": ^7.12.5 "@types/node-fetch": ^2.5.8 node-fetch: ^2.6.1 - checksum: 7a0408e9ae106b1625fb193cad7c8e5e2a1a80d1f103eaa5d1fc3234563d22c2e98cbbe1a6bc17a50793fe8012c2c57a962de3207735bf956fd7594bbbdcd4b3 + checksum: c6fff084f52f296b056ef15f0169c59d4e8f5897b1c9a6b224462aeed44520bed7f79661da3fb7f799e997a4baa72563ae71f6a360f8534b5b65e60a7c214fd6 + languageName: node + linkType: hard + +"@polkadot/x-randomvalues@npm:5.3.2-7": + version: 5.3.2-7 + resolution: "@polkadot/x-randomvalues@npm:5.3.2-7" + dependencies: + "@babel/runtime": ^7.12.5 + checksum: aff63596c76fdaf236b93d41915f29169788e0d86cf44d871836d95d7310e8a9fed75ed4ca05f1c11ebafb77e51b78ae9921a8b35a47765b7f6ea0bae5c161eb + languageName: node + linkType: hard + +"@polkadot/x-textdecoder@npm:5.3.2-7": + version: 5.3.2-7 + resolution: "@polkadot/x-textdecoder@npm:5.3.2-7" + dependencies: + "@babel/runtime": ^7.12.5 + checksum: efceb8fe6e6856fb9f6b4242bf8cadfa33e8c93da7ed1139f990fb906ad0fb5de83b54bd92ddfadf7d31f4bfec098f2a3ee037783223c49a93953dd33c57d8a0 + languageName: node + linkType: hard + +"@polkadot/x-textencoder@npm:5.3.2-7": + version: 5.3.2-7 + resolution: "@polkadot/x-textencoder@npm:5.3.2-7" + dependencies: + "@babel/runtime": ^7.12.5 + checksum: 583a21914bdafccd2f5f81dba12950cbd7c84512eb9becbbebe8223b27236600f43802c0805494f43bd9da37bc2a66d973ec576c1adcd95db06c9a382e5c5d00 languageName: node linkType: hard @@ -1818,6 +1928,15 @@ __metadata: languageName: node linkType: hard +"@types/bn.js@npm:^4.11.6": + version: 4.11.6 + resolution: "@types/bn.js@npm:4.11.6" + dependencies: + "@types/node": "*" + checksum: 0f6cbfb3d12f6b5cce62922c57b4704583307961e9d09ae07e1aab2a41f815e27417bd022c8f48bba545c2bb27ee23e1035ca53500b2081e037e749ec27b88b8 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.2": version: 4.1.4 resolution: "@types/graceful-fs@npm:4.1.4" @@ -2651,6 +2770,15 @@ __metadata: languageName: node linkType: hard +"base-x@npm:^3.0.8": + version: 3.0.8 + resolution: "base-x@npm:3.0.8" + dependencies: + safe-buffer: ^5.0.1 + checksum: 9e5832ab00f4413d63f8227901c18b2a9db5f379525f70b627e6e284007dc5e7940a765ef4ab03974b4c14a664153208758656ebb86979451d1995d13e3fa29b + languageName: node + linkType: hard + "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -2707,6 +2835,13 @@ __metadata: languageName: node linkType: hard +"blakejs@npm:^1.1.0": + version: 1.1.0 + resolution: "blakejs@npm:1.1.0" + checksum: 007d68a909d94cea612294bbab0cb2c26440c3a59eb340dfca046f1913cf4aa917da56088ad762f13921883ccc81c6eed2924ceac27f4ebbf9b4d25981a85fcd + languageName: node + linkType: hard + "bluebird@npm:^3.1.1": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -2714,6 +2849,13 @@ __metadata: languageName: node linkType: hard +"bn.js@npm:^4.11.9, bn.js@npm:^4.4.0": + version: 4.11.9 + resolution: "bn.js@npm:4.11.9" + checksum: 31630d3560b28931010980886a0f657b37ce818ba237867cd838e89a1a0b71044fb4977aa56376616997b372bbb3f55d3bb25e5378c48c1d24a47bfb4235b60e + languageName: node + linkType: hard + "boxen@npm:^4.2.0": version: 4.2.0 resolution: "boxen@npm:4.2.0" @@ -2767,6 +2909,13 @@ __metadata: languageName: node linkType: hard +"brorand@npm:^1.0.1": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 4536dd73f07f6884d89c09c906345b606abff477e87babef64a85656e8cf12b1c5f40d06313b91dac12bf3e031ac190b5d548f2c3bf75f655344c3fcf90cbc8a + languageName: node + linkType: hard + "browser-process-hrtime@npm:^1.0.0": version: 1.0.0 resolution: "browser-process-hrtime@npm:1.0.0" @@ -2991,6 +3140,16 @@ __metadata: languageName: node linkType: hard +"cipher-base@npm:^1.0.1": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: ec80001ec91dbb7c5c08facc00ffc9c75fed7abd6d720c7a9c62c260aa2e5cb2655c183e011b50b8b711f755b1753c7fdd2ca44c091ee78d81c377ca74ed83c9 + languageName: node + linkType: hard + "cjs-module-lexer@npm:^0.6.0": version: 0.6.0 resolution: "cjs-module-lexer@npm:0.6.0" @@ -3291,6 +3450,19 @@ __metadata: languageName: node linkType: hard +"create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: ^1.0.1 + inherits: ^2.0.1 + md5.js: ^1.3.4 + ripemd160: ^2.0.1 + sha.js: ^2.4.0 + checksum: 5565182efc3603e4d34c3ce13fd0765a058b27f91e49ba8e720e30ba8bfc53e9cd835e5343136000b6f210a979fe1041a4f3fe728e866e64f34db04b068fd725 + languageName: node + linkType: hard + "cross-spawn@npm:^6.0.0": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" @@ -3354,6 +3526,13 @@ __metadata: languageName: node linkType: hard +"cuint@npm:^0.2.2": + version: 0.2.2 + resolution: "cuint@npm:0.2.2" + checksum: e2b313668c8ba3867e66188dadf122b385bbc3ba16f639bfaf5f4c950665eefb7ca9bbd2a2e0dbe0cd62fdef20317347c01ab9e270db2c9790bebe5b0fc613af + languageName: node + linkType: hard + "dashdash@npm:^1.12.0": version: 1.14.1 resolution: "dashdash@npm:1.14.1" @@ -3755,6 +3934,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.5.3": + version: 6.5.3 + resolution: "elliptic@npm:6.5.3" + dependencies: + bn.js: ^4.4.0 + brorand: ^1.0.1 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.0 + checksum: b66cf0b8f8d9a4d47992e6f0b754cbe4c0681b78b7d6691529c99fc79d8a87069f354a665a528c4bdd0327e1d937c617f9bb2fef1aa92761e4c2b7f73200af38 + languageName: node + linkType: hard + "email-addresses@npm:^3.0.1": version: 3.1.0 resolution: "email-addresses@npm:3.1.0" @@ -5151,6 +5345,17 @@ __metadata: languageName: node linkType: hard +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 9f4b0d183daf13f79ef60f117efc7004bb3570de48fe2d3c7d03c546313490decb2dff2b08d71b8a0049a7de4b79eda16096c2a96f33a7f4916e7616bce4dc11 + languageName: node + linkType: hard + "hash-sum@npm:^1.0.2": version: 1.0.2 resolution: "hash-sum@npm:1.0.2" @@ -5158,6 +5363,27 @@ __metadata: languageName: node linkType: hard +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: fceb7fb87e224f4b399212f902d3a34c3ed8512560868b56dde92f617fac9c66b501e583bab2996ed7493be5ab3385e05a69d2209fa6a9144391b22e1c2d245b + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.0": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: 729d5a55bf793619830aca5e62d101dfdb4164fe30c056cdcaecb32b1a69a23aa663d88e876d9d56cb69b1c3d95395ea60b0a715763c461188b37dca3dea930d + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.8 resolution: "hosted-git-info@npm:2.8.8" @@ -5299,7 +5525,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 98426da247ddfc3dcd7d7daedd90c3ca32d5b08deca08949726f12d49232aef94772a07b36cf4ff833e105ae2ef931777f6de4a6dd8245a216b9299ad4a50bea @@ -5366,6 +5592,13 @@ __metadata: languageName: node linkType: hard +"ip-regex@npm:^4.2.0": + version: 4.2.0 + resolution: "ip-regex@npm:4.2.0" + checksum: 9e376018e64da89756e27d3f1b3313abc85291b5d1b5b9878f26b3934ecb04fa512116bf66b6dcd9553ba0b88af4feaaedbccd86f0ba6c05e464642ccb8504c5 + languageName: node + linkType: hard + "is-accessor-descriptor@npm:^0.1.6": version: 0.1.6 resolution: "is-accessor-descriptor@npm:0.1.6" @@ -6293,6 +6526,13 @@ __metadata: languageName: node linkType: hard +"js-sha3@npm:^0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 21d7129a634d7e9072a00fa0c037a3f7192d9a2d85377ecbbc7a614fbf523d31cc7489c74adfa84d606d58eb5bffb9dbfbe53bb618ec371942e63070559f3719 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -6858,6 +7098,17 @@ __metadata: languageName: node linkType: hard +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: ca0b260ea29746f1017ad16bc0e164299ae453d2d6a24d635cc6ec03e280f350b09faa4899bfed9387c81457ca55981e9a684336d89faa94b1d2a01903fae2ec + languageName: node + linkType: hard + "merge-source-map@npm:^1.1.0": version: 1.1.0 resolution: "merge-source-map@npm:1.1.0" @@ -6958,6 +7209,20 @@ __metadata: languageName: node linkType: hard +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 28f1de3cf9edfb82613428a58eb3dd38ec6d33ab761b98abf2d130c81104ea86be540c7e5eb8284f13e0a065ead8b17501de09419b9a98987ed27268ad538dba + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.0, minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 736067bddd0e5036a1a4943abe7b63eb1dd0115ad87588420310d26a3d56fc4cd4694b7077fa102956c88d3922dbf7cbc5b7ffe749f27441d13c3e1b1133ab40 + languageName: node + linkType: hard + "minimatch@npm:^3.0.0, minimatch@npm:^3.0.4": version: 3.0.4 resolution: "minimatch@npm:3.0.4" @@ -8143,7 +8408,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" dependencies: @@ -8521,6 +8786,16 @@ __metadata: languageName: node linkType: hard +"ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + checksum: e0370fbe779b1f15d74c3e7dffc0ce40b57b845fc7e431fab8a571958d5fd9c91eb0038a252604600e20786d117badea0cc4cf8816b8a6be6b9166b565ad6797 + languageName: node + linkType: hard + "root-workspace-0b6124@workspace:.": version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." @@ -8561,7 +8836,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 0bb57f0d8f9d1fa4fe35ad8a2db1f83a027d48f2822d59ede88fd5cd4ddad83c0b497213feb7a70fbf90597a70c5217f735b0eb1850df40ce9b4ae81dd22b3f9 @@ -8630,6 +8905,13 @@ __metadata: languageName: node linkType: hard +"scryptsy@npm:^2.1.0": + version: 2.1.0 + resolution: "scryptsy@npm:2.1.0" + checksum: 9fd847955caa9d13a6d58a0360ba8fb31f8e7e7da9250b4c09c67db784a0f6dda757bc837313b0860c0e35f84a56ba068394c682dd4fba81c5899d82832aa7d6 + languageName: node + linkType: hard + "semver-diff@npm:^3.1.1": version: 3.1.1 resolution: "semver-diff@npm:3.1.1" @@ -8696,6 +8978,18 @@ __metadata: languageName: node linkType: hard +"sha.js@npm:^2.4.0": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: 7554240ab76e683f7115123eb4815aae16b5fc6f2cdff97009831ad5b17b107ffcef022526211f7306957bce7a67fa4d0ccad79a3040c5073414365595e90516 + languageName: node + linkType: hard + "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -9591,6 +9885,13 @@ __metadata: languageName: node linkType: hard +"tweetnacl@npm:^1.0.3": + version: 1.0.3 + resolution: "tweetnacl@npm:1.0.3" + checksum: 1188f3ef85db04d6dba632d211e481ae0a5805974491633ff60bd56ae3362312dfea1515e0d200685867b69ff212e8778e26923f8203e3c335064b07f620a6c7 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -10204,6 +10505,15 @@ __metadata: languageName: node linkType: hard +"xxhashjs@npm:^0.2.2": + version: 0.2.2 + resolution: "xxhashjs@npm:0.2.2" + dependencies: + cuint: ^0.2.2 + checksum: 1e99880a00c16bfe10f22bee8a1760300dca658027102feabafd458ac33d4fe07ff66ed39d2bbfe1a42f1dceac2287b0d32eca0e07a32b1e33260db5f8456f40 + languageName: node + linkType: hard + "y18n@npm:^4.0.0": version: 4.0.1 resolution: "y18n@npm:4.0.1"