Как правильно определить функции init/update/final EVP_CIPHER в пользовательском ДВИГАТЕЛЕ?

Я создаю динамический движок для поддержки пользовательского аппаратного модуля AES, который я реализовал в логике FPGA **, но после прочтения всей доступной документации и изучения исходного кода я все еще очень озадачен следующими двумя вещами.....

  1. Как и где я должен определить EVP_[En/De]cryptInit_ex(..) , EVP_[En/De]cryptUpdate(..) , а также EVP_[En/De]cryptFinal_ex(..) функции в моем коде двигателя?

До этого я успешно построил двигатель для своего ускорителя sha256, и теперь я пытаюсь выполнить те же шаги для AES. Для sha256 EVP_MD структура позволила мне объявить указатели на мои функции init, update и final. Это все работало без нареканий.

Теперь, когда я собираю двигатель AES, я вижу, что EVP_CIPHER Структура не имеет этих указателей (init, update, final), но вместо этого имеет указатель на функции init_key и do_cipher. Однако в интерфейсе шифрования EVP эти функции все еще определены.

AFAIK (и, пожалуйста, поправьте меня, если это не так) мой init_key функция вызывается интерфейсом EVP, когда я вызываю EVP_[En/De]cryptInit_ex функция и do_cipher функция вызывается EVP_[En/De]cryptUpdate, Но как мне справиться с EVP_[En/De]cryptFinal функции? Разве я не должен внедрять их в свой движок? Или я что-то здесь упускаю....

  1. Поддерживает ли интерфейс EVP заполнение, когда задействован динамический движок? Или мне решать внедрить структуру заполнения внутри самого двигателя? Если последнее так, то я думаю, что ответ на предыдущие вопросы поможет мне понять, где именно это реализовать.

Вы можете обратиться к исходному коду ЗДЕСЬ, если хотите его увидеть, однако я не думаю, что это необходимо для этого вопроса.

Подводя итог, два вопроса:

  1. Как я могу явно определить, какие операции в моем движке происходят, когда EVP_[En/De]cryptInit_ex(..), EVP_[En/De]cryptUpdate(..), а также EVP_[En/De]cryptFinal_ex(..) функции вызываются из программы драйвера?
  2. Нужно ли моему движку обрабатывать заполнение входных данных при шифровании и удаление дополнения при расшифровке? Или EVP API обрабатывает заполнение для меня, и мне нужно беспокоиться только об основном алгоритме AES для произвольных входных данных? (для справки, я хотел бы просто использовать стандартные отступы PKCS)

Заранее спасибо!

** Я использую Xilinx Zynq SoC, поэтому я могу создавать собственное оборудование в программируемой логике, а затем взаимодействовать с ним из программного обеспечения, работающего на процессоре, через карту памяти, как и любое периферийное устройство... подробности не имеют значения

0 ответов

Другие вопросы по тегам