From f77635be243ef9a6f1cfabfa6edecf2618ca8fb7 Mon Sep 17 00:00:00 2001
From: Gabriel Handford
Date: Wed, 22 Jul 2020 09:07:15 -0700
Subject: [PATCH 1/3] encoding: Better bip39 error
---
encoding/bip39.go | 12 +++++++++++-
encoding/encode_test.go | 43 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/encoding/bip39.go b/encoding/bip39.go
index 7cd1dd5..91e5ae2 100644
--- a/encoding/bip39.go
+++ b/encoding/bip39.go
@@ -12,6 +12,9 @@ type ErrInvalidPhrase struct {
cause error
}
+// ErrInvalidNumBytesForBIP39 if invalid number of bytes for encoding.
+var ErrInvalidNumBytesForBIP39 = errors.New("bip39 only accepts 16, 20, 24, 28, 32 bytes")
+
func (e ErrInvalidPhrase) Error() string {
return "invalid phrase"
}
@@ -23,7 +26,14 @@ func (e ErrInvalidPhrase) Cause() error {
// BytesToPhrase returns a phrase for bytes
func BytesToPhrase(b []byte) (string, error) {
- return bip39.NewMnemonic(b)
+ out, err := bip39.NewMnemonic(b)
+ if err != nil {
+ if err == bip39.ErrEntropyLengthInvalid {
+ return "", ErrInvalidNumBytesForBIP39
+ }
+ return "", err
+ }
+ return out, nil
}
// PhraseToBytes decodes a bip39 mnemonic into bytes
diff --git a/encoding/encode_test.go b/encoding/encode_test.go
index ee7ccc4..fe7f17f 100644
--- a/encoding/encode_test.go
+++ b/encoding/encode_test.go
@@ -78,6 +78,49 @@ func TestEncodeBase64(t *testing.T) {
require.EqualError(t, err, "invalid option: lowercase")
}
+func TestEncodeBIP39(t *testing.T) {
+ var b []byte
+ var out string
+ var err error
+
+ b = bytes.Repeat([]byte{0x01}, 16)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.NoError(t, err)
+ require.Equal(t, "absurd amount doctor acoustic avoid letter advice cage absurd amount doctor adjust", out)
+
+ b = bytes.Repeat([]byte{0x01}, 20)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.NoError(t, err)
+ require.Equal(t, "absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter all", out)
+
+ b = bytes.Repeat([]byte{0x01}, 24)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.NoError(t, err)
+ require.Equal(t, "absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd approve", out)
+
+ b = bytes.Repeat([]byte{0x01}, 28)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.NoError(t, err)
+ require.Equal(t, "absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic banana", out)
+
+ b = bytes.Repeat([]byte{0x01}, 32)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.NoError(t, err)
+ require.Equal(t, "absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice comic", out)
+
+ b = bytes.Repeat([]byte{0x01}, 8)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
+
+ b = bytes.Repeat([]byte{0x01}, 40)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
+
+ b = bytes.Repeat([]byte{0x01}, 64)
+ out, err = encoding.Encode(b, encoding.BIP39)
+ require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
+}
+
func TestMustEncodeDecode(t *testing.T) {
in := bytes.Repeat([]byte{0x01}, 32)
out, err := encoding.DecodeBase32(encoding.EncodeBase32(in))
From e27093de36e4767da76ce595b2135c298d0d6c92 Mon Sep 17 00:00:00 2001
From: Gabriel Handford
Date: Wed, 22 Jul 2020 11:54:25 -0700
Subject: [PATCH 2/3] Update encode_test.go
---
encoding/encode_test.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/encoding/encode_test.go b/encoding/encode_test.go
index fe7f17f..93e521c 100644
--- a/encoding/encode_test.go
+++ b/encoding/encode_test.go
@@ -109,15 +109,15 @@ func TestEncodeBIP39(t *testing.T) {
require.Equal(t, "absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice comic", out)
b = bytes.Repeat([]byte{0x01}, 8)
- out, err = encoding.Encode(b, encoding.BIP39)
+ _, err = encoding.Encode(b, encoding.BIP39)
require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
b = bytes.Repeat([]byte{0x01}, 40)
- out, err = encoding.Encode(b, encoding.BIP39)
+ _, err = encoding.Encode(b, encoding.BIP39)
require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
b = bytes.Repeat([]byte{0x01}, 64)
- out, err = encoding.Encode(b, encoding.BIP39)
+ _, err = encoding.Encode(b, encoding.BIP39)
require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
}
From 8cb853fb325e4cc156914937128427de9930ef51 Mon Sep 17 00:00:00 2001
From: Gabriel Handford
Date: Wed, 22 Jul 2020 13:27:11 -0700
Subject: [PATCH 3/3] ErrInvalidBIP39Input
---
encoding/bip39.go | 6 +++---
encoding/encode_test.go | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/encoding/bip39.go b/encoding/bip39.go
index 91e5ae2..7f8446a 100644
--- a/encoding/bip39.go
+++ b/encoding/bip39.go
@@ -12,8 +12,8 @@ type ErrInvalidPhrase struct {
cause error
}
-// ErrInvalidNumBytesForBIP39 if invalid number of bytes for encoding.
-var ErrInvalidNumBytesForBIP39 = errors.New("bip39 only accepts 16, 20, 24, 28, 32 bytes")
+// ErrInvalidBIP39Input if invalid number of bytes for encoding.
+var ErrInvalidBIP39Input = errors.New("bip39 only accepts 16, 20, 24, 28, 32 bytes")
func (e ErrInvalidPhrase) Error() string {
return "invalid phrase"
@@ -29,7 +29,7 @@ func BytesToPhrase(b []byte) (string, error) {
out, err := bip39.NewMnemonic(b)
if err != nil {
if err == bip39.ErrEntropyLengthInvalid {
- return "", ErrInvalidNumBytesForBIP39
+ return "", ErrInvalidBIP39Input
}
return "", err
}
diff --git a/encoding/encode_test.go b/encoding/encode_test.go
index 93e521c..e3a385e 100644
--- a/encoding/encode_test.go
+++ b/encoding/encode_test.go
@@ -110,15 +110,15 @@ func TestEncodeBIP39(t *testing.T) {
b = bytes.Repeat([]byte{0x01}, 8)
_, err = encoding.Encode(b, encoding.BIP39)
- require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
+ require.Equal(t, err, encoding.ErrInvalidBIP39Input)
b = bytes.Repeat([]byte{0x01}, 40)
_, err = encoding.Encode(b, encoding.BIP39)
- require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
+ require.Equal(t, err, encoding.ErrInvalidBIP39Input)
b = bytes.Repeat([]byte{0x01}, 64)
_, err = encoding.Encode(b, encoding.BIP39)
- require.Equal(t, err, encoding.ErrInvalidNumBytesForBIP39)
+ require.Equal(t, err, encoding.ErrInvalidBIP39Input)
}
func TestMustEncodeDecode(t *testing.T) {