]> zoso.dev Git - libnemo.git/commitdiff
Web Worker showed no performance benefit, so revert it.
authorChris Duncan <chris@zoso.dev>
Sun, 17 Nov 2024 08:36:41 +0000 (00:36 -0800)
committerChris Duncan <chris@zoso.dev>
Sun, 17 Nov 2024 08:36:41 +0000 (00:36 -0800)
package.json
src/lib/safe.ts
src/lib/wallet.ts
test/derive-accounts.test.mjs

index 51bc638e0cb138baa1dc953255b90111da8746ed..ce5973cfee6f349742ae72857047e38fbc4fae1e 100644 (file)
@@ -39,7 +39,7 @@
                "url": "git+https://zoso.dev/libnemo.git"
        },
        "scripts": {
-               "build": "rm -rf dist && tsc && esbuild main.min=dist/main.js global.min=dist/global.js ckd=dist/lib/ckd.js --outdir=dist --target=es2022 --format=esm --platform=node --bundle --minify --sourcemap",
+               "build": "rm -rf dist && tsc && esbuild main.min=dist/main.js global.min=dist/global.js --outdir=dist --target=es2022 --format=esm --platform=browser --bundle --minify --sourcemap",
                "test": "npm run build && node --test --test-force-exit --env-file .env",
                "test:coverage": "npm run test -- --experimental-test-coverage",
                "test:coverage:report": "npm run test:coverage -- --test-reporter=lcov --test-reporter-destination=coverage.info && genhtml coverage.info --output-directory test/coverage && rm coverage.info && xdg-open test/coverage/index.html"
index 8654756877403ba8931cf492a198465dec1d3144..3a417c0fc383694a8bf4e028bc3dd4d2d0071d77 100644 (file)
@@ -3,11 +3,13 @@
 
 import { buffer, hex, utf8 } from './convert.js'
 import { Entropy } from './entropy.js'
+// import { Thread } from './thread.js'
 const { subtle } = globalThis.crypto
 const ERR_MSG = 'Failed to store item in Safe'
 
 export class Safe {
        #storage = globalThis.sessionStorage
+       // #thread = new Thread(new URL('./ckd.js', import.meta.url))
 
        /**
        * Encrypts data with a password and stores it in the Safe.
index 1a4f5cc51be348e1258779e40642e03f3e00161c..b180edbba3e9929db4a07b385b788b54243bb0f2 100644 (file)
@@ -1,11 +1,13 @@
 // SPDX-FileCopyrightText: 2024 Chris Duncan <chris@zoso.dev>\r
 // SPDX-License-Identifier: GPL-3.0-or-later\r
 \r
+import blake2b from 'blake2b-wasm'\r
 import { Account } from './account.js'\r
+import { nanoCKD } from './bip32-key-derivation.js'\r
 import { Bip39Mnemonic } from './bip39-mnemonic.js'\r
 import { ADDRESS_GAP, SEED_LENGTH_BIP44, SEED_LENGTH_BLAKE2B } from './constants.js'\r
+import { dec, hex } from './convert.js'\r
 import { Entropy } from './entropy.js'\r
-import { Thread } from './thread.js'\r
 import { Rpc } from './rpc.js'\r
 import { Safe } from './safe.js'\r
 import type { Ledger } from './ledger.js'\r
@@ -231,14 +233,12 @@ abstract class Wallet {
 */\r
 export class Bip44Wallet extends Wallet {\r
        static #isInternal: boolean = false\r
-       #thread: Thread\r
 \r
        constructor (seed: string, mnemonic?: Bip39Mnemonic, id?: string) {\r
                if (!Bip44Wallet.#isInternal) {\r
                        throw new Error(`Bip44Wallet cannot be instantiated directly. Use 'await Bip44Wallet.create()' instead.`)\r
                }\r
                super(seed, mnemonic, id)\r
-               this.#thread = new Thread(new URL('./ckd.js', import.meta.url))\r
                Bip44Wallet.#isInternal = false\r
        }\r
 \r
@@ -390,7 +390,7 @@ export class Bip44Wallet extends Wallet {
        * @returns {Promise<Account>}\r
        */\r
        async ckd (index: number): Promise<Account> {\r
-               const key = await this.#thread.work({ type: 'bip44', seed: this.seed, index })\r
+               const key = await nanoCKD(this.seed, index)\r
                if (typeof key !== 'string') {\r
                        throw new TypeError('BIP-44 child key derivation returned invalid data')\r
                }\r
@@ -416,14 +416,12 @@ export class Bip44Wallet extends Wallet {
 */\r
 export class Blake2bWallet extends Wallet {\r
        static #isInternal: boolean = false\r
-       #thread: Thread\r
 \r
        constructor (seed: string, mnemonic?: Bip39Mnemonic, id?: string) {\r
                if (!Blake2bWallet.#isInternal) {\r
                        throw new Error(`Blake2bWallet cannot be instantiated directly. Use 'await Blake2bWallet.create()' instead.`)\r
                }\r
                super(seed, mnemonic, id)\r
-               this.#thread = new Thread(new URL('./ckd.js', import.meta.url))\r
                Blake2bWallet.#isInternal = false\r
        }\r
 \r
@@ -537,7 +535,8 @@ export class Blake2bWallet extends Wallet {
        * @returns {Promise<Account>}\r
        */\r
        async ckd (index: number): Promise<Account> {\r
-               const key = await this.#thread.work({ type: 'blake2b', seed: this.seed, index })\r
+               const input = `${this.seed}${dec.toHex(index, 8)}`\r
+               const key = blake2b().update(hex.toBytes(input)).digest('hex')\r
                if (typeof key !== 'string') {\r
                        throw new TypeError('BLAKE2b child key derivation returned invalid data')\r
                }\r
index 49a4a478f703ece936272d69dcb6aa18720c21d5..e8e79482cc958887c178ac8fe43708542b79ba65 100644 (file)
@@ -9,8 +9,6 @@ import { strict as assert } from 'assert'
 import { NANO_TEST_VECTORS } from './TEST_VECTORS.js'\r
 import { Bip44Wallet, Blake2bWallet, LedgerWallet } from '../dist/main.js'\r
 \r
-const skip = true\r
-\r
 // WARNING: Do not send any funds to the test vectors below\r
 // Test vectors from https://docs.nano.org/integration-guides/key-management/ and elsewhere\r
 describe('derive child accounts from the same seed', async function () {\r
@@ -90,7 +88,7 @@ describe('Ledger device accounts', { skip: true }, async () => {
        })\r
 })\r
 \r
-describe('child key derivation performance', { skip }, async () => {\r
+describe('child key derivation performance', { skip: true }, async () => {\r
        it('performance test of BIP-44 ckd', async function () {\r
                const wallet = await Bip44Wallet.create(NANO_TEST_VECTORS.PASSWORD)\r
                await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r