class_docstr: implementation of server-side SCRAM-SHA-1 and SCRAM-SHA-256 auth for mongodb
      
code: def process_client_second_message(self, payload):
      self.messages.append(
          payload[: payload.rfind(",p=")]
      )  # without 'p' part
  
      messages = ",".join(self.messages)
      server_key = self._hmac(self.salted_password, b"Server Key")
      server_signature = self._hmac(
          server_key, messages.encode("utf-8")
      )
  
      client_key = self._hmac(self.salted_password, b"Client Key")
      stored_key = self.method_func(client_key).digest()
      client_signature = self._hmac(
          stored_key, messages.encode("utf-8")
      )
      expected_client_proof = base64.b64encode(
          _xor(client_key, client_signature)
      ).decode()
  
      income_client_proof = payload[payload.rfind(",p=") + 3 :]
  
      if expected_client_proof != income_client_proof:
          raise Exception("wrong password")
  
      return f"v={base64.b64encode(server_signature).decode()}"
  
file_path: mindsdb/mindsdb/api/mongo/classes/scram.py
imports: import base64
  import hashlib
  import hmac
  import os
  from pymongo.auth import _password_digest, _xor, saslprep
label_desc: Use image node_id 3 for calling the Scram obj's underlying member method code with example usage: obj.process_client_second_message(payload) and returns: str, base64