diff options
| -rw-r--r-- | src/mailman_pgp/pgp/inline.py | 22 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/base.py | 18 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/data/inline_cleartext_signed.eml | 24 | ||||
| -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.eml | 22 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/data/inline_signed_corrupted.eml | 20 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/test_inline.py | 26 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/test_wrapper.py | 20 |
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), |
