mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-22 19:40:37 +00:00
4c47756aed
* remove validation package * structs cleanup * merge with apimiddleware removal * more validation and Bls capitalization * builder test fix * use strconv for uint->str conversions * use DecodeHexWithLength * use exact param names * rename http package to httputil * change conversions to fmt.Sprintf * handle query paramsd and route variables * spans and receiver name * split structs, move bytes helper * missing ok check * fix reference to indexed failure * errors fixup * add godoc to helper * fix BLS casing and chainhead ref * review * fix import in tests * gzl
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package bytesutil
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
|
"github.com/pkg/errors"
|
|
"github.com/prysmaticlabs/prysm/v4/container/slice"
|
|
)
|
|
|
|
var hexRegex = regexp.MustCompile("^0x[0-9a-fA-F]+$")
|
|
|
|
// IsHex checks whether the byte array is a hex number prefixed with '0x'.
|
|
func IsHex(b []byte) bool {
|
|
if b == nil {
|
|
return false
|
|
}
|
|
return hexRegex.Match(b)
|
|
}
|
|
|
|
// DecodeHexWithLength takes a string and a length in bytes,
|
|
// and validates whether the string is a hex and has the correct length.
|
|
func DecodeHexWithLength(s string, length int) ([]byte, error) {
|
|
bytes, err := hexutil.Decode(s)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, fmt.Sprintf("%s is not a valid hex", s))
|
|
}
|
|
if len(bytes) != length {
|
|
return nil, fmt.Errorf("%s is not length %d bytes", s, length)
|
|
}
|
|
return bytes, nil
|
|
}
|
|
|
|
// DecodeHexWithMaxLength takes a string and a length in bytes,
|
|
// and validates whether the string is a hex and has the correct length.
|
|
func DecodeHexWithMaxLength(s string, maxLength int) ([]byte, error) {
|
|
bytes, err := hexutil.Decode(s)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, fmt.Sprintf("%s is not a valid hex", s))
|
|
}
|
|
err = slice.VerifyMaxLength(bytes, maxLength)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, fmt.Sprintf("length of %s exceeds max of %d bytes", s, maxLength))
|
|
}
|
|
return bytes, nil
|
|
}
|