~ubuntu-branches/ubuntu/jaunty/pcsc-lite/jaunty-security

« back to all changes in this revision

Viewing changes to src/pcsclite.h

  • Committer: Bazaar Package Importer
  • Author(s): Ludovic Rousseau
  • Date: 2004-06-13 21:45:56 UTC
  • mfrom: (1.1.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20040613214556-zio7hrzkz9wwtffx
Tags: 1.2.9-beta2-2
* debian/rules: add -lpthread to LDFLAGS so that pthread_* symbols are
  included in the library (problem only seen on mips and mipsel).
  Closes: #253629
* debian/control: make libpcsclite-dev and libpcsclite1 at Priority:
  optional so that other packages at Priority: optional can use them.
  Closes: #249374

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/******************************************************************
2
 
 
3
 
        MUSCLE SmartCard Development ( http://www.linuxnet.com )
4
 
            Title  : pcsclite.h
5
 
            Package: pcsc lite
6
 
            Author : David Corcoran
7
 
            Date   : 7/27/99
8
 
            License: Copyright (C) 1999 David Corcoran
9
 
                     <corcoran@linuxnet.com>
10
 
            Purpose: This keeps a list of defines for pcsc lite.            
11
 
 
12
 
********************************************************************/
 
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.38 2004/05/11 09:49:22 rousseau Exp $
 
11
 */
13
12
 
14
13
#ifndef __pcsclite_h__
15
14
#define __pcsclite_h__
16
15
 
 
16
#if defined(__APPLE__)
 
17
#include <PCSC/wintypes.h>
 
18
#else
17
19
#include <wintypes.h>
 
20
#endif
18
21
 
19
22
#ifdef __cplusplus
20
 
extern "C" {
21
 
#endif  
22
 
  
23
 
  typedef long                          SCARDCONTEXT;
24
 
  typedef SCARDCONTEXT *                PSCARDCONTEXT;
25
 
  typedef SCARDCONTEXT *                LPSCARDCONTEXT;
26
 
  typedef long                          SCARDHANDLE;
27
 
  typedef SCARDHANDLE *                 PSCARDHANDLE;
28
 
  typedef SCARDHANDLE *                 LPSCARDHANDLE;
29
 
 
30
 
 
31
 
typedef struct {
32
 
    const char *        szReader;
33
 
    void *              pvUserData;
34
 
    unsigned long       dwCurrentState;
35
 
    unsigned long       dwEventState;
36
 
    unsigned long       cbAtr;
37
 
    unsigned char       rgbAtr[33];
38
 
} SCARD_READERSTATE_A;
 
23
extern "C"
 
24
{
 
25
#endif
 
26
 
 
27
#ifdef WIN32
 
28
#include <winscard.h>
 
29
#else
 
30
typedef long SCARDCONTEXT;
 
31
typedef SCARDCONTEXT *PSCARDCONTEXT;
 
32
typedef SCARDCONTEXT *LPSCARDCONTEXT;
 
33
typedef long SCARDHANDLE;
 
34
typedef SCARDHANDLE *PSCARDHANDLE;
 
35
typedef SCARDHANDLE *LPSCARDHANDLE;
 
36
 
 
37
#define MAX_ATR_SIZE                    33      /* Maximum ATR size */
 
38
 
 
39
typedef struct
 
40
{
 
41
        const char *szReader;
 
42
        void *pvUserData;
 
43
        unsigned long dwCurrentState;
 
44
        unsigned long dwEventState;
 
45
        unsigned long cbAtr;
 
46
        unsigned char rgbAtr[MAX_ATR_SIZE];
 
47
}
 
48
SCARD_READERSTATE_A;
39
49
 
40
50
typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
41
 
        *LPSCARD_READERSTATE_A;
 
51
        *LPSCARD_READERSTATE_A;
42
52
 
43
 
typedef struct _SCARD_IO_REQUEST{
44
 
    unsigned long   dwProtocol;         /* Protocol identifier            */
45
 
    unsigned long   cbPciLength;        /* Protocol Control Inf Length    */
46
 
} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
 
53
typedef struct _SCARD_IO_REQUEST
 
54
{
 
55
        unsigned long dwProtocol;       /* Protocol identifier */
 
56
        unsigned long cbPciLength;      /* Protocol Control Inf Length */
 
57
}
 
58
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
47
59
 
48
60
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
49
 
  
50
 
extern SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci;
51
 
  
52
 
#define SCARD_PCI_T0  (&g_rgSCardT0Pci)
53
 
#define SCARD_PCI_T1  (&g_rgSCardT1Pci)
54
 
#define SCARD_PCI_RAW (&g_rgSCardRawPci)
55
 
 
56
 
/* Gets a stringified error response */
57
 
char * pcsc_stringify_error( long );
58
 
 
59
 
#define SCARD_S_SUCCESS                 0x00000000
60
 
#define SCARD_E_CANCELLED               0x80100002
61
 
#define SCARD_E_CANT_DISPOSE            0x8010000E
62
 
#define SCARD_E_INSUFFICIENT_BUFFER     0x80100008
63
 
#define SCARD_E_INVALID_ATR             0x80100015
64
 
#define SCARD_E_INVALID_HANDLE          0x80100003
65
 
#define SCARD_E_INVALID_PARAMETER       0x80100004
66
 
#define SCARD_E_INVALID_TARGET          0x80100005
67
 
#define SCARD_E_INVALID_VALUE           0x80100011
68
 
#define SCARD_E_NO_MEMORY               0x80100006
69
 
#define SCARD_F_COMM_ERROR              0x80100013
70
 
#define SCARD_F_INTERNAL_ERROR          0x80100001
71
 
#define SCARD_F_UNKNOWN_ERROR           0x80100014
72
 
#define SCARD_F_WAITED_TOO_LONG         0x80100007
73
 
#define SCARD_E_UNKNOWN_READER          0x80100009
74
 
#define SCARD_E_TIMEOUT                 0x8010000A
75
 
#define SCARD_E_SHARING_VIOLATION       0x8010000B
76
 
#define SCARD_E_NO_SMARTCARD            0x8010000C
77
 
#define SCARD_E_UNKNOWN_CARD            0x8010000D
78
 
#define SCARD_E_PROTO_MISMATCH          0x8010000F
79
 
#define SCARD_E_NOT_READY               0x80100010
80
 
#define SCARD_E_SYSTEM_CANCELLED        0x80100012
81
 
#define SCARD_E_NOT_TRANSACTED          0x80100016
82
 
#define SCARD_E_READER_UNAVAILABLE      0x80100017
83
 
 
84
 
#define SCARD_W_UNSUPPORTED_CARD        0x80100065
85
 
#define SCARD_W_UNRESPONSIVE_CARD       0x80100066
86
 
#define SCARD_W_UNPOWERED_CARD          0x80100067
87
 
#define SCARD_W_RESET_CARD              0x80100068
88
 
#define SCARD_W_REMOVED_CARD            0x80100069
89
 
#define SCARD_W_INSERTED_CARD           0x8010006A
90
 
 
91
 
#define SCARD_E_UNSUPPORTED_FEATURE     0x8010001F
92
 
#define SCARD_E_PCI_TOO_SMALL           0x80100019
93
 
#define SCARD_E_READER_UNSUPPORTED      0x8010001A
94
 
#define SCARD_E_DUPLICATE_READER        0x8010001B
95
 
#define SCARD_E_CARD_UNSUPPORTED        0x8010001C
96
 
#define SCARD_E_NO_SERVICE              0x8010001D
97
 
#define SCARD_E_SERVICE_STOPPED         0x8010001E
98
 
 
99
 
 
100
 
#define SCARD_SCOPE_USER                0x0000  /* Scope in user space */
101
 
#define SCARD_SCOPE_TERMINAL            0x0001  /* Scope in terminal   */
102
 
#define SCARD_SCOPE_SYSTEM              0x0002  /* Scope in system     */
103
 
#define SCARD_SCOPE_GLOBAL              0x0003  /* Scope is global     */
104
 
 
105
 
#define SCARD_PROTOCOL_T0               0x0001  /* T=0 active protocol. */
106
 
#define SCARD_PROTOCOL_T1               0x0002  /* T=1 active protocol. */
107
 
#define SCARD_PROTOCOL_RAW              0x0004  /* Raw active protocol. */
108
 
#define SCARD_PROTOCOL_ANY              0x1000  /* IFD determines prot. */
109
 
 
110
 
#define SCARD_SHARE_EXCLUSIVE           0x0001  /* Exclusive mode only  */
111
 
#define SCARD_SHARE_SHARED              0x0002  /* Shared mode only     */
112
 
#define SCARD_SHARE_DIRECT              0x0003  /* Raw mode only        */
113
 
 
114
 
#define SCARD_LEAVE_CARD                0x0000  /* Do nothing on close  */
115
 
#define SCARD_RESET_CARD                0x0001  /* Reset on close       */
116
 
#define SCARD_UNPOWER_CARD              0x0002  /* Power down on close  */
117
 
#define SCARD_EJECT_CARD                0x0003  /* Eject on close       */  
118
 
 
119
 
#define SCARD_UNKNOWN                   0x0001  /* Unknown state        */   
120
 
#define SCARD_ABSENT                    0x0002  /* Card is absent       */
121
 
#define SCARD_PRESENT                   0x0004  /* Card is present      */
122
 
#define SCARD_SWALLOWED                 0x0008  /* Card not powered     */
123
 
#define SCARD_POWERED                   0x0010  /* Card is powered      */
124
 
#define SCARD_NEGOTIABLE                0x0020  /* Ready for PTS        */
125
 
#define SCARD_SPECIFIC                  0x0040  /* PTS has been set     */
126
 
 
127
 
#define SCARD_STATE_UNAWARE             0x0000  /* App wants status     */
128
 
#define SCARD_STATE_IGNORE              0x0001  /* Ignore this reader   */
129
 
#define SCARD_STATE_CHANGED             0x0002  /* State has changed    */
130
 
#define SCARD_STATE_UNKNOWN             0x0004  /* Reader unknown       */
131
 
#define SCARD_STATE_UNAVAILABLE         0x0008  /* Status unavailable   */
132
 
#define SCARD_STATE_EMPTY               0x0010  /* Card removed         */
133
 
#define SCARD_STATE_PRESENT             0x0020  /* Card inserted        */
134
 
#define SCARD_STATE_ATRMATCH            0x0040  /* ATR matches card     */
135
 
#define SCARD_STATE_EXCLUSIVE           0x0080  /* Exclusive Mode       */
136
 
#define SCARD_STATE_INUSE               0x0100  /* Shared Mode          */
137
 
#define SCARD_STATE_MUTE                0x0200  /* Unresponsive card    */
138
 
 
139
 
#define SCARD_RESET                     0x0001  /* Card was reset       */
140
 
#define SCARD_INSERTED                  0x0002  /* Card was inserted    */
141
 
#define SCARD_REMOVED                   0x0004  /* Card was removed     */
142
 
 
143
 
#define BLOCK_STATUS_RESUME             0x00FF  /* Normal resume        */
144
 
#define BLOCK_STATUS_BLOCKING           0x00FA  /* Function is blocking */
 
61
 
 
62
extern SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci,
 
63
        g_rgSCardRawPci;
 
64
 
 
65
#define SCARD_PCI_T0    (&g_rgSCardT0Pci)
 
66
#define SCARD_PCI_T1    (&g_rgSCardT1Pci)
 
67
#define SCARD_PCI_RAW   (&g_rgSCardRawPci)
 
68
 
 
69
#define SCARD_S_SUCCESS                 0x00000000
 
70
#define SCARD_E_CANCELLED               0x80100002
 
71
#define SCARD_E_CANT_DISPOSE            0x8010000E
 
72
#define SCARD_E_INSUFFICIENT_BUFFER     0x80100008
 
73
#define SCARD_E_INVALID_ATR             0x80100015
 
74
#define SCARD_E_INVALID_HANDLE          0x80100003
 
75
#define SCARD_E_INVALID_PARAMETER       0x80100004
 
76
#define SCARD_E_INVALID_TARGET          0x80100005
 
77
#define SCARD_E_INVALID_VALUE           0x80100011
 
78
#define SCARD_E_NO_MEMORY               0x80100006
 
79
#define SCARD_F_COMM_ERROR              0x80100013
 
80
#define SCARD_F_INTERNAL_ERROR          0x80100001
 
81
#define SCARD_F_UNKNOWN_ERROR           0x80100014
 
82
#define SCARD_F_WAITED_TOO_LONG         0x80100007
 
83
#define SCARD_E_UNKNOWN_READER          0x80100009
 
84
#define SCARD_E_TIMEOUT                 0x8010000A
 
85
#define SCARD_E_SHARING_VIOLATION       0x8010000B
 
86
#define SCARD_E_NO_SMARTCARD            0x8010000C
 
87
#define SCARD_E_UNKNOWN_CARD            0x8010000D
 
88
#define SCARD_E_PROTO_MISMATCH          0x8010000F
 
89
#define SCARD_E_NOT_READY               0x80100010
 
90
#define SCARD_E_SYSTEM_CANCELLED        0x80100012
 
91
#define SCARD_E_NOT_TRANSACTED          0x80100016
 
92
#define SCARD_E_READER_UNAVAILABLE      0x80100017
 
93
 
 
94
#define SCARD_W_UNSUPPORTED_CARD        0x80100065
 
95
#define SCARD_W_UNRESPONSIVE_CARD       0x80100066
 
96
#define SCARD_W_UNPOWERED_CARD          0x80100067
 
97
#define SCARD_W_RESET_CARD              0x80100068
 
98
#define SCARD_W_REMOVED_CARD            0x80100069
 
99
 
 
100
#define SCARD_E_PCI_TOO_SMALL           0x80100019
 
101
#define SCARD_E_READER_UNSUPPORTED      0x8010001A
 
102
#define SCARD_E_DUPLICATE_READER        0x8010001B
 
103
#define SCARD_E_CARD_UNSUPPORTED        0x8010001C
 
104
#define SCARD_E_NO_SERVICE              0x8010001D
 
105
#define SCARD_E_SERVICE_STOPPED         0x8010001E
 
106
 
 
107
#define SCARD_SCOPE_USER                0x0000  /* Scope in user space */
 
108
#define SCARD_SCOPE_TERMINAL            0x0001  /* Scope in terminal */
 
109
#define SCARD_SCOPE_SYSTEM              0x0002  /* Scope in system */
 
110
 
 
111
#define SCARD_PROTOCOL_T0               0x0001  /* T=0 active protocol. */
 
112
#define SCARD_PROTOCOL_T1               0x0002  /* T=1 active protocol. */
 
113
#define SCARD_PROTOCOL_RAW              0x0004  /* Raw active protocol. */
 
114
 
 
115
#define SCARD_SHARE_EXCLUSIVE           0x0001  /* Exclusive mode only */
 
116
#define SCARD_SHARE_SHARED              0x0002  /* Shared mode only */
 
117
#define SCARD_SHARE_DIRECT              0x0003  /* Raw mode only */
 
118
 
 
119
#define SCARD_LEAVE_CARD                0x0000  /* Do nothing on close */
 
120
#define SCARD_RESET_CARD                0x0001  /* Reset on close */
 
121
#define SCARD_UNPOWER_CARD              0x0002  /* Power down on close */
 
122
#define SCARD_EJECT_CARD                0x0003  /* Eject on close */
 
123
 
 
124
#define SCARD_UNKNOWN                   0x0001  /* Unknown state */
 
125
#define SCARD_ABSENT                    0x0002  /* Card is absent */
 
126
#define SCARD_PRESENT                   0x0004  /* Card is present */
 
127
#define SCARD_SWALLOWED                 0x0008  /* Card not powered */
 
128
#define SCARD_POWERED                   0x0010  /* Card is powered */
 
129
#define SCARD_NEGOTIABLE                0x0020  /* Ready for PTS */
 
130
#define SCARD_SPECIFIC                  0x0040  /* PTS has been set */
 
131
 
 
132
#define SCARD_STATE_UNAWARE             0x0000  /* App wants status */
 
133
#define SCARD_STATE_IGNORE              0x0001  /* Ignore this reader */
 
134
#define SCARD_STATE_CHANGED             0x0002  /* State has changed */
 
135
#define SCARD_STATE_UNKNOWN             0x0004  /* Reader unknown */
 
136
#define SCARD_STATE_UNAVAILABLE         0x0008  /* Status unavailable */
 
137
#define SCARD_STATE_EMPTY               0x0010  /* Card removed */
 
138
#define SCARD_STATE_PRESENT             0x0020  /* Card inserted */
 
139
#define SCARD_STATE_ATRMATCH            0x0040  /* ATR matches card */
 
140
#define SCARD_STATE_EXCLUSIVE           0x0080  /* Exclusive Mode */
 
141
#define SCARD_STATE_INUSE               0x0100  /* Shared Mode */
 
142
#define SCARD_STATE_MUTE                0x0200  /* Unresponsive card */
 
143
 
 
144
/*
 
145
 * Tags for requesting card and reader attributes
 
146
 */
 
147
 
 
148
#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))
 
149
 
 
150
#define SCARD_CLASS_VENDOR_INFO     1   // Vendor information definitions
 
151
#define SCARD_CLASS_COMMUNICATIONS  2   // Communication definitions
 
152
#define SCARD_CLASS_PROTOCOL        3   // Protocol definitions
 
153
#define SCARD_CLASS_POWER_MGMT      4   // Power Management definitions
 
154
#define SCARD_CLASS_SECURITY        5   // Security Assurance definitions
 
155
#define SCARD_CLASS_MECHANICAL      6   // Mechanical characteristic definitions
 
156
#define SCARD_CLASS_VENDOR_DEFINED  7   // Vendor specific definitions
 
157
#define SCARD_CLASS_IFD_PROTOCOL    8   // Interface Device Protocol options
 
158
#define SCARD_CLASS_ICC_STATE       9   // ICC State specific definitions
 
159
#define SCARD_CLASS_SYSTEM     0x7fff   // System-specific definitions
 
160
 
 
161
#define SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100)
 
162
#define SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101)
 
163
#define SCARD_ATTR_VENDOR_IFD_VERSION SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102)
 
164
#define SCARD_ATTR_VENDOR_IFD_SERIAL_NO SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0103)
 
165
#define SCARD_ATTR_CHANNEL_ID SCARD_ATTR_VALUE(SCARD_CLASS_COMMUNICATIONS, 0x0110)
 
166
#define SCARD_ATTR_ASYNC_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0120)
 
167
#define SCARD_ATTR_DEFAULT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0121)
 
168
#define SCARD_ATTR_MAX_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0122)
 
169
#define SCARD_ATTR_DEFAULT_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0123)
 
170
#define SCARD_ATTR_MAX_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0124)
 
171
#define SCARD_ATTR_MAX_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0125)
 
172
#define SCARD_ATTR_SYNC_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0126)
 
173
#define SCARD_ATTR_POWER_MGMT_SUPPORT SCARD_ATTR_VALUE(SCARD_CLASS_POWER_MGMT, 0x0131)
 
174
#define SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0140)
 
175
#define SCARD_ATTR_USER_AUTH_INPUT_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0142)
 
176
#define SCARD_ATTR_CHARACTERISTICS SCARD_ATTR_VALUE(SCARD_CLASS_MECHANICAL, 0x0150)
 
177
 
 
178
#define SCARD_ATTR_CURRENT_PROTOCOL_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0201)
 
179
#define SCARD_ATTR_CURRENT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0202)
 
180
#define SCARD_ATTR_CURRENT_F SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0203)
 
181
#define SCARD_ATTR_CURRENT_D SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0204)
 
182
#define SCARD_ATTR_CURRENT_N SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0205)
 
183
#define SCARD_ATTR_CURRENT_W SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0206)
 
184
#define SCARD_ATTR_CURRENT_IFSC SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0207)
 
185
#define SCARD_ATTR_CURRENT_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0208)
 
186
#define SCARD_ATTR_CURRENT_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0209)
 
187
#define SCARD_ATTR_CURRENT_CWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020a)
 
188
#define SCARD_ATTR_CURRENT_EBC_ENCODING SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020b)
 
189
#define SCARD_ATTR_EXTENDED_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020c)
 
190
 
 
191
#define SCARD_ATTR_ICC_PRESENCE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0300)
 
192
#define SCARD_ATTR_ICC_INTERFACE_STATUS SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0301)
 
193
#define SCARD_ATTR_CURRENT_IO_STATE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0302)
 
194
#define SCARD_ATTR_ATR_STRING SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0303)
 
195
#define SCARD_ATTR_ICC_TYPE_PER_ATR SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0304)
 
196
 
 
197
#define SCARD_ATTR_ESC_RESET SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA000)
 
198
#define SCARD_ATTR_ESC_CANCEL SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA003)
 
199
#define SCARD_ATTR_ESC_AUTHREQUEST SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA005)
 
200
#define SCARD_ATTR_MAXINPUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA007)
 
201
 
 
202
#define SCARD_ATTR_DEVICE_UNIT SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0001)
 
203
#define SCARD_ATTR_DEVICE_IN_USE SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0002)
 
204
#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003)
 
205
#define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004)
 
206
#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0005)
 
207
#define SCARD_ATTR_DEVICE_SYSTEM_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0006)
 
208
#define SCARD_ATTR_SUPRESS_T1_IFS_REQUEST SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0007)
 
209
 
 
210
#ifdef UNICODE
 
211
#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_W
 
212
#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_W
 
213
#else
 
214
#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
 
215
#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_A
 
216
#endif
 
217
 
 
218
#endif
 
219
 
 
220
/* PC/SC Lite specific extensions */
 
221
#define SCARD_W_INSERTED_CARD           0x8010006A
 
222
#define SCARD_E_UNSUPPORTED_FEATURE     0x8010001F
 
223
 
 
224
#define SCARD_SCOPE_GLOBAL              0x0003  /* Scope is global */
 
225
 
 
226
#define SCARD_PROTOCOL_ANY              0x1000  /* IFD determines prot. */
 
227
 
 
228
#define SCARD_RESET                     0x0001  /* Card was reset */
 
229
#define SCARD_INSERTED                  0x0002  /* Card was inserted */
 
230
#define SCARD_REMOVED                   0x0004  /* Card was removed */
 
231
 
 
232
#define BLOCK_STATUS_RESUME             0x00FF  /* Normal resume */
 
233
#define BLOCK_STATUS_BLOCKING           0x00FA  /* Function is blocking */
145
234
 
146
235
#ifndef USE_READER_CONF
147
236
#define PCSCLITE_CONFIG_DIR             "/etc"
148
237
#else
149
238
#define PCSCLITE_CONFIG_DIR             USE_READER_CONF
150
239
#endif
 
240
#ifndef USE_IPCDIR
 
241
#define PCSCLITE_IPC_DIR                "/var/run"
 
242
#else
 
243
#define PCSCLITE_IPC_DIR                USE_IPCDIR
 
244
#endif
 
245
 
151
246
#define PCSCLITE_READER_CONFIG          PCSCLITE_CONFIG_DIR "/reader.conf"
152
 
#define PCSCLITE_CARD_CONFIG            PCSCLITE_CONFIG_DIR "/card.conf"
153
 
#define PCSCLITE_IPC_DIR                "/tmp/pcsc"
154
 
#define PCSCLITE_SHM_FILE               PCSCLITE_IPC_DIR "/.pcsctmp"
155
 
#define PCSCLITE_PUBSHM_FILE            PCSCLITE_IPC_DIR "/.pcscpub"
156
 
#define PCSCLITE_CSOCK_NAME             PCSCLITE_IPC_DIR "/.pcscomm"
157
 
 
158
 
#define PCSCLITE_SVC_IDENTITY        0x01030000 /* Service ID           */
159
 
 
160
 
#define INFINITE                     0xFFFFFFFF /* Infinite timeout     */
161
 
#define PCSCLITE_INFINITE_TIMEOUT    4320000    /* 50 day infinite t/o  */
162
 
 
163
 
#define PCSCLITE_VERSION_NUMBER         "1.0.2.beta5" /* Current version     */
164
 
#define PCSCLITE_MAX_MESSAGE_SIZE       2048    /* Transport msg len    */
165
 
#define PCSCLITE_CLIENT_ATTEMPTS        120     /* Attempts to reach sv */
166
 
#define PCSCLITE_MCLIENT_ATTEMPTS       20      /* Attempts to reach sv */
167
 
#define PCSCLITE_SERVER_ATTEMPTS        5       /* Attempts to reach cl */
168
 
#define PCSCLITE_STATUS_POLL_RATE       400000  /* Status polling rate  */
169
 
#define PCSCLITE_MSG_KEY_LEN            16      /* App ID key length    */
170
 
#define PCSCLITE_RW_ATTEMPTS            100     /* Attempts to rd/wrt   */
171
 
#define PCSCLITE_MAX_CHANNELS           16      /* Maximum channels     */
172
 
#define PCSCLITE_MAX_APPLICATIONS       16      /* Maximum applications */
173
 
#define PCSCLITE_MAX_CONTEXTS           16      /* Maximum readers      */
174
 
#define PCSCLITE_MAX_THREADS            16      /* Stat change threads  */
175
 
#define PCSCLITE_STATUS_WAIT            200000  /* Status Change Sleep  */
176
 
#define PCSCLITE_TRANSACTION_TIMEOUT    40      /* Transaction timeout  */
177
 
#define MAX_ATR_SIZE                    33      /* Maximum ATR size     */
178
 
#define MAX_BUFFER_SIZE                 264     /* Maximum Tx/Rx Buffer */
179
 
#define MAX_READERNAME                  50      /* 50 char Reader Name  */
180
 
#define MAX_LIBNAME                     100     /* 100 char Lib Name    */
181
 
 
182
 
#define SCARD_ATR_LENGTH           MAX_ATR_SIZE /* Maximum ATR size     */
 
247
#define PCSCLITE_PUBSHM_FILE            PCSCLITE_IPC_DIR "/pcscd.pub"
 
248
#define PCSCLITE_CSOCK_NAME             PCSCLITE_IPC_DIR "/pcscd.comm"
 
249
 
 
250
#define PCSCLITE_SVC_IDENTITY           0x01030000      /* Service ID */
 
251
 
 
252
#ifndef INFINITE
 
253
#define INFINITE                        0xFFFFFFFF      /* Infinite timeout */
 
254
#endif
 
255
#define PCSCLITE_INFINITE_TIMEOUT       4320000         /* 50 day infinite t/o */
 
256
 
 
257
#define PCSCLITE_VERSION_NUMBER         "1.2.9-beta2"   /* Current version */
 
258
#define PCSCLITE_CLIENT_ATTEMPTS        120             /* Attempts to reach sv */
 
259
#define PCSCLITE_MCLIENT_ATTEMPTS       20              /* Attempts to reach sv */
 
260
#define PCSCLITE_STATUS_POLL_RATE       400000          /* Status polling rate */
 
261
#define PCSCLITE_MSG_KEY_LEN            16              /* App ID key length */
 
262
#define PCSCLITE_RW_ATTEMPTS            100             /* Attempts to rd/wrt */
 
263
 
 
264
/* Maximum applications */
 
265
#define PCSCLITE_MAX_APPLICATIONS                       16
 
266
/* Maximum contexts by application */
 
267
#define PCSCLITE_MAX_APPLICATION_CONTEXTS               16
 
268
/* Maximum of applications contexts that pcscd can accept */
 
269
#define PCSCLITE_MAX_APPLICATIONS_CONTEXTS \
 
270
        PCSCLITE_MAX_APPLICATIONS * PCSCLITE_MAX_APPLICATION_CONTEXTS
 
271
/* Maximum channels on a reader context */
 
272
#define PCSCLITE_MAX_READER_CONTEXT_CHANNELS            16
 
273
/* Maximum channels on an application context */
 
274
#define PCSCLITE_MAX_APPLICATION_CONTEXT_CHANNELS       16
 
275
/* Maximum readers context (a slot is count as a reader) */
 
276
#define PCSCLITE_MAX_READERS_CONTEXTS                   16
 
277
 
 
278
/* PCSCLITE_MAX_READERS is deprecated
 
279
 * use PCSCLITE_MAX_READERS_CONTEXTS instead */
 
280
/* extern int PCSCLITE_MAX_READERS __attribute__ ((deprecated)); */
 
281
 
 
282
#define PCSCLITE_MAX_THREADS            16      /* Stat change threads */
 
283
#define PCSCLITE_STATUS_WAIT            200000  /* Status Change Sleep */
 
284
#define PCSCLITE_TRANSACTION_TIMEOUT    40      /* Transaction timeout */
 
285
#define MAX_READERNAME                  52
 
286
#define MAX_LIBNAME                     100
 
287
#define MAX_DEVICENAME          255
 
288
 
 
289
#ifndef SCARD_ATR_LENGTH
 
290
#define SCARD_ATR_LENGTH                MAX_ATR_SIZE    /* Maximum ATR size */
 
291
#endif
 
292
 
 
293
/*
 
294
 * Enhanced messaging has been added to accomodate newer devices which have
 
295
 * more advanced capabilites, such as dedicated secure co-processors which
 
296
 * can stream and encrypt data over USB. In order to used enhanced messaging
 
297
 * you must define PCSCLITE_ENHANCED_MESSAGING in the framework(library),
 
298
 * the daemon, and your application
 
299
 */
 
300
#undef PCSCLITE_ENHANCED_MESSAGING
 
301
#ifndef PCSCLITE_ENHANCED_MESSAGING
 
302
#define PCSCLITE_MAX_MESSAGE_SIZE       2048    /* Transport msg len */
 
303
#define MAX_BUFFER_SIZE                 264     /* Maximum Tx/Rx Buffer */
 
304
#define PCSCLITE_SERVER_ATTEMPTS        5       /* Attempts to reach cl */
 
305
#else
 
306
/*
 
307
 * The message and buffer sizes must be multiples of 16.
 
308
 * The max message size must be at least large enough
 
309
 * to accomodate the transmit_struct
 
310
 */
 
311
#define PCSCLITE_MAX_MESSAGE_SIZE       (1<<17) /* enhanced (128K) msg len */
 
312
#define MAX_BUFFER_SIZE                 (1<<15) /* enhanced (32K) Tx/Rx Buffer */
 
313
#define PCSCLITE_SERVER_ATTEMPTS        200     /* To allow larger data reads/writes */
 
314
#endif
 
315
 
 
316
/*
 
317
 * Gets a stringified error response
 
318
 */
 
319
char *pcsc_stringify_error(long);
183
320
 
184
321
#ifdef __cplusplus
185
322
}
186
 
#endif 
187
 
 
188
 
#endif
189
 
 
 
323
#endif
 
324
 
 
325
#endif