В индексы ключей я не вникал, но если этот код нормально расшифровывает зашифрованное, значит по крайне мере в расшифровки и зашифровки части ключа синхронно перебираются(логически правильно), но это еще не значит соответствие стандарту.
То что я исправил это связано с упаковкой полублоков в блок, при расшифровки это делается наоборот, я думаю вы уже сами поняли, в чем ошибка.
Еще раз повторю, нужно сверится с эталонным шифровальшиком, я не уверен, что там нет больше ошибок,