Files
go-base58/base58.go
2016-06-29 00:13:52 +01:00

58 lines
1.3 KiB
Go

package base58
import (
"errors"
"strings"
)
// Alphabet is the default alphabet.
const Alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
// Encode converts a base10 integer to a base58 string using the default
// alphabet.
func Encode(num int) string {
return EncodeWithAlphabet(num, Alphabet)
}
// Decode converts a base58 string to a base10 integer using the default
// alphabet.
func Decode(str string) (int, error) {
return DecodeWithAlphabet(str, Alphabet)
}
// EncodeWithAlphabet converts a base10 integer to a base58 string with the
// given alphabet.
func EncodeWithAlphabet(num int, alphabet string) string {
base := len(alphabet)
str := ""
for num >= base {
mod := num % base
str = string(alphabet[mod]) + str
num = (num - mod) / base
}
return string(alphabet[num]) + str
}
// DecodeWithAlphabet converts a base58 string to a base10 integer with the
// given alphabet.
func DecodeWithAlphabet(str string, alphabet string) (int, error) {
base := len(alphabet)
num := 0
multi := 1
for i := len(str); i > 0; i-- {
char := string(str[i-1])
index := strings.Index(alphabet, char)
if index == -1 {
errorMsg := "\"" + str + "\" is not a valid base58 string."
return -1, errors.New(errorMsg)
}
num += multi * index
multi = multi * base
}
return num, nil
}