package main import ( "bytes" "encoding/base64" "io" "golang.org/x/crypto/ed25519" ) type PubKey struct { PKAlg [2]byte KeyNum [KeyNumLen]byte PubKey [ed25519.PublicKeySize]byte } func (v *PubKey) Unmarshal(b []byte) error { buf := bytes.NewBuffer(b) dec := base64.NewDecoder(base64.StdEncoding, buf) io.ReadFull(dec, v.PKAlg[:]) io.ReadFull(dec, v.KeyNum[:]) io.ReadFull(dec, v.PubKey[:]) return nil } func (v *PubKey) Marshal() ([]byte, error) { buf := new(bytes.Buffer) enc := base64.NewEncoder(base64.StdEncoding, buf) enc.Write(v.PKAlg[:]) enc.Write(v.KeyNum[:]) enc.Write(v.PubKey[:]) enc.Close() return buf.Bytes(), nil }