Derive from the mnemonic's words joined by single spaces (closes #49)
check / check (push) Successful in 2m21s

The BIP-39 seed was computed over the mnemonic string as given, with only its ends trimmed, so the same words one per line, tab-separated or double-spaced passed the checksum but gave different keys with no warning. The words are now joined by single spaces before the checksum and the seed, for every source: the mnemonic command, both environment variables and the prompt. Single-spaced input gives the same keys as before; a test checks the README vector for each spacing.

Model: opus-5-5
This commit was merged in pull request #53.
This commit is contained in:
2026-10-04 07:08:46 +02:00
parent 1ddc2c747a
commit 897b43a206
3 changed files with 28 additions and 7 deletions
+19
View File
@@ -47,6 +47,25 @@ func TestTheReadmeTestVectors(t *testing.T) {
)
}
func TestTheSpacingBetweenTheWordsDoesNotChangeTheKeys(t *testing.T) {
words := strings.Fields(example())
for name, spaced := range map[string]string{
"one word per line": strings.Join(words, "\n"),
"double spaces": strings.Join(words, " "),
"tabs": strings.Join(words, "\t"),
} {
t.Run(name, func(t *testing.T) {
t.Setenv(mnemonic.Variable, spaced)
require.Equal(t,
vectorZero+" keyfunc/ssh/0",
strings.TrimSpace(run(t, "ssh", "pub", "-n", "0")),
)
})
}
}
func TestTheCommentCanBeChosen(t *testing.T) {
t.Setenv(mnemonic.Variable, example())