minidriver: pinpad authentication is now working for smart card logon !!! (still needs 5 pinpad entries)
minidriver: minor fixes
This commit is contained in:
parent
6127fe6b77
commit
33cf161941
|
@ -108,6 +108,8 @@ HINSTANCE g_inst;
|
|||
#define IDC_PINPAD_TEXT 1001
|
||||
#define IDC_PINPAD_ICON 1000
|
||||
|
||||
/* magic to determine previous pinpad authentication */
|
||||
#define MAGIC_SESSION_PIN "opensc-minidriver"
|
||||
|
||||
struct md_directory {
|
||||
unsigned char parent[9];
|
||||
|
@ -2375,6 +2377,8 @@ DWORD md_translate_OpenSC_to_Windows_error(int OpenSCerror, DWORD dwDefaulCode)
|
|||
return SCARD_W_WRONG_CHV;
|
||||
|
||||
/* Returned by OpenSC library when called with invalid arguments */
|
||||
case SC_ERROR_INVALID_ARGUMENTS:
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
case SC_ERROR_BUFFER_TOO_SMALL:
|
||||
return NTE_BUFFER_TOO_SMALL;
|
||||
|
||||
|
@ -3689,6 +3693,12 @@ DWORD WINAPI CardAuthenticateEx(__in PCARD_DATA pCardData,
|
|||
logprintf(pCardData, 7, "PIN pad=%s, pbPinData=%p, hwndParent=%p\n",
|
||||
vs->reader->capabilities & SC_READER_CAP_PIN_PAD ? "yes" : "no", pbPinData, vs->hwndParent);
|
||||
|
||||
/* check if the pin is the session pin generated by a previous authentication with a pinpad */
|
||||
if (pbPinData != NULL && cbPinData == sizeof(MAGIC_SESSION_PIN) && memcmp(MAGIC_SESSION_PIN, pbPinData, sizeof(MAGIC_SESSION_PIN)) == 0) {
|
||||
pbPinData = NULL;
|
||||
cbPinData = 0;
|
||||
}
|
||||
|
||||
r = md_dialog_perform_pin_operation(pCardData, SC_PIN_CMD_VERIFY, vs->p15card, pin_obj, (const u8 *) pbPinData, cbPinData, NULL, 0, DisplayPinpadUI);
|
||||
|
||||
if (r) {
|
||||
|
@ -3707,6 +3717,19 @@ DWORD WINAPI CardAuthenticateEx(__in PCARD_DATA pCardData,
|
|||
|
||||
logprintf(pCardData, 2, "Pin code correct.\n");
|
||||
|
||||
/* set the session pin according to the minidriver specification */
|
||||
if (dwFlags == CARD_AUTHENTICATE_GENERATE_SESSION_PIN && (vs->reader->capabilities & SC_READER_CAP_PIN_PAD)) {
|
||||
/* we set it to a special value for pinpad authentication to force a new pinpad authentication */
|
||||
if (pcbSessionPin) *pcbSessionPin = sizeof(MAGIC_SESSION_PIN);
|
||||
if (ppbSessionPin) {
|
||||
*ppbSessionPin = pCardData->pfnCspAlloc(sizeof(MAGIC_SESSION_PIN));
|
||||
if (ppbSessionPin) memcpy(*ppbSessionPin, MAGIC_SESSION_PIN, sizeof(MAGIC_SESSION_PIN));
|
||||
}
|
||||
} else {
|
||||
if (pcbSessionPin) *pcbSessionPin = 0;
|
||||
if (ppbSessionPin) *ppbSessionPin = NULL;
|
||||
}
|
||||
|
||||
dwret = md_get_cardcf(pCardData, &cardcf);
|
||||
if (dwret != SCARD_S_SUCCESS)
|
||||
return dwret;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include <winresrc.h>
|
||||
|
||||
#define IDC_STATIC -1
|
||||
/* defined twice: in versioninfo-minidriver.rc.in and in minidriver.c */
|
||||
#define IDD_PINPAD 101
|
||||
#define IDC_PINPAD_TEXT 1001
|
||||
|
|
Loading…
Reference in New Issue