docs: def client_proof(user, password, salt, A, B, a, hash_algo):
      """
      M = H(H(N) xor H(g), H(I), s, A, B, K)
      """
      N, g, k = get_prime()
      K = client_session(user, password, salt, A, B, a)
  
      n1 = bytes2long(hash_digest(hashlib.sha1, N))
      n2 = bytes2long(hash_digest(hashlib.sha1, g))
      if DEBUG_PRINT:
          print('n1-1=', binascii.b2a_hex(long2bytes(n1)), end='\n')
          print('n2-1=', binascii.b2a_hex(long2bytes(n2)), end='\n')
  
      n1 = pow(n1, n2, N)
      n2 = bytes2long(hash_digest(hashlib.sha1, user))
  
      M = hash_digest(hash_algo, n1, n2, salt, A, B, K)
      if DEBUG_PRINT:
          print('n1-2=', binascii.b2a_hex(long2bytes(n1)), end='\n')
          print('n2-2=', binascii.b2a_hex(long2bytes(n2)), end='\n')
          print('client_proof:M=', binascii.b2a_hex(M), end='\n')
  
      return M, K