00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CHIPCARD_CLIENT_CARD_H
00015 #define CHIPCARD_CLIENT_CARD_H
00016
00017
00021
00022 #include <gwenhywfar/inherit.h>
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028 typedef struct LC_CARD LC_CARD;
00029
00030 #ifdef __cplusplus
00031 }
00032 #endif
00033
00034 #include <chipcard3/chipcard3.h>
00035 #include <chipcard3/client/client.h>
00036 #include <chipcard3/sharedstuff/pininfo.h>
00037
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043 GWEN_INHERIT_FUNCTION_LIB_DEFS(LC_CARD, CHIPCARD_API)
00044 GWEN_LIST2_FUNCTION_LIB_DEFS(LC_CARD, LC_Card, CHIPCARD_API)
00045
00050 #define LC_CARD_ISO_FLAGS_EFID_MASK 0x00000001f
00051
00053 #define LC_CARD_ISO_FLAGS_RECSEL_MASK 0x0000000e0
00054
00056 #define LC_CARD_ISO_FLAGS_RECSEL_FIRST (0 << 5)
00057
00059 #define LC_CARD_ISO_FLAGS_RECSEL_LAST (1 << 5)
00060
00062 #define LC_CARD_ISO_FLAGS_RECSEL_NEXT (2 << 5)
00063
00065 #define LC_CARD_ISO_FLAGS_RECSEL_PREV (3 << 5)
00066
00068 #define LC_CARD_ISO_FLAGS_RECSEL_GIVEN (4 << 5)
00069
00078
00083 CHIPCARD_API
00084 void LC_Card_free(LC_CARD *cd);
00085
00086 CHIPCARD_API
00087 void LC_Card_List2_freeAll(LC_CARD_LIST2 *l);
00088
00089
00095 CHIPCARD_API
00096 LC_CLIENT_RESULT LC_Card_Open(LC_CARD *card);
00097
00103 CHIPCARD_API
00104 LC_CLIENT_RESULT LC_Card_Close(LC_CARD *card);
00105
00106
00107
00108 CHIPCARD_API
00109 LC_CLIENT_RESULT LC_Card_ExecApdu(LC_CARD *card,
00110 const char *apdu,
00111 unsigned int len,
00112 GWEN_BUFFER *rbuf,
00113 LC_CLIENT_CMDTARGET t,
00114 int timeout);
00115
00116 CHIPCARD_API
00117 LC_CLIENT_RESULT LC_Card_ExecCommand(LC_CARD *card,
00118 const char *commandName,
00119 GWEN_DB_NODE *cmdData,
00120 GWEN_DB_NODE *rspData,
00121 int timeout);
00122
00123 CHIPCARD_API
00124 LC_CLIENT_RESULT LC_Card_BuildApdu(LC_CARD *card,
00125 const char *command,
00126 GWEN_DB_NODE *cmdData,
00127 GWEN_BUFFER *gbuf);
00128
00138 CHIPCARD_API
00139 LC_CLIENT_RESULT LC_Card_SelectApp(LC_CARD *card, const char *appName);
00140
00141 CHIPCARD_API
00142 GWEN_XMLNODE *LC_Card_GetAppNode(const LC_CARD *card);
00143
00144 CHIPCARD_API
00145 LC_CLIENT_RESULT LC_Card_SelectCard(LC_CARD *card, const char *s);
00146
00147 CHIPCARD_API
00148 GWEN_XMLNODE *LC_Card_GetCardNode(const LC_CARD *card);
00149
00150 CHIPCARD_API
00151 LC_CLIENT_RESULT LC_Card_SelectMF(LC_CARD *card);
00152
00153 CHIPCARD_API
00154 LC_CLIENT_RESULT LC_Card_SelectDf(LC_CARD *card, const char *fname);
00155
00156 CHIPCARD_API
00157 GWEN_XMLNODE *LC_Card_GetDfNode(const LC_CARD *card);
00158
00159
00160 CHIPCARD_API
00161 LC_CLIENT_RESULT LC_Card_SelectEf(LC_CARD *card, const char *fname);
00162
00163 CHIPCARD_API
00164 GWEN_XMLNODE *LC_Card_GetEfNode(const LC_CARD *card);
00175
00180 CHIPCARD_API
00181 GWEN_TYPE_UINT32 LC_Card_GetCardId(const LC_CARD *cd);
00182
00183
00184 CHIPCARD_API
00185 const char *LC_Card_GetReaderType(const LC_CARD *cd);
00186
00187 CHIPCARD_API
00188 const char *LC_Card_GetDriverType(const LC_CARD *cd);
00189
00194 CHIPCARD_API
00195 GWEN_TYPE_UINT32 LC_Card_GetReaderFlags(const LC_CARD *cd);
00196
00201 CHIPCARD_API
00202 const char *LC_Card_GetCardType(const LC_CARD *cd);
00203
00208 CHIPCARD_API
00209 const GWEN_STRINGLIST *LC_Card_GetCardTypes(const LC_CARD *cd);
00210
00219 CHIPCARD_API
00220 unsigned int LC_Card_GetAtr(const LC_CARD *cd, const unsigned char **pbuf);
00221
00222
00226 CHIPCARD_API
00227 LC_CLIENT *LC_Card_GetClient(const LC_CARD *cd);
00238 CHIPCARD_API
00239 int LC_Card_GetLastSW1(const LC_CARD *card);
00240
00241 CHIPCARD_API
00242 int LC_Card_GetLastSW2(const LC_CARD *card);
00243
00244 CHIPCARD_API
00245 const char *LC_Card_GetLastResult(const LC_CARD *card);
00246
00247 CHIPCARD_API
00248 const char *LC_Card_GetLastText(const LC_CARD *card);
00249
00250 CHIPCARD_API
00251 void LC_Card_CreateResultString(const LC_CARD *card,
00252 const char *lastCommand,
00253 LC_CLIENT_RESULT res,
00254 GWEN_BUFFER *buf);
00262 CHIPCARD_API
00263 void LC_Card_Dump(const LC_CARD *cd, FILE *f, int indent);
00273
00279 CHIPCARD_API
00280 LC_PININFO *LC_Card_GetPinInfoById(LC_CARD *card, GWEN_TYPE_UINT32 pid);
00281
00289 CHIPCARD_API
00290 LC_PININFO *LC_Card_GetPinInfoByName(LC_CARD *card, const char *name);
00291
00292 CHIPCARD_API
00293 LC_CLIENT_RESULT LC_Card_GetPinStatus(LC_CARD *card,
00294 unsigned int pid,
00295 int *maxErrors,
00296 int *currentErrors);
00297
00298 CHIPCARD_API
00299 LC_CLIENT_RESULT LC_Card_GetInitialPin(LC_CARD *card,
00300 int id,
00301 unsigned char *buffer,
00302 unsigned int maxLen,
00303 unsigned int *pinLength);
00304
00305 CHIPCARD_API
00306 LC_CLIENT_RESULT LC_Card_IsoVerifyPin(LC_CARD *card,
00307 GWEN_TYPE_UINT32 flags,
00308 const LC_PININFO *pi,
00309 const unsigned char *ptr,
00310 unsigned int size,
00311 int *triesLeft);
00312
00313 CHIPCARD_API
00314 LC_CLIENT_RESULT LC_Card_IsoModifyPin(LC_CARD *card,
00315 GWEN_TYPE_UINT32 flags,
00316 const LC_PININFO *pi,
00317 const unsigned char *oldptr,
00318 unsigned int oldsize,
00319 const unsigned char *newptr,
00320 unsigned int newsize,
00321 int *triesLeft);
00322
00323 CHIPCARD_API
00324 LC_CLIENT_RESULT LC_Card_IsoPerformVerification(LC_CARD *card,
00325 GWEN_TYPE_UINT32 flags,
00326 const LC_PININFO *pi,
00327 int *triesLeft);
00328
00329 CHIPCARD_API
00330 LC_CLIENT_RESULT LC_Card_IsoPerformModification(LC_CARD *card,
00331 GWEN_TYPE_UINT32 flags,
00332 const LC_PININFO *pi,
00333 int *triesLeft);
00334
00343 CHIPCARD_API
00344 LC_CLIENT_RESULT LC_Card_IsoReadBinary(LC_CARD *card,
00345 GWEN_TYPE_UINT32 flags,
00346 int offset,
00347 int size,
00348 GWEN_BUFFER *buf);
00349
00350 CHIPCARD_API
00351 LC_CLIENT_RESULT LC_Card_IsoWriteBinary(LC_CARD *card,
00352 GWEN_TYPE_UINT32 flags,
00353 int offset,
00354 const char *ptr,
00355 unsigned int size);
00356
00357
00358 CHIPCARD_API
00359 LC_CLIENT_RESULT LC_Card_IsoUpdateBinary(LC_CARD *card,
00360 GWEN_TYPE_UINT32 flags,
00361 int offset,
00362 const char *ptr,
00363 unsigned int size);
00364
00365 CHIPCARD_API
00366 LC_CLIENT_RESULT LC_Card_IsoEraseBinary(LC_CARD *card,
00367 GWEN_TYPE_UINT32 flags,
00368 int offset,
00369 unsigned int size);
00370
00376 CHIPCARD_API
00377 LC_CLIENT_RESULT LC_Card_ReadBinary(LC_CARD *card,
00378 int offset,
00379 int size,
00380 GWEN_BUFFER *buf);
00381
00389
00390 CHIPCARD_API
00391 LC_CLIENT_RESULT LC_Card_IsoReadRecord(LC_CARD *card,
00392 GWEN_TYPE_UINT32 flags,
00393 int recNum,
00394 GWEN_BUFFER *buf);
00395 CHIPCARD_API
00396 LC_CLIENT_RESULT LC_Card_IsoWriteRecord(LC_CARD *card,
00397 GWEN_TYPE_UINT32 flags,
00398 int recNum,
00399 const char *ptr,
00400 unsigned int size);
00401
00402 CHIPCARD_API
00403 LC_CLIENT_RESULT LC_Card_IsoAppendRecord(LC_CARD *card,
00404 GWEN_TYPE_UINT32 flags,
00405 const char *ptr,
00406 unsigned int size);
00407
00408 CHIPCARD_API
00409 LC_CLIENT_RESULT LC_Card_IsoUpdateRecord(LC_CARD *card,
00410 GWEN_TYPE_UINT32 flags,
00411 int recNum,
00412 const char *ptr,
00413 unsigned int size);
00422
00423 CHIPCARD_API
00424 LC_CLIENT_RESULT LC_Card_IsoManageSe(LC_CARD *card,
00425 int tmpl, int kids, int kidp, int ar);
00426
00427 CHIPCARD_API
00428 LC_CLIENT_RESULT LC_Card_IsoEncipher(LC_CARD *card,
00429 const char *ptr,
00430 unsigned int size,
00431 GWEN_BUFFER *codeBuf);
00432
00433 CHIPCARD_API
00434 LC_CLIENT_RESULT LC_Card_IsoDecipher(LC_CARD *card,
00435 const char *ptr,
00436 unsigned int size,
00437 GWEN_BUFFER *plainBuf);
00438
00439 CHIPCARD_API
00440 LC_CLIENT_RESULT LC_Card_IsoSign(LC_CARD *card,
00441 const char *ptr,
00442 unsigned int size,
00443 GWEN_BUFFER *sigBuf);
00444
00445 CHIPCARD_API
00446 LC_CLIENT_RESULT LC_Card_IsoVerify(LC_CARD *card,
00447 const char *dptr,
00448 unsigned int dsize,
00449 const char *sigptr,
00450 unsigned int sigsize);
00451
00452
00462
00463 CHIPCARD_API
00464 LC_CLIENT_RESULT LC_Card_ParseData(LC_CARD *card,
00465 const char *format,
00466 GWEN_BUFFER *buf,
00467 GWEN_DB_NODE *dbData);
00468
00469 CHIPCARD_API
00470 LC_CLIENT_RESULT LC_Card_CreateData(LC_CARD *card,
00471 const char *format,
00472 GWEN_BUFFER *buf,
00473 GWEN_DB_NODE *dbData);
00474
00475 CHIPCARD_API
00476 LC_CLIENT_RESULT LC_Card_ParseRecord(LC_CARD *card,
00477 int recNum,
00478 GWEN_BUFFER *buf,
00479 GWEN_DB_NODE *dbRecord);
00480
00481 CHIPCARD_API
00482 LC_CLIENT_RESULT LC_Card_CreateRecord(LC_CARD *card,
00483 int recNum,
00484 GWEN_BUFFER *buf,
00485 GWEN_DB_NODE *dbRecord);
00486
00487
00490 #ifdef __cplusplus
00491 }
00492 #endif
00493
00495
00496
00497 #endif