opensc-pkcs11 не получает токен
Я пишу пример программы с использованием opensc-pkcs11.so в RedHat Linux. Это для чисто программной реализации шифрования / дешифрования AES. Я не использую ни для какой карты. Моя программа успешно использует криптоки, но выдает ошибку CKR_TOKEN_NOT_PRESENT. приведен фрагмент кода.
CK_FUNCTION_LIST_PTR pFunctionList;
CK_C_Initialize pC_Initialize;
CK_RV rv;
rv = C_GetFunctionList(&pFunctionList);
if(rv == CKR_OK)
pC_Initialize = pFunctionList -> C_Initialize;
rv = (*pC_Initialize)(NULL_PTR);
CK_ULONG ulSlotCount;
CK_SLOT_ID_PTR pSlotList;
CK_C_GetSlotList pC_GetSlotList;
pC_GetSlotList = pFunctionList -> C_GetSlotList;
rv = (*pC_GetSlotList)(CK_FALSE, NULL_PTR, &ulSlotCount);
/* Get list of all slots */
//rv = C_GetSlotList(FALSE, NULL_PTR, &ulSlotCount);
if (rv == CKR_OK)
{
cout<<"ulSlotCount="<<ulSlotCount<<endl;
pSlotList =
(CK_SLOT_ID_PTR)
malloc(ulSlotCount*sizeof(CK_SLOT_ID));
//rv = C_GetSlotList(FALSE, pSlotList, &ulSlotCount);
rv = (*pC_GetSlotList)(CK_FALSE, pSlotList, &ulSlotCount);
if (rv == CKR_OK)
{
/* Now use that list of all slots */
l_lSlotId = pSlotList[0];
cerr<<"lSlotId="<<l_lSlotId<<endl;
}
CK_SLOT_INFO slotInfo;
CK_TOKEN_INFO tokenInfo;
CK_C_GetSlotInfo pC_GetSlotInfo;
pC_GetSlotInfo = pFunctionList -> C_GetSlotInfo;
/* Get slot information for first slot */
rv = (*pC_GetSlotInfo)(pSlotList[0], &slotInfo);
fprintf(stderr, "pC_GetSlotInfo: rv = 0x%.8X\n", rv);
if(rv == CKR_OK)
{
/* Get token information for first slot */
cerr<<"pC_GetSlotInfo OK"<<endl;
CK_C_GetTokenInfo pC_GetTokenInfo;
pC_GetTokenInfo = pFunctionList -> C_GetTokenInfo;
rv = (*pC_GetTokenInfo)(pSlotList[0], &tokenInfo);
}
fprintf(stderr, "pC_GetTokenInfo: rv = 0x%.8X\n", rv);
if (rv == CKR_TOKEN_NOT_PRESENT)
{
cerr<<"CKR_TOKEN_NOT_PRESENT"<<endl;
}
free(pSlotList);
}
Кто-нибудь может дать представление о том, что происходит? Я полагаю, что opensc-pkcs11 может быть использован только для реализации программного обеспечения. Заранее спасибо.
1 ответ
Библиотека PKCS#11, поставляемая с OpenSC, действует "только как драйвер" для набора общедоступных криптографических смарт-карт, поэтому, если к вашему компьютеру не подключен физический кардридер, он не найдет никаких слотов. Если вы ищете чисто программную реализацию PKCS#11, то я считаю, что вы должны выбрать один из моих ответов на ваш предыдущий вопрос. Если ни один из них не соответствует вашим потребностям, то, возможно, вы могли бы использовать какую-то криптографическую библиотеку общего назначения, такую как OpenSSL, GnuTLS или Botan.