# Copyright (C) 2017 Jan Jancar # # This file is a part of the Mailman PGP plugin. # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # this program. If not, see . """Miscellaneous PGP utilities.""" from pgpy import PGPKey from public import public @public def verifies(verifications): """ :param verifications: :type verifications: Sequence[pgpy.types.SignatureVerification] :return: bool """ return all(bool(verification) and all(not sigsubj.signature.is_expired for sigsubj in verification.good_signatures) for verification in verifications) @public def hashes(verifications): """ :param verifications: :return: :rtype: Generator[str] """ for verification in verifications: for sigsubj in verification.good_signatures: data = sigsubj.signature.hashdata(sigsubj.subject) hasher = sigsubj.signature.hash_algorithm.hasher hasher.update(data) yield hasher.digest() @public def key_from_blob(blob): """ :param blob: :return: """ keys = PGPKey.from_blob(blob) if isinstance(keys, tuple): return keys[0] else: return keys @public def key_from_file(file): """ :param file: :return: """ keys = PGPKey.from_file(file) if isinstance(keys, tuple): return keys[0] else: return keys