summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>2019-11-09 16:48:12 -0500
committerSean Whitton <spwhitton@spwhitton.name>2019-11-10 00:33:00 -0700
commitb7a26158a2a87b51de86621107c01b24c2c8952d (patch)
tree9629bac70fa9247e4c328a34f7a6b75ca69a02c1
parent3de0b3a9492da7609409ecb1b652aef70d848823 (diff)
downloadmailscripts-b7a26158a2a87b51de86621107c01b24c2c8952d.tar.gz
email-print-mime-structure: Restructure pgpy decryption
This has no functional changes, it's just a reorganization for easier readability. Thanks to Sean Whitton for the suggestion. Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net> Acked-by: Sean Whitton <spwhitton@spwhitton.name>
-rwxr-xr-xemail-print-mime-structure44
1 files changed, 24 insertions, 20 deletions
diff --git a/email-print-mime-structure b/email-print-mime-structure
index 2cbf6ed..4f46f58 100755
--- a/email-print-mime-structure
+++ b/email-print-mime-structure
@@ -81,26 +81,30 @@ class MimePrinter(object):
if not isinstance(ciphertext, str):
logging.warning('encrypted part was not a leaf mime part somehow')
return
- if pgpy is None:
- logging.warning(f'Python module pgpy is not available, not decrypting (try "apt install python3-pgpy")')
- else:
- keyname:str
- for keyname in self.args.pgpkey:
- try:
- key:pgpy.PGPKey
- key, _ = pgpy.PGPKey.from_file(keyname)
- msg:pgpy.PGPMessage = pgpy.PGPMessage.from_blob(ciphertext)
- msg = key.decrypt(msg)
- cryptopayload = email.message_from_bytes(msg.message)
- break
- except:
- pass
- if cryptopayload is None:
- logging.warning(f'Unable to decrypt')
- else:
- newprefix = prefix[:-3] + ' '
- print(f'{newprefix}↧ (decrypts to)')
- self.print_tree(cryptopayload, newprefix + '└', z, 0)
+ cryptopayload = self.pgpy_decrypt(self.args.pgpkey, ciphertext)
+ if cryptopayload is None:
+ logging.warning(f'Unable to decrypt')
+ return
+ newprefix = prefix[:-3] + ' '
+ print(f'{newprefix}↧ (decrypts to)')
+ self.print_tree(cryptopayload, newprefix + '└', z, 0)
+
+ def pgpy_decrypt(self, keys:List[str], ciphertext:str) -> Optional[Message]:
+ if pgpy is None:
+ logging.warning(f'Python module pgpy is not available, not decrypting (try "apt install python3-pgpy")')
+ return None
+ keyname:str
+ ret:Optional[Message] = None
+ for keyname in keys:
+ try:
+ key:pgpy.PGPKey
+ key, _ = pgpy.PGPKey.from_file(keyname)
+ msg:pgpy.PGPMessage = pgpy.PGPMessage.from_blob(ciphertext)
+ msg = key.decrypt(msg)
+ return email.message_from_bytes(msg.message)
+ except:
+ pass
+ return None
def print_tree(self, z:Message, prefix:str, parent:Optional[Message], num:int) -> None:
if (z.is_multipart()):