aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mailman_pgp/pgp/inline.py22
-rw-r--r--src/mailman_pgp/pgp/tests/base.py18
-rw-r--r--src/mailman_pgp/pgp/tests/data/inline_cleartext_signed.eml24
-rw-r--r--src/mailman_pgp/pgp/tests/data/inline_cleartext_signed_invalid.eml (renamed from src/mailman_pgp/pgp/tests/data/inline_signed_invalid.eml)0
-rw-r--r--src/mailman_pgp/pgp/tests/data/inline_signed.eml22
-rw-r--r--src/mailman_pgp/pgp/tests/data/inline_signed_corrupted.eml20
-rw-r--r--src/mailman_pgp/pgp/tests/test_inline.py26
-rw-r--r--src/mailman_pgp/pgp/tests/test_wrapper.py20
8 files changed, 118 insertions, 34 deletions
diff --git a/src/mailman_pgp/pgp/inline.py b/src/mailman_pgp/pgp/inline.py
index a8e8004..94091cc 100644
--- a/src/mailman_pgp/pgp/inline.py
+++ b/src/mailman_pgp/pgp/inline.py
@@ -41,6 +41,22 @@ class InlineWrapper:
def _as_string(self):
return str(self.msg.get_payload())
+ def _has_signature(self):
+ try:
+ msg = PGPMessage.from_blob(self._as_string())
+ return msg.is_signed
+ except:
+ pass
+ return False
+
+ def _has_message(self):
+ try:
+ msg = PGPMessage.from_blob(self._as_string())
+ return msg.is_encrypted
+ except:
+ pass
+ return False
+
def _has_armor(self, block_type):
try:
dearm = Armorable.ascii_unarmor(self._as_string())
@@ -57,8 +73,7 @@ class InlineWrapper:
:return: If the message is inline signed.
:rtype: bool
"""
- # XXX: This doesnt handle non-cleartext signatures (gpg -s -a)
- return self._is_inline() and self._has_armor('SIGNATURE')
+ return self._is_inline() and self._has_signature()
def is_encrypted(self):
"""
@@ -67,8 +82,7 @@ class InlineWrapper:
:return: If the message is inline encrypted.
:rtype: bool
"""
- # XXX: This mistakes non-cleartext signature as encrypted.
- return self._is_inline() and self._has_armor('MESSAGE')
+ return self._is_inline() and self._has_message()
def has_keys(self):
"""
diff --git a/src/mailman_pgp/pgp/tests/base.py b/src/mailman_pgp/pgp/tests/base.py
index b07fdf9..d64116d 100644
--- a/src/mailman_pgp/pgp/tests/base.py
+++ b/src/mailman_pgp/pgp/tests/base.py
@@ -43,7 +43,12 @@ class WrapperTestCase(unittest.TestCase):
def verify(self, message, key, valid):
wrapped = self.wrapper(message)
- self.assertEqual(bool(wrapped.verify(key)), valid)
+ verified = False
+ try:
+ verified = bool(wrapped.verify(key))
+ except:
+ pass
+ self.assertEqual(verified, valid)
def is_encrypted(self, message, encrypted):
wrapped = self.wrapper(message)
@@ -51,8 +56,12 @@ class WrapperTestCase(unittest.TestCase):
def decrypt(self, message, key, clear):
wrapped = self.wrapper(message)
- self.assertEqual(wrapped.decrypt(key).message,
- bytearray(clear, 'latin-1'))
+ decrypted = None
+ try:
+ decrypted = wrapped.decrypt(key).message
+ except:
+ pass
+ self.assertEqual(decrypted, bytearray(clear, 'latin-1'))
def has_keys(self, message, has_keys):
wrapped = self.wrapper(message)
@@ -61,9 +70,8 @@ class WrapperTestCase(unittest.TestCase):
def keys(self, message, keys):
wrapped = self.wrapper(message)
loaded = list(wrapped.keys())
- loaded_fingerprints = list(map(lambda key: key.fingerprint, loaded))
-
self.assertEqual(len(loaded), len(keys))
+ loaded_fingerprints = list(map(lambda key: key.fingerprint, loaded))
fingerprints = list(map(lambda key: key.fingerprint, keys))
self.assertListEqual(loaded_fingerprints, fingerprints)
diff --git a/src/mailman_pgp/pgp/tests/data/inline_cleartext_signed.eml b/src/mailman_pgp/pgp/tests/data/inline_cleartext_signed.eml
new file mode 100644
index 0000000..cb6d40c
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/inline_cleartext_signed.eml
@@ -0,0 +1,24 @@
+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 SIGNED MESSAGE-----
+Hash: SHA256
+
+Some signed text.
+
+-----BEGIN PGP SIGNATURE-----
+
+iMoEAQEIADQWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUqdqRYccnNhLTEwMjRi
+QGV4YW1wbGUub3JnAAoJEEfxDAh4hLdYyRsEANGjr5E3Th1n6EUQEye4YBjlOFq6
+aiiSu+4K4O08yHQ5h1vqBkT2gCmcPpQOThNBRazdSYRvIPNLTyMy6ChhaeWzsmR0
+CIN/YYUC9mAh5XOF+tjaJTSlmBBhuJmayW1D8qysZVg3TmD+fXw+JImrhZW/g0Fi
+4B1oU+uBh6VAZZjJ
+=QecT
+-----END PGP SIGNATURE-----
diff --git a/src/mailman_pgp/pgp/tests/data/inline_signed_invalid.eml b/src/mailman_pgp/pgp/tests/data/inline_cleartext_signed_invalid.eml
index c7d9b03..c7d9b03 100644
--- a/src/mailman_pgp/pgp/tests/data/inline_signed_invalid.eml
+++ b/src/mailman_pgp/pgp/tests/data/inline_cleartext_signed_invalid.eml
diff --git a/src/mailman_pgp/pgp/tests/data/inline_signed.eml b/src/mailman_pgp/pgp/tests/data/inline_signed.eml
index cb6d40c..f8adc02 100644
--- a/src/mailman_pgp/pgp/tests/data/inline_signed.eml
+++ b/src/mailman_pgp/pgp/tests/data/inline_signed.eml
@@ -8,17 +8,13 @@ MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
+-----BEGIN PGP MESSAGE-----
-Some signed text.
-
------BEGIN PGP SIGNATURE-----
-
-iMoEAQEIADQWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUqdqRYccnNhLTEwMjRi
-QGV4YW1wbGUub3JnAAoJEEfxDAh4hLdYyRsEANGjr5E3Th1n6EUQEye4YBjlOFq6
-aiiSu+4K4O08yHQ5h1vqBkT2gCmcPpQOThNBRazdSYRvIPNLTyMy6ChhaeWzsmR0
-CIN/YYUC9mAh5XOF+tjaJTSlmBBhuJmayW1D8qysZVg3TmD+fXw+JImrhZW/g0Fi
-4B1oU+uBh6VAZZjJ
-=QecT
------END PGP SIGNATURE-----
+owGbwMvMyMHo/pGHo6JlewTjackShkifww7B+bmpCsWZ6XmpKQolqRUlerxcHadY
+GBk5GEzEFFmurPRo23hKYdoy174YmFZWJpA+MZmi4kRdQwMjkySH1IrE3IKcVL38
+onQGLk4BmEI7fRaGc493KbduNVhXdJ2xkTXCu+Hdj4B495MLzmn5c+6yVl/9Jluw
+ckr44WOlYbsjuj/LtTnpiC54/Pho+a8AFo7YFU/efJp/LqbBc+uFmhUMPdzlv1+U
+F+1/tvH/hrr/8wWPi13qSHkjceh1dT2z8ZWdvmbL5zPeu79flUVWVn+25dGOY8dP
+yzJtAwA=
+=jjlW
+-----END PGP MESSAGE-----
diff --git a/src/mailman_pgp/pgp/tests/data/inline_signed_corrupted.eml b/src/mailman_pgp/pgp/tests/data/inline_signed_corrupted.eml
new file mode 100644
index 0000000..bd732fc
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/inline_signed_corrupted.eml
@@ -0,0 +1,20 @@
+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 MESSAGE-----
+
+owGbwMvxyMHo/pGHo6JlewTjackShkifww7B+bmpCsWZ6XmpKQolqRUlerxcHadY
+GBk5GEzEFFmurPRoaahKYdoy174YmFZWJpA+MZmi4kRdQwMjkySH1IrE3IKcVL38
+onQGLk4BmEI7fRaGc493KbduNVhXdJ2xkTXCu+fdj4B495MLzmn5c+6yVl/9Jluw
+ckr44WOlYbsjuk/LtTnpiC54/Pho+a8AFo7YFU/efJp/LqbBc+uFmhUMPdzlv1+U
+F+1/tvH/hrr/8wWPi13qSHkjceh1dT2z8ZWdvmbL5zPeu79flUVWVn+25dGOY8dP
+yzJtAwA=
+=jjlW
+-----END PGP MESSAGE-----
diff --git a/src/mailman_pgp/pgp/tests/test_inline.py b/src/mailman_pgp/pgp/tests/test_inline.py
index b6d84ec..d347c6a 100644
--- a/src/mailman_pgp/pgp/tests/test_inline.py
+++ b/src/mailman_pgp/pgp/tests/test_inline.py
@@ -29,10 +29,14 @@ class InlineWrapperTestCase(WrapperTestCase):
class TestSigning(InlineWrapperTestCase):
@parameterized.expand([
- (load_message('data/inline_signed.eml'),
+ (load_message('data/inline_cleartext_signed.eml'),
+ True),
+ (load_message('data/inline_cleartext_signed_invalid.eml'),
True),
- (load_message('data/inline_signed_invalid.eml'),
+ (load_message('data/inline_signed.eml'),
True),
+ (load_message('data/inline_signed_corrupted.eml'),
+ False),
(load_message('data/clear.eml'),
False),
(load_message('data/inline_encrypted.eml'),
@@ -45,12 +49,18 @@ class TestSigning(InlineWrapperTestCase):
pass
@parameterized.expand([
+ (load_message('data/inline_cleartext_signed.eml'),
+ load_key('data/rsa_1024.pub.asc'),
+ True),
+ (load_message('data/inline_cleartext_signed_invalid.eml'),
+ load_key('data/rsa_1024.pub.asc'),
+ False),
(load_message('data/inline_signed.eml'),
load_key('data/rsa_1024.pub.asc'),
True),
- (load_message('data/inline_signed_invalid.eml'),
+ (load_message('data/inline_signed_corrupted.eml'),
load_key('data/rsa_1024.pub.asc'),
- False)
+ False),
])
def test_verify(self, message, key, valid):
super().verify(message, key, valid)
@@ -60,9 +70,13 @@ class TestEncryption(InlineWrapperTestCase):
@parameterized.expand([
(load_message('data/inline_encrypted.eml'),
True),
+ (load_message('data/inline_cleartext_signed.eml'),
+ False),
+ (load_message('data/inline_cleartext_signed_invalid.eml'),
+ False),
(load_message('data/inline_signed.eml'),
False),
- (load_message('data/inline_signed_invalid.eml'),
+ (load_message('data/inline_signed_corrupted.eml'),
False),
(load_message('data/clear.eml'),
False)
@@ -90,7 +104,7 @@ class TestKeys(InlineWrapperTestCase):
True),
(load_message('data/clear.eml'),
False),
- (load_message('data/inline_signed.eml'),
+ (load_message('data/inline_cleartext_signed.eml'),
False)
])
def test_has_keys(self, message, has_keys):
diff --git a/src/mailman_pgp/pgp/tests/test_wrapper.py b/src/mailman_pgp/pgp/tests/test_wrapper.py
index 256d7d1..c16152f 100644
--- a/src/mailman_pgp/pgp/tests/test_wrapper.py
+++ b/src/mailman_pgp/pgp/tests/test_wrapper.py
@@ -28,12 +28,16 @@ class PGPWrapperTestCase(WrapperTestCase):
class TestSigning(PGPWrapperTestCase):
@parameterized.expand([
- (load_message('data/inline_signed.eml'),
+ (load_message('data/inline_cleartext_signed.eml'),
True),
- (load_message('data/inline_signed_invalid.eml'),
+ (load_message('data/inline_cleartext_signed_invalid.eml'),
True),
(load_message('data/inline_encrypted.eml'),
False),
+ (load_message('data/inline_signed.eml'),
+ True),
+ (load_message('data/inline_signed_corrupted.eml'),
+ False),
(load_message('data/mime_signed.eml'),
True),
(load_message('data/mime_signed_invalid.eml'),
@@ -48,10 +52,10 @@ class TestSigning(PGPWrapperTestCase):
pass
@parameterized.expand([
- (load_message('data/inline_signed.eml'),
+ (load_message('data/inline_cleartext_signed.eml'),
load_key('data/rsa_1024.pub.asc'),
True),
- (load_message('data/inline_signed_invalid.eml'),
+ (load_message('data/inline_cleartext_signed_invalid.eml'),
load_key('data/rsa_1024.pub.asc'),
False),
(load_message('data/mime_signed.eml'),
@@ -69,9 +73,13 @@ class TestEncryption(PGPWrapperTestCase):
@parameterized.expand([
(load_message('data/inline_encrypted.eml'),
True),
+ (load_message('data/inline_cleartext_signed.eml'),
+ False),
+ (load_message('data/inline_cleartext_signed_invalid.eml'),
+ False),
(load_message('data/inline_signed.eml'),
False),
- (load_message('data/inline_signed_invalid.eml'),
+ (load_message('data/inline_signed_corrupted.eml'),
False),
(load_message('data/clear.eml'),
False)
@@ -97,7 +105,7 @@ class TestKeys(PGPWrapperTestCase):
True),
(load_message('data/inline_pubkey.eml'),
True),
- (load_message('data/inline_signed.eml'),
+ (load_message('data/inline_cleartext_signed.eml'),
False),
(load_message('data/mime_privkey.eml'),
True),