Beispiel #1
0
        public byte[] EncryptRecord(byte[] fragment, byte[] mac)
        {
            int num  = fragment.Length + mac.Length;
            int num2 = 0;

            if (CipherMode == CipherMode.CBC)
            {
                num++;
                num2 = blockSize - num % (int)blockSize;
                if (num2 == blockSize)
                {
                    num2 = 0;
                }
                num += num2;
            }
            byte[] array = new byte[num];
            Buffer.BlockCopy(fragment, 0, array, 0, fragment.Length);
            Buffer.BlockCopy(mac, 0, array, fragment.Length, mac.Length);
            if (num2 > 0)
            {
                int num3 = fragment.Length + mac.Length;
                for (int i = num3; i < num3 + num2 + 1; i++)
                {
                    array[i] = (byte)num2;
                }
            }
            EncryptionCipher.TransformBlock(array, 0, array.Length, array, 0);
            return(array);
        }
        public byte[] EncryptRecord(byte[] fragment, byte[] mac)
        {
            // Encryption ( fragment + mac [+ padding + padding_length] )
            var length = fragment.Length + mac.Length;
            var padlen = 0;

            if (CipherMode == CipherMode.CBC)
            {
                // Calculate padding_length
                length++; // keep an extra byte
                padlen = blockSize - length % blockSize;
                if (padlen == blockSize)
                {
                    padlen = 0;
                }
                length += padlen;
            }

            var plain = new byte [length];

            Buffer.BlockCopy(fragment, 0, plain, 0, fragment.Length);
            Buffer.BlockCopy(mac, 0, plain, fragment.Length, mac.Length);
            if (padlen > 0)
            {
                var start = fragment.Length + mac.Length;
                for (var i = start; i < start + padlen + 1; i++)
                {
                    plain[i] = (byte)padlen;
                }
            }

            EncryptionCipher.TransformBlock(plain, 0, plain.Length, plain, 0);
            return(plain);
        }