"unknown key type" на динамически подключеном rtengine
Пытаюсь проверить работу rtengine в openssl.
Окружение: все dll и exe из свежего sdk. Windows10. Имею экземпляр Рутокен ЭЦП с импортированной на него неэкспортируемой ключевой парой.
c:\Work\git\usb_test\test>openssl
OpenSSL> engine dynamic -pre SO_PATH:c:\Work\git\usb_test\test\rtengine.dll -pre ID:rtengine -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:c:\Work\git\usb_test\test\rtpkcs11ecp.dll
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:c:\Work\git\usb_test\test\rtengine.dll
[Success]: ID:rtengine
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:c:\Work\git\usb_test\test\rtpkcs11ecp.dll
Loaded: (rtengine) Rutoken engine
OpenSSL> engine -t
(dynamic) Dynamic engine loading support
[ unavailable ]
(capi) CryptoAPI ENGINE
[ available ]
(rtengine) Rutoken engine
[ available ]
OpenSSL> s_client -connect myownsite:1446 -CAfile g:\share\2313\ca.crt -keyform engine -key "pkcs11:id=ef3f68e6-28dd-4155-b88f-8888a6b8a5a6_E" -engine rtengine
engine "rtengine" set.
Enter PKCS#11 token PIN:
cannot load client certificate private key file from engine
10748:error:8206D0D6:lib(130):init_algorithm_nid:unknown key type:C:\j\workspace\rtengine-build\e458e80a\engine\p11\gost_key.c:56:
10748:error:8207E0DF:lib(130):rt_eng_get0_ec_key:wrong key:C:\j\workspace\rtengine-build\e458e80a\engine\ec.c:59:
10748:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:crypto\engine\eng_pkey.c:78:
unable to load client certificate private key file
error in s_client
А вообще конечная цель это подключить rutoken к qt(С++) проекту и проходить c помощью токенов авторизацию на сервере. Процедура успешно обкатана в браузерах.
Пробовал 2 варианта:
1) На динамическом подключении (через функции ENGINE_ctrl_cmd_string) получаю ту же ошибку unknown key type.
2) При использовании кода вида
rt_eng_init();e = rt_eng_get0_engine();ENGINE_set_default(e, ENGINE_METHOD_ALL);
при вызове ENGINE_load_private_key получаю ошибку "no load function". Также не смог понять как в этом случае в инициализацию передать адрес до библиотеки rtpkcs11ecp.dll. Откуда он пытается её взять?