Если у тебя массив заполняется синхронно с наложением маски, то ты сперва делаешь XOR, потом двигаешь весь массив влево (или вправо) потом пишешь пришедший битик в конец. Если в реал-тайме времени мало, то можно в буфер, а потом анализировать сколько хочешь (именно так у тебя).
Двигать массив через перенос ROL (ROR) последовательностью ROL (ROR). Тогда это займёт 32 сдвига + один EOR.