diff options
| author | J08nY | 2017-08-09 17:07:10 +0200 |
|---|---|---|
| committer | J08nY | 2017-08-09 17:07:10 +0200 |
| commit | 22a688b4f0579b1e1e51b4164934fe2afc357671 (patch) | |
| tree | 6e166fb047f5e3006de5d4347ed045ff3bbe97b1 /src/mailman_pgp/pgp | |
| parent | cb998cf4c060ad219f3abffb08f114fbeafb16cf (diff) | |
| download | mailman-pgp-22a688b4f0579b1e1e51b4164934fe2afc357671.tar.gz mailman-pgp-22a688b4f0579b1e1e51b4164934fe2afc357671.tar.zst mailman-pgp-22a688b4f0579b1e1e51b4164934fe2afc357671.zip | |
Diffstat (limited to 'src/mailman_pgp/pgp')
| -rw-r--r-- | src/mailman_pgp/pgp/mime.py | 22 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/test_mime.py | 4 |
2 files changed, 18 insertions, 8 deletions
diff --git a/src/mailman_pgp/pgp/mime.py b/src/mailman_pgp/pgp/mime.py index 03177ab..32e2cab 100644 --- a/src/mailman_pgp/pgp/mime.py +++ b/src/mailman_pgp/pgp/mime.py @@ -24,7 +24,7 @@ from email.mime.application import MIMEApplication from email.utils import collapse_rfc2231_value from mailman.email.message import Message, MultipartDigestMessage -from pgpy import PGPDetachedSignature, PGPMessage +from pgpy import PGPMessage, PGPSignature, PGPDetachedSignature from pgpy.constants import HashAlgorithm, SymmetricKeyAlgorithm from public import public @@ -358,16 +358,17 @@ class MIMEWrapper: return out def _encrypt(self, pmsg, *keys, cipher, **kwargs): + emsg = copy.copy(pmsg) if len(keys) == 1: - pmsg = keys[0].encrypt(pmsg, cipher=cipher, **kwargs) + emsg = keys[0].encrypt(emsg, cipher=cipher, **kwargs) else: session_key = cipher.gen_key() for key in keys: - pmsg = key.encrypt(pmsg, cipher=cipher, + emsg = key.encrypt(emsg, cipher=cipher, sessionkey=session_key, **kwargs) del session_key - return pmsg + return emsg def _wrap_encrypted(self, payload): out = MultipartDigestMessage('encrypted', @@ -407,8 +408,11 @@ class MIMEWrapper: if len(keys) == 0: raise ValueError('At least one key necessary.') - payload = self.msg.as_string() - pmsg = PGPMessage.new(payload) + if self.is_signed(): + pmsg = PGPMessage.new(next(iter(self.get_signed()))) + pmsg |= next(iter(self.get_signature())) + else: + pmsg = PGPMessage.new(next(iter(self.get_payload()))) pmsg = self._encrypt(pmsg, *keys, cipher=cipher, **kwargs) out = self._wrap_encrypted(pmsg) copy_headers(self.msg, out) @@ -468,4 +472,8 @@ class MIMEWrapper: out = self.sign(key, hash) out_wrapped = MIMEWrapper(out) - return out_wrapped.encrypt(*keys, cipher=cipher, **kwargs) + pmsg = PGPMessage.new(next(out_wrapped.get_payload())) + pmsg = self._encrypt(pmsg, *keys, cipher=cipher, **kwargs) + out = self._wrap_encrypted(pmsg) + copy_headers(self.msg, out) + return out diff --git a/src/mailman_pgp/pgp/tests/test_mime.py b/src/mailman_pgp/pgp/tests/test_mime.py index e9951cf..e599170 100644 --- a/src/mailman_pgp/pgp/tests/test_mime.py +++ b/src/mailman_pgp/pgp/tests/test_mime.py @@ -111,7 +111,9 @@ class TestEncryption(MIMEWrapperTestCase): load_key('rsa_1024.pub.asc')), (load_message('clear_multipart.eml'), (load_key('rsa_1024.pub.asc'), - load_key('ecc_p256.pub.asc'))) + load_key('ecc_p256.pub.asc'))), + (load_message('mime_signed.eml'), + load_key('ecc_p256.pub.asc')) ]) def test_encrypt(self, message, keys, **kwargs): if isinstance(keys, tuple): |
