code: async def encrypt(
              self,
              message: bytes,
              authn: bool = False,
              to_verkey: str = None,
              from_verkey: str = None) -> bytes:
          
  
          LOGGER.debug(
              'Wallet.encrypt >>> message: %s, authn: %s, to_verkey: %s, from_verkey: %s',
              message,
              authn,
              to_verkey,
              from_verkey)
  
          if not message:
              LOGGER.debug('Wallet.encrypt <!< No message to encrypt')
              raise AbsentMessage('No message to encrypt')
  
          if not self.handle:
              LOGGER.debug('Wallet.encrypt <!< Wallet %s is closed', self.name)
              raise WalletState('Wallet {} is closed'.format(self.name))
  
          if authn:
              rv = await crypto.auth_crypt(self.handle, from_verkey or self.verkey, to_verkey or self.verkey, message)
          else:
              rv = await crypto.anon_crypt(to_verkey or self.verkey, message)
  
          LOGGER.debug('Wallet.auth_encrypt <<< %s', rv)
          return rv
docs: Encrypt plaintext for owner of DID, anonymously or via authenticated encryption scheme.
          Raise AbsentMessage for missing message, or WalletState if wallet is closed.
  
          :param message: plaintext, as bytes
          :param authn: whether to use authenticated encryption scheme
          :param to_verkey: verification key of recipient, None for anchor's own
          :param from_verkey: verification key of sender for authenticated encryption, None for anchor's own
          :return: ciphertext, as bytes