Subject: Scd: Fix CCID driver for SCM SPR332/SPR532 Origin: gnupg-2.3.0-4-gab66c4357 Upstream-Author: NIIBE Yutaka Date: Thu Apr 8 13:41:28 2021 +0900 Bug-Debian: https://bugs.debian.org/982546 * 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. -- GnuPG-bug-id: 5297 Signed-off-by: NIIBE Yutaka --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -1304,10 +1304,20 @@ { 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 @@ 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 */