Beispiel #1
0
        public void DumpError(Packet packet)
        {
            MemoryStream      ms  = new MemoryStream(packet.GetPayload());
            NetworkByteReader nbr = new NetworkByteReader(ms);

            nbr.ReadByte();
            nbr.ReadUInt32();
            string xxx = nbr.ReadString();
        }
        public void SendPacket(ICryptoTransform encryptor, Packet packet)
        {
            byte[] payload = packet.GetPayload();
            int blocksize = 16;
            if (encryptor == null)
            {
                uint size = (uint)payload.Length;
                size += 5;
                size = (uint)((size + blocksize) / blocksize * blocksize);

                uint packet_length = size - 4;
                byte padding_length = (byte)(size - 5 - payload.Length);

                MemoryStream ms = new MemoryStream();
                NetworkByteWriter nbw = new NetworkByteWriter(ms);

                nbw.WriteUInt32(packet_length);
                nbw.WriteByte(padding_length);
                nbw.WriteBytes(payload);
                for (int i = 0; i < padding_length; i++ ) nbw.WriteByte(0x0C);
                nbw.Flush();

                writer.WriteBytes(ms.ToArray());
                writer.Flush();
            }
            else
            {
                blocksize = Math.Max(encryptor.InputBlockSize, blocksize);
                uint size = (uint)payload.Length;
                size += (5 + (uint)encryptor.InputBlockSize);
                size = (uint)((size + blocksize) / blocksize * blocksize);

                uint packet_length = size - 4;
                byte padding_length = (byte)(size - 5 - payload.Length);
                MemoryStream ms = new MemoryStream();
                NetworkByteWriter nbw = new NetworkByteWriter(ms);

                nbw.WriteUInt32(packet_length);
                nbw.WriteByte(padding_length);
                nbw.WriteBytes(payload);
                for (int i = 0; i < padding_length; i++) nbw.WriteByte(0x0C);
                nbw.Flush();

                // compute mac
                byte[] cache = ms.ToArray();

                MemoryStream ms_mac = new MemoryStream();
                NetworkByteWriter nbw_mac = new NetworkByteWriter(ms_mac);
                nbw_mac.WriteUInt32((uint)sequence);
                nbw_mac.WriteBytes(cache);
                nbw_mac.Flush();
                byte[] mac = crypto_mac_encryptor.ComputeHash(ms_mac.ToArray());

                crypto_encryptor.TransformBlock(cache, 0, cache.Length, cache, 0);

                writer.WriteBytes(cache);
                writer.Flush();
                if (crypto_mac_encryptor != null)
                {
                    writer.WriteBytes(mac);
                }
            }

            sequence++;
        }
 public void DumpError(Packet packet)
 {
     MemoryStream ms = new MemoryStream(packet.GetPayload());
     NetworkByteReader nbr = new NetworkByteReader(ms);
     nbr.ReadByte();
     nbr.ReadUInt32();
     string xxx = nbr.ReadString();
 }
Beispiel #4
0
 public Packet(Packet p)
 {
     SetPayload(p.GetPayload());
 }
Beispiel #5
0
 public Packet(Packet p)
 {
     SetPayload(p.GetPayload());
 }
Beispiel #6
0
        public void SendPacket(ICryptoTransform encryptor, Packet packet)
        {
            byte[] payload   = packet.GetPayload();
            int    blocksize = 16;

            if (encryptor == null)
            {
                uint size = (uint)payload.Length;
                size += 5;
                size  = (uint)((size + blocksize) / blocksize * blocksize);

                uint packet_length  = size - 4;
                byte padding_length = (byte)(size - 5 - payload.Length);

                MemoryStream      ms  = new MemoryStream();
                NetworkByteWriter nbw = new NetworkByteWriter(ms);

                nbw.WriteUInt32(packet_length);
                nbw.WriteByte(padding_length);
                nbw.WriteBytes(payload);
                for (int i = 0; i < padding_length; i++)
                {
                    nbw.WriteByte(0x0C);
                }
                nbw.Flush();

                writer.WriteBytes(ms.ToArray());
                writer.Flush();
            }
            else
            {
                blocksize = Math.Max(encryptor.InputBlockSize, blocksize);
                uint size = (uint)payload.Length;
                size += (5 + (uint)encryptor.InputBlockSize);
                size  = (uint)((size + blocksize) / blocksize * blocksize);

                uint              packet_length  = size - 4;
                byte              padding_length = (byte)(size - 5 - payload.Length);
                MemoryStream      ms             = new MemoryStream();
                NetworkByteWriter nbw            = new NetworkByteWriter(ms);

                nbw.WriteUInt32(packet_length);
                nbw.WriteByte(padding_length);
                nbw.WriteBytes(payload);
                for (int i = 0; i < padding_length; i++)
                {
                    nbw.WriteByte(0x0C);
                }
                nbw.Flush();

                // compute mac
                byte[] cache = ms.ToArray();

                MemoryStream      ms_mac  = new MemoryStream();
                NetworkByteWriter nbw_mac = new NetworkByteWriter(ms_mac);
                nbw_mac.WriteUInt32((uint)sequence);
                nbw_mac.WriteBytes(cache);
                nbw_mac.Flush();
                byte[] mac = crypto_mac_encryptor.ComputeHash(ms_mac.ToArray());



                crypto_encryptor.TransformBlock(cache, 0, cache.Length, cache, 0);

                writer.WriteBytes(cache);
                writer.Flush();
                if (crypto_mac_encryptor != null)
                {
                    writer.WriteBytes(mac);
                }
            }

            sequence++;
        }