aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/pgp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman_pgp/pgp')
-rw-r--r--src/mailman_pgp/pgp/inline.py10
-rw-r--r--src/mailman_pgp/pgp/mime.py11
-rw-r--r--src/mailman_pgp/pgp/mime_multisig.py3
-rw-r--r--src/mailman_pgp/pgp/wrapper.py15
4 files changed, 39 insertions, 0 deletions
diff --git a/src/mailman_pgp/pgp/inline.py b/src/mailman_pgp/pgp/inline.py
index 410078c..24809d2 100644
--- a/src/mailman_pgp/pgp/inline.py
+++ b/src/mailman_pgp/pgp/inline.py
@@ -95,6 +95,16 @@ class InlineWrapper(BaseWrapper):
continue
yield msg
+ def strip_signature(self):
+ for part in walk(self.msg):
+ if not part.is_multipart() and self._is_signed(part):
+ try:
+ msg = PGPMessage.from_blob(part.get_payload())
+ except:
+ continue
+ part.set_payload(msg.message)
+ return self
+
def _is_encrypted(self, part):
try:
msg = PGPMessage.from_blob(part.get_payload())
diff --git a/src/mailman_pgp/pgp/mime.py b/src/mailman_pgp/pgp/mime.py
index 9ea6384..47e1037 100644
--- a/src/mailman_pgp/pgp/mime.py
+++ b/src/mailman_pgp/pgp/mime.py
@@ -103,6 +103,17 @@ class MIMEWrapper(BaseWrapper):
return
yield sig
+ def strip_signature(self):
+ """
+
+ :return:
+ :rtype: MIMEWrapper
+ """
+ inner = self.msg.get_payload(0)
+ copy_headers(inner, self.msg, True)
+ self.msg.set_payload(inner.get_payload())
+ return self
+
def is_encrypted(self):
"""
Whether the whole message is MIME encrypted as per RFC3156 section 4.
diff --git a/src/mailman_pgp/pgp/mime_multisig.py b/src/mailman_pgp/pgp/mime_multisig.py
index fb06cad..88886c0 100644
--- a/src/mailman_pgp/pgp/mime_multisig.py
+++ b/src/mailman_pgp/pgp/mime_multisig.py
@@ -74,6 +74,9 @@ class MIMEMultiSigWrapper(MIMEWrapper):
continue
yield sig
+ def strip_signature(self):
+ pass
+
def sign(self, key, **kwargs):
"""
Sign a message with key.
diff --git a/src/mailman_pgp/pgp/wrapper.py b/src/mailman_pgp/pgp/wrapper.py
index f746229..fdb7eeb 100644
--- a/src/mailman_pgp/pgp/wrapper.py
+++ b/src/mailman_pgp/pgp/wrapper.py
@@ -112,6 +112,21 @@ class PGPWrapper(BaseWrapper):
elif self.inline.is_signed():
yield from self.inline.get_signature()
+ def strip_signature(self):
+ """
+
+ :return:
+ :rtype: PGPWrapper
+ """
+ result = None
+ if self.mime.is_signed():
+ result = self.mime.strip_signature()
+ elif self.multisig.is_signed():
+ result = self.multisig.strip_signature()
+ elif self.inline.is_signed():
+ result = self.inline.strip_signature()
+ return self._rewrap(result)
+
def sign(self, key, **kwargs):
"""
Sign a message with key.