summaryrefslogtreecommitdiff
path: root/src/mailman_pgp/pgp/inline.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman_pgp/pgp/inline.py')
-rw-r--r--src/mailman_pgp/pgp/inline.py25
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))