diff options
author | NIIBE Yutaka <[email protected]> | 2021-04-08 04:41:28 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2021-04-08 04:45:38 +0000 |
commit | f8ae51977ce4079d638d1ae2f3dd1da41c02a6d7 (patch) | |
tree | a097532ccc387bfa05606321cf87e59acf211c1d | |
parent | gpg: Fix new pseudo option compliance_de_vs (diff) | |
download | gnupg-f8ae51977ce4079d638d1ae2f3dd1da41c02a6d7.tar.gz gnupg-f8ae51977ce4079d638d1ae2f3dd1da41c02a6d7.zip |
scd: Fix CCID driver for SCM SPR332/SPR532.
* scd/ccid-driver.c (ccid_vendor_specific_pinpad_setup): New.
(ccid_vendor_specific_setup): Only send CLEAR_HALT.
(ccid_transceive_secure): Each time, use send_escape_cmd.
--
Cherry-pick master commit of:
ab66c4357595b8a10ca25fd735f439fe795919b2
GnuPG-bug-id: 5297
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | scd/ccid-driver.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index ddc83200b..bacf9ce40 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -1304,10 +1304,20 @@ ccid_vendor_specific_setup (ccid_driver_t handle) { if (handle->id_vendor == VENDOR_SCM && handle->id_product == SCM_SPR532) { + libusb_clear_halt (handle->idev, handle->ep_intr); + } + return 0; +} + + +static int +ccid_vendor_specific_pinpad_setup (ccid_driver_t handle) +{ + if (handle->id_vendor == VENDOR_SCM && handle->id_product == SCM_SPR532) + { DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n"); send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3, NULL, 0, NULL); - libusb_clear_halt (handle->idev, handle->ep_intr); } return 0; } @@ -3583,6 +3593,8 @@ ccid_transceive_secure (ccid_driver_t handle, if (pininfo->fixedlen < 0 || pininfo->fixedlen >= 16) return CCID_DRIVER_ERR_NOT_SUPPORTED; + ccid_vendor_specific_pinpad_setup (handle); + msg = send_buffer; msg[0] = cherry_mode? 0x89 : PC_to_RDR_Secure; msg[5] = 0; /* slot */ |