diff options
Diffstat (limited to 'src/mailman_pgp/pgp/inline.py')
| -rw-r--r-- | src/mailman_pgp/pgp/inline.py | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/mailman_pgp/pgp/inline.py b/src/mailman_pgp/pgp/inline.py index 2fe22cf..c93d801 100644 --- a/src/mailman_pgp/pgp/inline.py +++ b/src/mailman_pgp/pgp/inline.py @@ -19,11 +19,12 @@ import copy from email.iterators import walk -from pgpy import PGPKey, PGPMessage +from pgpy import PGPMessage from pgpy.constants import SymmetricKeyAlgorithm -from pgpy.types import Armorable from public import public +from mailman_pgp.utils.pgp import key_from_blob + @public class InlineWrapper: @@ -143,9 +144,8 @@ class InlineWrapper: def _has_keys(self, part): try: - dearm = Armorable.ascii_unarmor(part.get_payload()) - if dearm['magic'] in ('PUBLIC KEY BLOCK', 'PRIVATE KEY BLOCK'): - return True + key_from_blob(part.get_payload()) + return True except: pass return False @@ -168,11 +168,6 @@ class InlineWrapper: """ return any(self._walk(self._has_keys)) - def _keys(self, part): - # TODO: potentially return all things returned from from_blob? - key, _ = PGPKey.from_blob(part.get_payload()) - return key - def keys(self): """ Get the collection of keys in this message. @@ -183,7 +178,7 @@ class InlineWrapper: for part in walk(self.msg): if not part.is_multipart() and self._has_keys(part): try: - key = self._keys(part) + key = key_from_blob(part.get_payload()) except: continue yield key @@ -229,6 +224,7 @@ class InlineWrapper: def _decrypt(self, part, key): message = PGPMessage.from_blob(part.get_payload()) + # TODO: exception safe this. decrypted = key.decrypt(message) if decrypted.is_signed: part.set_payload(str(decrypted)) @@ -309,8 +305,11 @@ class InlineWrapper: out = copy.deepcopy(self.msg) for part in walk(out): if not part.is_multipart(): - payload = str(part.get_payload()) - pmsg = PGPMessage.new(payload) + if self._is_signed(part): + pmsg = PGPMessage.from_blob(part.get_payload()) + else: + payload = str(part.get_payload()) + pmsg = PGPMessage.new(payload) smsg = self._sign(pmsg, key, hash=hash) emsg = self._encrypt(smsg, *keys, cipher=cipher, **kwargs) part.set_payload(str(emsg)) |
