pkcs11: changes in framework API
to prepare future enhancements and in the sake of uniformity in 'struct sc_pkcs11_framework_ops' the 'struct sc_pkcs11_card' argument of 'init_token' handler is changed for 'struct sc_pkcs11_slot' coding style issues
This commit is contained in:
parent
f43a9fa41c
commit
95b6b4ccd3
|
@ -1644,10 +1644,11 @@ pkcs15_change_pin(struct sc_pkcs11_slot *slot,
|
||||||
|
|
||||||
#ifdef USE_PKCS15_INIT
|
#ifdef USE_PKCS15_INIT
|
||||||
static CK_RV
|
static CK_RV
|
||||||
pkcs15_initialize(struct sc_pkcs11_card *p11card, void *ptr,
|
pkcs15_initialize(struct sc_pkcs11_slot *slot, void *ptr,
|
||||||
CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen,
|
CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen,
|
||||||
CK_UTF8CHAR_PTR pLabel)
|
CK_UTF8CHAR_PTR pLabel)
|
||||||
{
|
{
|
||||||
|
struct sc_pkcs11_card *p11card = slot->card;
|
||||||
struct sc_cardctl_pkcs11_init_token args;
|
struct sc_cardctl_pkcs11_init_token args;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
|
|
|
@ -368,9 +368,9 @@ CK_RV C_GetSlotList(CK_BBOOL tokenPresent, /* only slots with token prese
|
||||||
if (pulCount == NULL_PTR)
|
if (pulCount == NULL_PTR)
|
||||||
return CKR_ARGUMENTS_BAD;
|
return CKR_ARGUMENTS_BAD;
|
||||||
|
|
||||||
if ((rv = sc_pkcs11_lock()) != CKR_OK) {
|
rv = sc_pkcs11_lock();
|
||||||
|
if (rv != CKR_OK)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
|
||||||
|
|
||||||
sc_log(context, "C_GetSlotList(token=%d, %s)", tokenPresent,
|
sc_log(context, "C_GetSlotList(token=%d, %s)", tokenPresent,
|
||||||
(pSlotList==NULL_PTR && sc_pkcs11_conf.plug_and_play)? "plug-n-play":"refresh");
|
(pSlotList==NULL_PTR && sc_pkcs11_conf.plug_and_play)? "plug-n-play":"refresh");
|
||||||
|
@ -480,26 +480,35 @@ CK_RV C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
|
||||||
sc_log(context, "C_GetSlotInfo(0x%lx)", slotID);
|
sc_log(context, "C_GetSlotInfo(0x%lx)", slotID);
|
||||||
|
|
||||||
rv = slot_get_slot(slotID, &slot);
|
rv = slot_get_slot(slotID, &slot);
|
||||||
if (rv == CKR_OK){
|
sc_log(context, "C_GetSlotInfo() get slot rv %i", rv);
|
||||||
if (slot->reader == NULL)
|
if (rv == CKR_OK) {
|
||||||
|
if (slot->reader == NULL) {
|
||||||
rv = CKR_TOKEN_NOT_PRESENT;
|
rv = CKR_TOKEN_NOT_PRESENT;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
now = get_current_time();
|
now = get_current_time();
|
||||||
if (now >= slot->slot_state_expires || now == 0) {
|
if (now >= slot->slot_state_expires || now == 0) {
|
||||||
/* Update slot status */
|
/* Update slot status */
|
||||||
rv = card_detect(slot->reader);
|
rv = card_detect(slot->reader);
|
||||||
|
sc_log(context, "C_GetSlotInfo() card detect rv 0x%X", rv);
|
||||||
|
|
||||||
|
if (rv == CKR_TOKEN_NOT_RECOGNIZED || rv == CKR_OK)
|
||||||
|
slot->slot_info.flags |= CKF_TOKEN_PRESENT;
|
||||||
|
|
||||||
/* Don't ask again within the next second */
|
/* Don't ask again within the next second */
|
||||||
slot->slot_state_expires = now + 1000;
|
slot->slot_state_expires = now + 1000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rv == CKR_TOKEN_NOT_PRESENT || rv == CKR_TOKEN_NOT_RECOGNIZED)
|
if (rv == CKR_TOKEN_NOT_PRESENT || rv == CKR_TOKEN_NOT_RECOGNIZED)
|
||||||
rv = CKR_OK;
|
rv = CKR_OK;
|
||||||
|
|
||||||
if (rv == CKR_OK)
|
if (rv == CKR_OK)
|
||||||
memcpy(pInfo, &slot->slot_info, sizeof(CK_SLOT_INFO));
|
memcpy(pInfo, &slot->slot_info, sizeof(CK_SLOT_INFO));
|
||||||
|
|
||||||
sc_log(context, "C_GetSlotInfo(0x%lx) = %s", slotID, lookup_enum ( RV_T, rv ));
|
sc_log(context, "C_GetSlotInfo() flags 0x%X", pInfo->flags);
|
||||||
|
sc_log(context, "C_GetSlotInfo(0x%lx) = %s", slotID, lookup_enum( RV_T, rv));
|
||||||
sc_pkcs11_unlock();
|
sc_pkcs11_unlock();
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
@ -558,13 +567,22 @@ CK_RV C_InitToken(CK_SLOT_ID slotID,
|
||||||
CK_RV rv;
|
CK_RV rv;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
sc_log(context, "C_InitToken(pLabel='%s') called", pLabel);
|
||||||
rv = sc_pkcs11_lock();
|
rv = sc_pkcs11_lock();
|
||||||
if (rv != CKR_OK)
|
if (rv != CKR_OK)
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
rv = slot_get_token(slotID, &slot);
|
rv = slot_get_token(slotID, &slot);
|
||||||
if (rv != CKR_OK)
|
if (rv != CKR_OK) {
|
||||||
|
sc_log(context, "C_InitToken() get token error 0x%lX", rv);
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slot->card->framework->init_token == NULL) {
|
||||||
|
sc_log(context, "C_InitToken() not supported by framework");
|
||||||
|
rv = CKR_FUNCTION_NOT_SUPPORTED;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure there's no open session for this token */
|
/* Make sure there's no open session for this token */
|
||||||
for (i=0; i<list_size(&sessions); i++) {
|
for (i=0; i<list_size(&sessions); i++) {
|
||||||
|
@ -575,19 +593,15 @@ CK_RV C_InitToken(CK_SLOT_ID slotID,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (slot->card->framework->init_token == NULL) {
|
rv = slot->card->framework->init_token(slot,slot->fw_data, pPin, ulPinLen, pLabel);
|
||||||
rv = CKR_FUNCTION_NOT_SUPPORTED;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
rv = slot->card->framework->init_token(slot->card,
|
|
||||||
slot->fw_data, pPin, ulPinLen, pLabel);
|
|
||||||
|
|
||||||
if (rv == CKR_OK) {
|
if (rv == CKR_OK) {
|
||||||
/* Now we should re-bind all tokens so they get the
|
/* Now we should re-bind all tokens so they get the
|
||||||
* corresponding function vector and flags */
|
* corresponding function vector and flags */
|
||||||
}
|
}
|
||||||
|
|
||||||
out: sc_pkcs11_unlock();
|
out:
|
||||||
|
sc_pkcs11_unlock();
|
||||||
|
sc_log(context, "C_InitToken(pLabel='%s') returns 0x%lX", pLabel, rv);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,12 +159,10 @@ struct sc_pkcs11_framework_ops {
|
||||||
CK_RV (*change_pin)(struct sc_pkcs11_slot *,
|
CK_RV (*change_pin)(struct sc_pkcs11_slot *,
|
||||||
CK_CHAR_PTR, CK_ULONG,
|
CK_CHAR_PTR, CK_ULONG,
|
||||||
CK_CHAR_PTR, CK_ULONG);
|
CK_CHAR_PTR, CK_ULONG);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In future: functions to create new objects
|
* In future: functions to create new objects (ie. certificates, private keys)
|
||||||
* (ie. certificates, private keys)
|
|
||||||
*/
|
*/
|
||||||
CK_RV (*init_token)(struct sc_pkcs11_card *, void *,
|
CK_RV (*init_token)(struct sc_pkcs11_slot *, void *,
|
||||||
CK_UTF8CHAR_PTR, CK_ULONG,
|
CK_UTF8CHAR_PTR, CK_ULONG,
|
||||||
CK_UTF8CHAR_PTR);
|
CK_UTF8CHAR_PTR);
|
||||||
CK_RV (*init_pin)(struct sc_pkcs11_slot *,
|
CK_RV (*init_pin)(struct sc_pkcs11_slot *,
|
||||||
|
|
Loading…
Reference in New Issue