Parent Directory
|
Revision Log
| Links to HEAD: | (view) (download) (annotate) |
| Sticky Revision: |
In case of error set the received length to 0 in IFDHTransmitToICC() and IFDHControl() instead of in all the lower level commands
add support of ICCD version A and B
CmdPowerOn() & SecurePINVerify(): rename 6 local variables to avoid: warning: declaration of 'cmd' shadows a previous local
CmdXfrBlockTPDU_T0(): set *rx_length to 0 in case of command too long
CmdXfrBlockTPDU_T0(): set *rx_length to 0 if CCID_Transmit() fails
SecurePINModify(): set bNumberMessages in all cases
SecurePINModify(): the GemPC Twin does support different values of bNumberMessages but all the bMsgIndex? must be present in the CCID command
T0ProcACK(): use a hack to circumvent the Oz776 firmware bug with commands of size modulo 64
CmdGetSlotStatus(): the O2MICRO OZ 776 reader sends "card absent or mute" errors when no card is inserted. We do not log this error since it is normal execution and just fill the syslog files
many commands: make sure we received at least STATUS_OFFSET+1 bytes before reading the value of buffer[STATUS_OFFSET] usb_bulk_read() may return 0 bytes instead of an error when the reader is just disconnected
warning: initialization discards qualifiers from pointer target type
CmdGetSlotStatus(), CCID_Transmit() and CCID_Receive(): return IFD_NO_SUCH_DEVICE if the lower communication layer returns STATUS_NO_SUCH_DEVICE
SecurePINVerify(): the GemPC Pinpad does not support a bEntryValidationCondition different of 0x02 (validation key pressed)
remove trailing spaces at end of lines
SecurePINVerify()/SecurePINModify(): the USB timeout shall be greater than the reader timeout so we get the reader answer. I use a margin of 10 seconds. Thanks to Gerald Richter for the bug report
CCID_Receive(): check that we received at least enough bytes to test cmd[STATUS_OFFSET]. usb_bulk_read() will return 0 bytes without error in case of timeout
SetParameters(): do not fail if the command fails to set a parameter that is not changeable by the CCID
make pcscd detect a buffer overflow when the receiving buffer is too small instead of silently ignoring the detected problem. This problem only occured with readers supporting Extended APDU.
CmdXfrBlock(): remove the unused clean_up_and_return goto label
CmdXfrBlock(): call CmdXfrBlockAPDU_extended() if the reader supports Extended APDU
add CmdXfrBlockAPDU_extended() to support Extended APDU readers
CCID_Receive(): return the value of bChainParameter in *chain_parameter
CmdXfrBlockTPDU_T1(): also log the length of the reception buffer
use CCID_Receive() with the new API (use NULL as chain_parameter)
CCID_Receive() has a new parameter: chain_parameter
move the "command length too big" checks from CmdXfrBlock() to CmdXfrBlockTPDU_T0()
CCID_Transmit(): log if the transmit buffer is too big
CCID_Receive(): use <= instead of < to detect a reception buffer overrun and log an error if it occurs
SecurePINVerify() and SecurePINModify(): Make sure bEntryValidationCondition is valid The Cherry XX44 keyboard smart card reader crashes when a wrong value is used
SecurePINVerify(): debug a debug message. use dw2i(TxBuffer, 15) instead of just the first byte TxBuffer[15]
SecurePINModify(): separate the validation test in three different tests and add a debug message for each test
SecurePINVerify(): debug a debug message :-)
SecurePINModify(): circumvent a bug in Cherry XX44 keyboard firmware
SecurePINVerify/SecurePINModify: get the data from a T=1 TPDU block only if the exchange was successful (with special treatment for timeout and cancel cases)
SecurePINVerify(): move the prologue filing part to be homogenous with SecurePINModify()
SecurePINModify(): add support of T=1 cards with TPDU readers
SecurePINVerify(): add support of T=1 cards with TPDU readers
SecurePINVerify(): bug circumvention for the GemPC Pinpad (bNumberMessage)
SecurePINModify(): bug circumvention for the GemPC Pinpad
SecurePINModify(): modify the user command to make the SPR 532 and Cherry ST 2000C firmware happy
allow to select the power on voltage using Info.plist instead of recompiling the source code
remove PCSC/ from the pcsc-lite #include header files since the PCSC/ part is already given by `pkg-config --cflags libpcsclite`
SecurePINVerify()/SecurePINModify(): set the response length to 0 in case of (write) communication error
SecurePINModify(): set the response length to 0 in case of error in the command format
SecurePINModify(): set the readTimeout to at least 30 seconds since we are not waiting after an APDU but after a human (after the reader in fact).
SecurePINModify(): correct management of bMsgIndex2 and bMsgIndex3
SecurePINModify(): do not copy the ulDataLength field to the CCID frame
CCID_Transmit(): cmd[8-9] is the expected length in character mode only. It shall be 0x0000 for TPDU and short APDU modes.
SecurePINVerify(): set the readTimeout to at least 30 seconds since we are not waiting after an APDU but after a human.
SecurePINVerify(): update the size of ulDataLength field as defined in PCSCv2 part 10, revision 2.01.04, september 2005
add support of PC/SC v2 part 10 CM_IOCTL_GET_FEATURE_REQUEST add support of FEATURE_VERIFY_PIN_DIRECT and FEATURE_MODIFY_PIN_DIRECT remove support of IOCTL_SMARTCARD_VENDOR_VERIFY_PIN (now obsoleted)
CCID_Receive(): log time extension messages at priority COMM instead of CRITICAL. Thanks to Martin Paljak for the patch.
CmdPowerOn(): atr_len is unsigned avoids a "comparison between signed and unsigned" warning
CmdEscape(): replay the command if we receive STATUS_COMM_NAK
change licence from GNU GPL to GNU LGPL
CmdXfrBlockCHAR_T0(): move a variable declaration at the beginning of the function since ISO C89 forbids mixed declarations and code
SecurePIN(): proprietary command to add the PIN code in the APDU without any padding (this is not possible with the CCID specs). Thanks to Martin Paljak for the patch.
SecurePIN(), CCID_Transmit(), SetParameters(): check that the user provided command is not too large (avoid a possible buffer overflow)
SecurePIN(): directly use the user buffer passed instead of reversing the APDU/CCID structure. It is now as described in the CCID specifications. Thanks to Martin Paljak. I was wrong.
Add support of character level communication (CCID_CLASS_CHARACTER). Thanks to Jeffrey Dai
CmdGetSlotStatus(): card absent or mute is not an communication error (even if the CCID command result indicates a command failure)
CmdPowerOn(): do not use a null terminated C string for the EMV->ISO switch command since the command is NOT a C string
switch the Cherry xx33 reader in ISO mode if power up in EMV mode fails. Thanks to St�phane Durand for the bug report.
SetParameters(): returns IFD_NOT_SUPPORTED if the CCID error is "command not supported".
use (*ccid_descriptor->pbSeq)++ instead of ccid_descriptor->bSeq++
use reader_index instead of lun as reader identification
use bCurrentSlotIndex as the slot number in the CCID commands (instead of 0)
BUG: CmdPowerOn(): use memmove() instead of memcpy() to copy the ATR bytes since the source end destination buffers (with a more than 10 bytes long ATR) overlaps. Bug spotted by splint http://www.splint.org/
BUG in CmdXfrBlockTPDU_T1(): the t1_transceive() returned value was stored in an unsigned int and tested if < 0 (error case). Of course the test was never true.
i2dw() is not used outside commands.c so declare it static
CmdXfrBlockTPDU_T0() and CmdXfrBlockTPDU_T1() are internal functions so declare them static
lun is (unsigned int) instead of (int) Avoid a warning by splint in #define LunToReaderIndex(Lun) (Lun>>16) Left operand of >> may be negative (int): lun >> 16
CmdXfrBlockTPDU_T1(): use the T=1 TPDU layer from opensc/ instead of towitoko/
CCID_Receive() returns IFD_PARITY_ERROR if the error returned by the reader is 0xFD (parity error) and IFD_COMMUNICATION_ERROR otherwise (so that the T=1 TPDU layer can recover the error)
CCID_Transmit() now has a new "unsigned char bBWI" argument
CmdPowerOn(): add a mechanism to allow power on at 1.8V, 3V and then 5V as specified by ISO 7816. We still use 5V for now to avoid problems with non ISO compliant cards
add __FUNCTION__ as argument to ccid_error()
set *rx_length to 0 when a ReadPort() error is returned. The problem was not solved by ccid_usb.c 1.25.
bPINOperation is not passed in the user command since the command is "PIN Verification" and nothing else
recompile using gcc -pedantic and correct: - some C++ syntax comments - many signedness "problems"
add support for Secure PIN through SCardControl() (see sample code in examples/)
redefined CmdEscape() to pass the CCID message instead of just a tag
set received size to 0 in case of error in CmdXfrBlockTPDU_T1
in case of error exits CCID_Receive() without copying an nonexistent anwser
add SetParameters() CCID command
replace CmdXfrBlockTPDU() by CmdXfrBlockTPDU_T0() and CmdXfrBlockTPDU_T1()
split CmdXfrBlockShortAPDU() in CCID_Transmit() and CCID_Receive()
use an (int *) instead of a PDWORD for rx_length argument
comment out the automatic GET RESPONSE part. I don't think it should be in the driver. Maybe in pcscd instead?
correct a stupid bug that occurs with an APDU with 2 bytes response.
- support auto voltage at power on if reader support it - support Gemplus proprietary command to switch reader from TPDU to APDU mode - use APDU mode if reader support it. make it easy to support extended APDU but I have no reader to test this.
Initial revision
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.
| ViewVC Help | |
| Powered by ViewVC 1.1.5 |