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 <d...@fifthhorseman.net> --- email-print-mime-structure | 44 +++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/email-print-mime-structure b/email-print-mime-structure index 2cbf6ed..7b8374d 100755 --- a/email-print-mime-structure +++ b/email-print-mime-structure @@ -81,27 +81,31 @@ 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()): self.print_part(z, prefix+'┬╴', parent, num) -- 2.24.0