diff --git a/multibase.go b/multibase.go index 5f5b58d..4650376 100644 --- a/multibase.go +++ b/multibase.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "fmt" - b58 "github.com/jbenet/go-base58" + b58 "github.com/mr-tron/base58/base58" b32 "github.com/whyrusleeping/base32" ) @@ -114,9 +114,11 @@ func Decode(data string) (Encoding, []byte, error) { bytes, err := b32.HexEncoding.DecodeString(data[1:]) return enc, bytes, err case Base58BTC: - return Base58BTC, b58.DecodeAlphabet(data[1:], b58.BTCAlphabet), nil + bytes, err := b58.DecodeAlphabet(data[1:], b58.BTCAlphabet) + return Base58BTC, bytes, err case Base58Flickr: - return Base58Flickr, b58.DecodeAlphabet(data[1:], b58.FlickrAlphabet), nil + bytes, err := b58.DecodeAlphabet(data[1:], b58.FlickrAlphabet) + return Base58Flickr, bytes, err case Base64pad: bytes, err := base64.StdEncoding.DecodeString(data[1:]) return Base64pad, bytes, err diff --git a/multibase_test.go b/multibase_test.go index c402385..a69d721 100644 --- a/multibase_test.go +++ b/multibase_test.go @@ -92,3 +92,53 @@ func TestRoundTrip(t *testing.T) { t.Fatal("shouldnt be able to decode empty string") } } + +func BenchmarkRoundTrip(b *testing.B) { + buf := make([]byte, 32) + rand.Read(buf) + b.ResetTimer() + + bases := map[string]Encoding{ + "Identity": Identity, + "Base16": Base16, + "Base16Upper": Base16Upper, + "Base32": Base32, + "Base32Upper": Base32Upper, + "Base32pad": Base32pad, + "Base32padUpper": Base32padUpper, + "Base32hex": Base32hex, + "Base32hexUpper": Base32hexUpper, + "Base32hexPad": Base32hexPad, + "Base32hexPadUpper": Base32hexPadUpper, + "Base58Flickr": Base58Flickr, + "Base58BTC": Base58BTC, + "Base64": Base64, + "Base64url": Base64url, + "Base64pad": Base64pad, + "Base64urlPad": Base64urlPad, + } + + for name, base := range bases { + b.Run(name, func(b *testing.B) { + for i := 0; i < b.N; i++ { + enc, err := Encode(base, buf) + if err != nil { + b.Fatal(err) + } + + e, out, err := Decode(enc) + if err != nil { + b.Fatal(err) + } + + if e != base { + b.Fatal("got wrong encoding out") + } + + if !bytes.Equal(buf, out) { + b.Fatal("input wasnt the same as output", buf, out) + } + } + }) + } +} diff --git a/package.json b/package.json index 8e5f026..0827b74 100644 --- a/package.json +++ b/package.json @@ -14,10 +14,10 @@ "version": "0.0.2" }, { - "author": "whyrusleeping", - "hash": "QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf", - "name": "go-base58", - "version": "0.0.0" + "author": "mr-tron", + "hash": "QmWFAMPqsEyUX7gDUsRVmMWz59FxSpJ1b2v6bJ1yYzo7jY", + "name": "go-base58-fast", + "version": "0.1.1" } ], "gxVersion": "0.8.0",