blob: a54ff93496b7ca1d6ca508d29bc0ee7c4cd11b95 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
Subject: Scd: Fix CCID driver for SCM SPR332/SPR532
Origin: gnupg-2.3.0-4-gab66c4357
Upstream-Author: NIIBE Yutaka <gniibe@fsij.org>
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 <gniibe@fsij.org>
--- 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 */
|