aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJ08nY2017-06-21 14:27:26 +0200
committerJ08nY2017-06-21 14:27:26 +0200
commitb7de98b7eb78087107bd0f264e07f3729f10ff49 (patch)
tree34bc68c6bc2fb63129700432391b825a1604a58b /src
parent13877fb280bc9b7ec2ab29695d4ff71d0f791e98 (diff)
downloadmailman-pgp-b7de98b7eb78087107bd0f264e07f3729f10ff49.tar.gz
mailman-pgp-b7de98b7eb78087107bd0f264e07f3729f10ff49.tar.zst
mailman-pgp-b7de98b7eb78087107bd0f264e07f3729f10ff49.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman_pgp/pgp/mime.py10
-rw-r--r--src/mailman_pgp/pgp/tests/__init__.py0
-rw-r--r--src/mailman_pgp/pgp/tests/data/mime_signed.eml45
-rw-r--r--src/mailman_pgp/pgp/tests/data/mime_signed_invalid.eml45
-rw-r--r--src/mailman_pgp/pgp/tests/data/rsa_1024.priv.asc33
-rw-r--r--src/mailman_pgp/pgp/tests/data/rsa_1024.pub.asc20
-rw-r--r--src/mailman_pgp/pgp/tests/test_mime.py66
7 files changed, 217 insertions, 2 deletions
diff --git a/src/mailman_pgp/pgp/mime.py b/src/mailman_pgp/pgp/mime.py
index 5641a34..f064a40 100644
--- a/src/mailman_pgp/pgp/mime.py
+++ b/src/mailman_pgp/pgp/mime.py
@@ -58,7 +58,7 @@ class MIMEWrapper:
"""
if not self._is_mime():
return False
- first_part = str(self.msg.get_payload(0))
+ first_part = self.msg.get_payload(0).as_string()
first_type = self.msg.get_payload(0).get_content_type()
second_type = self.msg.get_payload(1).get_content_type()
content_subtype = self.msg.get_content_subtype()
@@ -77,11 +77,14 @@ class MIMEWrapper:
:param key:
:return:
"""
- clear_text = str(self.msg.get_payload(0))
+ clear_text = self.msg.get_payload(0).as_string()
sig_text = self.msg.get_payload(1).get_payload()
signature = PGPSignature.from_blob(sig_text)
return key.verify(clear_text, signature)
+ def sign(self):
+ pass
+
def decrypt(self, key: PGPKey):
"""
@@ -91,3 +94,6 @@ class MIMEWrapper:
msg_text = self.msg.get_payload(1).get_payload()
msg = PGPMessage.from_blob(msg_text)
return key.decrypt(msg)
+
+ def encrypt(self):
+ pass
diff --git a/src/mailman_pgp/pgp/tests/__init__.py b/src/mailman_pgp/pgp/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/__init__.py
diff --git a/src/mailman_pgp/pgp/tests/data/mime_signed.eml b/src/mailman_pgp/pgp/tests/data/mime_signed.eml
new file mode 100644
index 0000000..c81ecf5
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/mime_signed.eml
@@ -0,0 +1,45 @@
+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/signed; micalg=pgp-sha256;
+ protocol="application/pgp-signature";
+ boundary="haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj"
+
+This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
+--haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj
+Content-Type: multipart/mixed; boundary="A8WMQ249PdQmpiQhW1ELOnL2UctI16T1g";
+ protected-headers="v1"
+From: RSA 1024b example <RSA-1024b@example.org>
+To: nobody@example.org
+Message-ID: <76a591ed-bfc4-d08b-73d3-fc2489148fd7@example.org>
+Subject: Some subject.
+
+--A8WMQ249PdQmpiQhW1ELOnL2UctI16T1g
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+Some signed text.
+
+
+--A8WMQ249PdQmpiQhW1ELOnL2UctI16T1g--
+
+--haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: OpenPGP digital signature
+Content-Disposition: attachment; filename="signature.asc"
+
+-----BEGIN PGP SIGNATURE-----
+
+iMoEAQEIADQWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpjIBYccnNhLTEwMjRi
+QGV4YW1wbGUub3JnAAoJEEfxDAh4hLdYb8wD/0AlaGxAhVGQqrXBuVXSDm4c49VI
+6+DG8cMOCZEin6P96hrLbs4SAm61xivJHPueIRRQ1PfWTcElPn97WuQ48e+/5hhw
+CZevF5CmyODGfriC78LwLRRvq2nF5n9iRww0lINPDyqrBr3mdY8QG+s8qBkTi7IG
+dBBQH0jA6p2OJV72
+=1tln
+-----END PGP SIGNATURE-----
+
+--haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj--
diff --git a/src/mailman_pgp/pgp/tests/data/mime_signed_invalid.eml b/src/mailman_pgp/pgp/tests/data/mime_signed_invalid.eml
new file mode 100644
index 0000000..5e86842
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/mime_signed_invalid.eml
@@ -0,0 +1,45 @@
+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/signed; micalg=pgp-sha256;
+ protocol="application/pgp-signature";
+ boundary="haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj"
+
+This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
+--haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj
+Content-Type: multipart/mixed; boundary="A8WMQ249PdQmpiQhW1ELOnL2UctI16T1g";
+ protected-headers="v1"
+From: RSA 1024b example <RSA-1024b@example.org>
+To: nobody@example.org
+Message-ID: <76a591ed-bfc4-d08b-73d3-fc2489148fd7@example.org>
+Subject: Some subject.
+
+--A8WMQ249PdQmpiQhW1ELOnL2UctI16T1g
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+Some signed text. With some INVALID text added!!
+
+
+--A8WMQ249PdQmpiQhW1ELOnL2UctI16T1g--
+
+--haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: OpenPGP digital signature
+Content-Disposition: attachment; filename="signature.asc"
+
+-----BEGIN PGP SIGNATURE-----
+
+iMoEAQEIADQWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpjIBYccnNhLTEwMjRi
+QGV4YW1wbGUub3JnAAoJEEfxDAh4hLdYb8wD/0AlaGxAhVGQqrXBuVXSDm4c49VI
+6+DG8cMOCZEin6P96hrLbs4SAm61xivJHPueIRRQ1PfWTcElPn97WuQ48e+/5hhw
+CZevF5CmyODGfriC78LwLRRvq2nF5n9iRww0lINPDyqrBr3mdY8QG+s8qBkTi7IG
+dBBQH0jA6p2OJV72
+=1tln
+-----END PGP SIGNATURE-----
+
+--haWP9JQ7TiajUxWjooGlinHgq3IhJGnaj--
diff --git a/src/mailman_pgp/pgp/tests/data/rsa_1024.priv.asc b/src/mailman_pgp/pgp/tests/data/rsa_1024.priv.asc
new file mode 100644
index 0000000..e8f4c12
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/rsa_1024.priv.asc
@@ -0,0 +1,33 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQHYBFlKWqQBBADY8dCIub6x4tcFS3SmWW1r5ctwldFixkLz8LpBdgpc+zt7iWZI
+XvVWH9GYgTzgE+qEAVJcvQDG7/cX6zTopkkGEUmnwBgEFpc7Xi0D+/GYC23XleQk
+IF/R2Mf0AW3FBx/UxK0kIkYfTelkuZBrag83iLh3yKXkcLm1T010eGbTWQARAQAB
+AAP/ayABKrqZrQpHxfAMEmZ/TzPCIP6BzeX7wqxAtLlehapzJV3kGWF2gQgmPcm3
+byi2eWeTrYKQwytUVsXIswcFcCY1Fv6NkntMSqc6VJzGhvjKE9CTNJmgSjHlILMW
+Ma/9TzhxH2DT9tNMgOEN3+FoKRqjlLrhO/OiXqYZJdkXU+8CAOQin6DGnn+qvjlN
+5zw1GIpmWBt9b1S/WEqKaG1t4D/V0m0pAJBqeUbSC6MonQLA9pmIK/LbetUKRwM/
+xLNRMs8CAPNxR4NY73YIfSnlGRPdZHmOq4wMtqXYtoN1qZruHcXsrojcKHV72n8y
+Hb3R+LEKVjky95RKeKGowousIhGYQVcCAKsWtTWQA/VMW2V+ydzFHZHN0xwC9eTc
+uhs7G1qAqJR2POCq/0Cr3W4nXnbYSAr9wHal/YUuIKr54vNbPlXp6xqf/rQpUlNB
+IDEwMjRiIGV4YW1wbGUgPFJTQS0xMDI0YkBleGFtcGxlLm9yZz6IzgQTAQgAOBYh
+BNSpSIaxyiCWpkWOXEfxDAh4hLdYBQJZSlqkAhsDBQsJCAcCBhUICQoLAgQWAgMB
+Ah4BAheAAAoJEEfxDAh4hLdYbQIEALBwJUxkBGJYlP5kOZYAgQHw6+rwIgdXAoPk
+ldwcGPhvlBEocRYx+5KUYrx7W352dv+AgxSZ590JL7JGvWJDvMxoZGCJiRvJ7+Ve
+luKRH167wT8H4hxftBJqzorTU4eyPzG8bFneuag5dw+81DdngXjWRCorEHEdaQjc
+sfvVEmnhnQHYBFlKWqQBBADXLjeg+K0ZAuchhNkvMnfb8TlKoc1t1lH94unoqoj3
+L5Srf3XSo1fmuEBNr1nc5BLyH0tPDJZyuVCypfY4en9uaGvWO0U4t/OUiIWqPjBm
+XbjZWDdGKksb0cQNy13cvE57EmirbuVcXCE0OdU8lcbopN2wnecKOxLKK9PaLBZ6
+9wARAQABAAP+NyRiYA9p+GdciKPtLiGeQpA6EMyPAs8x2sB8FcIh8EpSrHIw5OYz
+/+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+CpMlTJ2wg7ksgtddlC9lsVi1ijvjJCugveBh
+a/CQJt7Cl6uDkifPsD5kxyUTecmnVfYZB6Fb/nrZxJ5Cb1dKPGixDpw=
+=e2xw
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/src/mailman_pgp/pgp/tests/data/rsa_1024.pub.asc b/src/mailman_pgp/pgp/tests/data/rsa_1024.pub.asc
new file mode 100644
index 0000000..5bc0d34
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/rsa_1024.pub.asc
@@ -0,0 +1,20 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mI0EWUpapAEEANjx0Ii5vrHi1wVLdKZZbWvly3CV0WLGQvPwukF2Clz7O3uJZkhe
+9VYf0ZiBPOAT6oQBUly9AMbv9xfrNOimSQYRSafAGAQWlzteLQP78ZgLbdeV5CQg
+X9HYx/QBbcUHH9TErSQiRh9N6WS5kGtqDzeIuHfIpeRwubVPTXR4ZtNZABEBAAG0
+KVJTQSAxMDI0YiBleGFtcGxlIDxSU0EtMTAyNGJAZXhhbXBsZS5vcmc+iM4EEwEI
+ADgWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpapAIbAwULCQgHAgYVCAkKCwIE
+FgIDAQIeAQIXgAAKCRBH8QwIeIS3WG0CBACwcCVMZARiWJT+ZDmWAIEB8Ovq8CIH
+VwKD5JXcHBj4b5QRKHEWMfuSlGK8e1t+dnb/gIMUmefdCS+yRr1iQ7zMaGRgiYkb
+ye/lXpbikR9eu8E/B+IcX7QSas6K01OHsj8xvGxZ3rmoOXcPvNQ3Z4F41kQqKxBx
+HWkI3LH71RJp4biNBFlKWqQBBADXLjeg+K0ZAuchhNkvMnfb8TlKoc1t1lH94uno
+qoj3L5Srf3XSo1fmuEBNr1nc5BLyH0tPDJZyuVCypfY4en9uaGvWO0U4t/OUiIWq
+PjBmXbjZWDdGKksb0cQNy13cvE57EmirbuVcXCE0OdU8lcbopN2wnecKOxLKK9Pa
+LBZ69wARAQABiLYEGAEIACAWIQTUqUiGscoglqZFjlxH8QwIeIS3WAUCWUpapAIb
+DAAKCRBH8QwIeIS3WA7BA/sG7Ifagq5Y8BdxWsl2Xc/d8iq+bgnMpGNcJUD2PlA5
+2KEfVbmtkULHcn5tS8prVAnU24ehT2Bi9HY0+z4KkyVMnbCDuSyC112UL2WxWLWK
+O+MkK6C94GFr8JAm3sKXq4OSJ8+wPmTHJRN5yadV9hkHoVv+etnEnkJvV0o8aLEO
+nA==
+=4olM
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/src/mailman_pgp/pgp/tests/test_mime.py b/src/mailman_pgp/pgp/tests/test_mime.py
new file mode 100644
index 0000000..981259c
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/test_mime.py
@@ -0,0 +1,66 @@
+# Copyright (C) 2017 Jan Jancar
+#
+# This file is a part of the Mailman PGP plugin.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program. If not, see <http://www.gnu.org/licenses/>.
+
+""""""
+import unittest
+from email import message_from_file
+
+from pgpy import PGPKey
+from pkg_resources import resource_filename
+
+from mailman_pgp.pgp.mime import MIMEWrapper
+
+
+class TestSigning(unittest.TestCase):
+ def setUp(self):
+ with open(resource_filename('mailman_pgp.pgp.tests',
+ 'data/mime_signed.eml')) as f:
+ self.signed = message_from_file(f)
+ with open(resource_filename('mailman_pgp.pgp.tests',
+ 'data/mime_signed_invalid.eml')) as f:
+ self.signed_invalid = message_from_file(f)
+
+ self.pub, _ = PGPKey.from_file(
+ resource_filename('mailman_pgp.pgp.tests',
+ 'data/rsa_1024.pub.asc'))
+ self.priv, _ = PGPKey.from_file(
+ resource_filename('mailman_pgp.pgp.tests',
+ 'data/rsa_1024.priv.asc'))
+ self.wrapped = MIMEWrapper(self.signed)
+ self.wrapped_invalid = MIMEWrapper(self.signed_invalid)
+
+ def test_is_signed(self):
+ self.assertTrue(self.wrapped.is_signed())
+ self.assertTrue(self.wrapped_invalid.is_signed())
+
+ def test_sign(self):
+ pass
+
+ def test_verify(self):
+ self.assertTrue(self.wrapped.verify(self.pub))
+ self.assertFalse(self.wrapped_invalid.verify(self.pub))
+
+
+class TestEncryption(unittest.TestCase):
+ def test_is_encrypted(self):
+ pass
+
+ def test_encrypt(self):
+ pass
+
+ def test_decrypt(self):
+ pass