The dwMaxCCIDMessageLength field is a number value from the CCID USB descriptor:
For extended APDU level the value shall be between 261 + 10 (header) and 65544 +10, otherwise the minimum value is the wMaxPacketSize of the Bulk-OUT endpoint.
| dwMaxCCIDMessageLength | # | % |
|---|---|---|
| 271 bytes | 184 | 72.44 % |
| 1034 bytes | 9 | 3.54 % |
| 263 bytes | 9 | 3.54 % |
| 512 bytes | 9 | 3.54 % |
| 261 bytes | 7 | 2.76 % |
| 272 bytes | 6 | 2.36 % |
| 270 bytes | 5 | 1.97 % |
| 1400 bytes | 2 | 0.79 % |
| 273 bytes | 2 | 0.79 % |
| 278 bytes | 2 | 0.79 % |
| 432 bytes | 2 | 0.79 % |
| 65550 bytes | 2 | 0.79 % |
| 1014 bytes | 1 | 0.39 % |
| 1024 bytes | 1 | 0.39 % |
| 1041 bytes | 1 | 0.39 % |
| 138 bytes | 1 | 0.39 % |
| 2048 bytes | 1 | 0.39 % |
| 2100 bytes | 1 | 0.39 % |
| 256 bytes | 1 | 0.39 % |
| 262 bytes | 1 | 0.39 % |
| 266 bytes | 1 | 0.39 % |
| 280 bytes | 1 | 0.39 % |
| 288 bytes | 1 | 0.39 % |
| 522 bytes | 1 | 0.39 % |
| 536 bytes | 1 | 0.39 % |
| 586 bytes | 1 | 0.39 % |
| 64 bytes | 1 | 0.39 % |
The standard value for dwMaxCCIDMessageLength is 271.
On the 271 bytes :
- 10 bytes are used for the CCID header
- 4 bytes are used for the CLA, INS, P1, P2 APDU header
- 1 byte for the data size
- 256 bytes for the data
In the PC_to_RDR_XfrBlock CCID CCID command we note:
The block should never exceed the dwMaxCCIDMessageLength-10 in the Class Descriptor.The value dwMaxCCIDMessageLength is related to dwMaxIFSD. See also "CCID descriptor statistics: dwMaxIFSD".
CCID Readers with dwMaxCCIDMessageLength < 271 and that are Short APDU level exchange readers are suspect. They are:
- Aktiv Co., ProgramPark Rutoken Magistra: 261 bytes and ICCD Version B
- Gemalto PDT: 261 bytes and ICCD Version B
- IIT E.Key Almaz-1C: 264 bytes
- OCS ID-One Cosmo Card USB Smart Chip Device: 261 bytes and ICCD Version B
- Philips Semiconductors JCOP41V221: 261 bytes and ICCD Version B
- Philips Semiconductors SmartMX Sample: 261 bytes and ICCD Version B
So only the IIT E.Key Almaz-1C reader is bogus and limited to a maximum of 249 bytes of data in an APDU.
