Криптопровайдеры
QCA работает по концепции «криптопровайдера».
Существует ограниченный внутренний криптопровайдер (с именем «default»), но большая часть работы выполняется в плагинах.
Логика выбора криптопровайдера довольно проста. Пользователь может указать имя криптопровайдера. Если это имя существует и криптопровайдер поддерживает запрошенную функцию, то используется названный криптопровайдер. Если это не сработало, выполняется поиск запрошенной функции в доступных плагинах (в соответствии с порядком приоритета). Если и это не сработает, выполняется поиск запрошенной функции у криптопровайдера по умолчанию.
Таким образом, единственный способ получить криптопровайдера по умолчанию — либо вообще не иметь
никакой другой поддержки, либо напрямую указать криптопровайдера по умолчанию (это относится к
конструкторам алгоритмов, а также setGlobalRNG())
.
Можно добавить собственного криптопровайдера двумя способами — как плагин общего объекта и как часть клиентского кода.
Плагин общих объектов должен быть найден с помощью встроенной логики сканирования. Обычно это означает, что нужно установить его в подкаталог plugins/crypto в каталоге, где установлен Qt. Такое действие сделает его доступным для всех приложений.
Если домен приложения ограничен (например, из-за специализированного алгоритма или необходимости быть совместимым с ошибками), может быть проще создать криптопровайдера на стороне клиента и добавить его с помощью вызова QCA::insertProvider. Пример этого подхода: пример AES-CMAC.