agedit/pkg/encrypt/encrypt.go

41 lines
695 B
Go

package encrypt
import (
"bytes"
"errors"
"io"
"io/fs"
"os"
"filippo.io/age"
)
// Encrypt encrypts bytes into filename
func Encrypt(data []byte, filename string, recipients ...age.Recipient) error {
var (
w io.WriteCloser
out = &bytes.Buffer{}
err error
)
if len(recipients) == 0 {
return errors.New("no recepients? who's trying to encrypt?")
}
if w, err = age.Encrypt(out, recipients...); err != nil {
return err
}
io.WriteString(w, string(data))
if err = w.Close(); err != nil {
return err
}
os.Truncate(filename, 0) // in case it exists already
if err = os.WriteFile(filename, out.Bytes(), fs.FileMode(0600)); err != nil {
return err
}
return nil
}