- pin pad changes from Stef

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@839 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
okir 2003-01-06 19:28:48 +00:00
parent 8229351cce
commit 9c5782e2b2
2 changed files with 24 additions and 0 deletions

View File

@ -253,6 +253,8 @@ static void pkcs15_init_slot(struct sc_pkcs15_card *card,
slot->token_info.flags |= CKF_USER_PIN_INITIALIZED
| CKF_TOKEN_INITIALIZED
| CKF_WRITE_PROTECTED;
if (card->card->slot->capabilities & SC_SLOT_CAP_PIN_PAD)
slot->token_info.flags |= CKF_PROTECTED_AUTHENTICATION_PATH;
slot->fw_data = fw_data = (struct pkcs15_slot_data *) calloc(1, sizeof(*fw_data));
fw_data->auth_obj = auth;
@ -448,6 +450,16 @@ static CK_RV pkcs15_login(struct sc_pkcs11_card *p11card,
}
pin = (struct sc_pkcs15_pin_info *) auth_object->data;
if (p11card->card->slot->capabilities & SC_SLOT_CAP_PIN_PAD) {
/* pPin should be NULL in case of a pin pad reader, but
* some apps (e.g. older Netscapes) don't know about it.
* So we don't require that pPin == NULL, but set it to
* NULL ourselves. This way, you can supply an empty (if
* possible) or fake PIN if an application asks a PIN).
*/
pPin = NULL;
ulPinLen = 0;
} else
if (ulPinLen < pin->min_length ||
ulPinLen > pin->stored_length)
return CKR_PIN_LEN_RANGE;
@ -498,6 +510,16 @@ static CK_RV pkcs15_change_pin(struct sc_pkcs11_card *p11card,
if (!(pin = slot_data_pin_info(fw_token)))
return CKR_USER_PIN_NOT_INITIALIZED;
if (p11card->card->slot->capabilities & SC_SLOT_CAP_PIN_PAD) {
/* pPin should be NULL in case of a pin pad reader, but
* some apps (e.g. older Netscapes) don't know about it.
* So we don't require that pPin == NULL, but set it to
* NULL ourselves. This way, you can supply an empty (if
* possible) or fake PIN if an application asks a PIN).
*/
pOldPin = pNewPin = NULL;
ulOldLen = ulNewLen = 0;
} else
if (ulNewLen < pin->min_length ||
ulNewLen > pin->stored_length)
return CKR_PIN_LEN_RANGE;

View File

@ -53,6 +53,8 @@ CK_RV sc_to_cryptoki_error(int rc, int reader)
return CKR_TOKEN_NOT_RECOGNIZED;
case SC_ERROR_WRONG_LENGTH:
return CKR_DATA_LEN_RANGE;
case SC_ERROR_INVALID_PIN_LENGTH:
return CKR_PIN_LEN_RANGE;
}
return CKR_GENERAL_ERROR;
}