From 35132f690713c02967732264f48ae591c982bfb9 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Thu, 4 Dec 2025 00:18:16 -0800 Subject: [PATCH] Add Exodus test vector for zero-entropy mnemonic and seed. --- test/VECTORS.mjs | 14 +++++++++++--- test/test.import-wallet.mjs | 20 +++++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/test/VECTORS.mjs b/test/VECTORS.mjs index 0f709ff..494927f 100644 --- a/test/VECTORS.mjs +++ b/test/VECTORS.mjs @@ -267,13 +267,21 @@ export const CUSTOM_TEST_VECTORS = Object.freeze({ signature: "583624F09D1108B50CFB219F13F075AC03CD5C5450DE055B0963D8E814324C9B0A858BD34AF06E5290C436CC86872CBB13C7FE89972E77E6836249DCD2DAE40A" }, - // mnemonic from nano.org, other values calculated by importing to exodus app EXODUS: { - MNEMONIC: 'company public remove bread fashion tortoise ahead shrimp onion prefer waste blade', - BIP39_SEED: '924A962CAE64448812BE28A514093EBFEEED537D61A44318EB35F902961D21B2FCCD30008D33C8D1D5327A34B9B73281C4B27A0A3D004C1C2E85E8DBB234CBA8', + // mnemonic from nano.org, other values calculated by importing to exodus app + MNEMONIC_0: 'company public remove bread fashion tortoise ahead shrimp onion prefer waste blade', + BIP39_SEED_0: '924A962CAE64448812BE28A514093EBFEEED537D61A44318EB35F902961D21B2FCCD30008D33C8D1D5327A34B9B73281C4B27A0A3D004C1C2E85E8DBB234CBA8', PRIVATE_0: 'CBB312CA6C48B2A2656723C7D4FDE774479D9FCC53EE23F46B877E3AA6D041BF', PUBLIC_0: 'A8225A8F80079FB62E4A1BC577A684A2A93DB7303A4FD8CA5D0A90C5150F1182', ADDRESS_0: 'nano_3c34dc9r13wzprq6n8y7gymabaob9pum1gkhu577t4nirnciy6e43g96m6ym', + + // zero entropy mnemonic, other values calculated by importing to exodus app + ENTROPY_1: '00000000000000000000000000000000', + MNEMONIC_1: 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', + BIP39_SEED_1: '5EB00BBDDCF069084889A8AB9155568165F5C453CCB85E70811AAED6F6DA5FC19A5AC40B389CD370D086206DEC8AA6C43DAEA6690F20AD3D8D48B2D2CE9E38E4', + PRIVATE_1: '89DA93509D22BC6704F2859C509055E0748707D3AAC17B783DEEFB6ECE8D8F45', + PUBLIC_1: '', + ADDRESS_1: 'nano_1ukkc34hq8ibidkdkdd9bjdijfpfndidrom8xy3cdmguhtjyp7zhd5tcwbgu', } }) diff --git a/test/test.import-wallet.mjs b/test/test.import-wallet.mjs index 0e8f4d0..4b1ee00 100644 --- a/test/test.import-wallet.mjs +++ b/test/test.import-wallet.mjs @@ -315,17 +315,31 @@ await Promise.all([ }) await test('nano.org Exodus test vector mnemonic', async () => { - const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC) + const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0) await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) const account = await wallet.account() - assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC)) - assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.BIP39_SEED)) + assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0)) + assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.BIP39_SEED_0)) assert.ok(account instanceof Account) assert.equal(account.publicKey, CUSTOM_TEST_VECTORS.EXODUS.PUBLIC_0) assert.equal(account.address, CUSTOM_TEST_VECTORS.EXODUS.ADDRESS_0) await assert.resolves(wallet.destroy()) }) + + await test('zero entropy Exodus test vector mnemonic', async () => { + const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1) + await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const account = await wallet.account() + + assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1)) + assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.BIP39_SEED_1)) + assert.ok(account instanceof Account) + // assert.equal(account.publicKey, CUSTOM_TEST_VECTORS.EXODUS.PUBLIC_1) + assert.equal(account.address, CUSTOM_TEST_VECTORS.EXODUS.ADDRESS_1) + + await assert.resolves(wallet.destroy()) + }) }) ]) -- 2.47.3