Beispiel #1
0
        private void XteaEncrypt(OutputMessage message)
        {
            AddMessageLength(message);

            int encryptedSize = message.GetBufferLength();

            if ((encryptedSize % 8) != 0)
            {
                int n = 8 - (encryptedSize % 8);
                message.AddPaddingBytes(n);
                encryptedSize += n;
            }

            int indexedSize = message.GetBufferLength();

            byte[] buffer = message.GetIndexedBuffer(indexedSize);

            int readPos = 0;

            while (readPos < encryptedSize / 4)
            {
                uint v0    = BitConverter.ToUInt32(buffer, readPos * 4);
                uint v1    = BitConverter.ToUInt32(buffer, (readPos + 1) * 4);
                uint delta = 0x61C88647;
                uint sum   = 0;

                for (int i = 0; i < 32; i++)
                {
                    v0  += ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + m_XteaKey[sum & 3]);
                    sum -= delta;
                    v1  += ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + m_XteaKey[sum >> 11 & 3]);
                }

                int tmpReadPos = 0;

                byte[] v0Array = BitConverter.GetBytes(v0);
                byte[] v1Array = BitConverter.GetBytes(v1);
                foreach (byte v in v0Array)
                {
                    buffer[readPos * 4 + tmpReadPos++] = v;
                }
                foreach (byte v in v1Array)
                {
                    buffer[readPos * 4 + tmpReadPos++] = v;
                }

                readPos += 2;
            }

            message.ReplaceIndexedBuffer(buffer);
        }
Beispiel #2
0
 void publicSend(OutputMessage message)
 {
     try {
         m_Socket.BeginSend(message.GetBufferArray(), 0, message.GetBufferLength(), SocketFlags.None, OnSend, m_Socket);
     } catch (SocketException e) {
         OnError(e.SocketErrorCode, e.Message);
     }
 }
Beispiel #3
0
        void AddMessageLength(OutputMessage message)
        {
            int pos = message.Tell();

            message.Seek(0);
            message.AddU16((ushort)message.GetBufferLength());
            message.IncreaseHeaderLength(sizeof(ushort));
            message.Seek(pos + sizeof(ushort));
        }
Beispiel #4
0
        void AddChecksum(OutputMessage message)
        {
            if (ChecksumEnabled)
            {
                uint checksum = Adler32(message.GetBuffer().ToArray(), (uint)message.GetBufferLength());

                int pos = message.Tell();
                message.Seek(0);
                message.AddU32(checksum);
                message.IncreaseHeaderLength(sizeof(uint));
                message.Seek(pos + sizeof(uint));
            }
        }