mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
SCD: Add vendor specific initalization.
* scd/ccid-driver.c (ccid_vendor_specific_init): New. (ccid_open_reader): Call ccid_vendor_specific_init.
This commit is contained in:
parent
675ddb4e53
commit
c5f73c39b5
@ -303,6 +303,9 @@ static int bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length,
|
|||||||
size_t *nread, int expected_type, int seqno, int timeout,
|
size_t *nread, int expected_type, int seqno, int timeout,
|
||||||
int no_debug);
|
int no_debug);
|
||||||
static int abort_cmd (ccid_driver_t handle, int seqno);
|
static int abort_cmd (ccid_driver_t handle, int seqno);
|
||||||
|
static int send_escape_cmd (ccid_driver_t handle, const unsigned char *data,
|
||||||
|
size_t datalen, unsigned char *result,
|
||||||
|
size_t resultmax, size_t *resultlen);
|
||||||
|
|
||||||
/* Convert a little endian stored 4 byte value into an unsigned
|
/* Convert a little endian stored 4 byte value into an unsigned
|
||||||
integer. */
|
integer. */
|
||||||
@ -1525,6 +1528,29 @@ ccid_get_reader_list (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Vendor specific custom initialization. */
|
||||||
|
static int
|
||||||
|
ccid_vendor_specific_init (ccid_driver_t handle)
|
||||||
|
{
|
||||||
|
if (handle->id_vendor == VENDOR_VEGA && handle->id_product == VEGA_ALPHA)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Vega alpha has a feature to show retry counter on the pinpad
|
||||||
|
* display. But it assumes that the card returns the value of
|
||||||
|
* retry counter by VERIFY with empty data (return code of
|
||||||
|
* 63Cx). Unfortunately, existing OpenPGP cards don't support
|
||||||
|
* VERIFY command with empty data. This vendor specific command
|
||||||
|
* sequence is to disable the feature.
|
||||||
|
*/
|
||||||
|
const unsigned char cmd[] = "\xb5\x01\x00\x03\x00";
|
||||||
|
|
||||||
|
return send_escape_cmd (handle, cmd, sizeof (cmd), NULL, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Open the reader with the internal number READERNO and return a
|
/* Open the reader with the internal number READERNO and return a
|
||||||
pointer to be used as handle in HANDLE. Returns 0 on success. */
|
pointer to be used as handle in HANDLE. Returns 0 on success. */
|
||||||
int
|
int
|
||||||
@ -1633,6 +1659,8 @@ ccid_open_reader (ccid_driver_t *handle, const char *readerid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = ccid_vendor_specific_init (*handle);
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
free (ifcdesc_extra);
|
free (ifcdesc_extra);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user