package key import ( "bytes" "encoding/binary" "golang.org/x/crypto/ed25519" ) type Pub struct { PKAlg [2]byte KeyNum [8]byte Key [ed25519.PublicKeySize]byte } func (v *Pub) Validate() error { if v.PKAlg != pkAlg { return ErrInvalidPK } return nil } // NewPub returns a parsed public key func NewPub(data []byte) (*Pub, error) { pub := new(Pub) if err := pub.UnmarshalBinary(data); err != nil { return nil, err } return pub, pub.Validate() } func (v *Pub) MarshalBinary() ([]byte, error) { buf := new(bytes.Buffer) if err := binary.Write(buf, binary.BigEndian, v); err != nil { return nil, err } return buf.Bytes(), nil } func (v *Pub) UnmarshalBinary(data []byte) error { buf := bytes.NewReader(data) return binary.Read(buf, binary.BigEndian, v) }