code: def _final_challenge(self, challenge):
          
          if self._finished:
              return Failure("extra-challenge")
  
          match = SERVER_FINAL_MESSAGE_RE.match(challenge)
          if not match:
              logger.debug("Bad final message syntax: {0!r}".format(challenge))
              return Failure("bad-challenge")
  
          error = match.group("error")
          if error:
              logger.debug("Server returned SCRAM error: {0!r}".format(error))
              return Failure(u"scram-" + error.decode("utf-8"))
  
          verifier = match.group("verifier")
          if not verifier:
              logger.debug("No verifier value in the final message")
              return Failure("bad-succes")
  
          server_key = self.HMAC(self._salted_password, b"Server Key")
          server_signature = self.HMAC(server_key, self._auth_message)
          if server_signature != a2b_base64(verifier):
              logger.debug("Server verifier does not match")
              return Failure("bad-succes")
  
          self._finished = True
          return Response(None)
docs: Process the second challenge from the server and return the
          response.
  
          :Parameters:
              - `challenge`: the challenge from server.
          :Types:
              - `challenge`: `bytes`
  
          :return: the response or a failure indicator.
          :returntype: `sasl.Response` or `sasl.Failure`