summaryrefslogtreecommitdiffstats
path: root/debian/patches/cherry-picked/1617856888.gnupg-2.3.0-4-gab66c4357.scd-fix-ccid-driver-for-scm-spr332-spr532.patch
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 */