The Cherry G80-1500 Keyboard with Smart Card Reader
Cherry provides a Windows DLL to access the smart card reader in its G80-1500 keyboard. The reader can access both memory cards and microprocessor cards. The functions of the G80-1500 DLL can be organized into roughly 11 areas:
- Initialization
- G1500_Init
- Initializes the G80-1500 DLL
- G1500_Resync
- Resychronizes with the smart card terminal
- G1500_SetNotifyMessages
- Sets values for asynchronous verification
- G1500_SetNotifyWindow
- Sets receiver for asynchronous verification
- G1500_Exit
- Exits from the DLL
- Automatic recognition of smart cards
- G1500_ChipcardDetect
- Provides for automatic recognition of smart card
- G1500_LoadATRMask
- Loads the standard ATR masks
- G1500_ClearATRMask
- Clears all ATR masks
- G1500_DeleteATRMask
- Deletes ATR masks
- G1500_AddATRMask
- Adds an ATR mask
- Management of the Smart Card Standard
- G1500_SetICC
- Sets smart card standards
- G1500_GetICC
- Reads smart card standards
- Query parameters
- G1500_Port
- Gives the parameters of the serial port
- G1500_UserMem
- Gives the size of user memory
- G1500_ProtectionMem
- Gives the size of protection memory
- G1500_SecurityMem
- Gives the size of security memory
- G1500_SecurityType
- Gives the type of security implemented by smart card
- G1500_NumVChars
- Gives the number of digits in the PIN numbers on the smart card
- G1500_CardClass
- Gives the class of the smart card
- G1500_AddressUnit
- Gives the type of the cards address unit
- G1500_ATR
- Reads the smart cards ATR
- G1500_KeyboardId
- Gives the model and version of the keyboard
- G1500_EpromVersion
- Gives the version of the reader
- G1500_DLLVersion
- Gives the version of the DLL
- Query settings
- G1500_SecurityStatus
- Gives the status of the security system
- G1500_VerifyAttempts
- Gives the number of failed attempts on current key
- G1500_ChipcardAvailable
- Gives the status of the smart card
- G1500_GetWorkingMode
- Reads the working mode of the smart card
- G1500_SetWorkingMode
- Sets the working mode of the smart card
- Reading of a memory card
- G1500_ReadUMem
- Reads user memory
- G1500_ReadPMem
- Reads the protected memory
- G1500_ReadSMem
- Reads the security memory
- G1500_ReadUMemA
- Reads the user memory with attributes
- Writing to the smart card
- G1500_Write
- Writes without protection bit
- G1500_WriteP
- Writes with protection bit
- G1500_WriteM
- Writes with protection mask
- Deletion
- G1500_Erase
- Erases between addresses
- G1500_EraseArea
- Erases an entire area
- Verification
- G1500_Verify
- Verifies the smart card
- G1500_ChangeVerification1
- Changes the PIN code after verification
- G1500_ChangeVerification2
- Changes the PIN code without verification
- Counters
- G1500_ActivateCounter
- Selects a counter
- G1500_GetCounterVal
- Reads the counter value
- G1500_SetCounterVal
- Sets the counter value
- Error handling
- G1500_GetError
- Returns the error status
- Help functions
- G1500_SetActionIndex
- Sets the action index
- G1500_GetActionIndex
- Reads the action index
- G1500_PMemOffset
- Returns the location of protected memory
- G1500_PMemLength
- Returns the size of protected memory
- G1500_Flags
- Returns the configuration of the smart card
Tools for Card Software Development
If none of the off-the-shelf smart cards suit your needs, you can
- Extend an existing smart card operating system
- Modify an existing smart card operating system
- Build your very own smart card operating system
If you choose to add code to an existing operating system, you can either add machine language code specific to a particular smart card chip or, more commonly, you can add code that is chip independent and is actually executed by an interpreter that is resident on the smart card. The Java Card and Mondexs MULTOS cards are examples of this latter approach.
Since most of the chips found on smart cards are security-enhanced versions of off-the-shelf microcontrollers, almost all the tools made to develop software for these microcontrollers can be used to develop software for their tamper-resistant versions. Where there are smart card-specific instructions, often inline data blocks can be used to access them. Most of the chip manufactures maintain good resource listings of the software products that support their chips. Some of these are listed in Table 6.5.