code: def protocol_authenticate(self, account=None):
          
          with self._get_account(account) as account:
              user = account.get_name()
              password = account.get_password()
              key = account.get_key()
              if key is None:
                  self._dbg(1, "Attempting to authenticate %s." % user)
                  self._protocol_authenticate(user, password)
              else:
                  self._dbg(1, "Authenticate %s with key." % user)
                  self._protocol_authenticate_by_key(user, key)
          self.proto_authenticated = True
docs: Low-level API to perform protocol-level authentication on protocols
          that support it.
  
          .. HINT::
             In most cases, you want to use the login() method instead, as
             it automatically chooses the best login method for each protocol.
  
          :type  account: Account
          :param account: An account object, like login().