mirror of https://github.com/docker/docs.git
37 lines
835 B
Go
37 lines
835 B
Go
package keys
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"errors"
|
|
)
|
|
|
|
// HexBytes represents hexadecimal bytes
|
|
type HexBytes []byte
|
|
|
|
// UnmarshalJSON allows the representation in JSON of hexbytes
|
|
func (b *HexBytes) UnmarshalJSON(data []byte) error {
|
|
if len(data) < 2 || len(data)%2 != 0 || data[0] != '"' || data[len(data)-1] != '"' {
|
|
return errors.New("tuf: invalid JSON hex bytes")
|
|
}
|
|
res := make([]byte, hex.DecodedLen(len(data)-2))
|
|
_, err := hex.Decode(res, data[1:len(data)-1])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*b = res
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON allows the representation in JSON of hexbytes
|
|
func (b HexBytes) MarshalJSON() ([]byte, error) {
|
|
res := make([]byte, hex.EncodedLen(len(b))+2)
|
|
res[0] = '"'
|
|
res[len(res)-1] = '"'
|
|
hex.Encode(res[1:], b)
|
|
return res, nil
|
|
}
|
|
|
|
func (b HexBytes) String() string {
|
|
return hex.EncodeToString(b)
|
|
}
|