00001 /*************************************************************************** 00002 $RCSfile$ 00003 ------------------- 00004 cvs : $Id: client_p.h 137 2005-11-03 13:07:50Z aquamaniac $ 00005 begin : Mon Mar 01 2004 00006 copyright : (C) 2004 by Martin Preuss 00007 email : martin@libchipcard.de 00008 00009 *************************************************************************** 00010 * Please see toplevel file COPYING for license details * 00011 ***************************************************************************/ 00012 00013 00014 #ifndef CHIPCARD_CLIENT_CLIENTPCSC_L_H 00015 #define CHIPCARD_CLIENT_CLIENTPCSC_L_H 00016 00017 #include "clientpcsc.h" 00018 00019 00020 #include <inttypes.h> 00021 00022 #define MAX_ATR_SIZE 33 00023 00024 00025 /* define some types */ 00026 #ifndef OS_WIN32 00027 00028 #ifndef BYTE 00029 typedef unsigned char BYTE; 00030 #endif 00031 00032 /* basic types */ 00033 typedef unsigned char UCHAR; 00034 typedef unsigned char *PUCHAR; 00035 typedef unsigned short USHORT; 00036 typedef unsigned long ULONG; 00037 typedef void *LPVOID; 00038 typedef short BOOL; 00039 typedef unsigned long *PULONG; 00040 typedef const void *LPCVOID; 00041 typedef unsigned long DWORD; 00042 typedef unsigned long *PDWORD; 00043 typedef unsigned short WORD; 00044 typedef long LONG; 00045 typedef long RESPONSECODE; 00046 typedef const char *LPCSTR; 00047 typedef BYTE *LPBYTE; 00048 typedef DWORD *LPDWORD; 00049 typedef char *LPSTR; 00050 00051 typedef char *LPTSTR; 00052 typedef const char *LPCTSTR; 00053 00054 #else 00055 # include <windows.h> 00056 # include <wtypes.h> 00057 #endif 00058 00059 /* common basic types */ 00060 typedef const BYTE *LPCBYTE; 00061 00062 00063 /* pc/sc types */ 00064 typedef ULONG SCARDCONTEXT; 00065 typedef SCARDCONTEXT *PSCARDCONTEXT; 00066 typedef SCARDCONTEXT *LPSCARDCONTEXT; 00067 typedef ULONG SCARDHANDLE; 00068 typedef SCARDHANDLE *PSCARDHANDLE; 00069 typedef SCARDHANDLE *LPSCARDHANDLE; 00070 00071 typedef struct _SCARD_IO_REQUEST { 00072 unsigned long dwProtocol; 00073 unsigned long cbPciLength; 00074 } SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST; 00075 00076 typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST; 00077 00078 00079 #define SCARD_S_SUCCESS 0x00000000 00080 #define SCARD_E_TIMEOUT 0x8010000A 00081 #define SCARD_E_NO_SMARTCARD 0x8010000C 00082 #define SCARD_E_UNKNOWN_CARD 0x8010000D 00083 #define SCARD_E_PROTO_MISMATCH 0x8010000F 00084 #define SCARD_E_NOT_READY 0x80100010 00085 #define SCARD_E_READER_UNAVAILABLE 0x80100017 00086 00087 #define SCARD_W_UNSUPPORTED_CARD 0x80100065 00088 #define SCARD_W_UNRESPONSIVE_CARD 0x80100066 00089 #define SCARD_W_UNPOWERED_CARD 0x80100067 00090 #define SCARD_W_RESET_CARD 0x80100068 00091 #define SCARD_W_REMOVED_CARD 0x80100069 00092 00093 #define SCARD_E_READER_UNSUPPORTED 0x8010001A 00094 #define SCARD_E_CARD_UNSUPPORTED 0x8010001C 00095 #define SCARD_E_NO_SERVICE 0x8010001D 00096 00097 #define SCARD_E_NO_READERS_AVAILABLE 0x8010002e 00098 00099 #define SCARD_SCOPE_SYSTEM 0x0002 00100 #define SCARD_PROTOCOL_T0 0x0001 00101 #define SCARD_PROTOCOL_T1 0x0002 00102 00103 #define SCARD_SHARE_EXCLUSIVE 0x0001 00104 00105 #define SCARD_RESET_CARD 0x0001 00106 00107 00108 /* from PC/SC */ 00109 #define SCARD_CTL_CODE(code) (0x42000000 + (code)) 00110 #define CM_IOCTL_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400) 00111 00112 #define FEATURE_VERIFY_PIN_START 0x01 /* OMNIKEY Proposal */ 00113 #define FEATURE_VERIFY_PIN_FINISH 0x02 /* OMNIKEY Proposal */ 00114 #define FEATURE_MODIFY_PIN_START 0x03 /* OMNIKEY Proposal */ 00115 #define FEATURE_MODIFY_PIN_FINISH 0x04 /* OMNIKEY Proposal */ 00116 #define FEATURE_GET_KEY_PRESSED 0x05 /* OMNIKEY Proposal */ 00117 #define FEATURE_VERIFY_PIN_DIRECT 0x06 /* USB CCID PIN Verify */ 00118 #define FEATURE_MODIFY_PIN_DIRECT 0x07 /* USB CCID PIN Modify */ 00119 #define FEATURE_MCT_READERDIRECT 0x08 /* KOBIL Proposal */ 00120 #define FEATURE_MCT_UNIVERSAL 0x09 /* KOBIL Proposal */ 00121 #define FEATURE_IFD_PIN_PROP 0x0A /* Gemplus Proposal */ 00122 #define FEATURE_ABORT 0x0B /* SCM Proposal */ 00123 00124 00125 /* Set structure elements aligment on bytes 00126 * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */ 00127 #ifdef __APPLE__ 00128 #pragma pack(1) 00129 #else 00130 #pragma pack(push, 1) 00131 #endif 00132 00133 /* the structure must be 6-bytes long */ 00134 typedef struct { 00135 uint8_t tag; 00136 uint8_t length; 00137 uint32_t value; 00138 } PCSC_TLV_STRUCTURE; 00139 00140 #ifdef __APPLE__ 00141 #pragma pack() 00142 #else 00143 #pragma pack(pop) 00144 #endif 00145 00146 00147 00148 00149 00150 #endif /* CHIPCARD_CLIENT_CLIENTPCSC_L_H */ 00151