public unsafe static void CreateDHKey(ServerSockets.SecuritySocket obj, ServerSockets.Packet Stream) { try { byte[] buffer = new byte[36]; bool extra = false; string text = System.Text.ASCIIEncoding.ASCII.GetString(obj.DHKeyBuffer.buffer, 0, obj.DHKeyBuffer.Length()); if (!text.EndsWith("TQClient")) { System.Buffer.BlockCopy(obj.EncryptedDHKeyBuffer.buffer, obj.EncryptedDHKeyBuffer.Length() - 36, buffer, 0, 36); extra = true; } // MyConsole.PrintPacketAdvanced(Stream.Memory, Stream.Size); string key; if (Stream.GetHandshakeReplyKey(out key)) { obj.SetDHKey = true; obj.Game.DHKey.HandleResponse(key); var compute_key = obj.Game.DHKeyExchance.PostProcessDHKey(obj.Game.DHKey.ToBytes()); //obj.Game.Crypto.SetIVs(new byte[8], new byte[8]); obj.Game.Crypto.GenerateKey(compute_key); obj.Game.Crypto.Reset(); } else { obj.Disconnect(); return; } if (extra) { Stream.Seek(0); obj.Game.Crypto.Decrypt(buffer, 0, Stream.Memory, 0, 36); Stream.Size = buffer.Length; Stream.Size = buffer.Length; Stream.Seek(2); ushort PacketID = Stream.ReadUInt16(); Action<Client.GameClient, ServerSockets.Packet> hinvoker; if (MsgInvoker.TryGetInvoker(PacketID, out hinvoker)) { hinvoker(obj.Game, Stream); } else { obj.Disconnect(); MyConsole.WriteLine("DH KEY Not found the packet ----> " + PacketID); } } } catch (Exception e) { MyConsole.WriteException(e); } }