package main import ( "bytes" "crypto/sha512" "golang.org/x/crypto/ed25519" ) type EncKey struct { PKAlg [2]byte KDFAlg [2]byte KDFRounds uint32 // network byte order Salt [16]byte Checksum [8]byte KeyNum [KeyNumLen]byte SecKey [ed25519.PrivateKeySize]byte } func (v *EncKey) Valid() bool { sum := sha512.Sum512(v.SecKey[:]) return bytes.Equal(sum[:len(v.Checksum)], v.Checksum[:]) } func (v *EncKey) Unmarshal(b []byte) error { return DecodeBase64(v, b) } func (v *EncKey) Marshal() ([]byte, error) { return EncodeBase64(v) }