]> git.codecow.com Git - libnemo.git/commitdiff
Fix testing password versus mnemonic salt.
authorChris Duncan <chris@codecow.com>
Tue, 4 Aug 2026 06:39:35 +0000 (23:39 -0700)
committerChris Duncan <chris@codecow.com>
Tue, 4 Aug 2026 06:39:35 +0000 (23:39 -0700)
test/VECTORS.mjs
test/test.blocks.mjs
test/test.create-wallet.mjs
test/test.derive-accounts.mjs
test/test.import-wallet.mjs
test/test.lock-unlock.mjs
test/test.refresh-accounts.mjs
test/test.runner-check.mjs
test/test.tools.mjs
test/test.wallet-sign.mjs

index d2e8c80e612b4cf477ec12e1f322a44717c0b635..da2ffe3bed604ed14e9419f375e8104d06e0c777 100644 (file)
@@ -2,22 +2,23 @@
 //! SPDX-License-Identifier: GPL-3.0-or-later
 
 /**
-* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
-*
-* Do not send any funds to the test vectors below!
-*
-* Sources:
-     https://docs.nano.org/integration-guides/the-basics/#seed
-     https://docs.nano.org/integration-guides/key-management/#test-vectors
-     https://docs.nano.org/integration-guides/key-management/#creating-transactions
-     https://github.com/trezor/python-mnemonic/blob/master/vectors.json
-     https://tools.nanos.cc/?tool=seed
-     https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2b-kat.txt
-     https://github.com/emilbayes/blake2b/blob/master/test-vectors.json#L514-L577
-*/
+ * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+ *
+ * Do not send any funds to the test vectors below!
+ *
+ * Sources:
+ *     https://docs.nano.org/integration-guides/the-basics/#seed
+ *     https://docs.nano.org/integration-guides/key-management/#test-vectors
+ *     https://docs.nano.org/integration-guides/key-management/#creating-transactions
+ *     https://github.com/trezor/python-mnemonic/blob/master/vectors.json
+ *     https://tools.nanos.cc/?tool=seed
+ *     https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2b-kat.txt
+ *     https://github.com/emilbayes/blake2b/blob/master/test-vectors.json#L514-L577
+ */
 export const GENESIS_ADDRESS = 'nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3'
 export const MAX_RAW = 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFFn
 export const MAX_SUPPLY = 133_248_297_920_938_463_463_374_607_431_768_211_455n
+export const TEST_PASSWORD = crypto.randomUUID()
 
 export const NANO_TEST_VECTORS = Object.freeze({
        // from nano.org python sample code
@@ -29,7 +30,7 @@ export const NANO_TEST_VECTORS = Object.freeze({
 
        // from nano.org test vectors
        MNEMONIC: 'edge defense waste choose enrich upon flee junk siren film clown finish luggage leader kid quick brick print evidence swap drill paddle truly occur',
-       PASSWORD: crypto.randomUUID(),
+       MNEMONIC_SALT: 'some password',
        BIP39_SEED: '0DC285FDE768F7FF29B66CE7252D56ED92FE003B605907F7A4F683C3DC8586D34A914D3C71FC099BB38EE4A59E5B081A3497B7A323E90CC68F67B5837690310C',
 
        PRIVATE_0: '3BE4FC2EF3F3B7374E6FC4FB6E7BB153F8A2998B3B3DAB50853EABE128024143',
@@ -81,7 +82,7 @@ export const NANO_TEST_VECTORS = Object.freeze({
 })
 
 export const TREZOR_TEST_VECTORS = Object.freeze({
-       PASSWORD: 'TREZOR',
+       MNEMONIC_SALT: 'TREZOR',
 
        ENTROPY_0: "0000000000000000000000000000000000000000000000000000000000000000",
        MNEMONIC_0: "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art",
index a82a52db2ca71f11ed65b3b2dd4263f3ffc1e9f8..0ec641a4980ccd85b7c7168a8f094fe350106cf8 100644 (file)
@@ -1,11 +1,9 @@
 //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@codecow.com>\r
 //! SPDX-License-Identifier: GPL-3.0-or-later\r
 \r
-'use strict'\r
-\r
 import { Block, Rpc, Wallet } from 'libnemo'\r
 import { assert, click, isNode, suite, test } from './GLOBALS.mjs'\r
-import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS } from './VECTORS.mjs'\r
+import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs'\r
 \r
 await Promise.all([\r
        suite('Block processing', async () => {\r
@@ -104,12 +102,12 @@ await Promise.all([
        }),\r
 \r
        suite('Block signing using official test vectors', async () => {\r
-               const { ADDRESS_0, BIP39_SEED, BLAKE2B_ADDRESS_1, BLAKE2B_PUBLIC_1, BLAKE2B_SEED, OPEN_BLOCK, PASSWORD, PUBLIC_0, 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, PUBLIC_0, PRIVATE_0, RECEIVE_BLOCK, SEND_BLOCK } = NANO_TEST_VECTORS\r
                const { EXODUS, LEDGER_NANOS } = CUSTOM_TEST_VECTORS\r
 \r
                await test('sign open block with BLAKE2b wallet', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', PASSWORD, BLAKE2B_SEED)\r
-                       await assert.resolves(wallet.unlock(PASSWORD))\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, BLAKE2B_SEED)\r
+                       await assert.resolves(wallet.unlock(TEST_PASSWORD))\r
                        const block = new Block(BLAKE2B_ADDRESS_1, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative)\r
                                .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance)\r
 \r
@@ -125,8 +123,8 @@ await Promise.all([
                })\r
 \r
                await test('sign open block with BIP-44 wallet', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', PASSWORD, BIP39_SEED)\r
-                       await assert.resolves(wallet.unlock(PASSWORD))\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, BIP39_SEED)\r
+                       await assert.resolves(wallet.unlock(TEST_PASSWORD))\r
                        const block = new Block(ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative)\r
                                .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance)\r
 \r
@@ -142,8 +140,8 @@ await Promise.all([
                })\r
 \r
                await test('sign open block with Exodus wallet', async () => {\r
-                       const wallet = await Wallet.load('Exodus', PASSWORD, EXODUS.BIP39_SEED_0)\r
-                       await assert.resolves(wallet.unlock(PASSWORD))\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, EXODUS.BIP39_SEED_0)\r
+                       await assert.resolves(wallet.unlock(TEST_PASSWORD))\r
                        const block = new Block(EXODUS.ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative)\r
                                .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance)\r
 \r
@@ -159,8 +157,8 @@ await Promise.all([
                })\r
 \r
                await test('fail to sign open block with wallet without user activation', { skip: isNode }, async () => {\r
-                       const wallet = await Wallet.load('BIP-44', PASSWORD, BIP39_SEED)\r
-                       await assert.resolves(wallet.unlock(PASSWORD))\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, BIP39_SEED)\r
+                       await assert.resolves(wallet.unlock(TEST_PASSWORD))\r
                        const block = new Block(ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative)\r
                                .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance)\r
 \r
@@ -171,7 +169,7 @@ await Promise.all([
                })\r
 \r
                await test('fail to sign open block with wallet when locked', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', PASSWORD, BIP39_SEED)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, BIP39_SEED)\r
                        const block = new Block(ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative)\r
                                .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance)\r
 \r
@@ -234,8 +232,8 @@ await Promise.all([
                })\r
 \r
                await test('sign Ledger-derived open block', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, LEDGER_NANOS.MNEMONIC)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, LEDGER_NANOS.MNEMONIC)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
                        assert.equal(account.publicKey, LEDGER_NANOS.PUBLIC_0)\r
                        assert.equal(account.address, LEDGER_NANOS.ADDRESS_0)\r
index 340096003eadf3a7eef97e75d8be7b7fbabb90ff..dda8f56e161fae721156d884ab88eb7b2824d52a 100644 (file)
@@ -5,22 +5,20 @@
 \r
 import { Wallet } from 'libnemo'\r
 import { assert, suite, test } from './GLOBALS.mjs'\r
-import { NANO_TEST_VECTORS } from './VECTORS.mjs'\r
+import { TEST_PASSWORD } from './VECTORS.mjs'\r
 \r
 await Promise.all([\r
        suite('Create wallets', async () => {\r
-               const { PASSWORD } = NANO_TEST_VECTORS\r
-\r
                await test('destroy BIP-44 wallet before unlocking', async () => {\r
-                       const wallet = await Wallet.create('BIP-44', PASSWORD)\r
+                       const wallet = await Wallet.create('BIP-44', TEST_PASSWORD)\r
 \r
                        await assert.resolves(wallet.destroy())\r
-                       await assert.rejects(wallet.unlock(PASSWORD))\r
+                       await assert.rejects(wallet.unlock(TEST_PASSWORD))\r
                })\r
 \r
                await test('BIP-44 wallet with random entropy', async () => {\r
-                       const wallet = await Wallet.create('BIP-44', PASSWORD)\r
-                       await wallet.unlock(PASSWORD)\r
+                       const wallet = await Wallet.create('BIP-44', TEST_PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok('id' in wallet)\r
                        assert.ok(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(wallet.id))\r
@@ -40,8 +38,8 @@ await Promise.all([
                })\r
 \r
                await test('BLAKE2b wallet with random entropy', async () => {\r
-                       const wallet = await Wallet.create('BLAKE2b', PASSWORD)\r
-                       await wallet.unlock(PASSWORD)\r
+                       const wallet = await Wallet.create('BLAKE2b', TEST_PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok('id' in wallet)\r
                        assert.ok(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(wallet.id))\r
@@ -64,7 +62,7 @@ await Promise.all([
                        const invalidArgs = [null, true, false, 0, 1, 2, { foo: 'bar' }]\r
                        for (const arg of invalidArgs) {\r
                                //@ts-expect-error\r
-                               await assert.rejects(Wallet.create('BIP-44', PASSWORD, arg))\r
+                               await assert.rejects(Wallet.create('BIP-44', TEST_PASSWORD, arg))\r
                        }\r
                })\r
 \r
index 3a40b28a0730dd66c6ad3ab90a54443c929328af..de7a935a74613064258ce31ce1947d0799ebb501 100644 (file)
@@ -5,14 +5,14 @@
 \r
 import { Wallet } from 'libnemo'\r
 import { assert, suite, test } from './GLOBALS.mjs'\r
-import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS } from './VECTORS.mjs'\r
+import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs'\r
 \r
 await Promise.all([\r
        suite('Derive accounts from BIP-44 wallet', async () => {\r
 \r
                await test('derive the first account from the given BIP-44 seed', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.equal(account.publicKey, NANO_TEST_VECTORS.PUBLIC_0)\r
@@ -26,8 +26,8 @@ await Promise.all([
                })\r
 \r
                await test('derive low indexed accounts from the given BIP-44 seed', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(1, 2)\r
 \r
                        assert.equal(accounts.size, 2)\r
@@ -46,8 +46,8 @@ await Promise.all([
                })\r
 \r
                await test('derive high indexed accounts from the given BIP-44 seed', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(0x70000000, 0x7000000f)\r
 \r
                        assert.equal(accounts.size, 0x10)\r
@@ -62,9 +62,9 @@ await Promise.all([
                })\r
 \r
                await test('derive from restored BIP-44 wallet', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
                        const restored = await Wallet.restore(wallet.id)\r
-                       await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await restored.unlock(TEST_PASSWORD)\r
                        const account = await restored.account()\r
 \r
                        assert.equal(account.publicKey, NANO_TEST_VECTORS.PUBLIC_0)\r
@@ -82,8 +82,8 @@ await Promise.all([
        suite('Derive accounts from BLAKE2b wallet', async () => {\r
 \r
                await test('derive the second account from the given BLAKE2b seed', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account(1)\r
 \r
                        assert.equal(account.publicKey, NANO_TEST_VECTORS.BLAKE2B_PUBLIC_1)\r
@@ -100,8 +100,8 @@ await Promise.all([
                })\r
 \r
                await test('derive low indexed accounts from the given BLAKE2b seed', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(2, 3)\r
 \r
                        assert.equal(accounts.size, 2)\r
@@ -120,8 +120,8 @@ await Promise.all([
                })\r
 \r
                await test('derive high indexed accounts from the given BLAKE2b seed', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(0x70000000, 0x7000000f)\r
 \r
                        assert.equal(accounts.size, 0x10)\r
@@ -136,9 +136,9 @@ await Promise.all([
                })\r
 \r
                await test('derive from restored BLAKE2b wallet', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED)\r
                        const restored = await Wallet.restore(wallet.id)\r
-                       await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await restored.unlock(TEST_PASSWORD)\r
                        const account = await restored.account(1)\r
 \r
                        assert.equal(account.publicKey, NANO_TEST_VECTORS.BLAKE2B_PUBLIC_1)\r
@@ -154,12 +154,11 @@ await Promise.all([
        }),\r
 \r
        suite('Derive accounts from Exodus wallet', async () => {\r
-               const { PASSWORD } = NANO_TEST_VECTORS\r
                const { ADDRESS_0, ADDRESS_1, BIP39_SEED_0, BIP39_SEED_1, PUBLIC_0, PUBLIC_1 } = CUSTOM_TEST_VECTORS.EXODUS\r
 \r
                await test('derive the first account from the given Exodus seed', async () => {\r
-                       const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_0)\r
-                       await wallet.unlock(PASSWORD)\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_0)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.equal(account.publicKey, PUBLIC_0)\r
@@ -173,8 +172,8 @@ await Promise.all([
                })\r
 \r
                await test('derive low indexed accounts from the given Exodus seed', async () => {\r
-                       const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_1)\r
-                       await wallet.unlock(PASSWORD)\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_1)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(1, 2)\r
 \r
                        assert.equal(accounts.size, 2)\r
@@ -195,8 +194,8 @@ await Promise.all([
                })\r
 \r
                await test('derive high indexed accounts from the given Exodus seed', async () => {\r
-                       const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_0)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_0)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(0x70000000, 0x7000000f)\r
 \r
                        assert.equal(accounts.size, 0x10)\r
@@ -211,9 +210,9 @@ await Promise.all([
                })\r
 \r
                await test('derive from restored Exodus wallet', async () => {\r
-                       const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_0)\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_0)\r
                        const restored = await Wallet.restore(wallet.id)\r
-                       await restored.unlock(PASSWORD)\r
+                       await restored.unlock(TEST_PASSWORD)\r
                        const account = await restored.account()\r
 \r
                        assert.equal(account.publicKey, PUBLIC_0)\r
index 669856ab491f571c86fec01b85070384c0e538cc..ec4ac65e91b12e5cf1745ef66058e51d8ed63262 100644 (file)
@@ -5,14 +5,14 @@
 \r
 import { Account, Wallet } from 'libnemo'\r
 import { assert, suite, test } from './GLOBALS.mjs'\r
-import { BIP32_TEST_VECTORS, CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TREZOR_TEST_VECTORS } from './VECTORS.mjs'\r
+import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TEST_PASSWORD, TREZOR_TEST_VECTORS } from './VECTORS.mjs'\r
 \r
 await Promise.all([\r
        suite('Import wallets', async () => {\r
 \r
                await test('nano.org BIP-44 test vector mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC))\r
@@ -25,8 +25,8 @@ await Promise.all([
                })\r
 \r
                await test('nano.org BIP-44 test vector seed with no mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok('mnemonic' in wallet)\r
@@ -41,8 +41,8 @@ await Promise.all([
                })\r
 \r
                await test('Trezor-derived BIP-44 entropy for 12-word mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_0)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_0)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_0))\r
@@ -54,8 +54,8 @@ await Promise.all([
                })\r
 \r
                await test('Trezor-derived BIP-44 entropy for 15-word mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_1)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_1)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_1))\r
@@ -67,8 +67,8 @@ await Promise.all([
                })\r
 \r
                await test('Trezor-derived BIP-44 entropy for 18-word mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_2)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_2)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_2))\r
@@ -80,8 +80,8 @@ await Promise.all([
                })\r
 \r
                await test('Trezor-derived BIP-44 entropy for 21-word mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_3)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_3)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_3))\r
@@ -93,8 +93,8 @@ await Promise.all([
                })\r
 \r
                await test('BIP-44 zero-string entropy', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0, TREZOR_TEST_VECTORS.PASSWORD)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0, TREZOR_TEST_VECTORS.MNEMONIC_SALT)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(0, 3)\r
 \r
                        assert.ok('mnemonic' in wallet)\r
@@ -114,8 +114,8 @@ await Promise.all([
                })\r
 \r
                await test('BLAKE2b zero-string seed', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(0, 3)\r
 \r
                        assert.ok('mnemonic' in wallet)\r
@@ -137,8 +137,8 @@ await Promise.all([
                })\r
 \r
                await test('Trezor-derived BLAKE2b test vectors verified with third-party libraries', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_1)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_1)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const accounts = await wallet.accounts(0, 1)\r
 \r
                        assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_1))\r
@@ -160,15 +160,15 @@ await Promise.all([
                })\r
 \r
                await test('BLAKE2b seed creates identical wallet as its derived mnemonic', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_2)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_2)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const walletAccount = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_2))\r
                        assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.ENTROPY_2))\r
 \r
-                       const imported = await Wallet.load('BLAKE2b', TREZOR_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_2)\r
-                       await imported.unlock(TREZOR_TEST_VECTORS.PASSWORD)\r
+                       const imported = await Wallet.load('BLAKE2b', TREZOR_TEST_VECTORS.MNEMONIC_SALT, TREZOR_TEST_VECTORS.MNEMONIC_2)\r
+                       await imported.unlock(TREZOR_TEST_VECTORS.MNEMONIC_SALT)\r
                        const importedAccount = await imported.account()\r
 \r
                        assert.ok(await imported.verify(TREZOR_TEST_VECTORS.MNEMONIC_2))\r
@@ -180,8 +180,8 @@ await Promise.all([
                })\r
 \r
                await test('BLAKE2b mnemonic for maximum seed value', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_3)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_3)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(account instanceof Account)\r
@@ -194,27 +194,27 @@ await Promise.all([
                })\r
 \r
                await test('Reject invalid seed', async () => {\r
-                       await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C797'))\r
-                       await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C79701'))\r
-                       await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0.replaceAll(/./g, 'x')))\r
+                       await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C797'))\r
+                       await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C79701'))\r
+                       await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0.replaceAll(/./g, 'x')))\r
                })\r
 \r
                await test('Reject invalid length seed', async () => {\r
-                       await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED + 'f'),\r
+                       await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED + 'f'),\r
                                `Expected a ${NANO_TEST_VECTORS.BIP39_SEED.length}-character seed, but received ${NANO_TEST_VECTORS.BIP39_SEED.length + 1}-character string.`)\r
-                       await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED.slice(0, -1)),\r
+                       await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED.slice(0, -1)),\r
                                `Expected a ${NANO_TEST_VECTORS.BIP39_SEED.length}-character seed, but received ${NANO_TEST_VECTORS.BIP39_SEED.length - 1}-character string.`)\r
                })\r
 \r
                await test('Reject seed containing non-hex characters', async () => {\r
-                       await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.SEED_0.replace(/./, 'g')),\r
+                       await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, TREZOR_TEST_VECTORS.SEED_0.replace(/./, 'g')),\r
                                'Seed contains invalid hexadecimal characters.')\r
-                       await assert.rejects(Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1.replace(/./, 'g')),\r
+                       await assert.rejects(Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1.replace(/./, 'g')),\r
                                'Seed contains invalid hexadecimal characters.')\r
                })\r
 \r
                await test('Import BIP-44 wallet from storage using a wallet-generated ID', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
                        const restored = await Wallet.restore(wallet.id)\r
 \r
                        assert.ok('mnemonic' in restored)\r
@@ -224,7 +224,7 @@ await Promise.all([
                        await assert.rejects(restored.verify(NANO_TEST_VECTORS.MNEMONIC))\r
                        await assert.rejects(restored.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
 \r
-                       await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await restored.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC))\r
                        assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
@@ -234,7 +234,7 @@ await Promise.all([
                })\r
 \r
                await test('Import BLAKE2B wallet from storage using a wallet-generated ID', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0)\r
                        const restored = await Wallet.restore(wallet.id)\r
 \r
                        assert.ok('mnemonic' in restored)\r
@@ -244,7 +244,7 @@ await Promise.all([
                        await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0))\r
                        await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0))\r
 \r
-                       await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await restored.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok(await restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0))\r
                        assert.ok(await restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0))\r
@@ -254,7 +254,7 @@ await Promise.all([
                })\r
 \r
                await test('export wallet IDs from storage and reimport them', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
                        const backups = await Wallet.backup()\r
 \r
                        assert.ok(backups.some(record => record.id === wallet.id))\r
@@ -266,7 +266,7 @@ await Promise.all([
                        assert.ok(restored.mnemonic === undefined)\r
                        assert.ok(restored.seed === undefined)\r
 \r
-                       await restored.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await restored.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC))\r
                        assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
@@ -276,7 +276,7 @@ await Promise.all([
                })\r
 \r
                await test('restore wallets without referencing IDs', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
                        const backups = await Wallet.backup()\r
 \r
                        assert.ok(backups.some(record => record.id === wallet.id))\r
@@ -290,7 +290,7 @@ await Promise.all([
                        assert.ok(restoredWallet.mnemonic === undefined)\r
                        assert.ok(restoredWallet.seed === undefined)\r
 \r
-                       await restoredWallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await restoredWallet.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok(await restoredWallet.verify(NANO_TEST_VECTORS.MNEMONIC))\r
                        assert.ok(await restoredWallet.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
@@ -302,8 +302,8 @@ await Promise.all([
                })\r
 \r
                await test('load account from legacy address', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
                        const legacy = new Account(NANO_TEST_VECTORS.ADDRESS_0.replace('nano_', 'xrb_'))\r
 \r
@@ -315,8 +315,8 @@ await Promise.all([
                })\r
 \r
                await test('nano.org Exodus test vector mnemonic', async () => {\r
-                       const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0))\r
@@ -329,8 +329,8 @@ await Promise.all([
                })\r
 \r
                await test('zero entropy Exodus test vector mnemonic', async () => {\r
-                       const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('Exodus', TEST_PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
 \r
                        assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1))\r
index c45d39c1222972e4606dbf549cd02659252014ed..3ee7df2d09fa62dbfe33d304afc5fe1b1c6533db 100644 (file)
@@ -5,20 +5,20 @@
 \r
 import { Account, Wallet } from 'libnemo'\r
 import { assert, suite, test } from './GLOBALS.mjs'\r
-import { NANO_TEST_VECTORS, TREZOR_TEST_VECTORS } from './VECTORS.mjs'\r
+import { NANO_TEST_VECTORS, TEST_PASSWORD, TREZOR_TEST_VECTORS } from './VECTORS.mjs'\r
 \r
 await Promise.all([\r
        suite('Lock and unlock wallets', async () => {\r
 \r
                await test('locking and unlocking a BIP-44 wallet with a password', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
 \r
                        assert.ok('mnemonic' in wallet)\r
                        assert.ok('seed' in wallet)\r
                        assert.ok(wallet.mnemonic === undefined)\r
                        assert.ok(wallet.seed === undefined)\r
 \r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC))\r
                        assert.ok(await wallet.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
@@ -27,11 +27,11 @@ await Promise.all([
                })\r
 \r
                await test('change the password on a BIP-44 wallet', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', '', NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC)\r
                        let isLocked = wallet.isLocked\r
                        wallet.addEventListener('locked', () => isLocked = true)\r
                        wallet.addEventListener('unlocked', () => isLocked = false)\r
-                       await wallet.unlock('')\r
+                       await wallet.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok('mnemonic' in wallet)\r
                        assert.ok('seed' in wallet)\r
@@ -41,11 +41,12 @@ await Promise.all([
                        assert.ok(await wallet.verify(NANO_TEST_VECTORS.BIP39_SEED))\r
                        assert.equal(false, isLocked)\r
 \r
-                       await wallet.update(NANO_TEST_VECTORS.PASSWORD)\r
+                       const newPassword = crypto.randomUUID()\r
+                       await wallet.update(newPassword)\r
                        wallet.lock()\r
                        await new Promise(r => setTimeout(r, 1_000))\r
                        assert.equal(true, isLocked)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await wallet.unlock(newPassword)\r
 \r
                        assert.ok('mnemonic' in wallet)\r
                        assert.ok('seed' in wallet)\r
@@ -58,8 +59,8 @@ await Promise.all([
                })\r
 \r
                await test('fail to unlock a BIP-44 wallet with different passwords', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        wallet.lock()\r
 \r
                        await assert.rejects(wallet.verify(NANO_TEST_VECTORS.MNEMONIC))\r
@@ -69,7 +70,7 @@ await Promise.all([
                        assert.ok(wallet.mnemonic === undefined)\r
                        assert.ok(wallet.seed === undefined)\r
 \r
-                       await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.PASSWORD), 'Failed to unlock wallet')\r
+                       await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.MNEMONIC_SALT), 'Failed to unlock wallet')\r
                        assert.ok('mnemonic' in wallet)\r
                        assert.ok('seed' in wallet)\r
                        assert.ok(wallet.mnemonic === undefined)\r
@@ -81,8 +82,8 @@ await Promise.all([
                })\r
 \r
                await test('fail to unlock a BIP-44 wallet with invalid input', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
 \r
                        await assert.rejects(wallet.unlock(), 'Failed to unlock wallet')\r
                        //@ts-expect-error\r
@@ -92,14 +93,14 @@ await Promise.all([
                })\r
 \r
                await test('locking and unlocking a BLAKE2b wallet with a password', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0)\r
 \r
                        assert.ok('mnemonic' in wallet)\r
                        assert.ok('seed' in wallet)\r
                        assert.ok(wallet.mnemonic === undefined)\r
                        assert.ok(wallet.seed === undefined)\r
 \r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
 \r
                        assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_0))\r
                        assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.ENTROPY_0))\r
@@ -108,9 +109,9 @@ await Promise.all([
                })\r
 \r
                await test('fail to unlock a BLAKE2b wallet with different passwords', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1)\r
 \r
-                       await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.PASSWORD), 'Failed to unlock wallet')\r
+                       await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.MNEMONIC_SALT), 'Failed to unlock wallet')\r
                        assert.ok('mnemonic' in wallet)\r
                        assert.ok('seed' in wallet)\r
                        assert.ok(wallet.mnemonic === undefined)\r
@@ -122,7 +123,7 @@ await Promise.all([
                })\r
 \r
                await test('fail to unlock a BLAKE2b wallet with no input', async () => {\r
-                       const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1)\r
+                       const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1)\r
 \r
                        await assert.rejects(wallet.unlock(), 'Failed to unlock wallet')\r
                        //@ts-expect-error\r
@@ -133,9 +134,9 @@ await Promise.all([
 \r
                await test('wallet automatic lock resets after user activity', { skip: false }, async () => {\r
                        console.log('Starting autolock test...')\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
                        assert.equal(true, wallet.isLocked)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        assert.equal(false, wallet.isLocked)\r
 \r
                        assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC))\r
@@ -189,9 +190,9 @@ await Promise.all([
                })\r
 \r
                await test('configure 10-second autolock', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
                        assert.equal(true, wallet.isLocked)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        assert.equal(false, wallet.isLocked)\r
                        await wallet.config({ timeout: 10 })\r
 \r
@@ -226,9 +227,9 @@ await Promise.all([
                })\r
 \r
                await test('fail to configure invalid autolock times', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT)\r
                        assert.equal(true, wallet.isLocked)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        assert.equal(false, wallet.isLocked)\r
 \r
                        //@ts-expect-error\r
index a08750aa02d2674903d8dd1d7cc91a845bc370ca..9757028b3c4b0bb7f2f73b5aa000d9a5f3513ba3 100644 (file)
@@ -5,7 +5,7 @@
 
 import { Account, Wallet, Rpc } from 'libnemo'
 import { assert, env, suite, test } from './GLOBALS.mjs'
-import { NANO_TEST_VECTORS } from './VECTORS.mjs'
+import { NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs'
 
 const rpc = new Rpc(env.NODE_URL ?? '', env.API_KEY_NAME)
 
@@ -13,8 +13,8 @@ await Promise.all([
        suite('Refreshing account info', { skip: false }, async () => {
 
                await test('fetch balance, frontier, and representative', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const account = await wallet.account()
                        await account.refresh(rpc)
 
@@ -38,8 +38,8 @@ await Promise.all([
                })
 
                await test('throw when refreshing unopened account', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const account = await wallet.account(0x7fffffff)
 
                        await assert.rejects(account.refresh(rpc), 'Account not found')
@@ -48,8 +48,8 @@ await Promise.all([
                })
 
                await test('throw when referencing invalid account index', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
 
                        await assert.rejects(wallet.account(0x80000000), 'Invalid child key index 0x80000000')
 
@@ -57,8 +57,8 @@ await Promise.all([
                })
 
                await test('throw with invalid node', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const invalidNode = new Rpc('http://invalid.com')
                        const account = await wallet.account()
 
@@ -71,8 +71,8 @@ await Promise.all([
        suite('Fetch next unopened account', { skip: false }, async () => {
 
                await test('return correct account from test vector', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const account = await wallet.unopened(rpc)
 
                        assert.exists(account)
@@ -83,8 +83,8 @@ await Promise.all([
                })
 
                await test('return successfully for small batch size', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const account = await wallet.unopened(rpc, 1)
 
                        assert.exists(account)
@@ -95,8 +95,8 @@ await Promise.all([
                })
 
                await test('return successfully for large batch size', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const account = await wallet.unopened(rpc, 100)
 
                        assert.exists(account)
@@ -107,8 +107,8 @@ await Promise.all([
                })
 
                await test('should throw on invalid node URL', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
 
                        //@ts-expect-error
                        await assert.rejects(wallet.unopened())
@@ -125,8 +125,8 @@ await Promise.all([
                })
 
                await test('should throw on invalid batch size', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
 
                        //@ts-expect-error
                        await assert.rejects(wallet.unopened(rpc, null))
@@ -145,8 +145,8 @@ await Promise.all([
        suite('Refreshing wallet accounts', { skip: false }, async () => {
 
                await test('get balance, frontier, and representative for one account', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const accounts = await wallet.refresh(rpc)
                        const account = accounts.get(0)
 
@@ -159,8 +159,8 @@ await Promise.all([
                })
 
                await test('should get balance, frontier, and representative for multiple accounts', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
                        const accounts = await wallet.refresh(rpc, 0, 2)
 
                        assert.equal(accounts.size, 3)
@@ -179,8 +179,8 @@ await Promise.all([
                })
 
                await test('should handle failure gracefully', async () => {
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
+                       await wallet.unlock(TEST_PASSWORD)
 
                        await assert.resolves(wallet.refresh(rpc, 0, 20))
 
index 9be165347d675f21d2a4cbca1bc5995c76777ce7..fffc60a9f410b0bd89c3d2c76fe87cf7875ce859 100644 (file)
@@ -20,7 +20,7 @@ if (!isNode) {
                console.assert(failures.some(call => /.*promise should fail.*/.test(call)) === true, `bad promise not errored`)
                console.assert(passes.some(call => /.*promise should fail.*/.test(call)) === false, 'bad promise logged')
 
-               await test('async should pass', async () => {})
+               await test('async should pass', async () => { })
                console.assert(failures.some(call => /.*async should pass.*/.test(call)) === false, 'good async errored')
                console.assert(passes.some(call => /.*async should pass.*/.test(call)) === true, 'good async not logged')
 
@@ -28,7 +28,7 @@ if (!isNode) {
                console.assert(failures.some(call => /.*async should fail.*/.test(call)) === true, 'bad async not errored')
                console.assert(passes.some(call => /.*async should fail.*/.test(call)) === false, 'bad async logged')
 
-               await test('function should pass', () => {})
+               await test('function should pass', () => { })
                console.assert(failures.some(call => /.*function should pass.*/.test(call)) === false, 'good function errored')
                console.assert(passes.some(call => /.*function should pass.*/.test(call)) === true, 'good function not logged')
 
index ed40572ba18c882dbf8bc9423a3ed829edd3ec9b..a9ffbc395a7d49f3067f14fbea3de421b6e5e274 100644 (file)
@@ -5,7 +5,7 @@
 \r
 import { Rpc, Tools, Wallet } from 'libnemo'\r
 import { assert, click, env, suite, test } from './GLOBALS.mjs'\r
-import { MAX_RAW, MAX_SUPPLY, NANO_TEST_VECTORS } from './VECTORS.mjs'\r
+import { MAX_RAW, MAX_SUPPLY, NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs'\r
 \r
 const rpc = new Rpc(env?.NODE_URL ?? '', env?.API_KEY_NAME)\r
 \r
@@ -137,8 +137,8 @@ await Promise.all([
                })\r
 \r
                await test('sweeper fails gracefully for ineligible accounts', { skip: true }, async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const results = await Tools.sweep(rpc, wallet, NANO_TEST_VECTORS.ADDRESS_1)\r
 \r
                        assert.exists(results)\r
index c6f1d6a7bf411c7519d6c20fb44524bbc1b3bfb2..a579c7b74201410936e1b44ed76781a66c94f295 100644 (file)
@@ -5,15 +5,15 @@
 \r
 import { Account, Block, Tools, Wallet } from 'libnemo'\r
 import { assert, click, suite, test } from './GLOBALS.mjs'\r
-import { NANO_TEST_VECTORS } from './VECTORS.mjs'\r
+import { NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs'\r
 \r
 await Promise.all([\r
 \r
        suite('sign with Wallet', async () => {\r
 \r
                await test('sign an arbitrary string', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
                        const data = crypto.randomUUID()\r
                        let signature = ''\r
@@ -31,8 +31,8 @@ await Promise.all([
                })\r
 \r
                await test('verify Block signature using the correct public key', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
                        const sendBlock = await new Block(account.address, '5618869000000000000000000000000', '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D', 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou')\r
                                .send('nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p', '2000000000000000000000000000000')\r
@@ -49,8 +49,8 @@ await Promise.all([
                })\r
 \r
                await test('reject Block signature using the wrong public key', async () => {\r
-                       const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
-                       await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
+                       const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
+                       await wallet.unlock(TEST_PASSWORD)\r
                        const account = await wallet.account()\r
                        const sendBlock = await new Block(account.address, '5618869000000000000000000000000', '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D', 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou')\r
                                .send('nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p', '2000000000000000000000000000000')\r