From b7a26158a2a87b51de86621107c01b24c2c8952d Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor Date: Sat, 9 Nov 2019 16:48:12 -0500 Subject: 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 Acked-by: Sean Whitton --- email-print-mime-structure | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'email-print-mime-structure') 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()): -- cgit v1.2.3