From fa50d2d01bca77391f5a1bd00c6c3bfb8cf9c6ea Mon Sep 17 00:00:00 2001 From: Jeromy Date: Mon, 22 Aug 2016 17:37:43 -0700 Subject: [PATCH] basic implementation --- multibase.go | 40 ++++++++++++++++++++++++++++++++++++++++ multibase_test.go | 30 ++++++++++++++++++++++++++++++ package.json | 14 ++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 multibase.go create mode 100644 multibase_test.go create mode 100644 package.json diff --git a/multibase.go b/multibase.go new file mode 100644 index 0000000..8f1ce04 --- /dev/null +++ b/multibase.go @@ -0,0 +1,40 @@ +package multibase + +import ( + "encoding/hex" + "fmt" + + b58 "github.com/jbenet/go-base58" +) + +const ( + Base1 = '1' + Base2 = '0' + Base8 = '7' + Base10 = '9' + Base16 = 'f' + Base58Flickr = 'Z' + Base58BTC = 'z' +) + +var ErrUnsupportedEncoding = fmt.Errorf("selected encoding not supported") + +func Encode(base int, data []byte) (string, error) { + switch base { + case Base58BTC: + return string(Base58BTC) + b58.EncodeAlphabet(data, b58.BTCAlphabet), nil + case Base16: + return string(Base16) + hex.EncodeToString(data), nil + default: + return "", ErrUnsupportedEncoding + } +} + +func Decode(data string) (int, []byte, error) { + switch data[0] { + case Base58BTC: + return Base58BTC, b58.DecodeAlphabet(data[1:], b58.BTCAlphabet), nil + default: + return -1, nil, ErrUnsupportedEncoding + } +} diff --git a/multibase_test.go b/multibase_test.go new file mode 100644 index 0000000..5bb001e --- /dev/null +++ b/multibase_test.go @@ -0,0 +1,30 @@ +package multibase + +import ( + "bytes" + "math/rand" + "testing" +) + +func TestBase58RoundTrip(t *testing.T) { + buf := make([]byte, 16) + rand.Read(buf) + + enc, err := Encode(Base58BTC, buf) + if err != nil { + t.Fatal(err) + } + + e, out, err := Decode(enc) + if err != nil { + t.Fatal(err) + } + + if e != Base58BTC { + t.Fatal("got wrong encoding out") + } + + if !bytes.Equal(buf, out) { + t.Fatal("input wasnt the same as output", buf, out) + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..74467ff --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "author": "whyrusleeping", + "bugs": { + "url": "https://github.com/multiformats/go-multibase" + }, + "gx": { + "dvcsimport": "github.com/multiformats/go-multibase" + }, + "gxVersion": "0.8.0", + "language": "go", + "license": "", + "name": "go-multibase", + "version": "0.0.0" +}