def METHOD_NAME(self, message: str, public_key: Optional[str] = None) -> str:
    """
    Decrypts a message using the private key.
    Args:
        message (str): Armored message to decrypt
        public_key (str, optional): Armored public key used for signature verification. Defaults to None.
    Returns:
        str: Decrypted message
    """
    pgp_message = PGPMessage.from_blob(message)
    decrypted_message = ""
    try:
        if not self.private_key.is_unlocked:
            try:
                with self.private_key.unlock(self.passphrase):
                    decrypted_message = self.private_key.METHOD_NAME(pgp_message)
            except PGPError as e:
                raise ValueError("Failed to unlock private key: {}".format(str(e)))
        else:
            decrypted_message = self.private_key.METHOD_NAME(pgp_message)
        if public_key:
            public_key, _ = PGPKey.from_blob(public_key)
            public_key.verify(decrypted_message)
        return decrypted_message.message.__str__()
    except PGPError as e:
        if (
            decrypted_message
            and len(decrypted_message.signatures) > 0
            and str(e) == "No signatures to verify"
        ):
            raise ValueError(
                "Failed to decrypt message: Could not find signature with this public key"
            )
        raise ValueError("Failed to decrypt message: {}".format(str(e)))