- updated patch to pcsclite trunk
- changed default ccid command buffer size to support sending extended apdus in a single transmit (only for ccid-1.3.11 necessary) git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@276 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
@@ -455,6 +455,31 @@ Index: ccid-1.3.11/src/ccid.h
|
|||||||
|
|
||||||
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
||||||
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
||||||
|
Index: ccid-1.3.11/src/defs.h
|
||||||
|
===================================================================
|
||||||
|
--- ccid-1.3.11/src/defs.h (Revision 4347)
|
||||||
|
+++ ccid-1.3.11/src/defs.h (Arbeitskopie)
|
||||||
|
@@ -66,16 +66,10 @@
|
||||||
|
/* Flag set when a power down is requested */
|
||||||
|
#define MASK_POWERFLAGS_PDWN 0x02
|
||||||
|
|
||||||
|
-/* Kobil readers does not support APDU chaining for T=1 so you can't send an
|
||||||
|
- * extended APDU. The readers supports a command of up to 512 or 420 bytes.
|
||||||
|
- * For a Kobil KAAN Base/advanced reader you should use
|
||||||
|
- * #define CMD_BUF_SIZE 420
|
||||||
|
- * For the other models you should use
|
||||||
|
- * #define CMD_BUF_SIZE 512
|
||||||
|
- * Kobil is aware of the problem and do not plan to solve it.
|
||||||
|
- */
|
||||||
|
-/* Communication buffer size (max=adpu+Lc+data+Le) */
|
||||||
|
-#define CMD_BUF_SIZE (4+1+256+1)
|
||||||
|
+/* Communication buffer size (max=adpu+Lc+data+Le)
|
||||||
|
+ * * we use a 64kB for extended APDU on APDU mode readers */
|
||||||
|
+#define CMD_BUF_SIZE (4 +3 +64*1024 +3)
|
||||||
|
+
|
||||||
|
/* Larger communication buffer size (max=reader status+data+sw) */
|
||||||
|
#define RESP_BUF_SIZE (1+256+2)
|
||||||
|
|
||||||
Index: ccid-1.3.11/src/ccid_ifdhandler.h
|
Index: ccid-1.3.11/src/ccid_ifdhandler.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- ccid-1.3.11/src/ccid_ifdhandler.h (Revision 4347)
|
--- ccid-1.3.11/src/ccid_ifdhandler.h (Revision 4347)
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
Index: ccid-1.3.11/src/ifdhandler.c
|
Index: ccid-1.3.13/src/ifdhandler.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- ccid-1.3.11/src/ifdhandler.c (Revision 4979)
|
--- ccid-1.3.13/src/ifdhandler.c (Revision 4979)
|
||||||
+++ ccid-1.3.11/src/ifdhandler.c (Arbeitskopie)
|
+++ ccid-1.3.13/src/ifdhandler.c (Arbeitskopie)
|
||||||
@@ -1384,6 +1384,16 @@
|
@@ -1384,6 +1384,16 @@
|
||||||
iBytesReturned += sizeof(PCSC_TLV_STRUCTURE);
|
iBytesReturned += sizeof(PCSC_TLV_STRUCTURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (get_ccid_descriptor(reader_index) -> bPINSupport & CCID_CLASS_PIN_PACE_CAPABILITIES)
|
+ if (ccid_descriptor -> bPINSupport & CCID_CLASS_PIN_PACE_CAPABILITIES)
|
||||||
+ {
|
+ {
|
||||||
+ pcsc_tlv -> tag = FEATURE_EXECUTE_PACE;
|
+ pcsc_tlv -> tag = FEATURE_EXECUTE_PACE;
|
||||||
+ pcsc_tlv -> length = 0x04; /* always 0x04 */
|
+ pcsc_tlv -> length = 0x04; /* always 0x04 */
|
||||||
@@ -63,10 +63,10 @@ Index: ccid-1.3.11/src/ifdhandler.c
|
|||||||
if (IFD_SUCCESS != return_value)
|
if (IFD_SUCCESS != return_value)
|
||||||
*pdwBytesReturned = 0;
|
*pdwBytesReturned = 0;
|
||||||
|
|
||||||
Index: ccid-1.3.11/src/commands.c
|
Index: ccid-1.3.13/src/commands.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- ccid-1.3.11/src/commands.c (Revision 4979)
|
--- ccid-1.3.13/src/commands.c (Revision 4979)
|
||||||
+++ ccid-1.3.11/src/commands.c (Arbeitskopie)
|
+++ ccid-1.3.13/src/commands.c (Arbeitskopie)
|
||||||
@@ -68,7 +68,19 @@
|
@@ -68,7 +68,19 @@
|
||||||
unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
|
unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
|
||||||
unsigned char rx_buffer[]);
|
unsigned char rx_buffer[]);
|
||||||
@@ -410,10 +410,10 @@ Index: ccid-1.3.11/src/commands.c
|
|||||||
+ buffer[1] = (value >> 8) & 0xFF;
|
+ buffer[1] = (value >> 8) & 0xFF;
|
||||||
+} /* i2w */
|
+} /* i2w */
|
||||||
+
|
+
|
||||||
Index: ccid-1.3.11/src/commands.h
|
Index: ccid-1.3.13/src/commands.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- ccid-1.3.11/src/commands.h (Revision 4979)
|
--- ccid-1.3.13/src/commands.h (Revision 4979)
|
||||||
+++ ccid-1.3.11/src/commands.h (Arbeitskopie)
|
+++ ccid-1.3.13/src/commands.h (Arbeitskopie)
|
||||||
@@ -37,6 +37,14 @@
|
@@ -37,6 +37,14 @@
|
||||||
unsigned char TxBuffer[], unsigned int TxLength,
|
unsigned char TxBuffer[], unsigned int TxLength,
|
||||||
unsigned char RxBuffer[], unsigned int *RxLength);
|
unsigned char RxBuffer[], unsigned int *RxLength);
|
||||||
@@ -429,10 +429,10 @@ Index: ccid-1.3.11/src/commands.h
|
|||||||
RESPONSECODE CmdEscape(unsigned int reader_index,
|
RESPONSECODE CmdEscape(unsigned int reader_index,
|
||||||
const unsigned char TxBuffer[], unsigned int TxLength,
|
const unsigned char TxBuffer[], unsigned int TxLength,
|
||||||
unsigned char RxBuffer[], unsigned int *RxLength);
|
unsigned char RxBuffer[], unsigned int *RxLength);
|
||||||
Index: ccid-1.3.11/src/ccid.h
|
Index: ccid-1.3.13/src/ccid.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- ccid-1.3.11/src/ccid.h (Revision 4979)
|
--- ccid-1.3.13/src/ccid.h (Revision 4979)
|
||||||
+++ ccid-1.3.11/src/ccid.h (Arbeitskopie)
|
+++ ccid-1.3.13/src/ccid.h (Arbeitskopie)
|
||||||
@@ -142,8 +142,10 @@
|
@@ -142,8 +142,10 @@
|
||||||
#define CCID_CLASS_EXCHANGE_MASK 0x00070000
|
#define CCID_CLASS_EXCHANGE_MASK 0x00070000
|
||||||
|
|
||||||
@@ -455,10 +455,10 @@ Index: ccid-1.3.11/src/ccid.h
|
|||||||
|
|
||||||
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
||||||
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
||||||
Index: ccid-1.3.11/src/ccid_ifdhandler.h
|
Index: ccid-1.3.13/src/ccid_ifdhandler.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- ccid-1.3.11/src/ccid_ifdhandler.h (Revision 4979)
|
--- ccid-1.3.13/src/ccid_ifdhandler.h (Revision 4979)
|
||||||
+++ ccid-1.3.11/src/ccid_ifdhandler.h (Arbeitskopie)
|
+++ ccid-1.3.13/src/ccid_ifdhandler.h (Arbeitskopie)
|
||||||
@@ -37,6 +37,8 @@
|
@@ -37,6 +37,8 @@
|
||||||
SCARD_CTL_CODE(FEATURE_IFD_PIN_PROPERTIES + CLASS2_IOCTL_MAGIC)
|
SCARD_CTL_CODE(FEATURE_IFD_PIN_PROPERTIES + CLASS2_IOCTL_MAGIC)
|
||||||
#define IOCTL_FEATURE_GET_TLV_PROPERTIES \
|
#define IOCTL_FEATURE_GET_TLV_PROPERTIES \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Index: PCSC/src/PCSC/reader.h.in
|
Index: PCSC/src/PCSC/reader.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- PCSC/src/PCSC/reader.h.in (Revision 5067)
|
--- PCSC/src/PCSC/reader.h (Revision 5270)
|
||||||
+++ PCSC/src/PCSC/reader.h.in (Arbeitskopie)
|
+++ PCSC/src/PCSC/reader.h (Arbeitskopie)
|
||||||
@@ -121,6 +121,7 @@
|
@@ -121,6 +121,7 @@
|
||||||
#define FEATURE_IFD_DISPLAY_PROPERTIES 0x11
|
#define FEATURE_IFD_DISPLAY_PROPERTIES 0x11
|
||||||
#define FEATURE_GET_TLV_PROPERTIES 0x12
|
#define FEATURE_GET_TLV_PROPERTIES 0x12
|
||||||
@@ -12,13 +12,13 @@ Index: PCSC/src/PCSC/reader.h.in
|
|||||||
* "IFDs with Secure Pin Entry Capabilities" */
|
* "IFDs with Secure Pin Entry Capabilities" */
|
||||||
Index: Drivers/ccid/src/ifdhandler.c
|
Index: Drivers/ccid/src/ifdhandler.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- Drivers/ccid/src/ifdhandler.c (Revision 5067)
|
--- Drivers/ccid/src/ifdhandler.c (Revision 5270)
|
||||||
+++ Drivers/ccid/src/ifdhandler.c (Arbeitskopie)
|
+++ Drivers/ccid/src/ifdhandler.c (Arbeitskopie)
|
||||||
@@ -1417,6 +1417,16 @@
|
@@ -1397,6 +1397,16 @@
|
||||||
iBytesReturned += sizeof(PCSC_TLV_STRUCTURE);
|
iBytesReturned += sizeof(PCSC_TLV_STRUCTURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (get_ccid_descriptor(reader_index) -> bPINSupport & CCID_CLASS_PIN_PACE_CAPABILITIES)
|
+ if (ccid_descriptor -> bPINSupport & CCID_CLASS_PIN_PACE_CAPABILITIES)
|
||||||
+ {
|
+ {
|
||||||
+ pcsc_tlv -> tag = FEATURE_EXECUTE_PACE;
|
+ pcsc_tlv -> tag = FEATURE_EXECUTE_PACE;
|
||||||
+ pcsc_tlv -> length = 0x04; /* always 0x04 */
|
+ pcsc_tlv -> length = 0x04; /* always 0x04 */
|
||||||
@@ -31,7 +31,7 @@ Index: Drivers/ccid/src/ifdhandler.c
|
|||||||
/* We can always forward wLcdLayout */
|
/* We can always forward wLcdLayout */
|
||||||
pcsc_tlv -> tag = FEATURE_IFD_PIN_PROPERTIES;
|
pcsc_tlv -> tag = FEATURE_IFD_PIN_PROPERTIES;
|
||||||
pcsc_tlv -> length = 0x04; /* always 0x04 */
|
pcsc_tlv -> length = 0x04; /* always 0x04 */
|
||||||
@@ -1581,6 +1591,43 @@
|
@@ -1561,6 +1571,43 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,9 +77,9 @@ Index: Drivers/ccid/src/ifdhandler.c
|
|||||||
|
|
||||||
Index: Drivers/ccid/src/commands.c
|
Index: Drivers/ccid/src/commands.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- Drivers/ccid/src/commands.c (Revision 5067)
|
--- Drivers/ccid/src/commands.c (Revision 5270)
|
||||||
+++ Drivers/ccid/src/commands.c (Arbeitskopie)
|
+++ Drivers/ccid/src/commands.c (Arbeitskopie)
|
||||||
@@ -68,7 +68,19 @@
|
@@ -73,7 +73,19 @@
|
||||||
unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
|
unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length,
|
||||||
unsigned char rx_buffer[]);
|
unsigned char rx_buffer[]);
|
||||||
|
|
||||||
@@ -96,10 +96,10 @@ Index: Drivers/ccid/src/commands.c
|
|||||||
+
|
+
|
||||||
static void i2dw(int value, unsigned char *buffer);
|
static void i2dw(int value, unsigned char *buffer);
|
||||||
+static void i2w(uint16_t value, unsigned char *buffer);
|
+static void i2w(uint16_t value, unsigned char *buffer);
|
||||||
|
static unsigned int bei2i(unsigned char *buffer);
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
@@ -751,7 +763,302 @@
|
||||||
@@ -712,7 +724,306 @@
|
|
||||||
return ret;
|
return ret;
|
||||||
} /* SecurePINModify */
|
} /* SecurePINModify */
|
||||||
|
|
||||||
@@ -348,10 +348,8 @@ Index: Drivers/ccid/src/commands.c
|
|||||||
+ res = WritePort(reader_index, 11 + TxLength, cmd);
|
+ res = WritePort(reader_index, 11 + TxLength, cmd);
|
||||||
+ if (res != STATUS_SUCCESS)
|
+ if (res != STATUS_SUCCESS)
|
||||||
+ {
|
+ {
|
||||||
+ DEBUG_CRITICAL("");
|
|
||||||
+ if (STATUS_NO_SUCH_DEVICE == res)
|
+ if (STATUS_NO_SUCH_DEVICE == res)
|
||||||
+ return IFD_NO_SUCH_DEVICE;
|
+ return IFD_NO_SUCH_DEVICE;
|
||||||
+ DEBUG_CRITICAL("");
|
|
||||||
+ return IFD_COMMUNICATION_ERROR;
|
+ return IFD_COMMUNICATION_ERROR;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -359,10 +357,8 @@ Index: Drivers/ccid/src/commands.c
|
|||||||
+ res = ReadPort(reader_index, &length, cmd);
|
+ res = ReadPort(reader_index, &length, cmd);
|
||||||
+ if (res != STATUS_SUCCESS)
|
+ if (res != STATUS_SUCCESS)
|
||||||
+ {
|
+ {
|
||||||
+ DEBUG_CRITICAL("");
|
|
||||||
+ if (STATUS_NO_SUCH_DEVICE == res)
|
+ if (STATUS_NO_SUCH_DEVICE == res)
|
||||||
+ return IFD_NO_SUCH_DEVICE;
|
+ return IFD_NO_SUCH_DEVICE;
|
||||||
+ DEBUG_CRITICAL("");
|
|
||||||
+ return IFD_COMMUNICATION_ERROR;
|
+ return IFD_COMMUNICATION_ERROR;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -406,12 +402,12 @@ Index: Drivers/ccid/src/commands.c
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* Escape
|
* Escape
|
||||||
@@ -2113,3 +2424,15 @@
|
@@ -2152,7 +2459,20 @@
|
||||||
buffer[3] = (value >> 24) & 0xFF;
|
buffer[3] = (value >> 24) & 0xFF;
|
||||||
} /* i2dw */
|
} /* i2dw */
|
||||||
|
|
||||||
+
|
+
|
||||||
+/*****************************************************************************
|
/*****************************************************************************
|
||||||
+ *
|
+ *
|
||||||
+ * i2w
|
+ * i2w
|
||||||
+ *
|
+ *
|
||||||
@@ -422,9 +418,14 @@ Index: Drivers/ccid/src/commands.c
|
|||||||
+ buffer[1] = (value >> 8) & 0xFF;
|
+ buffer[1] = (value >> 8) & 0xFF;
|
||||||
+} /* i2w */
|
+} /* i2w */
|
||||||
+
|
+
|
||||||
|
+
|
||||||
|
+/*****************************************************************************
|
||||||
|
*
|
||||||
|
* bei2i (big endian integer to host order interger)
|
||||||
|
*
|
||||||
Index: Drivers/ccid/src/commands.h
|
Index: Drivers/ccid/src/commands.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- Drivers/ccid/src/commands.h (Revision 5067)
|
--- Drivers/ccid/src/commands.h (Revision 5270)
|
||||||
+++ Drivers/ccid/src/commands.h (Arbeitskopie)
|
+++ Drivers/ccid/src/commands.h (Arbeitskopie)
|
||||||
@@ -37,6 +37,14 @@
|
@@ -37,6 +37,14 @@
|
||||||
unsigned char TxBuffer[], unsigned int TxLength,
|
unsigned char TxBuffer[], unsigned int TxLength,
|
||||||
@@ -441,9 +442,22 @@ Index: Drivers/ccid/src/commands.h
|
|||||||
RESPONSECODE CmdEscape(unsigned int reader_index,
|
RESPONSECODE CmdEscape(unsigned int reader_index,
|
||||||
const unsigned char TxBuffer[], unsigned int TxLength,
|
const unsigned char TxBuffer[], unsigned int TxLength,
|
||||||
unsigned char RxBuffer[], unsigned int *RxLength);
|
unsigned char RxBuffer[], unsigned int *RxLength);
|
||||||
|
Index: Drivers/ccid/src/ccid_ifdhandler.h
|
||||||
|
===================================================================
|
||||||
|
--- Drivers/ccid/src/ccid_ifdhandler.h (Revision 5270)
|
||||||
|
+++ Drivers/ccid/src/ccid_ifdhandler.h (Arbeitskopie)
|
||||||
|
@@ -37,6 +37,8 @@
|
||||||
|
SCARD_CTL_CODE(FEATURE_IFD_PIN_PROPERTIES + CLASS2_IOCTL_MAGIC)
|
||||||
|
#define IOCTL_FEATURE_GET_TLV_PROPERTIES \
|
||||||
|
SCARD_CTL_CODE(FEATURE_GET_TLV_PROPERTIES + CLASS2_IOCTL_MAGIC)
|
||||||
|
+#define IOCTL_FEATURE_EXECUTE_PACE \
|
||||||
|
+ SCARD_CTL_CODE(FEATURE_EXECUTE_PACE + CLASS2_IOCTL_MAGIC)
|
||||||
|
|
||||||
|
#define DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED 1
|
||||||
|
#define DRIVER_OPTION_GEMPC_TWIN_KEY_APDU 2
|
||||||
Index: Drivers/ccid/src/ccid.h
|
Index: Drivers/ccid/src/ccid.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- Drivers/ccid/src/ccid.h (Revision 5067)
|
--- Drivers/ccid/src/ccid.h (Revision 5270)
|
||||||
+++ Drivers/ccid/src/ccid.h (Arbeitskopie)
|
+++ Drivers/ccid/src/ccid.h (Arbeitskopie)
|
||||||
@@ -142,8 +142,10 @@
|
@@ -142,8 +142,10 @@
|
||||||
#define CCID_CLASS_EXCHANGE_MASK 0x00070000
|
#define CCID_CLASS_EXCHANGE_MASK 0x00070000
|
||||||
@@ -467,16 +481,3 @@ Index: Drivers/ccid/src/ccid.h
|
|||||||
|
|
||||||
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
||||||
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
||||||
Index: Drivers/ccid/src/ccid_ifdhandler.h
|
|
||||||
===================================================================
|
|
||||||
--- Drivers/ccid/src/ccid_ifdhandler.h (Revision 5067)
|
|
||||||
+++ Drivers/ccid/src/ccid_ifdhandler.h (Arbeitskopie)
|
|
||||||
@@ -37,6 +37,8 @@
|
|
||||||
SCARD_CTL_CODE(FEATURE_IFD_PIN_PROPERTIES + CLASS2_IOCTL_MAGIC)
|
|
||||||
#define IOCTL_FEATURE_GET_TLV_PROPERTIES \
|
|
||||||
SCARD_CTL_CODE(FEATURE_GET_TLV_PROPERTIES + CLASS2_IOCTL_MAGIC)
|
|
||||||
+#define IOCTL_FEATURE_EXECUTE_PACE \
|
|
||||||
+ SCARD_CTL_CODE(FEATURE_EXECUTE_PACE + CLASS2_IOCTL_MAGIC)
|
|
||||||
|
|
||||||
#define DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED 1
|
|
||||||
#define DRIVER_OPTION_GEMPC_TWIN_KEY_APDU 2
|
|
||||||
Reference in New Issue
Block a user