async def verify(self, message: bytes, signature: bytes, signer: str = None) -> bool:
        """
        Verify signature with input signer verification key (via lookup by DID first if need be).
        Raise WalletState if wallet is closed.

        :param message: Content to sign, as bytes
        :param signature: signature, as bytes
        :param signer: signer DID or verification key; omit for anchor's own
        :return: whether signature is valid
        """

        LOGGER.debug('BaseAnchor.verify >>> signer: %s, message: %s, signature: %s', signer, message, signature)

        if not self.wallet.handle:
            LOGGER.debug('BaseAnchor.verify <!< Wallet %s is closed', self.name)
            raise WalletState('Wallet {} is closed'.format(self.name))

        verkey = None
        if signer:
            verkey = await self._verkey_for(signer)
        rv = await self.wallet.verify(message, signature, verkey)

        LOGGER.debug('BaseAnchor.verify <<< %s', rv)
        return rv