Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Eretic от Октябрь 02, 2012, 19:28



Название: QCA::isSupported возвращает false
Отправлено: Eretic от Октябрь 02, 2012, 19:28
Приветствую всех кто зашёл в темку.
Помогите решить проблему.

Пример с http://delta.affinix.com/docs/qca/ciphertest_8cpp-example.html (http://delta.affinix.com/docs/qca/ciphertest_8cpp-example.html)

Код:
if(!QCA::isSupported("aes128-cbc-pkcs7"))
        printf("AES128-CBC not supported!\n");     //<-- заходит сюда

Система Ubuntu.
Скачал и поставил qca-2.0.3.tar.bz2.
Далее скачал и поставил qca-ossl-2.0.0-beta3.tar.bz2.

QtCreator добавил получившиеся библиотеки (libqca.so и libqca-ossl.so).
Ошибка воспроизводится.

Положил libqca-ossl.so в папку с прогой.
Ошибка воспроизводится.

В репозитории Ubuntu нашёл QCA. Поставил. Написано:
Цитировать
QCA OSSL plugin for libqca2
 
This plugin provides features based on OpenSSL. It implements:
 * Hashing - SHA1, SHA0, RIPEMD160, MD2, MD4, MD5
 * Hashing - SHA224, SHA256, SHA384 and SHA512 (for openssl 0.9.8)
 * Block Ciphers
 * Keyed Hash Message Authentication Code (HMAC), using SHA1, MD5, RIPEMD160
 * Public keys - RSA, DSA, Diffie-Hellman

Попробовал изменить aes128-cbc-pkcs7 на pkey.
Ошибка воспроизводится.

Что не так я делаю?

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


Название: Re: QCA::isSupported возвращает false
Отправлено: Eretic от Октябрь 02, 2012, 22:38
Странно что sha1 возвращает true.

Откуда вообще QCA::isSupported берёт значения? Как и где ищет нужные  плагины?


Название: Re: QCA::isSupported возвращает false
Отправлено: Eretic от Октябрь 03, 2012, 10:17
Проблему решил. Debug всему голова :) Опишу может кому пригодится.

Медот QCA::isSupported ищет плагины в 2ух папках.
Код:
const QStringList dirs = QCoreApplication::libraryPaths();
Цитировать
   dirs   <2 элемента>   QStringList
      
  •    "/my user folder/QtSDK/Desktop/Qt/4.8.1/gcc/plugins"   QString
  • [1]   "/my user folder/QtSDK/myprogram-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK_______"   QString
Далее следующий код смотрит необходимую поддиректорию:
Код:
QDir dir(libpath.filePath(PLUGIN_SUBDIR));
if(!dir.exists())
{
logDebug("  (No 'crypto' subdirectory)");
continue;
}

Создаём директорию crypto в /my user folder/QtSDK/Desktop/Qt/4.8.1/gcc/plugins  и кидаем туда libqca-ossl.so

Qt находит эту либу, понимает что это:
Цитировать
   className   "opensslPlugin"   QString
   providerName   "qca-ossl"   QString

Далее всё работает.

Спасибо.