Как правильно определить функции init/update/final EVP_CIPHER в пользовательском ДВИГАТЕЛЕ?
Я создаю динамический движок для поддержки пользовательского аппаратного модуля AES, который я реализовал в логике FPGA **, но после прочтения всей доступной документации и изучения исходного кода я все еще очень озадачен следующими двумя вещами.....
- Как и где я должен определить
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
функции? Разве я не должен внедрять их в свой движок? Или я что-то здесь упускаю....
- Поддерживает ли интерфейс EVP заполнение, когда задействован динамический движок? Или мне решать внедрить структуру заполнения внутри самого двигателя? Если последнее так, то я думаю, что ответ на предыдущие вопросы поможет мне понять, где именно это реализовать.
Вы можете обратиться к исходному коду ЗДЕСЬ, если хотите его увидеть, однако я не думаю, что это необходимо для этого вопроса.
Подводя итог, два вопроса:
- Как я могу явно определить, какие операции в моем движке происходят, когда
EVP_[En/De]cryptInit_ex(..)
,EVP_[En/De]cryptUpdate(..)
, а такжеEVP_[En/De]cryptFinal_ex(..)
функции вызываются из программы драйвера? - Нужно ли моему движку обрабатывать заполнение входных данных при шифровании и удаление дополнения при расшифровке? Или EVP API обрабатывает заполнение для меня, и мне нужно беспокоиться только об основном алгоритме AES для произвольных входных данных? (для справки, я хотел бы просто использовать стандартные отступы PKCS)
Заранее спасибо!
** Я использую Xilinx Zynq SoC, поэтому я могу создавать собственное оборудование в программируемой логике, а затем взаимодействовать с ним из программного обеспечения, работающего на процессоре, через карту памяти, как и любое периферийное устройство... подробности не имеют значения