package main import ( "crypto/rand" "fmt" "golang.org/x/crypto/chacha20poly1305" ) func EncryptSym(key []byte, plaintext []byte) ([]byte, error) { aead, err := chacha20poly1305.NewX(key) if err != nil { return nil, err } nonce := make([]byte, chacha20poly1305.NonceSizeX) if _, err := rand.Read(nonce); err != nil { return nil, err } return aead.Seal(nonce, nonce, plaintext, nil), nil } func DecryptSym(key []byte, ciphertext []byte) ([]byte, error) { aead, err := chacha20poly1305.NewX(key) if err != nil { return nil, err } if len(ciphertext) < aead.NonceSize() { return nil, fmt.Errorf("ciphertext too short") } nonce, ciphertext := ciphertext[:aead.NonceSize()], ciphertext[aead.NonceSize():] return aead.Open(nil, nonce, ciphertext, nil) }