You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
// Copyright (c) 2013-2014 The btcsuite developers |
|
// Use of this source code is governed by an ISC |
|
// license that can be found in the LICENSE file. |
|
|
|
package base58_test |
|
|
|
import ( |
|
"testing" |
|
|
|
"crypto.orly/ec/base58" |
|
) |
|
|
|
var checkEncodingStringTests = []struct { |
|
version byte |
|
in string |
|
out string |
|
}{ |
|
{20, "", "3MNQE1X"}, |
|
{20, " ", "B2Kr6dBE"}, |
|
{20, "-", "B3jv1Aft"}, |
|
{20, "0", "B482yuaX"}, |
|
{20, "1", "B4CmeGAC"}, |
|
{20, "-1", "mM7eUf6kB"}, |
|
{20, "11", "mP7BMTDVH"}, |
|
{20, "abc", "4QiVtDjUdeq"}, |
|
{20, "1234598760", "ZmNb8uQn5zvnUohNCEPP"}, |
|
{ |
|
20, "abcdefghijklmnopqrstuvwxyz", |
|
"K2RYDcKfupxwXdWhSAxQPCeiULntKm63UXyx5MvEH2", |
|
}, |
|
{ |
|
20, "00000000000000000000000000000000000000000000000000000000000000", |
|
"bi1EWXwJay2udZVxLJozuTb8Meg4W9c6xnmJaRDjg6pri5MBAxb9XwrpQXbtnqEoRV5U2pixnFfwyXC8tRAVC8XxnjK", |
|
}, |
|
} |
|
|
|
func TestBase58Check(t *testing.T) { |
|
for x, test := range checkEncodingStringTests { |
|
// test encoding |
|
if res := base58.CheckEncode( |
|
[]byte(test.in), |
|
test.version, |
|
); res != test.out { |
|
t.Errorf( |
|
"CheckEncode test #%d failed: got %s, want: %s", x, res, |
|
test.out, |
|
) |
|
} |
|
|
|
// test decoding |
|
res, version, err := base58.CheckDecode(test.out) |
|
switch { |
|
case err != nil: |
|
t.Errorf("CheckDecode test #%d failed with err: %v", x, err) |
|
|
|
case version != test.version: |
|
t.Errorf( |
|
"CheckDecode test #%d failed: got version: %d want: %d", x, |
|
version, test.version, |
|
) |
|
|
|
case string(res) != test.in: |
|
t.Errorf( |
|
"CheckDecode test #%d failed: got: %s want: %s", x, res, |
|
test.in, |
|
) |
|
} |
|
} |
|
|
|
// test the two decoding failure cases |
|
// case 1: checksum error |
|
_, _, err := base58.CheckDecode("3MNQE1Y") |
|
if err != base58.ErrChecksum { |
|
t.Error("Checkdecode test failed, expected ErrChecksum") |
|
} |
|
// case 2: invalid formats (string lengths below 5 mean the version byte and/or the checksum |
|
// bytes are missing). |
|
testString := "" |
|
for len := 0; len < 4; len++ { |
|
testString += "x" |
|
_, _, err = base58.CheckDecode(testString) |
|
if err != base58.ErrInvalidFormat { |
|
t.Error("Checkdecode test failed, expected ErrInvalidFormat") |
|
} |
|
} |
|
|
|
}
|
|
|