14f90e5946
In this commit, we add an additional field to the ErrInvalidChecksum, the bech32m version of a checksum. When decoding, we don't now what version they actually _intended_ to use, so we'll opt to include both checksums to aide in debugging and error reporting.
87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
// Copyright (c) 2019 The Decred developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package bech32
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// ErrMixedCase is returned when the bech32 string has both lower and uppercase
|
|
// characters.
|
|
type ErrMixedCase struct{}
|
|
|
|
func (e ErrMixedCase) Error() string {
|
|
return "string not all lowercase or all uppercase"
|
|
}
|
|
|
|
// ErrInvalidBitGroups is returned when conversion is attempted between byte
|
|
// slices using bit-per-element of unsupported value.
|
|
type ErrInvalidBitGroups struct{}
|
|
|
|
func (e ErrInvalidBitGroups) Error() string {
|
|
return "only bit groups between 1 and 8 allowed"
|
|
}
|
|
|
|
// ErrInvalidIncompleteGroup is returned when then byte slice used as input has
|
|
// data of wrong length.
|
|
type ErrInvalidIncompleteGroup struct{}
|
|
|
|
func (e ErrInvalidIncompleteGroup) Error() string {
|
|
return "invalid incomplete group"
|
|
}
|
|
|
|
// ErrInvalidLength is returned when the bech32 string has an invalid length
|
|
// given the BIP-173 defined restrictions.
|
|
type ErrInvalidLength int
|
|
|
|
func (e ErrInvalidLength) Error() string {
|
|
return fmt.Sprintf("invalid bech32 string length %d", int(e))
|
|
}
|
|
|
|
// ErrInvalidCharacter is returned when the bech32 string has a character
|
|
// outside the range of the supported charset.
|
|
type ErrInvalidCharacter rune
|
|
|
|
func (e ErrInvalidCharacter) Error() string {
|
|
return fmt.Sprintf("invalid character in string: '%c'", rune(e))
|
|
}
|
|
|
|
// ErrInvalidSeparatorIndex is returned when the separator character '1' is
|
|
// in an invalid position in the bech32 string.
|
|
type ErrInvalidSeparatorIndex int
|
|
|
|
func (e ErrInvalidSeparatorIndex) Error() string {
|
|
return fmt.Sprintf("invalid separator index %d", int(e))
|
|
}
|
|
|
|
// ErrNonCharsetChar is returned when a character outside of the specific
|
|
// bech32 charset is used in the string.
|
|
type ErrNonCharsetChar rune
|
|
|
|
func (e ErrNonCharsetChar) Error() string {
|
|
return fmt.Sprintf("invalid character not part of charset: %v", int(e))
|
|
}
|
|
|
|
// ErrInvalidChecksum is returned when the extracted checksum of the string
|
|
// is different than what was expected. Both the original version, as well as
|
|
// the new bech32m checksum may be specified.
|
|
type ErrInvalidChecksum struct {
|
|
Expected string
|
|
ExpectedM string
|
|
Actual string
|
|
}
|
|
|
|
func (e ErrInvalidChecksum) Error() string {
|
|
return fmt.Sprintf("invalid checksum (expected (bech32=%v, "+
|
|
"bech32m=%v), got %v)", e.Expected, e.ExpectedM, e.Actual)
|
|
}
|
|
|
|
// ErrInvalidDataByte is returned when a byte outside the range required for
|
|
// conversion into a string was found.
|
|
type ErrInvalidDataByte byte
|
|
|
|
func (e ErrInvalidDataByte) Error() string {
|
|
return fmt.Sprintf("invalid data byte: %v", byte(e))
|
|
}
|