package key import "golang.org/x/crypto/ed25519" type Pub struct { PKAlg [2]byte KeyNum [8]byte Key [ed25519.PublicKeySize]byte } func (v *Pub) Err() error { if v.PKAlg != pkAlg { return ErrInvalidPK } return nil } func (v *Pub) Verify(message []byte, sig *Sig) error { if v.KeyNum != sig.KeyNum { return ErrKeyNum } if !ed25519.Verify(ed25519.PublicKey(v.Key[:]), message, sig.Sig[:]) { return ErrInvalidSig } return nil } func (v *Pub) MarshalBinary() ([]byte, error) { return marshal(v) } func (v *Pub) UnmarshalBinary(data []byte) error { return unmarshal(data, v) } func ParsePub(data []byte) (*Pub, error) { pub := new(Pub) if err := pub.UnmarshalBinary(data); err != nil { return nil, err } return pub, pub.Err() }