package main import ( "bytes" "crypto/sha512" "golang.org/x/crypto/ed25519" ) var ( PKAlg = [2]byte{'E', 'd'} KDFAlg = [2]byte{'B', 'K'} ) type Sig struct { PKAlg [2]byte KeyNum [8]byte Sig [ed25519.SignatureSize]byte } type PubKey struct { PKAlg [2]byte KeyNum [8]byte PubKey [ed25519.PublicKeySize]byte } type EncKey struct { PKAlg [2]byte KDFAlg [2]byte KDFRounds uint32 Salt [16]byte Checksum [8]byte KeyNum [8]byte SecKey [ed25519.PrivateKeySize]byte } func xor(text, key []byte) { if len(text) != len(key) { return } for i := 0; i < len(text); i++ { text[i] ^= key[i] } } func (v *EncKey) IsValid() bool { sum := sha512.Sum512(v.SecKey[:]) return bytes.Equal(sum[:8], v.Checksum[:]) }