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 <chipcard/chipcard.h>
00035 #include <chipcard/client/client.h>
00036 #include <chipcard/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);
00124
00131 CHIPCARD_API
00132 LC_CLIENT_RESULT LC_Card_ExecApdu(LC_CARD *card,
00133 const char *apdu,
00134 unsigned int len,
00135 GWEN_BUFFER *rbuf,
00136 LC_CLIENT_CMDTARGET t,
00137 int timeout);
00138
00149 CHIPCARD_API
00150 LC_CLIENT_RESULT LC_Card_ExecCommand(LC_CARD *card,
00151 const char *commandName,
00152 GWEN_DB_NODE *cmdData,
00153 GWEN_DB_NODE *rspData,
00154 int timeout);
00155
00160 CHIPCARD_API
00161 LC_CLIENT_RESULT LC_Card_BuildApdu(LC_CARD *card,
00162 const char *command,
00163 GWEN_DB_NODE *cmdData,
00164 GWEN_BUFFER *gbuf);
00165
00184 CHIPCARD_API
00185 LC_CLIENT_RESULT LC_Card_SelectCard(LC_CARD *card, const char *s);
00186
00187 CHIPCARD_API
00188 LC_CLIENT_RESULT LC_Card_SelectApp(LC_CARD *card, const char *appName);
00196
00201 CHIPCARD_API
00202 LC_CLIENT_RESULT LC_Card_SelectMf(LC_CARD *card);
00203
00211 CHIPCARD_API
00212 LC_CLIENT_RESULT LC_Card_SelectDf(LC_CARD *card, const char *fname);
00213
00221 CHIPCARD_API
00222 LC_CLIENT_RESULT LC_Card_SelectEf(LC_CARD *card, const char *fname);
00230 CHIPCARD_API
00231 GWEN_XMLNODE *LC_Card_GetCardNode(const LC_CARD *card);
00232
00233 CHIPCARD_API
00234 GWEN_XMLNODE *LC_Card_GetAppNode(const LC_CARD *card);
00235
00236 CHIPCARD_API
00237 GWEN_XMLNODE *LC_Card_GetDfNode(const LC_CARD *card);
00238
00239 CHIPCARD_API
00240 GWEN_XMLNODE *LC_Card_GetEfNode(const LC_CARD *card);
00241
00251
00256 CHIPCARD_API
00257 uint32_t LC_Card_GetCardId(const LC_CARD *cd);
00258
00259
00260 CHIPCARD_API
00261 const char *LC_Card_GetReaderType(const LC_CARD *cd);
00262
00263 CHIPCARD_API
00264 const char *LC_Card_GetDriverType(const LC_CARD *cd);
00265
00270 CHIPCARD_API
00271 uint32_t LC_Card_GetReaderFlags(const LC_CARD *cd);
00272
00277 CHIPCARD_API
00278 const char *LC_Card_GetCardType(const LC_CARD *cd);
00279
00284 CHIPCARD_API
00285 const GWEN_STRINGLIST *LC_Card_GetCardTypes(const LC_CARD *cd);
00286
00295 CHIPCARD_API
00296 unsigned int LC_Card_GetAtr(const LC_CARD *cd,
00297 const unsigned char **pbuf);
00298
00299
00303 CHIPCARD_API
00304 LC_CLIENT *LC_Card_GetClient(const LC_CARD *cd);
00315 CHIPCARD_API
00316 int LC_Card_GetLastSW1(const LC_CARD *card);
00317
00318 CHIPCARD_API
00319 int LC_Card_GetLastSW2(const LC_CARD *card);
00320
00321 CHIPCARD_API
00322 const char *LC_Card_GetLastResult(const LC_CARD *card);
00323
00324 CHIPCARD_API
00325 const char *LC_Card_GetLastText(const LC_CARD *card);
00326
00327 CHIPCARD_API
00328 void LC_Card_CreateResultString(const LC_CARD *card,
00329 const char *lastCommand,
00330 LC_CLIENT_RESULT res,
00331 GWEN_BUFFER *buf);
00339 CHIPCARD_API
00340 void LC_Card_Dump(const LC_CARD *cd, FILE *f, int indent);
00350
00356 CHIPCARD_API
00357 LC_PININFO *LC_Card_GetPinInfoById(LC_CARD *card, uint32_t pid);
00358
00366 CHIPCARD_API
00367 LC_PININFO *LC_Card_GetPinInfoByName(LC_CARD *card, const char *name);
00368
00369 CHIPCARD_API
00370 LC_CLIENT_RESULT LC_Card_GetPinStatus(LC_CARD *card,
00371 unsigned int pid,
00372 int *maxErrors,
00373 int *currentErrors);
00374
00375 CHIPCARD_API
00376 LC_CLIENT_RESULT LC_Card_GetInitialPin(LC_CARD *card,
00377 int id,
00378 unsigned char *buffer,
00379 unsigned int maxLen,
00380 unsigned int *pinLength);
00381
00382 CHIPCARD_API
00383 LC_CLIENT_RESULT LC_Card_IsoVerifyPin(LC_CARD *card,
00384 uint32_t flags,
00385 const LC_PININFO *pi,
00386 const unsigned char *ptr,
00387 unsigned int size,
00388 int *triesLeft);
00389
00390 CHIPCARD_API
00391 LC_CLIENT_RESULT LC_Card_IsoModifyPin(LC_CARD *card,
00392 uint32_t flags,
00393 const LC_PININFO *pi,
00394 const unsigned char *oldptr,
00395 unsigned int oldsize,
00396 const unsigned char *newptr,
00397 unsigned int newsize,
00398 int *triesLeft);
00399
00400 CHIPCARD_API
00401 LC_CLIENT_RESULT LC_Card_IsoPerformVerification(LC_CARD *card,
00402 uint32_t flags,
00403 const LC_PININFO *pi,
00404 int *triesLeft);
00405
00406 CHIPCARD_API
00407 LC_CLIENT_RESULT LC_Card_IsoPerformModification(LC_CARD *card,
00408 uint32_t flags,
00409 const LC_PININFO *pi,
00410 int *triesLeft);
00411
00420 CHIPCARD_API
00421 LC_CLIENT_RESULT LC_Card_IsoReadBinary(LC_CARD *card,
00422 uint32_t flags,
00423 int offset,
00424 int size,
00425 GWEN_BUFFER *buf);
00426
00427 CHIPCARD_API
00428 LC_CLIENT_RESULT LC_Card_IsoWriteBinary(LC_CARD *card,
00429 uint32_t flags,
00430 int offset,
00431 const char *ptr,
00432 unsigned int size);
00433
00434
00435 CHIPCARD_API
00436 LC_CLIENT_RESULT LC_Card_IsoUpdateBinary(LC_CARD *card,
00437 uint32_t flags,
00438 int offset,
00439 const char *ptr,
00440 unsigned int size);
00441
00442 CHIPCARD_API
00443 LC_CLIENT_RESULT LC_Card_IsoEraseBinary(LC_CARD *card,
00444 uint32_t flags,
00445 int offset,
00446 unsigned int size);
00447
00453 CHIPCARD_API
00454 LC_CLIENT_RESULT LC_Card_ReadBinary(LC_CARD *card,
00455 int offset,
00456 int size,
00457 GWEN_BUFFER *buf);
00458
00466
00467 CHIPCARD_API
00468 LC_CLIENT_RESULT LC_Card_IsoReadRecord(LC_CARD *card,
00469 uint32_t flags,
00470 int recNum,
00471 GWEN_BUFFER *buf);
00472 CHIPCARD_API
00473 LC_CLIENT_RESULT LC_Card_IsoWriteRecord(LC_CARD *card,
00474 uint32_t flags,
00475 int recNum,
00476 const char *ptr,
00477 unsigned int size);
00478
00479 CHIPCARD_API
00480 LC_CLIENT_RESULT LC_Card_IsoAppendRecord(LC_CARD *card,
00481 uint32_t flags,
00482 const char *ptr,
00483 unsigned int size);
00484
00485 CHIPCARD_API
00486 LC_CLIENT_RESULT LC_Card_IsoUpdateRecord(LC_CARD *card,
00487 uint32_t flags,
00488 int recNum,
00489 const char *ptr,
00490 unsigned int size);
00499
00500 CHIPCARD_API
00501 LC_CLIENT_RESULT LC_Card_IsoManageSe(LC_CARD *card,
00502 int tmpl, int kids, int kidp, int ar);
00503
00504 CHIPCARD_API
00505 LC_CLIENT_RESULT LC_Card_IsoEncipher(LC_CARD *card,
00506 const char *ptr,
00507 unsigned int size,
00508 GWEN_BUFFER *codeBuf);
00509
00510 CHIPCARD_API
00511 LC_CLIENT_RESULT LC_Card_IsoDecipher(LC_CARD *card,
00512 const char *ptr,
00513 unsigned int size,
00514 GWEN_BUFFER *plainBuf);
00515
00516 CHIPCARD_API
00517 LC_CLIENT_RESULT LC_Card_IsoSign(LC_CARD *card,
00518 const char *ptr,
00519 unsigned int size,
00520 GWEN_BUFFER *sigBuf);
00521
00522 CHIPCARD_API
00523 LC_CLIENT_RESULT LC_Card_IsoVerify(LC_CARD *card,
00524 const char *dptr,
00525 unsigned int dsize,
00526 const char *sigptr,
00527 unsigned int sigsize);
00528
00529
00539
00540 CHIPCARD_API
00541 LC_CLIENT_RESULT LC_Card_ParseData(LC_CARD *card,
00542 const char *format,
00543 GWEN_BUFFER *buf,
00544 GWEN_DB_NODE *dbData);
00545
00546 CHIPCARD_API
00547 LC_CLIENT_RESULT LC_Card_CreateData(LC_CARD *card,
00548 const char *format,
00549 GWEN_BUFFER *buf,
00550 GWEN_DB_NODE *dbData);
00551
00552 CHIPCARD_API
00553 LC_CLIENT_RESULT LC_Card_ParseRecord(LC_CARD *card,
00554 int recNum,
00555 GWEN_BUFFER *buf,
00556 GWEN_DB_NODE *dbRecord);
00557
00558 CHIPCARD_API
00559 LC_CLIENT_RESULT LC_Card_CreateRecord(LC_CARD *card,
00560 int recNum,
00561 GWEN_BUFFER *buf,
00562 GWEN_DB_NODE *dbRecord);
00563
00564
00567 #ifdef __cplusplus
00568 }
00569 #endif
00570
00572
00573
00574 #endif