aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mailman_pgp/commands/tests/test_key.py2
-rw-r--r--src/mailman_pgp/mta/tests/test_bulk.py2
-rw-r--r--src/mailman_pgp/mta/tests/test_deliver.py2
-rw-r--r--src/mailman_pgp/mta/tests/test_personalized.py2
-rw-r--r--src/mailman_pgp/pgp/inline.py25
-rw-r--r--src/mailman_pgp/pgp/mime.py15
-rw-r--r--src/mailman_pgp/pgp/tests/data/messages/inline_privkey_invalid.eml43
-rw-r--r--src/mailman_pgp/pgp/tests/data/messages/inline_pubkey_invalid.eml30
-rw-r--r--src/mailman_pgp/pgp/tests/data/messages/mime_privkey_invalid.eml59
-rw-r--r--src/mailman_pgp/pgp/tests/data/messages/mime_pubkey_invalid.eml46
-rw-r--r--src/mailman_pgp/pgp/tests/test_inline.py12
-rw-r--r--src/mailman_pgp/pgp/tests/test_mime.py12
-rw-r--r--src/mailman_pgp/pgp/tests/test_mime_multisig.py2
-rw-r--r--src/mailman_pgp/pgp/tests/test_pgp.py2
-rw-r--r--src/mailman_pgp/pgp/tests/test_wrapper.py2
-rw-r--r--src/mailman_pgp/rest/tests/test_lists.py2
-rw-r--r--src/mailman_pgp/rules/tests/test_signature.py2
-rw-r--r--src/mailman_pgp/runners/tests/test_incoming.py2
-rw-r--r--src/mailman_pgp/testing/pgp.py (renamed from src/mailman_pgp/pgp/tests/base.py)0
-rw-r--r--src/mailman_pgp/workflows/tests/test_base.py2
-rw-r--r--src/mailman_pgp/workflows/tests/test_key_change.py2
21 files changed, 234 insertions, 32 deletions
diff --git a/src/mailman_pgp/commands/tests/test_key.py b/src/mailman_pgp/commands/tests/test_key.py
index 8920e44..af482b4 100644
--- a/src/mailman_pgp/commands/tests/test_key.py
+++ b/src/mailman_pgp/commands/tests/test_key.py
@@ -33,9 +33,9 @@ from mailman_pgp.database import transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
from mailman_pgp.pgp.mime import MIMEWrapper
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key
from mailman_pgp.workflows.key_change import CHANGE_CONFIRM_REQUEST
from mailman_pgp.workflows.pubkey import CONFIRM_REQUEST
from mailman_pgp.workflows.subscription import OpenSubscriptionPolicy
diff --git a/src/mailman_pgp/mta/tests/test_bulk.py b/src/mailman_pgp/mta/tests/test_bulk.py
index ccb4988..02c5bf2 100644
--- a/src/mailman_pgp/mta/tests/test_bulk.py
+++ b/src/mailman_pgp/mta/tests/test_bulk.py
@@ -27,9 +27,9 @@ from mailman_pgp.database import transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
from mailman_pgp.mta.bulk import (PGPBulkDelivery)
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key
from mailman_pgp.utils.pgp import verifies
diff --git a/src/mailman_pgp/mta/tests/test_deliver.py b/src/mailman_pgp/mta/tests/test_deliver.py
index 756fd78..3b0594f 100644
--- a/src/mailman_pgp/mta/tests/test_deliver.py
+++ b/src/mailman_pgp/mta/tests/test_deliver.py
@@ -28,8 +28,8 @@ from mailman_pgp.database import transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
from mailman_pgp.mta.deliver import deliver
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.testing.layers import PGPSMTPLayer
+from mailman_pgp.testing.pgp import load_key
class TestDeliver(TestCase):
diff --git a/src/mailman_pgp/mta/tests/test_personalized.py b/src/mailman_pgp/mta/tests/test_personalized.py
index 0357757..7f4caa8 100644
--- a/src/mailman_pgp/mta/tests/test_personalized.py
+++ b/src/mailman_pgp/mta/tests/test_personalized.py
@@ -27,9 +27,9 @@ from mailman_pgp.database import transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
from mailman_pgp.mta.personalized import PGPPersonalizedDelivery
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key
from mailman_pgp.utils.pgp import verifies
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))
diff --git a/src/mailman_pgp/pgp/mime.py b/src/mailman_pgp/pgp/mime.py
index 33ec93e..a1303c9 100644
--- a/src/mailman_pgp/pgp/mime.py
+++ b/src/mailman_pgp/pgp/mime.py
@@ -24,11 +24,12 @@ from email.mime.application import MIMEApplication
from email.utils import collapse_rfc2231_value
from mailman.email.message import Message, MultipartDigestMessage
-from pgpy import PGPDetachedSignature, PGPKey, PGPMessage
+from pgpy import PGPDetachedSignature, PGPMessage
from pgpy.constants import HashAlgorithm, SymmetricKeyAlgorithm
from public import public
from mailman_pgp.utils.email import copy_headers
+from mailman_pgp.utils.pgp import key_from_blob
@public
@@ -179,7 +180,10 @@ class MIMEWrapper:
for part in walk(self.msg):
if (not part.is_multipart() # noqa
and part.get_content_type() == MIMEWrapper._keys_type):
- key, _ = PGPKey.from_blob(part.get_payload())
+ try:
+ key = key_from_blob(part.get_payload())
+ except:
+ continue
yield key
def attach_key(self, key):
@@ -215,7 +219,11 @@ class MIMEWrapper:
"""
clear_text = next(iter(self.get_signed()))
signature = next(iter(self.get_signature()))
- yield key.verify(clear_text, signature)
+ try:
+ verification = key.verify(clear_text, signature)
+ except:
+ return
+ yield verification
def _micalg(self, hash_algo):
algs = {
@@ -281,6 +289,7 @@ class MIMEWrapper:
:rtype: mailman.email.message.Message
"""
pmsg = next(iter(self.get_encrypted()))
+ # TODO: exception safe this.
decrypted = key.decrypt(pmsg)
dmsg = decrypted.message
diff --git a/src/mailman_pgp/pgp/tests/data/messages/inline_privkey_invalid.eml b/src/mailman_pgp/pgp/tests/data/messages/inline_privkey_invalid.eml
new file mode 100644
index 0000000..d7d9063
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/messages/inline_privkey_invalid.eml
@@ -0,0 +1,43 @@
+To: nobody@example.org
+From: RSA 1024b example <RSA-1024b@example.org>
+Subject: Some subject.
+Message-ID: <76a591ed-bfc4-d08b-73d3-fc2489148fd7@example.org>
+Date: Wed, 21 Jun 2017 13:50:59 +0200
+User-Agent: Mutt/1.7.2 (2016-11-26)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHYBFlKWqQBBADY8dCIub6x4tcFS3SmWW1r5ctwldFixkLz8LpBdgpc+zt7iWZI
+XvVWH9GYgTzgE+qEAVJcvQDG7/cX6zTopkkGEUmnwBgEFpc7Xi0D+/GYC23XleQk
+IF/R2Mf0AW3FBx/UxK0kIkYfTelkuZBrag83iLh3yKXkcLm1T010eGbTWQARAQAB
+AAP/ayABKrqZrQpHxfAMEmZ/TzPCIP6BzeX7wqxAtLlehapzJV3kGWF2gQgmPcm3
+byi2eWeTrYKQwytUVsXIswcFcCY1FAAAAAAASqc6VJzGhvjKE9CTNJmgSjHlILMW
+Ma/9TzhxH2DT9tNMgOEN3+FoKRqjlLrhO/OiXqYZJdkXU+8CAOQin6DGnn+qvjlN
+5zw1GIXXXXX9b1S/WEqKaG1t4D/V0m0pAJBqeUbSC6MonQLA9pmIK/LbetUKRwM/
+xLNRMs8CAPNxR4NY73YIfSnlGRPdZHmOq4wMtqXYtoN1qZruHcXsrojcKHV72n8y
+Hb3R+LEKVjky95RKeKGowousIhGYQVcCAKsWtTWQA/VMW2V+ydzFHZHN0xwC9eTc
+uhs7G1qAqJR2POCq/0Cr3W4nXnbYSAr9wHal/YUuIKr54vNbPlXp6xqf/rQpUlNB
+IDEwMjRiIGV4YW1wbGUgPFJTQS0xMDI0YkBleGFtcGxlLm9yZz6IzgQTAQgAOBYh
+BNSpSIaxyiCWpkWOXEfxDAh4hLdYBQJZSlqkAhsDBQsJCAcCBhUICQoLAgQWAgMB
+Ah4BAheAAAoJEEfxDAh4hLdYbQIEALBwJUxkBGJYlP5kOZYAgQHw6+rwIgdXAoPk
+ldwcGPhvlBEocRYx+5KUYrx7W352dv+AgxSZ590JL7JGvWJDvMxoZGCJiRvJ7+Ve
+luKRH167wT8H4hxftBJqzorTU4eyPzG8bFneuag5dw+81DdngXjWRCorEHEdaQjc
+sfvVEmnhnQHYBFlKWqQBBADXLjeg+K0ZAuchhNkvMnfb8TlKoc1t1lH94unoqoj3
+L5Srf3XSo1fmuEBNr1nc5BAAAAAAAAAAAAAAAAAAen9uaGvWO0U4t/OUiIWqPjBm
+XbjZWDdGKksb0cQNy13cvEBBBBBBBBBBBBBBBBBBlcbopN2wnecKOxLKK9PaLBZ6
+9wARAQABAAP+NyRiYA9p+GCCCCCCCCCCCCCCCCCCAs8x2sB8FcIh8EpSrHIw5OYz
+/+2GmQHPIwKVclOfrmW45jRkICvUgZuurMmMrnDu63UT/9Pm+4EiUkPFnKfAgYFm
+XwWf2SklsoHCFT2WQ31WCp/hZxWucYqfPM/5ZsE+EAToK+C8BnMicI0CAOAUhruY
+JVh/7u6ES7xI6Hd7yHmU6rLr7oP2Z8cILirt5+1FgOP/qPdVEK9UGShbBcjfA+8W
+u4LISyuvCm8vuyMCAPXVJmTdmJjzBvP7BZe+HbDzWfhPCN+BvepGi3DQdHonLU2t
+IVOcMQsu0raaLevZ19nCKeMrOoAaIhCdjJUBGB0B/iSErQY+sNUAbjsW0zWovY2u
+e+0TBMDkO3OZCFKxCr/7mEuIfsAENXvDwAmx/YDklMwN8zgUAc5BqObGtRE7BYSg
+n4i2BBgBCAAgFiEE1KlIhrHKIJamRY5cR/EMCHiEt1gFAllKWqQCGwwACgkQR/EM
+CHiEt1gOwQP7BuyH2oKuWPAXcVrJdl3P3fIqvm4JzKRjXCVA9j5QOdihH1W5rZFC
+x3J+bUvKa1QJ1NuHoU9gYvR2NPs+CpMlAAAAAAksgtddlC9lsVi1ijvjJCugveBh
+a/CQJt7Cl6uDkifPsD5kxyUTecmnVfYZB6aFb/nrZxJ5Cb1dKPGixDpw=
+=e2aw
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/src/mailman_pgp/pgp/tests/data/messages/inline_pubkey_invalid.eml b/src/mailman_pgp/pgp/tests/data/messages/inline_pubkey_invalid.eml
new file mode 100644
index 0000000..602a2f6
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/messages/inline_pubkey_invalid.eml
@@ -0,0 +1,30 @@
+To: nobody@example.org
+From: RSA 1024b example <RSA-1024b@example.org>
+Subject: Some subject.
+Message-ID: <76a591ed-bfc4-d08b-73d3-fc2489148fd7@example.org>
+Date: Wed, 21 Jun 2017 13:50:59 +0200
+User-Agent: Mutt/1.7.2 (2016-11-26)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mI0EWUpapAEEANjx0Ii5vrHi1wVLdKZZbWvly3CV0WLGQvPwukF2Clz7O3uJZkhe
+9VYf0ZiBAAAAAAAAUly9AMbv9xfrNOimSQYRSafAGAQWlzteLQP78ZgLbdeV5CQg
+X9HYx/QBbcUHH9TErSQiRh9N6WS5kGtqDzeIuHfIpeRwubVPTXR4ZtNZABEBAAG0
+KVJTQSAxMDI0YiBleGFtcGxlIDxSU0EtMTAyNGJAZXhhbXBsZS5vcmc+iM4EEwEI
+ADgWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpapAIbAwULCQgHAgYVCAkKCwIE
+FgIDAQIeAQIXgAAKCRBH8QwIeIS3WG0CBACwcCVMZARiWJT+ZDmWAIEB8Ovq8CIH
+VwKD5JXcHBj4b5QRKHEWAAAAAAAAAAAAAAAAgIMUmefdCS+yRr1iQ7zMaGRgiYkb
+ye/lXpbikR9eu8E/B+IcBBBBBBBBBBBBBBBBvGxZ3rmoOXcPvNQ3Z4F41kQqKxBx
+HWkI3LH71RJp4biNBFlKCCCCCCCCCCCCCCCCAuchhNkvMnfb8TlKoc1t1lH94uno
+qoj3L5Srf3XSo1fmuEBNr1nc5BLyH0tPDJZyuVCypfY4en9uaGvWO0U4t/OUiIWq
+PjBmXbjZWDdGKksb0cQNy13cvE57EmirbuVcXCE0OdU8lcbopN2wnecKOxLKK9Pa
+LBZ69wARAQABiLYEGAEIACAWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpapAIb
+DAAKCRBH8QwIeIS3WA7BA/sG7Ifagq5Y8BdxWsl2Xc/d8iq+bgnMpGNcJUD2PlA5
+2KEfVbmtkULHcn5tS8prVAnU24ehT2BAAAAAAA4KkyVMnbCDuSyC112UL2WxWLWK
+O+MkK6C94GFr8JAm3sKXq4OSJ8+wPmTHJRN5yadV9hkHoVv+etnEnkJvV0o8aLEO
+anA==
+=4oxM
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/src/mailman_pgp/pgp/tests/data/messages/mime_privkey_invalid.eml b/src/mailman_pgp/pgp/tests/data/messages/mime_privkey_invalid.eml
new file mode 100644
index 0000000..25077de
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/messages/mime_privkey_invalid.eml
@@ -0,0 +1,59 @@
+To: nobody@example.org
+From: RSA 1024b example <RSA-1024b@example.org>
+Subject: Some subject.
+Message-ID: <76a591ed-bfc4-d08b-73d3-fc2489148fd7@example.org>
+Date: Wed, 21 Jun 2017 13:50:59 +0200
+User-Agent: Mutt/1.7.2 (2016-11-26)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="------------A851F166D50529639139DD0B"
+
+This is a multi-part message in MIME format.
+--------------A851F166D50529639139DD0B
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 7bit
+
+Some other text.
+
+--------------A851F166D50529639139DD0B
+Content-Type: application/pgp-keys;
+ name="0x7884B758.asc"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment;
+ filename="0x7884B758.asc"
+
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHYBFlKWqQBBADY8dCIub6x4tcFS3SmWW1r5ctwldFixkLz8LpBdgpc+zt7iWZI
+XvVWH9GYgTzgE+qEAVJcvQDG7/cX6zTopkkGEUmnwBgEFpc7Xi0D+/GYC23XleQk
+IF/R2Mf0AW3FBx/UxK0kIkYfTelkuZBrag83iLh3yKXkcLm1T010eGbTWQARAQAB
+AAP/ayABKrqZrQpHxfAMEmZ/TzPCIP6BzeX7wqxAtLlehapzJV3kGWF2gQgmPcm3
+byi2eWeTrYKQwytUVsXIswcFcCY1FAAAAAAASqc6VJzGhvjKE9CTNJmgSjHlILMW
+Ma/9TzhxH2DT9tNMgOEN3+FoKRqjlLrhO/OiXqYZJdkXU+8CAOQin6DGnn+qvjlN
+5zw1GIXXXXX9b1S/WEqKaG1t4D/V0m0pAJBqeUbSC6MonQLA9pmIK/LbetUKRwM/
+xLNRMs8CAPNxR4NY73YIfSnlGRPdZHmOq4wMtqXYtoN1qZruHcXsrojcKHV72n8y
+Hb3R+LEKVjky95RKeKGowousIhGYQVcCAKsWtTWQA/VMW2V+ydzFHZHN0xwC9eTc
+uhs7G1qAqJR2POCq/0Cr3W4nXnbYSAr9wHal/YUuIKr54vNbPlXp6xqf/rQpUlNB
+IDEwMjRiIGV4YW1wbGUgPFJTQS0xMDI0YkBleGFtcGxlLm9yZz6IzgQTAQgAOBYh
+BNSpSIaxyiCWpkWOXEfxDAh4hLdYBQJZSlqkAhsDBQsJCAcCBhUICQoLAgQWAgMB
+Ah4BAheAAAoJEEfxDAh4hLdYbQIEALBwJUxkBGJYlP5kOZYAgQHw6+rwIgdXAoPk
+ldwcGPhvlBEocRYx+5KUYrx7W352dv+AgxSZ590JL7JGvWJDvMxoZGCJiRvJ7+Ve
+luKRH167wT8H4hxftBJqzorTU4eyPzG8bFneuag5dw+81DdngXjWRCorEHEdaQjc
+sfvVEmnhnQHYBFlKWqQBBADXLjeg+K0ZAuchhNkvMnfb8TlKoc1t1lH94unoqoj3
+L5Srf3XSo1fmuEBNr1nc5BAAAAAAAAAAAAAAAAAAen9uaGvWO0U4t/OUiIWqPjBm
+XbjZWDdGKksb0cQNy13cvEBBBBBBBBBBBBBBBBBBlcbopN2wnecKOxLKK9PaLBZ6
+9wARAQABAAP+NyRiYA9p+GCCCCCCCCCCCCCCCCCCAs8x2sB8FcIh8EpSrHIw5OYz
+/+2GmQHPIwKVclOfrmW45jRkICvUgZuurMmMrnDu63UT/9Pm+4EiUkPFnKfAgYFm
+XwWf2SklsoHCFT2WQ31WCp/hZxWucYqfPM/5ZsE+EAToK+C8BnMicI0CAOAUhruY
+JVh/7u6ES7xI6Hd7yHmU6rLr7oP2Z8cILirt5+1FgOP/qPdVEK9UGShbBcjfA+8W
+u4LISyuvCm8vuyMCAPXVJmTdmJjzBvP7BZe+HbDzWfhPCN+BvepGi3DQdHonLU2t
+IVOcMQsu0raaLevZ19nCKeMrOoAaIhCdjJUBGB0B/iSErQY+sNUAbjsW0zWovY2u
+e+0TBMDkO3OZCFKxCr/7mEuIfsAENXvDwAmx/YDklMwN8zgUAc5BqObGtRE7BYSg
+n4i2BBgBCAAgFiEE1KlIhrHKIJamRY5cR/EMCHiEt1gFAllKWqQCGwwACgkQR/EM
+CHiEt1gOwQP7BuyH2oKuWPAXcVrJdl3P3fIqvm4JzKRjXCVA9j5QOdihH1W5rZFC
+x3J+bUvKa1QJ1NuHoU9gYvR2NPs+CpMlAAAAAAksgtddlC9lsVi1ijvjJCugveBh
+a/CQJt7Cl6uDkifPsD5kxyUTecmnVfYZB6aFb/nrZxJ5Cb1dKPGixDpw=
+=e2aw
+-----END PGP PRIVATE KEY BLOCK-----
+
+--------------A851F166D50529639139DD0B--
diff --git a/src/mailman_pgp/pgp/tests/data/messages/mime_pubkey_invalid.eml b/src/mailman_pgp/pgp/tests/data/messages/mime_pubkey_invalid.eml
new file mode 100644
index 0000000..eecc329
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/messages/mime_pubkey_invalid.eml
@@ -0,0 +1,46 @@
+To: nobody@example.org
+From: RSA 1024b example <RSA-1024b@example.org>
+Subject: Some subject.
+Message-ID: <76a591ed-bfc4-d08b-73d3-fc2489148fd7@example.org>
+Date: Wed, 21 Jun 2017 13:50:59 +0200
+User-Agent: Mutt/1.7.2 (2016-11-26)
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="------------A851F166D50529639139DD0B"
+
+This is a multi-part message in MIME format.
+--------------A851F166D50529639139DD0B
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: 7bit
+
+Some other text.
+
+--------------A851F166D50529639139DD0B
+Content-Type: application/pgp-keys;
+ name="0x7884B758.asc"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment;
+ filename="0x7884B758.asc"
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mI0EWUpapAEEANjx0Ii5vrHi1wVLdKZZbWvly3CV0WLGQvPwukF2Clz7O3uJZkhe
+9VYf0ZiBAAAAAAAAUly9AMbv9xfrNOimSQYRSafAGAQWlzteLQP78ZgLbdeV5CQg
+X9HYx/QBbcUHH9TErSQiRh9N6WS5kGtqDzeIuHfIpeRwubVPTXR4ZtNZABEBAAG0
+KVJTQSAxMDI0YiBleGFtcGxlIDxSU0EtMTAyNGJAZXhhbXBsZS5vcmc+iM4EEwEI
+ADgWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpapAIbAwULCQgHAgYVCAkKCwIE
+FgIDAQIeAQIXgAAKCRBH8QwIeIS3WG0CBACwcCVMZARiWJT+ZDmWAIEB8Ovq8CIH
+VwKD5JXcHBj4b5QRKHEWAAAAAAAAAAAAAAAAgIMUmefdCS+yRr1iQ7zMaGRgiYkb
+ye/lXpbikR9eu8E/B+IcBBBBBBBBBBBBBBBBvGxZ3rmoOXcPvNQ3Z4F41kQqKxBx
+HWkI3LH71RJp4biNBFlKCCCCCCCCCCCCCCCCAuchhNkvMnfb8TlKoc1t1lH94uno
+qoj3L5Srf3XSo1fmuEBNr1nc5BLyH0tPDJZyuVCypfY4en9uaGvWO0U4t/OUiIWq
+PjBmXbjZWDdGKksb0cQNy13cvE57EmirbuVcXCE0OdU8lcbopN2wnecKOxLKK9Pa
+LBZ69wARAQABiLYEGAEIACAWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpapAIb
+DAAKCRBH8QwIeIS3WA7BA/sG7Ifagq5Y8BdxWsl2Xc/d8iq+bgnMpGNcJUD2PlA5
+2KEfVbmtkULHcn5tS8prVAnU24ehT2BAAAAAAA4KkyVMnbCDuSyC112UL2WxWLWK
+O+MkK6C94GFr8JAm3sKXq4OSJ8+wPmTHJRN5yadV9hkHoVv+etnEnkJvV0o8aLEO
+anA==
+=4oxM
+-----END PGP PUBLIC KEY BLOCK-----
+
+--------------A851F166D50529639139DD0B--
diff --git a/src/mailman_pgp/pgp/tests/test_inline.py b/src/mailman_pgp/pgp/tests/test_inline.py
index e2fccb7..4009a4b 100644
--- a/src/mailman_pgp/pgp/tests/test_inline.py
+++ b/src/mailman_pgp/pgp/tests/test_inline.py
@@ -20,7 +20,7 @@
from parameterized import parameterized
from mailman_pgp.pgp.inline import InlineWrapper
-from mailman_pgp.pgp.tests.base import load_key, load_message, WrapperTestCase
+from mailman_pgp.testing.pgp import load_key, load_message, WrapperTestCase
class InlineWrapperTestCase(WrapperTestCase):
@@ -181,6 +181,10 @@ class TestKeys(InlineWrapperTestCase):
(load_message('clear_multipart.eml'),
False),
(load_message('inline_cleartext_signed.eml'),
+ False),
+ (load_message('inline_privkey_invalid.eml'),
+ False),
+ (load_message('inline_pubkey_invalid.eml'),
False)
])
def test_has_keys(self, message, has_keys):
@@ -190,7 +194,11 @@ class TestKeys(InlineWrapperTestCase):
(load_message('inline_privkey.eml'),
[load_key('rsa_1024.priv.asc')]),
(load_message('inline_pubkey.eml'),
- [load_key('rsa_1024.pub.asc')])
+ [load_key('rsa_1024.pub.asc')]),
+ (load_message('inline_privkey_invalid.eml'),
+ []),
+ (load_message('inline_pubkey_invalid.eml'),
+ [])
])
def test_keys(self, message, keys):
self.keys(message, keys)
diff --git a/src/mailman_pgp/pgp/tests/test_mime.py b/src/mailman_pgp/pgp/tests/test_mime.py
index 5d983b8..883e6ca 100644
--- a/src/mailman_pgp/pgp/tests/test_mime.py
+++ b/src/mailman_pgp/pgp/tests/test_mime.py
@@ -20,7 +20,7 @@
from parameterized import parameterized
from mailman_pgp.pgp.mime import MIMEWrapper
-from mailman_pgp.pgp.tests.base import load_key, load_message, WrapperTestCase
+from mailman_pgp.testing.pgp import load_key, load_message, WrapperTestCase
class MIMEWrapperTestCase(WrapperTestCase):
@@ -144,6 +144,10 @@ class TestKeys(MIMEWrapperTestCase):
True),
(load_message('mime_pubkey.eml'),
True),
+ (load_message('mime_privkey_invalid.eml'),
+ True),
+ (load_message('mime_pubkey_invalid.eml'),
+ True),
(load_message('clear.eml'),
False),
(load_message('mime_signed.eml'),
@@ -156,7 +160,11 @@ class TestKeys(MIMEWrapperTestCase):
(load_message('mime_privkey.eml'),
[load_key('rsa_1024.priv.asc')]),
(load_message('mime_pubkey.eml'),
- [load_key('rsa_1024.pub.asc')])
+ [load_key('rsa_1024.pub.asc')]),
+ (load_message('mime_privkey_invalid.eml'),
+ []),
+ (load_message('mime_pubkey_invalid.eml'),
+ [])
])
def test_keys(self, message, keys):
self.keys(message, keys)
diff --git a/src/mailman_pgp/pgp/tests/test_mime_multisig.py b/src/mailman_pgp/pgp/tests/test_mime_multisig.py
index 2c02a97..fe08e5b 100644
--- a/src/mailman_pgp/pgp/tests/test_mime_multisig.py
+++ b/src/mailman_pgp/pgp/tests/test_mime_multisig.py
@@ -19,7 +19,7 @@
from parameterized import parameterized
from mailman_pgp.pgp.mime_multisig import MIMEMultiSigWrapper
-from mailman_pgp.pgp.tests.base import load_key, load_message, WrapperTestCase
+from mailman_pgp.testing.pgp import load_key, load_message, WrapperTestCase
class MultiSigWrapperTestCase(WrapperTestCase):
diff --git a/src/mailman_pgp/pgp/tests/test_pgp.py b/src/mailman_pgp/pgp/tests/test_pgp.py
index 6ff674d..ab2a69a 100644
--- a/src/mailman_pgp/pgp/tests/test_pgp.py
+++ b/src/mailman_pgp/pgp/tests/test_pgp.py
@@ -25,8 +25,8 @@ from mailman_pgp.config import config
from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key
class TestPGP(TestCase):
diff --git a/src/mailman_pgp/pgp/tests/test_wrapper.py b/src/mailman_pgp/pgp/tests/test_wrapper.py
index ce206e7..eb096d3 100644
--- a/src/mailman_pgp/pgp/tests/test_wrapper.py
+++ b/src/mailman_pgp/pgp/tests/test_wrapper.py
@@ -18,8 +18,8 @@
"""Tests for the combined wrapper."""
from parameterized import parameterized
-from mailman_pgp.pgp.tests.base import load_key, load_message, WrapperTestCase
from mailman_pgp.pgp.wrapper import PGPWrapper
+from mailman_pgp.testing.pgp import load_key, load_message, WrapperTestCase
class PGPWrapperTestCase(WrapperTestCase):
diff --git a/src/mailman_pgp/rest/tests/test_lists.py b/src/mailman_pgp/rest/tests/test_lists.py
index 6509c04..381d4ac 100644
--- a/src/mailman_pgp/rest/tests/test_lists.py
+++ b/src/mailman_pgp/rest/tests/test_lists.py
@@ -26,8 +26,8 @@ from pgpy import PGPKey
from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.list import PGPMailingList
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.testing.layers import PGPRESTLayer
+from mailman_pgp.testing.pgp import load_key
class TestLists(TestCase):
diff --git a/src/mailman_pgp/rules/tests/test_signature.py b/src/mailman_pgp/rules/tests/test_signature.py
index 24cb5e9..c6bcb16 100644
--- a/src/mailman_pgp/rules/tests/test_signature.py
+++ b/src/mailman_pgp/rules/tests/test_signature.py
@@ -34,10 +34,10 @@ from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
from mailman_pgp.model.sighash import PGPSigHash
-from mailman_pgp.pgp.tests.base import load_key, load_message
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.rules.signature import Signature
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key, load_message
from mailman_pgp.utils.pgp import hashes
diff --git a/src/mailman_pgp/runners/tests/test_incoming.py b/src/mailman_pgp/runners/tests/test_incoming.py
index be82c61..b03f149 100644
--- a/src/mailman_pgp/runners/tests/test_incoming.py
+++ b/src/mailman_pgp/runners/tests/test_incoming.py
@@ -29,10 +29,10 @@ from mailman_pgp.config import mm_config
from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
-from mailman_pgp.pgp.tests.base import load_key, load_message
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.runners.incoming import PGPIncomingRunner
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key, load_message
class TestPGPIncomingRunner(TestCase):
diff --git a/src/mailman_pgp/pgp/tests/base.py b/src/mailman_pgp/testing/pgp.py
index e16c95e..e16c95e 100644
--- a/src/mailman_pgp/pgp/tests/base.py
+++ b/src/mailman_pgp/testing/pgp.py
diff --git a/src/mailman_pgp/workflows/tests/test_base.py b/src/mailman_pgp/workflows/tests/test_base.py
index 109ece2..31b3d05 100644
--- a/src/mailman_pgp/workflows/tests/test_base.py
+++ b/src/mailman_pgp/workflows/tests/test_base.py
@@ -33,9 +33,9 @@ from zope.interface import implementer
from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key
from mailman_pgp.workflows.base import (PGPMixin)
from mailman_pgp.workflows.pubkey import (ConfirmPubkeyMixin, KEY_REQUEST,
SetPubkeyMixin)
diff --git a/src/mailman_pgp/workflows/tests/test_key_change.py b/src/mailman_pgp/workflows/tests/test_key_change.py
index 8efeb58..e469d51 100644
--- a/src/mailman_pgp/workflows/tests/test_key_change.py
+++ b/src/mailman_pgp/workflows/tests/test_key_change.py
@@ -28,9 +28,9 @@ from zope.component import getUtility
from mailman_pgp.database import mm_transaction, transaction
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
-from mailman_pgp.pgp.tests.base import load_key
from mailman_pgp.pgp.wrapper import PGPWrapper
from mailman_pgp.testing.layers import PGPConfigLayer
+from mailman_pgp.testing.pgp import load_key
from mailman_pgp.workflows.key_change import KeyChangeWorkflow