Перейти к содержанию
    

Реализовал проект алгоритма ГОСТа 28147 в режиме простой замены, пока только зашифрования данных на VHDL в среде Xilinx ISE+QuestaSim.

Эталонный результат не получен в результате моделирования.

При внимательном разборе временных диаграм увидел, что не срабатывает при переходе

с 0-го цикла на 1-й запись из сумматора по мод2 SM2в нако N1, ну и соответственно прис ледуещем цикле

из N1 в N2. При дальнейшей работе последовательность считывания и записи правильная.

В проекте использовались ключ KEY_IN (256 бит) и блок данных (64 бит)DATA_IN(нули), при этом должна былы получится зашифрованная последовательность DAFE3AD9FA67E757.

 

Я приложил архив с исходниками и скриншотом тестбенча, поясняющего то,что я только что описал.

 

Подскажите , что нужно изменить.

vhdl_source.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин, ну это уже хамство натуральное!!! Другим больше заняться нечем, как Вашу работу делать. Будьте так любезны - разберитесь сами как работает (должно работать) управление и переделайте его сами. Epikur и так сделал для Вас больше, чем следовало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

lincolndsp

Всё, что я могу сказать, это то, что предложенный мой код проходит тесты и является 100% рабочим. Ищи ошибку у себя.

Зы. Архив пустой.

Зыы. Читай предыдущую запись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получилось реализовать простую замену. Вопрос: результирующий блок данных считывается

в каком цикле и в каком цикле записывается новый блок данных в накопители N1 и N2? то есть

какая очередность?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получилось реализовать простую замену. Вопрос: результирующий блок данных считывается

в каком цикле и в каком цикле записывается новый блок данных в накопители N1 и N2? то есть

какая очередность?

Рад за Вас. :)

В принципе, ничего не мешает делать это одновременно, все зависит от того, как реализовано управление алгоритмом. Как только накопитель не участвует в выработке очередной порции данных - в него можно записывать очередной входной блок. Вы данные грузите и считываете по 64 разряда или, как я советовал, по 32?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока на начальных стадиях я блок данных храню в виде 64 битного блока, а затем уже

считываю в накопители по 32 бита

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перед началом работы нужно загрузить блок данных в N1, N2.

Цикл 0: N1 <- N2 xor SH11(SUBST((KEY0 + N1) mod 32)); N2 <- N1
Цикл 1: N1 <- N2 xor SH11(SUBST((KEY1 + N1) mod 32)); N2 <- N1
...
Цикл 30: N1 <- N2 xor SH11(SUBST((KEY1 + N1) mod 32)); N2 <- N1
Цикл 31: N1 <- N2 xor SH11(SUBST((KEY0 + N1) mod 32)); N2 <- INPUT32; OUTPUT32 <- N1 (Во время 31 цикла можно выдать 32 - разрядный блок и загрузить очередной входной блок)
Цикл 32: N1 <- N2; N2 <- INPUT32; OUTPUT32 <- N1 (Аналогично - во время 32 цикла)
Цикл 0: ... 
и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

бьюсь над реализацией режима гаммирования, но все никак из-за

сложностей реализации первоначального этапа работы с синхропосылкой и предустановок т.д не получается перед тем как перейти к повтрояюющемуся фрагменту алгоритма.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как можно реализовать участок алгоритма любого,где

определенный участок кода с определенными переменными нужно совершить

один раз, а дальше выполнять уже другой участок кода с теми же переменными,

который повторяется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

lincolndsp

>>как можно реализовать участок алгоритма любого,где

определенный участок кода с определенными переменными нужно совершить один раз, а дальше выполнять уже другой участок кода с теми же переменными, который повторяется?

Либо при помощи конечного автомата, либо с внешним микроконтроллерным управлением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Epikur, а как вы решали жту проблему, при реализации участка

кода инициализации в режиме гаммирования?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня FPGA является ведомым устройством, которое управляется при помощи контроллера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

удалось реализовать ГОСТ в режиме гаммирования. При этом и ключ и тестовый вектор данных

хранился прямо в коде. Хочу сейчас поработать с хранением ключа в памяти. Подскажите пожалуйста

как это сделать, а то создаю я Distributed Memory в LogicCore, а на третьем этапе требует

коэффициенты какие-то и дальше стрелка неактивна, запутался я.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забейте на LogiCore. Синтезируйте распределенную память 32х16 сами - это около десятка строчек. Запись ключа реализуйте по отдельной шине (можно сделать любой ширины кратной 8: 8, 16, 32 - чем шире, тем быстрее будет грузиться ключ). Адрес записи выбирайте тем же счетчиком, что и при шифровании. Нужно будет предусмотреть специальный режим (ветку управляющего автомата) для загрузки ключа. Можно еще использовать двухпортовую блочную память - синтезируется так же просто (примеры есть в Language Templates ISE). В этом случае запись можно выполнять по другому порту. При выполнении операций шифрования нужный ключ выбирать старшими битами адреса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забейте на LogiCore. Синтезируйте распределенную память 32х16 сами - это около десятка строчек. Запись ключа реализуйте по отдельной шине (можно сделать любой ширины кратной 8: 8, 16, 32 - чем шире, тем быстрее будет грузиться ключ). Адрес записи выбирайте тем же счетчиком, что и при шифровании. Нужно будет предусмотреть специальный режим (ветку управляющего автомата) для загрузки ключа. Можно еще использовать двухпортовую блочную память - синтезируется так же просто (примеры есть в Language Templates ISE). В этом случае запись можно выполнять по другому порту. При выполнении операций шифрования нужный ключ выбирать старшими битами адреса.

 

спасибо за ответ :a14: ....хочу спросить, какое различие распределенной и двухпортовой блочной памяти,

как организуется запись и считывание данных. Просто я еще не работал с памятью, а нагляднее

было бы, если посмотреть на примерчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...