source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/cardmod.h@ 1167

Last change on this file since 1167 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 10.4 KB
Line 
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef _INC_CARDMOD
8#define _INC_CARDMOD
9#include <wincrypt.h>
10
11#define CARD_BUFFER_SIZE_ONLY 0x20000000
12#define CARD_PADDING_INFO_PRESENT 0x40000000
13
14#define CARD_PADDING_NONE 0
15#define CARD_PADDING_PKCS1 1
16#define CARD_PADDING_PSS 4
17
18#define CARD_CREATE_CONTAINER_KEY_GEN 1
19#define CARD_CREATE_CONTAINER_KEY_IMPORT 2
20
21#define AT_KEYEXCHANGE 1
22#define AT_SIGNATURE 2
23#define AT_ECDSA_P256 3
24#define AT_ECDSA_P384 4
25#define AT_ECDSA_P521 5
26#define AT_ECDHE_P256 6
27#define AT_ECDHE_P384 7
28#define AT_ECDHE_P521 8
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#define InvalidAc 0
35
36typedef enum _CARD_DIRECTORY_ACCESS_CONDITION {
37 UserCreateDeleteDirAc = 1,
38 AdminCreateDeleteDirAc = 2
39} CARD_DIRECTORY_ACCESS_CONDITION;
40
41typedef enum _CARD_FILE_ACCESS_CONDITION {
42 EveryoneReadUserWriteAc = 1,
43 UserWriteExecuteAc = 2,
44 EveryoneReadAdminWriteAc = 3,
45 UnknownAc = 4
46} CARD_FILE_ACCESS_CONDITION;
47
48typedef struct _CARD_SIGNING_INFO {
49 DWORD dwVersion;
50 BYTE bContainerIndex;
51 DWORD dwKeySpec;
52 DWORD dwSigningFlags;
53 ALG_ID aiHashAlg;
54 PBYTE pbData;
55 DWORD cbData;
56 PBYTE pbSignedData;
57 DWORD cbSignedData;
58 LPVOID pPaddingInfo;
59 DWORD dwPaddingType;
60} CARD_SIGNING_INFO, *PCARD_SIGNING_INFO;
61
62typedef struct _CARD_CAPABILITIES {
63 DWORD dwVersion;
64 WINBOOL fCertificateCompression;
65 WINBOOL fKeyGen;
66} CARD_CAPABILITIES, *PCARD_CAPABILITIES;
67
68typedef struct _CONTAINER_INFO {
69 DWORD dwVersion;
70 DWORD dwReserved;
71 DWORD cbSigPublicKey;
72 PBYTE pbSigPublicKey;
73 DWORD cbKeyExPublicKey;
74 PBYTE pbKeyExPublicKey;
75} CONTAINER_INFO, *PCONTAINER_INFO;
76
77typedef LPVOID ( WINAPI *PFN_CSP_ALLOC )(SIZE_T Size);
78typedef LPVOID ( WINAPI *PFN_CSP_REALLOC )(LPVOID Address,SIZE_T Size);
79typedef VOID ( WINAPI *PFN_CSP_FREE )(LPVOID Address);
80typedef DWORD ( WINAPI *PFN_CSP_CACHE_ADD_FILE )(
81 PVOID pvCacheContext,
82 LPWSTR wszTag,
83 DWORD dwFlags,
84 PBYTE pbData,
85 DWORD cbData
86);
87
88typedef DWORD ( WINAPI *PFN_CSP_CACHE_LOOKUP_FILE )(
89 PVOID pvCacheContext,
90 LPWSTR wszTag,
91 DWORD dwFlags,
92 PBYTE *ppbData,
93 PDWORD pcbData
94);
95
96typedef DWORD ( WINAPI *PFN_CSP_CACHE_DELETE_FILE )(
97 PVOID pvCacheContext,
98 LPWSTR wszTag,
99 DWORD dwFlags
100);
101
102typedef DWORD ( WINAPI *PFN_CSP_PAD_DATA )(
103 PCARD_SIGNING_INFO pSigningInfo,
104 DWORD cbMaxWidth,
105 DWORD *pcbPaddedBuffer,
106 PBYTE *ppbPaddedBuffer
107);
108
109typedef struct _CARD_DERIVE_KEY {
110 DWORD dwVersion;
111 DWORD dwFlags;
112 LPCWSTR pwszKDF;
113 BYTE bSecretAgreementIndex;
114 PVOID pParameterList;
115 PUCHAR pbDerivedKey;
116 DWORD cbDerivedKey;
117} CARD_DERIVE_KEY, *PCARD_DERIVE_KEY;
118
119typedef struct _CARD_FILE_INFO {
120 DWORD dwVersion;
121 DWORD cbFileSize;
122 CARD_FILE_ACCESS_CONDITION AccessCondition;
123} CARD_FILE_INFO, *PCARD_FILE_INFO;
124
125typedef struct _CARD_FREE_SPACE_INFO {
126 DWORD dwVersion;
127 DWORD dwBytesAvailable;
128 DWORD dwKeyContainersAvailable;
129 DWORD dwMaxKeyContainers;
130} CARD_FREE_SPACE_INFO, *PCARD_FREE_SPACE_INFO;
131
132typedef struct _CARD_RSA_DECRYPT_INFO {
133 DWORD dwVersion;
134 BYTE bContainerIndex;
135 DWORD dwKeySpec;
136 PBYTE pbData;
137 DWORD cbData;
138} CARD_RSA_DECRYPT_INFO, *PCARD_RSA_DECRYPT_INFO;
139
140typedef struct _CARD_DH_AGREEMENT_INFO {
141 DWORD dwVersion;
142 BYTE bContainerIndex;
143 DWORD dwFlags;
144 DWORD dwPublicKey;
145 PBYTE pbPublicKey;
146 PBYTE pbReserved;
147 DWORD cbReserved;
148 BYTE bSecretAgreementIndex;
149} CARD_DH_AGREEMENT_INFO, *PCARD_DH_AGREEMENT_INFO;
150
151typedef struct _CARD_KEY_SIZES {
152 DWORD dwVersion;
153 DWORD dwMinimumBitlen;
154 DWORD dwMaximumBitlen;
155 DWORD dwIncrementalBitlen;
156} CARD_KEY_SIZES, *PCARD_KEY_SIZES;
157
158typedef struct _CARD_DATA *PCARD_DATA;
159
160typedef DWORD (WINAPI *PFN_CARD_DELETE_CONTEXT)(
161 PCARD_DATA pCardData
162);
163
164typedef DWORD (WINAPI *PFN_CARD_QUERY_CAPABILITIES)(
165 PCARD_DATA pCardData,
166 PCARD_CAPABILITIES pCardCapabilities
167);
168
169typedef DWORD (WINAPI *PFN_CARD_DELETE_CONTAINER)(
170 PCARD_DATA pCardData,
171 BYTE bContainerIndex,
172 DWORD dwReserved
173);
174
175typedef DWORD (WINAPI *PFN_CARD_CREATE_CONTAINER)(
176 PCARD_DATA pCardData,
177 BYTE bContainerIndex,
178 DWORD dwFlags,
179 DWORD dwKeySpec,
180 DWORD dwKeySize,
181 PBYTE pbKeyData
182);
183
184typedef DWORD (WINAPI *PFN_CARD_GET_CONTAINER_INFO)(
185 PCARD_DATA pCardData,
186 BYTE bContainerIndex,
187 DWORD dwFlags,
188 PCONTAINER_INFO pContainerInfo
189);
190
191typedef DWORD (WINAPI *PFN_CARD_AUTHENTICATE_PIN)(
192 PCARD_DATA pCardData,
193 LPWSTR pwszUserId,
194 PBYTE pbPin,
195 DWORD cbPin,
196 PDWORD pcAttemptsRemaining
197);
198
199typedef DWORD (WINAPI *PFN_CARD_GET_CHALLENGE)(
200 PCARD_DATA pCardData,
201 PBYTE *ppbChallengeData,
202 PDWORD pcbChallengeData
203);
204
205typedef DWORD (WINAPI *PFN_CARD_AUTHENTICATE_CHALLENGE)(
206 PCARD_DATA pCardData,
207 PBYTE pbResponseData,
208 DWORD cbResponseData,
209 PDWORD pcAttemptsRemaining
210);
211
212typedef DWORD (WINAPI *PFN_CARD_UNBLOCK_PIN)(
213 PCARD_DATA pCardData,
214 LPWSTR pwszUserId,
215 PBYTE pbAuthenticationData,
216 DWORD cbAuthenticationData,
217 PBYTE pbNewPinData,
218 DWORD cbNewPinData,
219 DWORD cRetryCount,
220 DWORD dwFlags
221);
222
223typedef DWORD (WINAPI *PFN_CARD_CHANGE_AUTHENTICATOR)(
224 PCARD_DATA pCardData,
225 LPWSTR pwszUserId,
226 PBYTE pbCurrentAuthenticator,
227 DWORD cbCurrentAuthenticator,
228 PBYTE pbNewAuthenticator,
229 DWORD cbNewAuthenticator,
230 DWORD cRetryCount,
231 DWORD dwFlags,
232 PDWORD pcAttemptsRemaining
233);
234
235typedef DWORD (WINAPI *PFN_CARD_DEAUTHENTICATE)(
236 PCARD_DATA pCardData,
237 LPWSTR pwszUserId,
238 DWORD dwFlags
239);
240
241typedef DWORD (WINAPI *PFN_CARD_CREATE_DIRECTORY)(
242 PCARD_DATA pCardData,
243 LPSTR pszDirectory,
244 CARD_DIRECTORY_ACCESS_CONDITION AccessCondition
245);
246
247typedef DWORD (WINAPI *PFN_CARD_DELETE_DIRECTORY)(
248 PCARD_DATA pCardData,
249 LPSTR pszDirectoryName
250);
251
252typedef DWORD (WINAPI *PFN_CARD_CREATE_FILE)(
253 PCARD_DATA pCardData,
254 LPSTR pszDirectoryName,
255 LPSTR pszFileName,
256 DWORD cbInitialCreationSize,
257 CARD_FILE_ACCESS_CONDITION AccessCondition
258);
259
260typedef DWORD (WINAPI *PFN_CARD_READ_FILE)(
261 PCARD_DATA pCardData,
262 LPSTR pszDirectoryName,
263 LPSTR pszFileName,
264 DWORD dwFlags,
265 PBYTE *ppbData,
266 PDWORD pcbData
267);
268
269typedef DWORD (WINAPI *PFN_CARD_WRITE_FILE)(
270 PCARD_DATA pCardData,
271 LPSTR pszDirectoryName,
272 LPSTR pszFileName,
273 DWORD dwFlags,
274 PBYTE pbData,
275 DWORD cbData
276);
277
278typedef DWORD (WINAPI *PFN_CARD_DELETE_FILE)(
279 PCARD_DATA pCardData,
280 LPSTR pszDirectoryName,
281 LPSTR pszFileName,
282 DWORD dwFlags
283);
284
285typedef DWORD (WINAPI *PFN_CARD_ENUM_FILES)(
286 PCARD_DATA pCardData,
287 LPSTR pszDirectoryName,
288 LPSTR *pmszFileNames,
289 LPDWORD pdwcbFileName,
290 DWORD dwFlags
291);
292
293typedef DWORD (WINAPI *PFN_CARD_GET_FILE_INFO)(
294 PCARD_DATA pCardData,
295 LPSTR pszDirectoryName,
296 LPSTR pszFileName,
297 PCARD_FILE_INFO pCardFileInfo
298);
299
300typedef DWORD (WINAPI *PFN_CARD_QUERY_FREE_SPACE)(
301 PCARD_DATA pCardData,
302 DWORD dwFlags,
303 PCARD_FREE_SPACE_INFO pCardFreeSpaceInfo
304);
305
306typedef DWORD (WINAPI *PFN_CARD_QUERY_KEY_SIZES)(
307 PCARD_DATA pCardData,
308 DWORD dwKeySpec,
309 DWORD dwFlags,
310 PCARD_KEY_SIZES pKeySizes
311);
312
313typedef DWORD (WINAPI *PFN_CARD_SIGN_DATA)(
314 PCARD_DATA pCardData,
315 PCARD_SIGNING_INFO pInfo
316);
317
318typedef DWORD (WINAPI *PFN_CARD_RSA_DECRYPT)(
319 PCARD_DATA pCardData,
320 PCARD_RSA_DECRYPT_INFO pInfo
321);
322
323typedef DWORD (WINAPI *PFN_CARD_CONSTRUCT_DH_AGREEMENT)(
324 PCARD_DATA pCardData,
325 PCARD_DH_AGREEMENT_INFO pAgreementInfo
326);
327
328#if (_WIN32_WINNT >= 0x0600)
329typedef DWORD (WINAPI *PFN_CARD_DERIVE_KEY)(
330 PCARD_DATA pCardData,
331 PCARD_DERIVE_KEY pAgreementInfo
332);
333
334typedef DWORD (WINAPI *PFN_CARD_DESTROY_DH_AGREEMENT)(
335 PCARD_DATA pCardData,
336 BYTE bSecretAgreementIndex,
337 DWORD dwFlags
338);
339
340typedef DWORD (WINAPI *PFN_CSP_GET_DH_AGREEMENT)(
341 PCARD_DATA pCardData,
342 PVOID hSecretAgreement,
343 BYTE *pbSecretAgreementIndex,
344 DWORD dwFlags
345);
346
347#else
348typedef LPVOID PFN_CARD_DERIVE_KEY;
349typedef LPVOID PFN_CARD_DESTROY_DH_AGREEMENT;
350typedef LPVOID PFN_CSP_GET_DH_AGREEMENT;
351#endif /*(_WIN32_WINNT >= 0x0600)*/
352
353typedef struct _CARD_DATA {
354 DWORD dwVersion;
355 PBYTE pbAtr;
356 DWORD cbAtr;
357 LPWSTR pwszCardName;
358 PFN_CSP_ALLOC pfnCspAlloc;
359 PFN_CSP_REALLOC pfnCspReAlloc;
360 PFN_CSP_FREE pfnCspFree;
361 PFN_CSP_CACHE_ADD_FILE pfnCspCacheAddFile;
362 PFN_CSP_CACHE_LOOKUP_FILE pfnCspCacheLookupFile;
363 PFN_CSP_CACHE_DELETE_FILE pfnCspCacheDeleteFile;
364 PVOID pvCacheContext;
365 PFN_CSP_PAD_DATA pfnCspPadData;
366 SCARDCONTEXT hSCardCtx;
367 SCARDHANDLE hScard;
368 PVOID pvVendorSpecific;
369 PFN_CARD_DELETE_CONTEXT pfnCardDeleteContext;
370 PFN_CARD_QUERY_CAPABILITIES pfnCardQueryCapabilities;
371 PFN_CARD_DELETE_CONTAINER pfnCardDeleteContainer;
372 PFN_CARD_CREATE_CONTAINER pfnCardCreateContainer;
373 PFN_CARD_GET_CONTAINER_INFO pfnCardGetContainerInfo;
374 PFN_CARD_AUTHENTICATE_PIN pfnCardAuthenticatePin;
375 PFN_CARD_GET_CHALLENGE pfnCardGetChallenge;
376 PFN_CARD_AUTHENTICATE_CHALLENGE pfnCardAuthenticateChallenge;
377 PFN_CARD_UNBLOCK_PIN pfnCardUnblockPin;
378 PFN_CARD_CHANGE_AUTHENTICATOR pfnCardChangeAuthenticator;
379 PFN_CARD_DEAUTHENTICATE pfnCardDeauthenticate;
380 PFN_CARD_CREATE_DIRECTORY pfnCardCreateDirectory;
381 PFN_CARD_DELETE_DIRECTORY pfnCardDeleteDirectory;
382 LPVOID pvUnused3;
383 LPVOID pvUnused4;
384 PFN_CARD_CREATE_FILE pfnCardCreateFile;
385 PFN_CARD_READ_FILE pfnCardReadFile;
386 PFN_CARD_WRITE_FILE pfnCardWriteFile;
387 PFN_CARD_DELETE_FILE pfnCardDeleteFile;
388 PFN_CARD_ENUM_FILES pfnCardEnumFiles;
389 PFN_CARD_GET_FILE_INFO pfnCardGetFileInfo;
390 PFN_CARD_QUERY_FREE_SPACE pfnCardQueryFreeSpace;
391 PFN_CARD_QUERY_KEY_SIZES pfnCardQueryKeySizes;
392 PFN_CARD_SIGN_DATA pfnCardSignData;
393 PFN_CARD_RSA_DECRYPT pfnCardRSADecrypt;
394 PFN_CARD_CONSTRUCT_DH_AGREEMENT pfnCardConstructDHAgreement;
395 PFN_CARD_DERIVE_KEY pfnCardDeriveKey;
396 PFN_CARD_DESTROY_DH_AGREEMENT pfnCardDestroyDHAgreement;
397 PFN_CSP_GET_DH_AGREEMENT pfnCspGetDHAgreement;
398} CARD_DATA, *PCARD_DATA;
399
400DWORD WINAPI CardAcquireContext(
401 PCARD_DATA pCardData,
402 DWORD dwFlags
403);
404
405DWORD WINAPI CardDeleteContainer(
406 PCARD_DATA pCardData,
407 BYTE bContainerIndex,
408 DWORD dwReserved
409);
410
411#ifdef __cplusplus
412}
413#endif
414#endif /*_INC_CARDMOD*/
Note: See TracBrowser for help on using the repository browser.