Алгоритм у Вас изложен неверно. Так, на 11 бит сдвигается не ключ, а шифруемый блок. Левая часть с правой не складывается, а XOR-ится. Неверно описано использование ключа.
Алгоритм выглядит так:
0. Шифруемый текст разбивается на блоки по 64 бита. Если длина блока менее 64, он дополняется (нулями или случайной последовательностью, но тогда надо сообщить, где конец текста; дополнение случайными может быть полезно, чтобы одинаковые сообщения в шифрованном виде были бы различны).
Ключ имеет 256 бит (8 блоков по 32 бита), если, как в примере, он явно меньше (10 байт вместо 32), он должен быть дополнен (нулями, не очень удачное решение, или продолжая заданный ключ - localadminlocaladminlocaladminlo)
1. 64-битный блок текста разбивается на 32-битную младшую и 32-битную старшую части. Младшая часть складывается с очередной частью ключа (в первых 8 раундах используются части 1-8, потом опять 1-8, и опять 1-8, а в последних порядо обратный, 8-1). Сложение происходит по модулю
2. Результат подвергается замене по таблице, для чего 32-битный результат разбивается на 8 4-битных блоков, и каждый заменяется по своей таблице замены
Код:
Номер S-блока Значение
0 1 2 3 4 5 6 7 8 9 A B C D E F
1 4 A 9 2 D 8 0 E 6 B 1 C 7 F 5 3
2 E B 4 C 6 D F A 2 3 8 1 0 7 5 9
3 5 8 1 D A 3 4 2 E F C 7 6 0 9 B
4 7 D A 1 0 8 9 F E 4 6 C B 2 5 3
5 6 C 7 1 5 F D 8 4 A 9 E 0 3 B 2
6 4 B A 0 7 2 1 D 3 6 8 5 9 C F E
7 D B 4 1 3 F 5 9 0 A E 7 6 8 2 C
8 1 F D 0 5 7 A 4 9 2 3 E 6 B 8 C
(Это т.н. "таблицы Центробанка", они не единственные, возможно, и не лучшие, есть и другие)
3. Полученный 32-битный блок циклически сдвигается влево на 11 битов.
4. Затем на место старших битов записываются прежние младшие, а на место младших - исключающее ИЛИ бывших старших с результатом вышеприведенных вычислений.
5. И так 32 раза.
-- 13 апр 2015, 23:02 --Что до библиотеки - она мне не знакома, так что посмотрите сами. Замечу одно - если там лишь 16 раундов, то это не ГОСТ 28147-89, а "отрывок, взгляд и нечто" по его мотивам.