Проблема с авторизацией. PKCS11. Многопоточность
Здравствуйте. Пытаюсь реализовать ЭЦП с использованием многопоточности в приложении. Изучил документацию PKCS11 и нашёл там, что для безопасного использования многопоточности необходимо определить аргументы для функции C_Initialize, что я и сделал:
CK_C_INITIALIZE_ARGS initArgs =
{
CK_CREATEMUTEX(), /* CreateMutex */
CK_DESTROYMUTEX(), /* DestroyMutex */
CK_LOCKMUTEX(), /* LockMutex */
CK_UNLOCKMUTEX(), /* UnlockMutex */
CKF_OS_LOCKING_OK, /* flags */
NULL_PTR, /* pReserved */
};
if (m_functionList->C_Initialize(&initArgs) != CKR_OK)
{
log_err(INIT_PKCS11_FAILED);
return FALSE;
}
Далее пытаюсь вызвать функцию ЭЦП по вашему примеру из SDK. В первом потоке авторизация проходит успешно, далее в каждом потоке при попытке залогиниться вылезает ошибка CKR_USER_ALREADY_LOGGED_IN. Стал её игнорировать в приложении, теперь только с использованием сессии, в которой залогинился формируется ЭЦП, во всех остальных потоках при попытке вызвать функцию
m_functionListEx->C_EX_PKCS7Sign(session, pbData, cbData, certificates[0], &signature, &signatureSize, privateKeys[0], NULL_PTR, 0, 0)
вылетает ошибка CKR_USER_NOT_LOGGED_IN.
Получается, при попытке залогиниться библиотека выдаёт мне ошибку, что я уже залогинился, а при вызове функции подписи говорит, что авторизации не было... Что я делаю не так?