From 88da5d44b17fcf2d4e94f8228e6e2ad13b417e65 Mon Sep 17 00:00:00 2001 From: Ilya Chesnokov Date: Wed, 15 Jul 2020 16:17:49 +0700 Subject: [PATCH] Throw error EncryptSessionKey (#60) * throw error EncryptSessionKey throw error if one of the keys in keyring does not have valid encryption key * add key id to error description --- crypto/keyring_session.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/crypto/keyring_session.go b/crypto/keyring_session.go index 6d307bf..06e33eb 100644 --- a/crypto/keyring_session.go +++ b/crypto/keyring_session.go @@ -3,6 +3,7 @@ package crypto import ( "bytes" "fmt" + "strconv" "github.com/pkg/errors" @@ -53,11 +54,13 @@ func (keyRing *KeyRing) EncryptSessionKey(sk *SessionKey) ([]byte, error) { return nil, errors.Wrap(err, "gopenpgp: unable to encrypt session key") } - var pubKeys []*packet.PublicKey + pubKeys := make([]*packet.PublicKey, 0, len(keyRing.entities)) for _, e := range keyRing.entities { - if encryptionKey, ok := e.EncryptionKey(getNow()); ok { - pubKeys = append(pubKeys, encryptionKey.PublicKey) + encryptionKey, ok := e.EncryptionKey(getNow()) + if !ok { + return nil, errors.New("gopenpgp: encryption key is unavailable for key id " + strconv.FormatUint(e.PrimaryKey.KeyId, 16)) } + pubKeys = append(pubKeys, encryptionKey.PublicKey) } if len(pubKeys) == 0 { return nil, errors.New("cannot set key: no public key available")