]> git.codecow.com Git - libnemo.git/commitdiff
Fix safe sign method ignoring wallet type when deriving account and add test scenario.
authorChris Duncan <chris@zoso.dev>
Fri, 8 Aug 2025 18:38:29 +0000 (11:38 -0700)
committerChris Duncan <chris@zoso.dev>
Fri, 8 Aug 2025 18:38:29 +0000 (11:38 -0700)
src/lib/safe.ts
test/test.blocks.mjs

index c6dd767eaf4ed26491e6145ee32d630af6818d83..a1ef851480ff70d6dfb62b6cb6755771964a5d32 100644 (file)
@@ -196,7 +196,9 @@ export class Safe {
                        if (data == null) {
                                throw new Error('Data to sign not found')
                        }
-                       const prv = await Bip44.ckd(this.#seed, BIP44_COIN_NANO, index)
+                       const prv = this.#type === 'BIP-44'
+                               ? await Bip44.ckd(this.#seed, BIP44_COIN_NANO, index)
+                               : await this.#deriveBlake2bPrivateKey(this.#seed, index)
                        const sig = await NanoNaCl.detached(new Uint8Array(data), new Uint8Array(prv))
                        return { signature: sig.buffer }
                } catch (err) {
index 47a0a6294ba81a6a4813ec44e802c01d1f370620..8c7b33194e493d7b9a870582040601c0cb1c4dbb 100644 (file)
@@ -95,9 +95,22 @@ await Promise.all([
        }),\r
 \r
        suite('Block signing using official test vectors', async () => {\r
-               const { ADDRESS_0, BIP39_SEED, OPEN_BLOCK, PASSWORD, PRIVATE_0, RECEIVE_BLOCK, SEND_BLOCK } = NANO_TEST_VECTORS\r
+               const { ADDRESS_0, BIP39_SEED, BLAKE2B_ADDRESS_1, BLAKE2B_PUBLIC_1, BLAKE2B_SEED, OPEN_BLOCK, PASSWORD, PRIVATE_0, RECEIVE_BLOCK, SEND_BLOCK } = NANO_TEST_VECTORS\r
 \r
-               await test('sign open block with wallet', async () => {\r
+               await test('sign open block with BLAKE2b wallet', async () => {\r
+                       const wallet = await Wallet.import('BLAKE2b', PASSWORD, BLAKE2B_SEED)\r
+                       await assert.resolves(wallet.unlock(PASSWORD))\r
+\r
+                       const block = new Block(BLAKE2B_ADDRESS_1, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative)\r
+                               .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance)\r
+                       const signature = await wallet.sign(1, block, 'hex')\r
+                       assert.equal(block.signature, signature)\r
+                       assert.ok(await block.verify(BLAKE2B_PUBLIC_1))\r
+\r
+                       await wallet.destroy()\r
+               })\r
+\r
+               await test('sign open block with BIP-44 wallet', async () => {\r
                        const wallet = await Wallet.import('BIP-44', PASSWORD, BIP39_SEED)\r
                        await assert.resolves(wallet.unlock(PASSWORD))\r
 \r