mirror of
https://github.com/jimeh/go-base58.git
synced 2026-02-19 08:06:39 +00:00
Simplify exposed method API
This package serves a single purpose, convert between integers and base58 strings the same as a Flickr does. It has no need for supporting custom alphabets passed in a runtime.
This commit is contained in:
50
base58.go
50
base58.go
@@ -8,46 +8,32 @@ import (
|
||||
|
||||
// Alphabet is the default alphabet.
|
||||
const Alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
|
||||
const base = len(Alphabet)
|
||||
|
||||
// Encode converts a base10 integer to a base58 string using the default
|
||||
// alphabet.
|
||||
func Encode(num int) string {
|
||||
return EncodeWithAlphabet(num, Alphabet)
|
||||
str := ""
|
||||
for num >= base {
|
||||
mod := num % base
|
||||
str = string(Alphabet[mod]) + str
|
||||
num = (num - mod) / base
|
||||
}
|
||||
|
||||
return string(Alphabet[num]) + str
|
||||
}
|
||||
|
||||
// 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)
|
||||
index := strings.Index(Alphabet, char)
|
||||
if index == -1 {
|
||||
return -1, decodeError(str, alphabet)
|
||||
return -1, decodeError(str)
|
||||
}
|
||||
num += multi * index
|
||||
multi = multi * base
|
||||
@@ -56,17 +42,7 @@ func DecodeWithAlphabet(str string, alphabet string) (int, error) {
|
||||
return num, nil
|
||||
}
|
||||
|
||||
func decodeError(str string, alphabet string) error {
|
||||
var msg string
|
||||
|
||||
if alphabet == Alphabet {
|
||||
msg = fmt.Sprintf("\"%s\" is not a valid base58 string.", str)
|
||||
} else {
|
||||
msg = fmt.Sprintf(
|
||||
"\"%s\" is not a valid input for alphabet \"%s\".",
|
||||
str, alphabet,
|
||||
)
|
||||
}
|
||||
|
||||
func decodeError(str string) error {
|
||||
msg := fmt.Sprintf("\"%s\" is not a valid base58 string.", str)
|
||||
return errors.New(msg)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user