public static bool ProcessLogIn(global::ProtoMessage.ProtoLogIn login, global::ProtoMessage.Client c, bool isPCL) { Contract.Requires(c != null && login != null); if (!VerifyUser(c.username, login.userSalt)) { return(false); } try { if (login.Key != null) { byte[] key = rsa.Decrypt(login.Key, false); // Key must be non-null and long enough if (key == null || key.Length < 5) { return(false); } c.alg = new NetAESEncryption(Globals_Server.server, key, 0, key.Length); } else { #if ALLOW_UNENCRYPT c.alg = null; #else return(false); #endif } global::ProtoMessage.ProtoClient clientDetails = new global::ProtoMessage.ProtoClient(c); clientDetails.ActionType = global::ProtoMessage.Actions.LogIn; clientDetails.ResponseType = global::ProtoMessage.DisplayMessages.LogInSuccess; Server.SendViaProto(clientDetails, c.conn, true, c.alg); Globals_Game.RegisterObserver(c); return(true); } catch (Exception e) { #if DEBUG Console.WriteLine("Failure during decryption: " + e.GetType() + " " + e.Message + ";" + e.StackTrace); #endif return(false); } }