From 270abe05ac78121f55d0b928b59dfcadc6834fcf Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sat, 16 Nov 2024 23:24:38 -0800 Subject: [PATCH] Use new WASM blake hashing module. Eliminate an import within worker file by performing calculations explicitly. --- src/lib/ckd.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/lib/ckd.ts b/src/lib/ckd.ts index 8e40b9d..78cb8cc 100644 --- a/src/lib/ckd.ts +++ b/src/lib/ckd.ts @@ -1,15 +1,16 @@ // SPDX-FileCopyrightText: 2024 Chris Duncan // SPDX-License-Identifier: GPL-3.0-or-later -import blake2b from 'blake2b' +import blake2b from 'blake2b-wasm' import { nanoCKD } from './bip32-key-derivation.js' -import { dec, hex } from './convert.js' -if (globalThis.Worker == null) { +let addEventListener = globalThis.addEventListener +let postMessage = globalThis.postMessage +if (addEventListener == null || postMessage == null) { const { isMainThread, parentPort } = await import('node:worker_threads') - if (!isMainThread) { - globalThis.addEventListener ??= Object.getPrototypeOf(parentPort).on.bind(parentPort) - globalThis.postMessage ??= Object.getPrototypeOf(parentPort).postMessage.bind(parentPort) + if (!isMainThread && parentPort) { + addEventListener = Object.getPrototypeOf(parentPort).addListener.bind(parentPort) + postMessage = Object.getPrototypeOf(parentPort).postMessage.bind(parentPort) } } @@ -31,7 +32,7 @@ addEventListener('message', (message) => { break } } -}, { once: true }) +}) /** * Derives BIP-44 Nano account private keys. @@ -50,7 +51,10 @@ async function ckdBip44 (seed: string, index: number): Promise { * @returns {Promise} */ async function ckdBlake2b (seed: string, index: number): Promise { - const input = `${seed}${dec.toHex(index, 8)}` - const hash = blake2b(32).update(hex.toBytes(input)).digest('hex') + const indexHex = index.toString(16).padStart(8, '0').toUpperCase() + const inputHex = `${seed}${indexHex}`.padStart(72, '0') + const inputArray = (inputHex.match(/.{1,2}/g) ?? []).map(h => parseInt(h, 16)) + const inputBytes = Uint8Array.from(inputArray) + const hash = blake2b().update(inputBytes).digest('hex') return hash } -- 2.34.1