github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/libkb/pgp_enc.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package libkb 5 6 import ( 7 "io" 8 "strings" 9 10 "github.com/keybase/go-crypto/openpgp" 11 ) 12 13 func PGPEncrypt(source io.Reader, sink io.WriteCloser, signer *PGPKeyBundle, recipients []*PGPKeyBundle) error { 14 to := make([]*openpgp.Entity, len(recipients)) 15 for i, r := range recipients { 16 to[i] = r.Entity 17 } 18 var signerEntity *openpgp.Entity 19 if signer != nil { 20 signerEntity = signer.Entity 21 } 22 w, err := openpgp.Encrypt(sink, to, signerEntity, &openpgp.FileHints{IsBinary: true}, nil) 23 if err != nil { 24 return err 25 } 26 _, err = io.Copy(w, source) 27 if err != nil { 28 return err 29 } 30 if err := w.Close(); err != nil { 31 return err 32 } 33 return sink.Close() 34 } 35 36 func PGPEncryptString(input string, signer *PGPKeyBundle, recipients []*PGPKeyBundle) ([]byte, error) { 37 source := strings.NewReader(input) 38 sink := NewBufferCloser() 39 if err := PGPEncrypt(source, sink, signer, recipients); err != nil { 40 return nil, err 41 } 42 return sink.Bytes(), nil 43 }