<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def verify(self, verify_key):
 """Verify that this MAR file has a valid signature. Args: verify_key (str):
 PEM formatted public key Returns: True if the MAR file's signature matches its contents False otherwise; this includes cases where there is no signature. """

        if not self.mardata.signatures or not self.mardata.signatures.sigs:
            # This MAR file can't be verified since it has no signatures
            return False

        hashers = []
        for sig in self.mardata.signatures.sigs:
            hashers.append((sig.algorithm_id, sig.signature, make_hasher(sig.algorithm_id)))

        assert len(hashers) == len(self.mardata.signatures.sigs)

        for block in get_signature_data(self.fileobj,
                                        self.mardata.signatures.filesize):
            [h.update(block) for (_, _, h) in hashers]

        for algo_id, sig, h in hashers:
            if not verify_signature(verify_key, sig, h.finalize(), h.algorithm.name):
                return False
        else:
            return True