public static void HandleAuthResponse(MooNetClient client, int moduleId, byte[] authMessage) { if (!OngoingAuthentications.ContainsKey(client)) { return; // TODO: disconnect him also. /raist. } var srp6 = OngoingAuthentications[client]; byte[] A = authMessage.Skip(1).Take(128).ToArray(); // client's public ephemeral byte[] M_client = authMessage.Skip(1 + 128).Take(32).ToArray(); // client's proof of session key. byte[] seed = authMessage.Skip(1 + 32 + 128).Take(128).ToArray(); // client's second challenge. var success = srp6.Verify(A, M_client, seed); //if (Config.Instance.DisablePasswordChecks || success) if (success) { client.SessionKey = srp6.SessionKey; // send the logon proof. var message = bnet.protocol.authentication.ModuleMessageRequest.CreateBuilder() .SetModuleId(moduleId) .SetMessage(ByteString.CopyFrom(srp6.LogonProof)) .Build(); client.MakeRPC(() => bnet.protocol.authentication.AuthenticationClient.CreateStub(client).ModuleMessage(null, message, callback => client.CheckAuthenticator())); client.Account = AccountManager.GetAccountByEmail(srp6.Account.Email); //if (client.Account.LoggedInClient != null) // client.Account.LoggedInClient.Connection.Disconnect(); //client.Account.LoggedInClient = client; } else // authentication failed because of invalid credentals. { client.AuthenticationErrorCode = AuthenticationErrorCodes.InvalidCredentials; //end authentication client.AuthenticationComplete(); } OngoingAuthentications.Remove(client); }