public static void Run() { Core.Initialize(); RegisterOpcodes(); loginSocket = Core.StartUDPReceiver(IPAddress.Parse("127.0.0.1"), 0, OnReceive); loginEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000); var random = new RNGCryptoServiceProvider(); var randoma = new byte[20]; random.GetBytes(randoma); randoma[randoma.Length - 1] &= 0x7F; a = new BigInteger(randoma); PublicA = BigInteger.ModPow(g, a, N); var PublicABytes = PublicA.ToByteArray(); UDPTransmitter transmitter = UDPTransmitter.CreateObject(); transmitter.WriteUint16((UInt16)CMSG_AUTH_LOGON_CHALLENGE); //opcode transmitter.WriteUint16((UInt16)(9 + USERNAME.Length + PublicABytes.Length)); //packet_length transmitter.WriteUint8(BUILD_MAJOR); transmitter.WriteUint8(BUILD_MINOR); transmitter.WriteUint8(BUILD_REVISION); transmitter.WriteInt16(CLIENT_BUILD); transmitter.WriteUint16((UInt16)USERNAME.Length); transmitter.WriteFixedString(USERNAME); transmitter.WriteUint16((UInt16)PublicABytes.Length); transmitter.WriteFixedBlob(PublicABytes); transmitter.SendTo(loginSocket, loginEndpoint); }