< prev index next >

src/solaris/native/sun/security/smartcardio/MUSCLE/pcsclite.h

Print this page
@  rev 13663 : 8218780: Update MUSCLE PCSC-Lite header files
|  Summary: update the PCSC-lite header files to 1.8.24 release
~  Reviewed-by: coffeys
   1 /*
   2  * This keeps a list of defines for pcsc-lite.
   3  *
   4  * MUSCLE SmartCard Development ( http://www.linuxnet.com )
   5  *
   6  * Copyright (C) 1999-2004
   7  *  David Corcoran <corcoran@linuxnet.com>

   8  *  Ludovic Rousseau <ludovic.rousseau@free.fr>






























   9  *
  10  * $Id: pcsclite.h.in,v 1.47 2004/08/24 21:46:57 rousseau Exp $
  11  */
  12 
  13 #ifndef __pcsclite_h__
  14 #define __pcsclite_h__
  15 
  16 #ifndef __sun_jdk
  17 #include <wintypes.h>
  18 #else
  19 #include <sys/types.h>
  20 #include <inttypes.h>
  21 #ifdef BYTE
  22 #error BYTE is already defined
  23 #else
  24   typedef unsigned char BYTE;
  25 #endif /* End BYTE */
  26 
  27         typedef unsigned char UCHAR;
  28         typedef unsigned char *PUCHAR;
  29         typedef unsigned short USHORT;
  30         typedef unsigned long ULONG;
  31         typedef void *LPVOID;
  32         typedef short BOOL;
  33         typedef unsigned long *PULONG;
  34         typedef const void *LPCVOID;
  35         typedef unsigned long DWORD;
  36         typedef unsigned long *PDWORD;
  37         typedef unsigned short WORD;
  38         typedef long LONG;
  39         typedef long RESPONSECODE;
  40         typedef const char *LPCTSTR;
  41         typedef const BYTE *LPCBYTE;
  42         typedef BYTE *LPBYTE;
  43         typedef DWORD *LPDWORD;
  44         typedef char *LPTSTR;
  45 
  46 #endif
  47 
  48 #ifdef __cplusplus
  49 extern "C"
  50 {
  51 #endif
  52 
  53 #ifdef WIN32
  54 #include <winscard.h>
  55 #else
  56 typedef long SCARDCONTEXT;
  57 typedef SCARDCONTEXT *PSCARDCONTEXT;
  58 typedef SCARDCONTEXT *LPSCARDCONTEXT;
  59 typedef long SCARDHANDLE;
  60 typedef SCARDHANDLE *PSCARDHANDLE;
  61 typedef SCARDHANDLE *LPSCARDHANDLE;
  62 
  63 #define MAX_ATR_SIZE                    33      /* Maximum ATR size */
  64 
  65 #ifndef __APPLE__




  66 
  67 typedef struct
  68 {
  69         const char *szReader;
  70         void *pvUserData;
  71         unsigned long dwCurrentState;
  72         unsigned long dwEventState;
  73         unsigned long cbAtr;
  74         unsigned char rgbAtr[MAX_ATR_SIZE];
  75 }
  76 SCARD_READERSTATE_A;
  77 
  78 typedef struct _SCARD_IO_REQUEST
  79 {
  80         unsigned long dwProtocol;       /* Protocol identifier */
  81         unsigned long cbPciLength;      /* Protocol Control Inf Length */
  82 }
  83 SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
  84 
  85 #else // __APPLE__
  86 
  87 #pragma pack(1)
  88 typedef struct
  89 {
  90         const char *szReader;
  91         void *pvUserData;
  92         uint32_t dwCurrentState;
  93         uint32_t dwEventState;
  94         uint32_t cbAtr;
  95         unsigned char rgbAtr[MAX_ATR_SIZE];
  96 }
  97 SCARD_READERSTATE_A;
  98 
  99 typedef struct _SCARD_IO_REQUEST
 100 {
 101         uint32_t dwProtocol;            /* Protocol identifier */
 102         uint32_t cbPciLength;           /* Protocol Control Inf Length */
 103 }
 104 SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
 105 #pragma pack()
 106 
 107 #endif // __APPLE__
 108 
 109 typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
 110         *LPSCARD_READERSTATE_A;
 111 
 112 typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
 113 
 114 extern SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci,
 115         g_rgSCardRawPci;
 116 
 117 #define SCARD_PCI_T0    (&g_rgSCardT0Pci)
 118 #define SCARD_PCI_T1    (&g_rgSCardT1Pci)
 119 #define SCARD_PCI_RAW   (&g_rgSCardRawPci)
 120 
 121 #define SCARD_S_SUCCESS                 0x00000000
 122 #define SCARD_E_CANCELLED               0x80100002
 123 #define SCARD_E_CANT_DISPOSE            0x8010000E
 124 #define SCARD_E_INSUFFICIENT_BUFFER     0x80100008
 125 #define SCARD_E_INVALID_ATR             0x80100015
 126 #define SCARD_E_INVALID_HANDLE          0x80100003
 127 #define SCARD_E_INVALID_PARAMETER       0x80100004
 128 #define SCARD_E_INVALID_TARGET          0x80100005
 129 #define SCARD_E_INVALID_VALUE           0x80100011
 130 #define SCARD_E_NO_MEMORY               0x80100006
 131 #define SCARD_F_COMM_ERROR              0x80100013
 132 #define SCARD_F_INTERNAL_ERROR          0x80100001
 133 #define SCARD_F_UNKNOWN_ERROR           0x80100014
 134 #define SCARD_F_WAITED_TOO_LONG         0x80100007
 135 #define SCARD_E_UNKNOWN_READER          0x80100009
 136 #define SCARD_E_TIMEOUT                 0x8010000A
 137 #define SCARD_E_SHARING_VIOLATION       0x8010000B
 138 #define SCARD_E_NO_SMARTCARD            0x8010000C
 139 #define SCARD_E_UNKNOWN_CARD            0x8010000D
 140 #define SCARD_E_PROTO_MISMATCH          0x8010000F
 141 #define SCARD_E_NOT_READY               0x80100010
 142 #define SCARD_E_SYSTEM_CANCELLED        0x80100012
 143 #define SCARD_E_NOT_TRANSACTED          0x80100016
 144 #define SCARD_E_READER_UNAVAILABLE      0x80100017
 145 
 146 #define SCARD_W_UNSUPPORTED_CARD        0x80100065
 147 #define SCARD_W_UNRESPONSIVE_CARD       0x80100066
 148 #define SCARD_W_UNPOWERED_CARD          0x80100067
 149 #define SCARD_W_RESET_CARD              0x80100068
 150 #define SCARD_W_REMOVED_CARD            0x80100069
 151 
 152 #define SCARD_E_PCI_TOO_SMALL           0x80100019
 153 #define SCARD_E_READER_UNSUPPORTED      0x8010001A
 154 #define SCARD_E_DUPLICATE_READER        0x8010001B
 155 #define SCARD_E_CARD_UNSUPPORTED        0x8010001C
 156 #define SCARD_E_NO_SERVICE              0x8010001D
 157 #define SCARD_E_SERVICE_STOPPED         0x8010001E
 158 
 159 #define SCARD_SCOPE_USER                0x0000  /* Scope in user space */
 160 #define SCARD_SCOPE_TERMINAL            0x0001  /* Scope in terminal */
 161 #define SCARD_SCOPE_SYSTEM              0x0002  /* Scope in system */
 162 
 163 #define SCARD_PROTOCOL_UNSET            0x0000  /* protocol not set */
 164 #define SCARD_PROTOCOL_T0               0x0001  /* T=0 active protocol. */
 165 #define SCARD_PROTOCOL_T1               0x0002  /* T=1 active protocol. */
 166 #define SCARD_PROTOCOL_RAW              0x0004  /* Raw active protocol. */
 167 #define SCARD_PROTOCOL_T15              0x0008  /* T=15 protocol. */
 168 
 169 #define SCARD_PROTOCOL_ANY              (SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1)   /* IFD determines prot. */
 170 
 171 #define SCARD_SHARE_EXCLUSIVE           0x0001  /* Exclusive mode only */
 172 #define SCARD_SHARE_SHARED              0x0002  /* Shared mode only */
 173 #define SCARD_SHARE_DIRECT              0x0003  /* Raw mode only */
 174 
 175 #define SCARD_LEAVE_CARD                0x0000  /* Do nothing on close */
 176 #define SCARD_RESET_CARD                0x0001  /* Reset on close */
 177 #define SCARD_UNPOWER_CARD              0x0002  /* Power down on close */
 178 #define SCARD_EJECT_CARD                0x0003  /* Eject on close */
 179 
 180 #define SCARD_UNKNOWN                   0x0001  /* Unknown state */
 181 #define SCARD_ABSENT                    0x0002  /* Card is absent */
 182 #define SCARD_PRESENT                   0x0004  /* Card is present */
 183 #define SCARD_SWALLOWED                 0x0008  /* Card not powered */
 184 #define SCARD_POWERED                   0x0010  /* Card is powered */
 185 #define SCARD_NEGOTIABLE                0x0020  /* Ready for PTS */
 186 #define SCARD_SPECIFIC                  0x0040  /* PTS has been set */
 187 
 188 #define SCARD_STATE_UNAWARE             0x0000  /* App wants status */
 189 #define SCARD_STATE_IGNORE              0x0001  /* Ignore this reader */
 190 #define SCARD_STATE_CHANGED             0x0002  /* State has changed */
 191 #define SCARD_STATE_UNKNOWN             0x0004  /* Reader unknown */
 192 #define SCARD_STATE_UNAVAILABLE         0x0008  /* Status unavailable */
 193 #define SCARD_STATE_EMPTY               0x0010  /* Card removed */
 194 #define SCARD_STATE_PRESENT             0x0020  /* Card inserted */
 195 #define SCARD_STATE_ATRMATCH            0x0040  /* ATR matches card */
 196 #define SCARD_STATE_EXCLUSIVE           0x0080  /* Exclusive Mode */
 197 #define SCARD_STATE_INUSE               0x0100  /* Shared Mode */
 198 #define SCARD_STATE_MUTE                0x0200  /* Unresponsive card */
 199 #define SCARD_STATE_UNPOWERED           0x0400  /* Unpowered card */
 200 
 201 /*
 202  * Tags for requesting card and reader attributes
 203  */
 204 
 205 #define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))
 206 
 207 #define SCARD_CLASS_VENDOR_INFO     1   /* Vendor information definitions */
 208 #define SCARD_CLASS_COMMUNICATIONS  2   /* Communication definitions */
 209 #define SCARD_CLASS_PROTOCOL        3   /* Protocol definitions */
 210 #define SCARD_CLASS_POWER_MGMT      4   /* Power Management definitions */
 211 #define SCARD_CLASS_SECURITY        5   /* Security Assurance definitions */
 212 #define SCARD_CLASS_MECHANICAL      6   /* Mechanical characteristic definitions */
 213 #define SCARD_CLASS_VENDOR_DEFINED  7   /* Vendor specific definitions */
 214 #define SCARD_CLASS_IFD_PROTOCOL    8   /* Interface Device Protocol options */
 215 #define SCARD_CLASS_ICC_STATE       9   /* ICC State specific definitions */
 216 #define SCARD_CLASS_SYSTEM     0x7fff   /* System-specific definitions */
 217 
 218 #define SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100)
 219 #define SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101)
 220 #define SCARD_ATTR_VENDOR_IFD_VERSION SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102)
 221 #define SCARD_ATTR_VENDOR_IFD_SERIAL_NO SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0103)
 222 #define SCARD_ATTR_CHANNEL_ID SCARD_ATTR_VALUE(SCARD_CLASS_COMMUNICATIONS, 0x0110)
 223 #define SCARD_ATTR_ASYNC_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0120)
 224 #define SCARD_ATTR_DEFAULT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0121)
 225 #define SCARD_ATTR_MAX_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0122)
 226 #define SCARD_ATTR_DEFAULT_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0123)
 227 #define SCARD_ATTR_MAX_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0124)
 228 #define SCARD_ATTR_MAX_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0125)
 229 #define SCARD_ATTR_SYNC_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0126)
 230 #define SCARD_ATTR_POWER_MGMT_SUPPORT SCARD_ATTR_VALUE(SCARD_CLASS_POWER_MGMT, 0x0131)
 231 #define SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0140)
 232 #define SCARD_ATTR_USER_AUTH_INPUT_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0142)
 233 #define SCARD_ATTR_CHARACTERISTICS SCARD_ATTR_VALUE(SCARD_CLASS_MECHANICAL, 0x0150)
 234 
 235 #define SCARD_ATTR_CURRENT_PROTOCOL_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0201)
 236 #define SCARD_ATTR_CURRENT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0202)
 237 #define SCARD_ATTR_CURRENT_F SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0203)
 238 #define SCARD_ATTR_CURRENT_D SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0204)
 239 #define SCARD_ATTR_CURRENT_N SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0205)
 240 #define SCARD_ATTR_CURRENT_W SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0206)
 241 #define SCARD_ATTR_CURRENT_IFSC SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0207)
 242 #define SCARD_ATTR_CURRENT_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0208)
 243 #define SCARD_ATTR_CURRENT_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0209)
 244 #define SCARD_ATTR_CURRENT_CWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020a)
 245 #define SCARD_ATTR_CURRENT_EBC_ENCODING SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020b)
 246 #define SCARD_ATTR_EXTENDED_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020c)
 247 
 248 #define SCARD_ATTR_ICC_PRESENCE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0300)
 249 #define SCARD_ATTR_ICC_INTERFACE_STATUS SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0301)
 250 #define SCARD_ATTR_CURRENT_IO_STATE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0302)
 251 #define SCARD_ATTR_ATR_STRING SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0303)
 252 #define SCARD_ATTR_ICC_TYPE_PER_ATR SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0304)
 253 
 254 #define SCARD_ATTR_ESC_RESET SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA000)
 255 #define SCARD_ATTR_ESC_CANCEL SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA003)
 256 #define SCARD_ATTR_ESC_AUTHREQUEST SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA005)
 257 #define SCARD_ATTR_MAXINPUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA007)
 258 
 259 #define SCARD_ATTR_DEVICE_UNIT SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0001)
 260 #define SCARD_ATTR_DEVICE_IN_USE SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0002)
 261 #define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003)
 262 #define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004)
 263 #define SCARD_ATTR_DEVICE_FRIENDLY_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0005)
 264 #define SCARD_ATTR_DEVICE_SYSTEM_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0006)
 265 #define SCARD_ATTR_SUPRESS_T1_IFS_REQUEST SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0007)
 266 
 267 #ifdef UNICODE
 268 #define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
 269 #define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_W
 270 #else
 271 #define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
 272 #define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_A
 273 #endif
 274 
 275 #endif
 276 
 277 /* PC/SC Lite specific extensions */
 278 #define SCARD_W_INSERTED_CARD           0x8010006A
 279 #define SCARD_E_UNSUPPORTED_FEATURE     0x8010001F
 280 
 281 #define SCARD_SCOPE_GLOBAL              0x0003  /* Scope is global */
 282 
 283 #define SCARD_RESET                     0x0001  /* Card was reset */
 284 #define SCARD_INSERTED                  0x0002  /* Card was inserted */
 285 #define SCARD_REMOVED                   0x0004  /* Card was removed */
 286 
 287 #define BLOCK_STATUS_RESUME             0x00FF  /* Normal resume */
 288 #define BLOCK_STATUS_BLOCKING           0x00FA  /* Function is blocking */
 289 
 290 #define PCSCLITE_CONFIG_DIR             "/etc"
 291 
 292 #ifndef USE_IPCDIR
 293 #define PCSCLITE_IPC_DIR                "/var/run"
 294 #else
 295 #define PCSCLITE_IPC_DIR                USE_IPCDIR
 296 #endif
 297 
 298 #define PCSCLITE_READER_CONFIG          PCSCLITE_CONFIG_DIR "/reader.conf"
 299 #define PCSCLITE_PUBSHM_FILE            PCSCLITE_IPC_DIR "/pcscd.pub"
 300 #define PCSCLITE_CSOCK_NAME             PCSCLITE_IPC_DIR "/pcscd.comm"
 301 
 302 #define PCSCLITE_SVC_IDENTITY           0x01030000      /* Service ID */

















































































































































































 303 
 304 #ifndef INFINITE
 305 #define INFINITE                        0xFFFFFFFF      /* Infinite timeout */
 306 #endif
 307 #define PCSCLITE_INFINITE_TIMEOUT       4320000         /* 50 day infinite t/o */
 308 
 309 #define PCSCLITE_VERSION_NUMBER         "1.2.9-beta7"   /* Current version */
 310 #define PCSCLITE_CLIENT_ATTEMPTS        120             /* Attempts to reach sv */
 311 #define PCSCLITE_MCLIENT_ATTEMPTS       20              /* Attempts to reach sv */
 312 #define PCSCLITE_STATUS_POLL_RATE       400000          /* Status polling rate */
 313 #define PCSCLITE_MSG_KEY_LEN            16              /* App ID key length */
 314 #define PCSCLITE_RW_ATTEMPTS            100             /* Attempts to rd/wrt */
 315 
 316 /* Maximum applications */
 317 #define PCSCLITE_MAX_APPLICATIONS                       16
 318 /* Maximum contexts by application */
 319 #define PCSCLITE_MAX_APPLICATION_CONTEXTS               16
 320 /* Maximum of applications contexts that pcscd can accept */
 321 #define PCSCLITE_MAX_APPLICATIONS_CONTEXTS \
 322         PCSCLITE_MAX_APPLICATIONS * PCSCLITE_MAX_APPLICATION_CONTEXTS
 323 /* Maximum channels on a reader context */
 324 #define PCSCLITE_MAX_READER_CONTEXT_CHANNELS            16
 325 /* Maximum channels on an application context */
 326 #define PCSCLITE_MAX_APPLICATION_CONTEXT_CHANNELS       16
 327 /* Maximum readers context (a slot is count as a reader) */
 328 #define PCSCLITE_MAX_READERS_CONTEXTS                   16
 329 
 330 /* PCSCLITE_MAX_READERS is deprecated
 331  * use PCSCLITE_MAX_READERS_CONTEXTS instead */
 332 /* extern int PCSCLITE_MAX_READERS __attribute__ ((deprecated)); */
 333 
 334 #define PCSCLITE_MAX_THREADS            16      /* Stat change threads */
 335 #define PCSCLITE_STATUS_WAIT            200000  /* Status Change Sleep */
 336 #define PCSCLITE_TRANSACTION_TIMEOUT    40      /* Transaction timeout */
 337 #define MAX_READERNAME                  52
 338 #define MAX_LIBNAME                     100
 339 #define MAX_DEVICENAME          255
 340 
 341 #ifndef SCARD_ATR_LENGTH
 342 #define SCARD_ATR_LENGTH                MAX_ATR_SIZE    /* Maximum ATR size */
 343 #endif
 344 
 345 /*
 346  * Enhanced messaging has been added to accommodate newer devices which have
 347  * more advanced capabilities, such as dedicated secure co-processors which
 348  * can stream and encrypt data over USB. In order to used enhanced messaging
 349  * you must define PCSCLITE_ENHANCED_MESSAGING in the framework(library),
 350  * the daemon, and your application
 351  */
 352 #undef PCSCLITE_ENHANCED_MESSAGING
 353 #ifndef PCSCLITE_ENHANCED_MESSAGING
 354 #define PCSCLITE_MAX_MESSAGE_SIZE       2048    /* Transport msg len */
 355 #define MAX_BUFFER_SIZE                 264     /* Maximum Tx/Rx Buffer */
 356 #define PCSCLITE_SERVER_ATTEMPTS        5       /* Attempts to reach cl */
 357 #else
 358 /*
 359  * The message and buffer sizes must be multiples of 16.
 360  * The max message size must be at least large enough
 361  * to accommodate the transmit_struct
 362  */
 363 #define PCSCLITE_MAX_MESSAGE_SIZE       (1<<17) /* enhanced (128K) msg len */
 364 #define MAX_BUFFER_SIZE                 (1<<15) /* enhanced (32K) Tx/Rx Buffer */
 365 #define PCSCLITE_SERVER_ATTEMPTS        200     /* To allow larger data reads/writes */
 366 #endif
 367 
 368 /*
 369  * Gets a stringified error response
 370  */
 371 char *pcsc_stringify_error(long);
 372 
 373 #ifdef __cplusplus
 374 }
 375 #endif
 376 
 377 #endif
   1 /*
   2  * MUSCLE SmartCard Development ( https://pcsclite.apdu.fr/ )


   3  *
   4  * Copyright (C) 1999-2004
   5  *  David Corcoran <corcoran@musclecard.com>
   6  * Copyright (C) 2002-2011
   7  *  Ludovic Rousseau <ludovic.rousseau@free.fr>
   8  * Copyright (C) 2005
   9  *  Martin Paljak <martin@paljak.pri.ee>
  10  *
  11 Redistribution and use in source and binary forms, with or without
  12 modification, are permitted provided that the following conditions
  13 are met:
  14 
  15 1. Redistributions of source code must retain the above copyright
  16    notice, this list of conditions and the following disclaimer.
  17 2. Redistributions in binary form must reproduce the above copyright
  18    notice, this list of conditions and the following disclaimer in the
  19    documentation and/or other materials provided with the distribution.
  20 3. The name of the author may not be used to endorse or promote products
  21    derived from this software without specific prior written permission.
  22 
  23 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  24 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  25 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  26 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  27 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  28 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  29 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  30 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  31 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  32 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33  */
  34 
  35 /**
  36  * @file
  37  * @brief This keeps a list of defines for pcsc-lite.
  38  *
  39  * Error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx
  40  */
  41 
  42 #ifndef __pcsclite_h__
  43 #define __pcsclite_h__
  44 

  45 #include <wintypes.h>





























  46 
  47 #ifdef __cplusplus
  48 extern "C"
  49 {
  50 #endif
  51 
  52 typedef LONG SCARDCONTEXT; /**< \p hContext returned by SCardEstablishContext() */



  53 typedef SCARDCONTEXT *PSCARDCONTEXT;
  54 typedef SCARDCONTEXT *LPSCARDCONTEXT;
  55 typedef LONG SCARDHANDLE; /**< \p hCard returned by SCardConnect() */
  56 typedef SCARDHANDLE *PSCARDHANDLE;
  57 typedef SCARDHANDLE *LPSCARDHANDLE;
  58 
  59 #define MAX_ATR_SIZE                  33      /**< Maximum ATR size */
  60 
  61 /* Set structure elements aligment on bytes
  62  * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
  63 #ifdef __APPLE__
  64 #pragma pack(1)
  65 #endif
  66 
  67 typedef struct
  68 {
  69       const char *szReader;
  70       void *pvUserData;
  71       DWORD dwCurrentState;
  72       DWORD dwEventState;
  73       DWORD cbAtr;
  74       unsigned char rgbAtr[MAX_ATR_SIZE];
  75 }
  76 SCARD_READERSTATE, *LPSCARD_READERSTATE;









  77 
  78 /** Protocol Control Information (PCI) */
  79 typedef struct
  80 {
  81       unsigned long dwProtocol;      /**< Protocol identifier */
  82       unsigned long cbPciLength;      /**< Protocol Control Inf Length */











  83 }
  84 SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;






  85 
  86 typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
  87 
  88 extern const SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci;





































































































































































  89 
  90 /* restore default structure elements alignment */
  91 #ifdef __APPLE__
  92 #pragma pack()












  93 #endif
  94 
  95 #define SCARD_PCI_T0      (&g_rgSCardT0Pci) /**< protocol control information (PCI) for T=0 */
  96 #define SCARD_PCI_T1      (&g_rgSCardT1Pci) /**< protocol control information (PCI) for T=1 */
  97 #define SCARD_PCI_RAW      (&g_rgSCardRawPci) /**< protocol control information (PCI) for RAW protocol */
  98 
  99 /**
 100  * @defgroup ErrorCodes ErrorCodes
 101  * @brief Error code documentation
 102  *
 103  * The error codes descriptions are from
 104  * http://msdn.microsoft.com/en-us/library/aa924526.aspx
 105  */
 106 /** @ingroup ErrorCodes */
 107 #define SCARD_S_SUCCESS                  ((LONG)0x00000000) /**< No error was encountered. */
 108 /** @ingroup ErrorCodes */
 109 #define SCARD_F_INTERNAL_ERROR            ((LONG)0x80100001) /**< An internal consistency check failed. */
 110 /** @ingroup ErrorCodes */
 111 #define SCARD_E_CANCELLED            ((LONG)0x80100002) /**< The action was cancelled by an SCardCancel request. */
 112 /** @ingroup ErrorCodes */
 113 #define SCARD_E_INVALID_HANDLE            ((LONG)0x80100003) /**< The supplied handle was invalid. */
 114 /** @ingroup ErrorCodes */
 115 #define SCARD_E_INVALID_PARAMETER      ((LONG)0x80100004) /**< One or more of the supplied parameters could not be properly interpreted. */
 116 /** @ingroup ErrorCodes */
 117 #define SCARD_E_INVALID_TARGET            ((LONG)0x80100005) /**< Registry startup information is missing or invalid. */
 118 /** @ingroup ErrorCodes */
 119 #define SCARD_E_NO_MEMORY            ((LONG)0x80100006) /**< Not enough memory available to complete this command. */
 120 /** @ingroup ErrorCodes */
 121 #define SCARD_F_WAITED_TOO_LONG            ((LONG)0x80100007) /**< An internal consistency timer has expired. */
 122 /** @ingroup ErrorCodes */
 123 #define SCARD_E_INSUFFICIENT_BUFFER      ((LONG)0x80100008) /**< The data buffer to receive returned data is too small for the returned data. */
 124 /** @ingroup ErrorCodes */
 125 #define SCARD_E_UNKNOWN_READER            ((LONG)0x80100009) /**< The specified reader name is not recognized. */
 126 /** @ingroup ErrorCodes */
 127 #define SCARD_E_TIMEOUT                  ((LONG)0x8010000A) /**< The user-specified timeout value has expired. */
 128 /** @ingroup ErrorCodes */
 129 #define SCARD_E_SHARING_VIOLATION      ((LONG)0x8010000B) /**< The smart card cannot be accessed because of other connections outstanding. */
 130 /** @ingroup ErrorCodes */
 131 #define SCARD_E_NO_SMARTCARD            ((LONG)0x8010000C) /**< The operation requires a Smart Card, but no Smart Card is currently in the device. */
 132 /** @ingroup ErrorCodes */
 133 #define SCARD_E_UNKNOWN_CARD            ((LONG)0x8010000D) /**< The specified smart card name is not recognized. */
 134 /** @ingroup ErrorCodes */
 135 #define SCARD_E_CANT_DISPOSE            ((LONG)0x8010000E) /**< The system could not dispose of the media in the requested manner. */
 136 /** @ingroup ErrorCodes */
 137 #define SCARD_E_PROTO_MISMATCH            ((LONG)0x8010000F) /**< The requested protocols are incompatible with the protocol currently in use with the smart card. */
 138 /** @ingroup ErrorCodes */
 139 #define SCARD_E_NOT_READY            ((LONG)0x80100010) /**< The reader or smart card is not ready to accept commands. */
 140 /** @ingroup ErrorCodes */
 141 #define SCARD_E_INVALID_VALUE            ((LONG)0x80100011) /**< One or more of the supplied parameters values could not be properly interpreted. */
 142 /** @ingroup ErrorCodes */
 143 #define SCARD_E_SYSTEM_CANCELLED      ((LONG)0x80100012) /**< The action was cancelled by the system, presumably to log off or shut down. */
 144 /** @ingroup ErrorCodes */
 145 #define SCARD_F_COMM_ERROR            ((LONG)0x80100013) /**< An internal communications error has been detected. */
 146 /** @ingroup ErrorCodes */
 147 #define SCARD_F_UNKNOWN_ERROR            ((LONG)0x80100014) /**< An internal error has been detected, but the source is unknown. */
 148 /** @ingroup ErrorCodes */
 149 #define SCARD_E_INVALID_ATR            ((LONG)0x80100015) /**< An ATR obtained from the registry is not a valid ATR string. */
 150 /** @ingroup ErrorCodes */
 151 #define SCARD_E_NOT_TRANSACTED            ((LONG)0x80100016) /**< An attempt was made to end a non-existent transaction. */
 152 /** @ingroup ErrorCodes */
 153 #define SCARD_E_READER_UNAVAILABLE      ((LONG)0x80100017) /**< The specified reader is not currently available for use. */
 154 /** @ingroup ErrorCodes */
 155 #define SCARD_P_SHUTDOWN            ((LONG)0x80100018) /**< The operation has been aborted to allow the server application to exit. */
 156 /** @ingroup ErrorCodes */
 157 #define SCARD_E_PCI_TOO_SMALL            ((LONG)0x80100019) /**< The PCI Receive buffer was too small. */
 158 /** @ingroup ErrorCodes */
 159 #define SCARD_E_READER_UNSUPPORTED      ((LONG)0x8010001A) /**< The reader driver does not meet minimal requirements for support. */
 160 /** @ingroup ErrorCodes */
 161 #define SCARD_E_DUPLICATE_READER      ((LONG)0x8010001B) /**< The reader driver did not produce a unique reader name. */
 162 /** @ingroup ErrorCodes */
 163 #define SCARD_E_CARD_UNSUPPORTED      ((LONG)0x8010001C) /**< The smart card does not meet minimal requirements for support. */
 164 /** @ingroup ErrorCodes */
 165 #define SCARD_E_NO_SERVICE            ((LONG)0x8010001D) /**< The Smart card resource manager is not running. */
 166 /** @ingroup ErrorCodes */
 167 #define SCARD_E_SERVICE_STOPPED            ((LONG)0x8010001E) /**< The Smart card resource manager has shut down. */
 168 /** @ingroup ErrorCodes */
 169 #define SCARD_E_UNEXPECTED            ((LONG)0x8010001F) /**< An unexpected card error has occurred. */
 170 /** @ingroup ErrorCodes */
 171 #define SCARD_E_UNSUPPORTED_FEATURE      ((LONG)0x8010001F) /**< This smart card does not support the requested feature. */
 172 /** @ingroup ErrorCodes */
 173 #define SCARD_E_ICC_INSTALLATION      ((LONG)0x80100020) /**< No primary provider can be found for the smart card. */
 174 /** @ingroup ErrorCodes */
 175 #define SCARD_E_ICC_CREATEORDER            ((LONG)0x80100021) /**< The requested order of object creation is not supported. */
 176 /** @ingroup ErrorCodes */
 177 /* #define SCARD_E_UNSUPPORTED_FEATURE      ((LONG)0x80100022) / **< This smart card does not support the requested feature. */
 178 /** @ingroup ErrorCodes */
 179 #define SCARD_E_DIR_NOT_FOUND            ((LONG)0x80100023) /**< The identified directory does not exist in the smart card. */
 180 /** @ingroup ErrorCodes */
 181 #define SCARD_E_FILE_NOT_FOUND            ((LONG)0x80100024) /**< The identified file does not exist in the smart card. */
 182 /** @ingroup ErrorCodes */
 183 #define SCARD_E_NO_DIR                  ((LONG)0x80100025) /**< The supplied path does not represent a smart card directory. */
 184 /** @ingroup ErrorCodes */
 185 #define SCARD_E_NO_FILE                  ((LONG)0x80100026) /**< The supplied path does not represent a smart card file. */
 186 /** @ingroup ErrorCodes */
 187 #define SCARD_E_NO_ACCESS            ((LONG)0x80100027) /**< Access is denied to this file. */
 188 /** @ingroup ErrorCodes */
 189 #define SCARD_E_WRITE_TOO_MANY            ((LONG)0x80100028) /**< The smart card does not have enough memory to store the information. */
 190 /** @ingroup ErrorCodes */
 191 #define SCARD_E_BAD_SEEK            ((LONG)0x80100029) /**< There was an error trying to set the smart card file object pointer. */
 192 /** @ingroup ErrorCodes */
 193 #define SCARD_E_INVALID_CHV            ((LONG)0x8010002A) /**< The supplied PIN is incorrect. */
 194 /** @ingroup ErrorCodes */
 195 #define SCARD_E_UNKNOWN_RES_MNG            ((LONG)0x8010002B) /**< An unrecognized error code was returned from a layered component. */
 196 /** @ingroup ErrorCodes */
 197 #define SCARD_E_NO_SUCH_CERTIFICATE      ((LONG)0x8010002C) /**< The requested certificate does not exist. */
 198 /** @ingroup ErrorCodes */
 199 #define SCARD_E_CERTIFICATE_UNAVAILABLE      ((LONG)0x8010002D) /**< The requested certificate could not be obtained. */
 200 /** @ingroup ErrorCodes */
 201 #define SCARD_E_NO_READERS_AVAILABLE    ((LONG)0x8010002E) /**< Cannot find a smart card reader. */
 202 /** @ingroup ErrorCodes */
 203 #define SCARD_E_COMM_DATA_LOST            ((LONG)0x8010002F) /**< A communications error with the smart card has been detected. Retry the operation. */
 204 /** @ingroup ErrorCodes */
 205 #define SCARD_E_NO_KEY_CONTAINER      ((LONG)0x80100030) /**< The requested key container does not exist on the smart card. */
 206 /** @ingroup ErrorCodes */
 207 #define SCARD_E_SERVER_TOO_BUSY            ((LONG)0x80100031) /**< The Smart Card Resource Manager is too busy to complete this operation. */
 208 
 209 /** @ingroup ErrorCodes */
 210 #define SCARD_W_UNSUPPORTED_CARD      ((LONG)0x80100065) /**< The reader cannot communicate with the card, due to ATR string configuration conflicts. */
 211 /** @ingroup ErrorCodes */
 212 #define SCARD_W_UNRESPONSIVE_CARD      ((LONG)0x80100066) /**< The smart card is not responding to a reset. */
 213 /** @ingroup ErrorCodes */
 214 #define SCARD_W_UNPOWERED_CARD            ((LONG)0x80100067) /**< Power has been removed from the smart card, so that further communication is not possible. */
 215 /** @ingroup ErrorCodes */
 216 #define SCARD_W_RESET_CARD            ((LONG)0x80100068) /**< The smart card has been reset, so any shared state information is invalid. */
 217 /** @ingroup ErrorCodes */
 218 #define SCARD_W_REMOVED_CARD            ((LONG)0x80100069) /**< The smart card has been removed, so further communication is not possible. */
 219 
 220 /** @ingroup ErrorCodes */
 221 #define SCARD_W_SECURITY_VIOLATION      ((LONG)0x8010006A) /**< Access was denied because of a security violation. */
 222 /** @ingroup ErrorCodes */
 223 #define SCARD_W_WRONG_CHV            ((LONG)0x8010006B) /**< The card cannot be accessed because the wrong PIN was presented. */
 224 /** @ingroup ErrorCodes */
 225 #define SCARD_W_CHV_BLOCKED            ((LONG)0x8010006C) /**< The card cannot be accessed because the maximum number of PIN entry attempts has been reached. */
 226 /** @ingroup ErrorCodes */
 227 #define SCARD_W_EOF                  ((LONG)0x8010006D) /**< The end of the smart card file has been reached. */
 228 /** @ingroup ErrorCodes */
 229 #define SCARD_W_CANCELLED_BY_USER      ((LONG)0x8010006E) /**< The user pressed "Cancel" on a Smart Card Selection Dialog. */
 230 /** @ingroup ErrorCodes */
 231 #define SCARD_W_CARD_NOT_AUTHENTICATED      ((LONG)0x8010006F) /**< No PIN was presented to the smart card. */
 232 
 233 #define SCARD_AUTOALLOCATE (DWORD)(-1)      /**< see SCardFreeMemory() */
 234 #define SCARD_SCOPE_USER            0x0000      /**< Scope in user space */
 235 #define SCARD_SCOPE_TERMINAL            0x0001      /**< Scope in terminal */
 236 #define SCARD_SCOPE_SYSTEM            0x0002      /**< Scope in system */
 237 #define SCARD_SCOPE_GLOBAL            0x0003      /**< Scope is global */
 238 
 239 #define SCARD_PROTOCOL_UNDEFINED      0x0000      /**< protocol not set */
 240 #define SCARD_PROTOCOL_UNSET SCARD_PROTOCOL_UNDEFINED      /* backward compat */
 241 #define SCARD_PROTOCOL_T0            0x0001      /**< T=0 active protocol. */
 242 #define SCARD_PROTOCOL_T1            0x0002      /**< T=1 active protocol. */
 243 #define SCARD_PROTOCOL_RAW            0x0004      /**< Raw active protocol. */
 244 #define SCARD_PROTOCOL_T15            0x0008      /**< T=15 protocol. */
 245 
 246 #define SCARD_PROTOCOL_ANY            (SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1)      /**< IFD determines prot. */
 247 
 248 #define SCARD_SHARE_EXCLUSIVE            0x0001      /**< Exclusive mode only */
 249 #define SCARD_SHARE_SHARED            0x0002      /**< Shared mode only */
 250 #define SCARD_SHARE_DIRECT            0x0003      /**< Raw mode only */
 251 
 252 #define SCARD_LEAVE_CARD            0x0000      /**< Do nothing on close */
 253 #define SCARD_RESET_CARD            0x0001      /**< Reset on close */
 254 #define SCARD_UNPOWER_CARD            0x0002      /**< Power down on close */
 255 #define SCARD_EJECT_CARD            0x0003      /**< Eject on close */
 256 
 257 #define SCARD_UNKNOWN                  0x0001      /**< Unknown state */
 258 #define SCARD_ABSENT                  0x0002      /**< Card is absent */
 259 #define SCARD_PRESENT                  0x0004      /**< Card is present */
 260 #define SCARD_SWALLOWED                  0x0008      /**< Card not powered */
 261 #define SCARD_POWERED                  0x0010      /**< Card is powered */
 262 #define SCARD_NEGOTIABLE            0x0020      /**< Ready for PTS */
 263 #define SCARD_SPECIFIC                  0x0040      /**< PTS has been set */
 264 
 265 #define SCARD_STATE_UNAWARE            0x0000      /**< App wants status */
 266 #define SCARD_STATE_IGNORE            0x0001      /**< Ignore this reader */
 267 #define SCARD_STATE_CHANGED            0x0002      /**< State has changed */
 268 #define SCARD_STATE_UNKNOWN            0x0004      /**< Reader unknown */
 269 #define SCARD_STATE_UNAVAILABLE            0x0008      /**< Status unavailable */
 270 #define SCARD_STATE_EMPTY            0x0010      /**< Card removed */
 271 #define SCARD_STATE_PRESENT            0x0020      /**< Card inserted */
 272 #define SCARD_STATE_ATRMATCH            0x0040      /**< ATR matches card */
 273 #define SCARD_STATE_EXCLUSIVE            0x0080      /**< Exclusive Mode */
 274 #define SCARD_STATE_INUSE            0x0100      /**< Shared Mode */
 275 #define SCARD_STATE_MUTE            0x0200      /**< Unresponsive card */
 276 #define SCARD_STATE_UNPOWERED            0x0400      /**< Unpowered card */
 277 
 278 #ifndef INFINITE
 279 #define INFINITE                  0xFFFFFFFF      /**< Infinite timeout */
 280 #endif

 281 
 282 #define PCSCLITE_VERSION_NUMBER            "1.8.24"      /**< Current version */
 283 /** Maximum readers context (a slot is count as a reader) */

















 284 #define PCSCLITE_MAX_READERS_CONTEXTS                  16
 285 
 286 #define MAX_READERNAME                  128









 287 
 288 #ifndef SCARD_ATR_LENGTH
 289 #define SCARD_ATR_LENGTH            MAX_ATR_SIZE      /**< Maximum ATR size */
 290 #endif
 291 
 292 /*













 293  * The message and buffer sizes must be multiples of 16.
 294  * The max message size must be at least large enough
 295  * to accomodate the transmit_struct
 296  */
 297 #define MAX_BUFFER_SIZE                  264      /**< Maximum Tx/Rx Buffer for short APDU */
 298 #define MAX_BUFFER_SIZE_EXTENDED      (4 + 3 + (1<<16) + 3 + 2)      /**< enhanced (64K + APDU + Lc + Le + SW) Tx/Rx Buffer */


 299 
 300 /*
 301  * Gets a stringified error response
 302  */
 303 const char *pcsc_stringify_error(const LONG);
 304 
 305 #ifdef __cplusplus
 306 }
 307 #endif
 308 
 309 #endif
< prev index next >