diff --git a/packages/encryption/package.json b/packages/encryption/package.json index 168085a816c6..530a6d11e5ad 100644 --- a/packages/encryption/package.json +++ b/packages/encryption/package.json @@ -10,6 +10,7 @@ } }, "dependencies": { + "@dimensiondev/secp256k1-webcrypto": "1.0.0-20220412114204-be816df", "@dimensiondev/stego-js": "0.11.1-20201027083223-8ab41be", "@masknet/shared-base": "workspace:*", "@masknet/typed-message": "workspace:*", diff --git a/packages/encryption/tests/setup.ts b/packages/encryption/tests/setup.ts index 1f0839cbce28..26c67f53e009 100644 --- a/packages/encryption/tests/setup.ts +++ b/packages/encryption/tests/setup.ts @@ -1,22 +1,10 @@ import { test } from '@jest/globals' -import { webcrypto } from 'crypto' import { atob, btoa } from 'buffer' +import { polyfill } from '@dimensiondev/secp256k1-webcrypto/node' test('Setup env', () => {}) if (!Reflect.get(globalThis, 'crypto')) { - Object.assign(globalThis, { - crypto: webcrypto, - atob, - btoa, - self: globalThis, - navigator: { - userAgent: 'Chrome/99.0.0.0', - }, - }) - - // @ts-ignore - await import('../../polyfills/dist/secp256k1.js') - Reflect.deleteProperty(globalThis, 'navigator') - Reflect.deleteProperty(globalThis, 'self') + polyfill() + Object.assign(globalThis, { atob, btoa }) } diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index 04395d158fe6..169a2c487097 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -269,7 +269,6 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { addHTMLEntry({ chunks: ['background'], filename: 'background.html', - secp256k1: true, gun: true, sourceMap: !!sourceMapKind, }), @@ -297,18 +296,11 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { } function addHTMLEntry( options: HTMLPlugin.Options & { - secp256k1?: boolean sourceMap: boolean gun?: boolean }, ) { let templateContent = readFileSync(join(__dirname, './template.html'), 'utf8') - if (options.secp256k1) { - templateContent = templateContent.replace( - ``, - '', - ) - } if (options.gun) { templateContent = templateContent.replace(``, '') } diff --git a/packages/mask/.webpack/template.html b/packages/mask/.webpack/template.html index 11a6e47c32df..2b2a8cc3c964 100644 --- a/packages/mask/.webpack/template.html +++ b/packages/mask/.webpack/template.html @@ -6,7 +6,6 @@ - diff --git a/packages/mask/background/setup.ts b/packages/mask/background/setup.ts index b1446fa111ac..359b798972b8 100644 --- a/packages/mask/background/setup.ts +++ b/packages/mask/background/setup.ts @@ -1,4 +1,6 @@ +import { polyfill } from '@dimensiondev/secp256k1-webcrypto' import { setupMaskKVStorageBackend } from '../shared/kv-storage' import { inMemory_KVStorageBackend, indexedDB_KVStorageBackend } from './database/kv-storage' +polyfill() setupMaskKVStorageBackend(indexedDB_KVStorageBackend, inMemory_KVStorageBackend) diff --git a/packages/mask/package.json b/packages/mask/package.json index 3c584d161b21..e2c5afd0dfb1 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -8,6 +8,7 @@ "@dimensiondev/holoflows-kit": "^0.9.0-20210902104757-7c3d0d0", "@dimensiondev/mask-wallet-core": "0.1.0-20211013082857-eb62e5f", "@dimensiondev/metamask-extension-provider": "3.0.6-20210519045409-1835d4d", + "@dimensiondev/secp256k1-webcrypto": "1.0.0-20220412114204-be816df", "@ethersproject/abi": "^5.4.0", "@ethersproject/address": "^5.0.4", "@ethersproject/providers": "^5.0.9", diff --git a/packages/polyfills/builder.mjs b/packages/polyfills/builder.mjs index afc8ace7001e..56bff31e87bb 100644 --- a/packages/polyfills/builder.mjs +++ b/packages/polyfills/builder.mjs @@ -20,7 +20,7 @@ let polyfillVersion = '__' const lockfile = await readFile(lockfilePath) const hash = createHash('sha256') hash.update(lockfile) - polyfillVersion = 'v4' + hash.digest('hex') + polyfillVersion = 'v5' + hash.digest('hex') } const versionFilePath = fileURLToPath(new URL('./dist/version.txt', import.meta.url)) @@ -52,18 +52,9 @@ for (const optionsObj of options) { await Promise.all(optionsObj.output.map(bundle.write)) } -const elliptic = await readFile(fileURLToPath(new URL('./dist/internal_elliptic.js', import.meta.url)), 'utf-8') -const liner = await readFile(require.resolve('webcrypto-liner/build/webcrypto-liner.shim.min.mjs'), 'utf-8') -await writeFile( - fileURLToPath(new URL('./dist/secp256k1.js', import.meta.url)), - `${elliptic}; -${liner};`, -) - await normalize(new URL('./dist/dom.js', import.meta.url)) await normalize(new URL('./dist/ecmascript.js', import.meta.url)) await normalize(new URL('./dist/intl.js', import.meta.url)) -await normalize(new URL('./dist/secp256k1.js', import.meta.url)) await normalize(new URL('./dist/worker.js', import.meta.url)) await writeFile(versionFilePath, polyfillVersion) diff --git a/packages/polyfills/elliptic.js b/packages/polyfills/elliptic.js deleted file mode 100644 index 7575b1b1c3a7..000000000000 --- a/packages/polyfills/elliptic.js +++ /dev/null @@ -1,4 +0,0 @@ -import elliptic from 'elliptic' -import { Buffer } from './node_modules/buffer/index' -globalThis.elliptic = elliptic -globalThis.Buffer = Buffer diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index ef092ba0c91e..6cc611a533f8 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -18,8 +18,6 @@ "dependencies": { "buffer": "^6.0.3", "clipboard-polyfill": "^3.0.3", - "core-js": "^3.21.1", - "elliptic": "^6.5.4", - "webcrypto-liner": "1.3.1" + "core-js": "^3.21.1" } } diff --git a/packages/polyfills/rollup.config.js b/packages/polyfills/rollup.config.js index d2e87c000eab..1a894c663d6f 100644 --- a/packages/polyfills/rollup.config.js +++ b/packages/polyfills/rollup.config.js @@ -30,14 +30,6 @@ export default [ }, plugins: plugins(), }, - { - input: join(__dirname, './elliptic.js'), - output: { - file: 'internal_elliptic.js', - format: 'iife', - }, - plugins: plugins(), - }, ] function plugins() { return [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be09674594cf..d19964c7e2ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -237,11 +237,13 @@ importers: packages/encryption: specifiers: + '@dimensiondev/secp256k1-webcrypto': 1.0.0-20220412114204-be816df '@dimensiondev/stego-js': 0.11.1-20201027083223-8ab41be '@masknet/shared-base': workspace:* '@masknet/typed-message': workspace:* '@msgpack/msgpack': ^2.7.2 dependencies: + '@dimensiondev/secp256k1-webcrypto': 1.0.0-20220412114204-be816df '@dimensiondev/stego-js': 0.11.1-20201027083223-8ab41be '@masknet/shared-base': link:../shared-base '@masknet/typed-message': link:../typed-message @@ -288,6 +290,7 @@ importers: '@dimensiondev/holoflows-kit': ^0.9.0-20210902104757-7c3d0d0 '@dimensiondev/mask-wallet-core': 0.1.0-20211013082857-eb62e5f '@dimensiondev/metamask-extension-provider': 3.0.6-20210519045409-1835d4d + '@dimensiondev/secp256k1-webcrypto': 1.0.0-20220412114204-be816df '@dimensiondev/webextension-shim': 0.0.3-20210823035705-4257e12 '@ethersproject/abi': ^5.4.0 '@ethersproject/address': ^5.0.4 @@ -429,6 +432,7 @@ importers: '@dimensiondev/holoflows-kit': 0.9.0-20210902104757-7c3d0d0_webextension-polyfill@0.9.0 '@dimensiondev/mask-wallet-core': 0.1.0-20211013082857-eb62e5f_protobufjs@6.11.2 '@dimensiondev/metamask-extension-provider': 3.0.6-20210519045409-1835d4d + '@dimensiondev/secp256k1-webcrypto': 1.0.0-20220412114204-be816df '@ethersproject/abi': 5.4.0 '@ethersproject/address': 5.4.0 '@ethersproject/providers': 5.4.2 @@ -926,16 +930,12 @@ importers: clipboard-polyfill: ^3.0.3 core-js: ^3.21.1 core-js-builder: ^3.21.1 - elliptic: ^6.5.4 rollup: ^2.70.1 rollup-plugin-terser: ^7.0.2 - webcrypto-liner: 1.3.1 dependencies: buffer: 6.0.3 clipboard-polyfill: 3.0.3 core-js: 3.21.1 - elliptic: 6.5.4 - webcrypto-liner: 1.3.1 devDependencies: '@rollup/plugin-commonjs': 21.0.3_rollup@2.70.1 '@rollup/plugin-json': 4.1.0_rollup@2.70.1 @@ -4041,6 +4041,13 @@ packages: tmp: 0.0.33 dev: true + /@dimensiondev/secp256k1-webcrypto/1.0.0-20220412114204-be816df: + resolution: {integrity: sha512-gDNH39SnATJogShz7egcc4aJqBUurB7xzyNVuVy78XmkAz57xG7nWlo5KyC8sh9cZDHNwi12vYI1zJz5UPgN2A==, tarball: download/@dimensiondev/secp256k1-webcrypto/1.0.0-20220412114204-be816df/7e05b026476e62dc08df835fa6a559e9dbcfe976128f54172b8d0d0221aad6af} + dependencies: + elliptic: 6.5.4 + pvtsutils: 1.2.2 + dev: false + /@dimensiondev/stego-js/0.11.1-20201027083223-8ab41be: resolution: {integrity: sha512-lm49qcX2O40Nn+AGKN6J4qrpPHaffGnvUI3mCh+obyiZxT9H5/vZv1B+SUm2bXq8r2LeLHIeW90x1lpyg1roTQ==, tarball: download/@dimensiondev/stego-js/0.11.1-20201027083223-8ab41be/2d41418365c7ea41e10de432e82b0707c3a3a3b70a20a3733276162eeb6c4bcd} hasBin: true @@ -5906,6 +5913,7 @@ packages: pvtsutils: 1.2.1 tslib: 2.3.1 dev: false + optional: true /@peculiar/json-schema/1.1.12: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} @@ -5913,6 +5921,7 @@ packages: dependencies: tslib: 2.3.1 dev: false + optional: true /@peculiar/webcrypto/1.2.3: resolution: {integrity: sha512-q7wDfZy3k/tpnsYB23/MyyDkjn6IdHh8w+xwoVMS5cu6CjVoFzngXDZEOOuSE4zus2yO6ciQhhHxd4XkLpwVnQ==} @@ -8333,6 +8342,7 @@ packages: /@types/asn1js/2.0.2: resolution: {integrity: sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA==} dev: false + optional: true /@types/babel__core/7.1.18: resolution: {integrity: sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==} @@ -10323,10 +10333,6 @@ packages: resolution: {integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=} dev: false - /asmcrypto.js/2.3.2: - resolution: {integrity: sha512-3FgFARf7RupsZETQ1nHnhLUUvpcttcCq1iZCaVAbJZbCZ5VNRrNyvpDyHTOb0KC3llFcsyOT/a99NZcCbeiEsA==} - dev: false - /asn1.js/5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: @@ -10347,6 +10353,7 @@ packages: dependencies: pvutils: 1.1.3 dev: false + optional: true /assert-plus/1.0.0: resolution: {integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=} @@ -21780,6 +21787,7 @@ packages: dependencies: tslib: 2.3.1 dev: false + optional: true /pvtsutils/1.2.2: resolution: {integrity: sha512-OALo5ZEdqiI127i64+CXwkCOyFHUA+tCQgaUO/MvRDFXWPr53f2sx28ECNztUEzuyu5xvuuD1EB/szg9mwJoGA==} @@ -21791,6 +21799,7 @@ packages: resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} engines: {node: '>=6.0.0'} dev: false + optional: true /q/1.5.1: resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=} @@ -26180,21 +26189,7 @@ packages: pvtsutils: 1.2.1 tslib: 2.3.1 dev: false - - /webcrypto-liner/1.3.1: - resolution: {integrity: sha512-xCxg3DKpJ8UNsriAQq0KpOpY4xU6lvQFZbs0d/pnGdE8IRzzfAao4Z2qXsSvDRN0OraH3MlvK3j2ocUk23ymFA==} - dependencies: - '@peculiar/asn1-schema': 2.0.44 - '@peculiar/json-schema': 1.1.12 - asmcrypto.js: 2.3.2 - asn1js: 2.2.0 - core-js: 3.21.1 - des.js: 1.0.1 - elliptic: 6.5.4 - pvtsutils: 1.2.1 - tslib: 2.3.1 - webcrypto-core: 1.4.0 - dev: false + optional: true /webextension-polyfill-ts/0.22.0: resolution: {integrity: sha512-3P33ClMwZ/qiAT7UH1ROrkRC1KM78umlnPpRhdC/292UyoTTW9NcjJEqDsv83HbibcTB6qCtpVeuB2q2/oniHQ==}