aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mailman_pgp/pgp/tests/base.py15
-rw-r--r--src/mailman_pgp/pgp/tests/data/mime_encrypted_signed.eml42
-rw-r--r--src/mailman_pgp/pgp/tests/test_mime.py10
-rw-r--r--src/mailman_pgp/pgp/wrapper.py10
4 files changed, 75 insertions, 2 deletions
diff --git a/src/mailman_pgp/pgp/tests/base.py b/src/mailman_pgp/pgp/tests/base.py
index 5f132e7..4b1e0c2 100644
--- a/src/mailman_pgp/pgp/tests/base.py
+++ b/src/mailman_pgp/pgp/tests/base.py
@@ -101,3 +101,18 @@ class WrapperTestCase(TestCase):
loaded_fingerprints = list(map(lambda key: key.fingerprint, loaded))
fingerprints = list(map(lambda key: key.fingerprint, keys))
self.assertListEqual(loaded_fingerprints, fingerprints)
+
+ def sign_encrypt_decrypt_verify(self, message, sign_key, encrypt_key):
+ wrapped = self.wrapper(message)
+ encrypted = wrapped.sign_encrypt(sign_key, encrypt_key.pubkey)
+ encrypted_wrapped = self.wrapper(encrypted)
+ self.assertTrue(encrypted_wrapped.is_encrypted())
+
+ decrypted = encrypted_wrapped.decrypt(encrypt_key)
+ decrypted_wrapped = self.wrapper(decrypted)
+ self.assertTrue(decrypted_wrapped.is_signed())
+ self.assertFalse(decrypted_wrapped.is_encrypted())
+
+ verification = decrypted_wrapped.verify(sign_key.pubkey)
+ for sig in verification:
+ self.assertTrue(bool(sig))
diff --git a/src/mailman_pgp/pgp/tests/data/mime_encrypted_signed.eml b/src/mailman_pgp/pgp/tests/data/mime_encrypted_signed.eml
new file mode 100644
index 0000000..57a6afd
--- /dev/null
+++ b/src/mailman_pgp/pgp/tests/data/mime_encrypted_signed.eml
@@ -0,0 +1,42 @@
+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/encrypted; protocol="application/pgp-encrypted";
+ boundary="abjqkjsfwqsfa546qw2wfq6sdq2sqwr56qqs"
+
+This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
+--abjqkjsfwqsfa546qw2wfq6sdq2sqwr56qqs
+Content-Type: application/pgp-encrypted
+Content-Description: PGP/MIME version identification
+
+Version: 1
+
+--abjqkjsfwqsfa546qw2wfq6sdq2sqwr56qqs
+Content-Type: application/octet-stream; name="encrypted.asc"
+Content-Description: OpenPGP encrypted message
+Content-Disposition: inline; filename="encrypted.asc"
+
+-----BEGIN PGP MESSAGE-----
+
+hIwD9aW4UkhFqMoBBACwoGB7sVXIpfsLlkNyVSzoRsXCiD2fs0z8xHiZGWEAR0OB
+vwld+2U1HA+ayegmNA62EQ+D41nhK9Gaq8dC7/yTQT0Kf9jVnzd4K83oiq4zakL4
+BUn9w0gBjCu1GeigXrPIK3v4g+8sdabwmISDEFPmLaFqDCLi01t3/Khe7MrdVdLp
+AY2Tnh4U/jzZtUxBvBItwBGmOBhATxA2Ql+MuvHsvZdn8G8Wbep0DlaujaCdAcI4
+t61uT35u6X69Ab8jnC2eCtCT4fr17zNQH54K2znn5lpRbOVLPCuF85dAX1LoxjuX
+7ZigsV1ksx8MjsJD6QEFMBjBzNzM9wsSgHjKQqgFrRHqMq0tMxGyT9Arm4nx3c5u
+A/L0GsOyCmSPF0YHnpZyN4HIAO7Eg64B6zT52DsTygyXGibv972nGQacXF3SL/Mw
+MBvB2jfaxHpBaKNaRDhz4Y7q0Fsv9mKy6PZt0X38kp17lBuJ5f78Z676MEKBGJiM
+qdmjXz8Av1ByhojbM9vSh7CJONGiDN27sQ7HZbbOiXJqvPJcC1CHfirHUzOBqJXy
+7e1R+cJqoq1I1A21hcbZS8PccbfRtMKIG4fMTezl1Z9NYoThnr0tMSwucNIR1RyA
+MGMDsEJe0KeWKPnGeErEDm7ypekCLOEcpPcvyT/VumkFXOdUwz+gRz6b179aQGJu
+oOVin/fFKL2ZXIGDGL0aHF6ICmPRS45i0qhNVRuXgN8P5ThLYwXYVx1veOIco29I
+IO038WTH4ddPauIpklAyPKTV5hGtlh+SRUSGZpfwqJcHyqi1MrkGv0wQj183QgHX
+nDTM6AVZfv49FceJVLyOMZsHujo3C3TU/PqYa4/sHoUBgw==
+=rZHH
+-----END PGP MESSAGE-----
+
+--abjqkjsfwqsfa546qw2wfq6sdq2sqwr56qqs-- \ No newline at end of file
diff --git a/src/mailman_pgp/pgp/tests/test_mime.py b/src/mailman_pgp/pgp/tests/test_mime.py
index a3549a4..7243e06 100644
--- a/src/mailman_pgp/pgp/tests/test_mime.py
+++ b/src/mailman_pgp/pgp/tests/test_mime.py
@@ -136,3 +136,13 @@ class TestKeys(MIMEWrapperTestCase):
])
def test_keys(self, message, keys):
super().keys(message, keys)
+
+
+class TestCombined(MIMEWrapperTestCase):
+ @parameterized.expand([
+ (load_message('data/clear.eml'),
+ load_key('data/rsa_1024.priv.asc'),
+ load_key('data/ecc_p256.priv.asc'))
+ ])
+ def test_sign_encrypt_decrypt_verify(self, message, sign_key, encrypt_key):
+ super().sign_encrypt_decrypt_verify(message, sign_key, encrypt_key)
diff --git a/src/mailman_pgp/pgp/wrapper.py b/src/mailman_pgp/pgp/wrapper.py
index 94bd7cd..b562d0f 100644
--- a/src/mailman_pgp/pgp/wrapper.py
+++ b/src/mailman_pgp/pgp/wrapper.py
@@ -53,8 +53,8 @@ class PGPWrapper():
def has_signature(self):
return self.mime.has_signature() or self.inline.has_signature()
- def sign(self, key):
- return self.default.sign(key)
+ def sign(self, key, **kwargs):
+ return self.default.sign(key, **kwargs)
def verify(self, key):
"""
@@ -112,3 +112,9 @@ class PGPWrapper():
yield from self.mime.keys()
elif self.inline.has_keys():
yield from self.inline.keys()
+
+ def sign_encrypt(self, key, *keys, **kwargs):
+ return self.default.sign_encrypt(key, *keys, **kwargs)
+
+ def sign_then_encrypt(self, key, *keys, **kwargs):
+ return self.default.sign_then_encrypt(key, *keys, **kwargs)