С#. Битовый массив. Как сдвигать биты влево или вправо?

Пытаюсь внедрить шифр настоящего. У меня есть функция:

static byte[] getRoundKey(byte[] K)
{
    return null;
}

Функция должна работать так:

введите здесь описание изображения

Я думаю, что если я использую var bits = new BitArray(K), то я не могу сдвинуть его ни влево, ни вправо. Как я могу сделать битовый сдвиг «истинным образом» с байтовым массивом или с битовым массивом?

P.S.

Я решаю свою проблему таким образом:

static BitArray cyclic_shift(BitArray bits, short shift)
        {
            /*
            Сдвигает битовый массив на указанное смещение вправо (если смещение положительное) или влево (если смещение отрицательное)
            */
            BitArray result = new BitArray(bits.Length);
            for (byte i = 0; i < bits.Length; i++)
            {
                result[i] = bits[(bits.Length - (shift - i)) % bits.Length];
            }
            return result;
        }

Если вы знаете лучший способ сделать это, напишите ответ в комментариях. Спасибо.


person murzagurskiy    schedule 19.11.2015    source источник
comment
Вы имеете в виду как 0x01A4 << 8?   -  person SimpleVar    schedule 19.11.2015
comment
@SimpleVar, да, это именно то, что я имею в виду.   -  person murzagurskiy    schedule 19.11.2015
comment
@MarcinJuraszek, лучше всего использовать цикл for для сдвига данных этого типа (bitArray или byteArray)?   -  person murzagurskiy    schedule 19.11.2015