diff options
author | Daniel Kahn Gillmor <dkg@fifthhorseman.net> | 2019-11-09 16:48:12 -0500 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2019-11-10 00:33:00 -0700 |
commit | b7a26158a2a87b51de86621107c01b24c2c8952d (patch) | |
tree | 9629bac70fa9247e4c328a34f7a6b75ca69a02c1 | |
parent | 3de0b3a9492da7609409ecb1b652aef70d848823 (diff) | |
download | mailscripts-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-x | email-print-mime-structure | 44 |
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()): |