Example #1
0
        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);
        }