wal-g
1package openpgp2
3import (4"bytes"5"io"6"os"7
8"github.com/ProtonMail/go-crypto/openpgp"9)
10
11func readKey(path string) (io.Reader, error) {12byteData, err := os.ReadFile(path)13
14if err != nil {15return nil, err16}17
18return bytes.NewReader(byteData), nil19}
20
21func readPGPKey(path string) (openpgp.EntityList, error) {22gpgKeyReader, err := readKey(path)23
24if err != nil {25return nil, err26}27
28entityList, err := openpgp.ReadArmoredKeyRing(gpgKeyReader)29
30if err != nil {31return nil, err32}33
34return entityList, nil35}
36
37func decryptSecretKey(entityList openpgp.EntityList, passphrase string) error {38passphraseBytes := []byte(passphrase)39
40for _, entity := range entityList {41err := entity.PrivateKey.Decrypt(passphraseBytes)42
43if err != nil {44return err45}46
47for _, subKey := range entity.Subkeys {48err := subKey.PrivateKey.Decrypt(passphraseBytes)49
50if err != nil {51return err52}53}54}55
56return nil57}
58