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 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020
00021
00086
00094 typedef struct LC_CARD LC_CARD;
00095
00096 #include <chipcard2/chipcard2.h>
00097
00098 #include <gwenhywfar/buffer.h>
00099 #include <gwenhywfar/inherit.h>
00100 #include <gwenhywfar/xml.h>
00101 #include <gwenhywfar/list2.h>
00102 #include <stdio.h>
00103
00104 GWEN_INHERIT_FUNCTION_LIB_DEFS(LC_CARD, CHIPCARD_API)
00105 GWEN_LIST2_FUNCTION_LIB_DEFS(LC_CARD, LC_Card, CHIPCARD_API)
00106
00107
00108
00115 #define LC_CARD_READERFLAGS_KEYPAD LC_READER_FLAGS_KEYPAD
00116
00117 #define LC_CARD_READERFLAGS_DISPLAY LC_READER_FLAGS_DISPLAY
00118
00119 #define LC_CARD_READERFLAGS_NOINFO LC_READER_FLAGS_NOINFO
00120
00121 #define LC_CARD_READERFLAGS_REMOTE LC_READER_FLAGS_REMOTE
00122
00123 #define LC_CARD_READERFLAGS_AUTO LC_READER_FLAGS_AUTO
00124
00131 #define LC_CARD_ISO_FLAGS_EFID_MASK 0x00000001f
00132
00134 #define LC_CARD_ISO_FLAGS_RECSEL_MASK 0x0000000e0
00135
00137 #define LC_CARD_ISO_FLAGS_RECSEL_FIRST (0 << 5)
00138
00140 #define LC_CARD_ISO_FLAGS_RECSEL_LAST (1 << 5)
00141
00143 #define LC_CARD_ISO_FLAGS_RECSEL_NEXT (2 << 5)
00144
00146 #define LC_CARD_ISO_FLAGS_RECSEL_PREV (3 << 5)
00147
00149 #define LC_CARD_ISO_FLAGS_RECSEL_GIVEN (4 << 5)
00150
00153 #include <chipcard2-client/client/client.h>
00154 #include <chipcard2/sharedstuff/pininfo.h>
00155
00156
00157
00162 typedef LC_CLIENT_RESULT (*LC_CARD_OPEN_FN)(LC_CARD *card);
00163 typedef LC_CLIENT_RESULT (*LC_CARD_CLOSE_FN)(LC_CARD *card);
00164
00165 typedef
00166 LC_CLIENT_RESULT (*LC_CARD_GETPINSTATUS_FN)(LC_CARD *card,
00167 unsigned int pid,
00168 int *maxErrors,
00169 int *currentErrors);
00170
00171 typedef
00172 LC_CLIENT_RESULT (*LC_CARD_GETINITIALPIN_FN)(LC_CARD *card,
00173 int id,
00174 unsigned char *buffer,
00175 unsigned int maxLen,
00176 unsigned int *pinLength);
00177
00178
00179 typedef
00180 LC_CLIENT_RESULT (*LC_CARD_ISOREADBINARY_FN)(LC_CARD *card,
00181 GWEN_TYPE_UINT32 flags,
00182 int offset,
00183 int size,
00184 GWEN_BUFFER *buf);
00185
00186 typedef
00187 LC_CLIENT_RESULT (*LC_CARD_ISOWRITEBINARY_FN)(LC_CARD *card,
00188 GWEN_TYPE_UINT32 flags,
00189 int offset,
00190 const char *ptr,
00191 unsigned int size);
00192
00193
00194 typedef
00195 LC_CLIENT_RESULT (*LC_CARD_ISOUPDATEBINARY_FN)(LC_CARD *card,
00196 GWEN_TYPE_UINT32 flags,
00197 int offset,
00198 const char *ptr,
00199 unsigned int size);
00200
00201 typedef
00202 LC_CLIENT_RESULT (*LC_CARD_ISOERASEBINARY_FN)(LC_CARD *card,
00203 GWEN_TYPE_UINT32 flags,
00204 int offset,
00205 unsigned int size);
00206
00207 typedef
00208 LC_CLIENT_RESULT (*LC_CARD_ISOREADRECORD_FN)(LC_CARD *card,
00209 GWEN_TYPE_UINT32 flags,
00210 int recNum,
00211 GWEN_BUFFER *buf);
00212
00213 typedef
00214 LC_CLIENT_RESULT (*LC_CARD_ISOWRITERECORD_FN)(LC_CARD *card,
00215 GWEN_TYPE_UINT32 flags,
00216 int recNum,
00217 const char *ptr,
00218 unsigned int size);
00219
00220 typedef
00221 LC_CLIENT_RESULT (*LC_CARD_ISOAPPENDRECORD_FN)(LC_CARD *card,
00222 GWEN_TYPE_UINT32 flags,
00223 const char *ptr,
00224 unsigned int size);
00225
00226 typedef
00227 LC_CLIENT_RESULT (*LC_CARD_ISOUPDATERECORD_FN)(LC_CARD *card,
00228 GWEN_TYPE_UINT32 flags,
00229 int recNum,
00230 const char *ptr,
00231 unsigned int size);
00232
00233 typedef
00234 LC_CLIENT_RESULT (*LC_CARD_ISOVERIFYPIN_FN)(LC_CARD *card,
00235 GWEN_TYPE_UINT32 flags,
00236 const LC_PININFO *pi,
00237 const unsigned char *ptr,
00238 unsigned int size,
00239 int *triesLeft);
00240
00241 typedef
00242 LC_CLIENT_RESULT (*LC_CARD_ISOMODIFYPIN_FN)(LC_CARD *card,
00243 GWEN_TYPE_UINT32 flags,
00244 const LC_PININFO *pi,
00245 const unsigned char *oldptr,
00246 unsigned int oldsize,
00247 const unsigned char *newptr,
00248 unsigned int newsize,
00249 int *triesLeft);
00250
00251 typedef
00252 LC_CLIENT_RESULT (*LC_CARD_ISOPERFORMVERIFICATION_FN)(LC_CARD *card,
00253 GWEN_TYPE_UINT32 flags,
00254 const LC_PININFO *pi,
00255 int *triesLeft);
00256
00257 typedef
00258 LC_CLIENT_RESULT (*LC_CARD_ISOPERFORMMODIFICATION_FN)(LC_CARD *card,
00259 GWEN_TYPE_UINT32 flags,
00260 const LC_PININFO *pi,
00261 int *triesLeft);
00262
00263
00264 typedef LC_CLIENT_RESULT (*LC_CARD_ISOMANAGESE_FN)(LC_CARD *card,
00265 int tmpl,
00266 int kids, int kidp,
00267 int ar);
00268
00269 typedef LC_CLIENT_RESULT (*LC_CARD_ISOSIGN_FN)(LC_CARD *card,
00270 const char *ptr,
00271 unsigned int size,
00272 GWEN_BUFFER *sigBuf);
00273
00274 typedef LC_CLIENT_RESULT (*LC_CARD_ISOVERIFY_FN)(LC_CARD *card,
00275 const char *dptr,
00276 unsigned int dsize,
00277 const char *sigptr,
00278 unsigned int sigsize);
00279 typedef LC_CLIENT_RESULT (*LC_CARD_ISOENCIPHER_FN)(LC_CARD *card,
00280 const char *ptr,
00281 unsigned int size,
00282 GWEN_BUFFER *codeBuf);
00283 typedef LC_CLIENT_RESULT (*LC_CARD_ISODECIPHER_FN)(LC_CARD *card,
00284 const char *ptr,
00285 unsigned int size,
00286 GWEN_BUFFER *codeBuf);
00287
00297
00298 CHIPCARD_API
00299 LC_CARD_OPEN_FN LC_Card_GetOpenFn(const LC_CARD *card);
00300
00301 CHIPCARD_API
00302 void LC_Card_SetOpenFn(LC_CARD *card, LC_CARD_OPEN_FN fn);
00303
00304 CHIPCARD_API
00305 LC_CARD_CLOSE_FN LC_Card_GetCloseFn(const LC_CARD *card);
00306
00307 CHIPCARD_API
00308 void LC_Card_SetCloseFn(LC_CARD *card, LC_CARD_CLOSE_FN fn);
00309
00310 CHIPCARD_API
00311 void LC_Card_SetGetInitialPinFn(LC_CARD *card, LC_CARD_GETINITIALPIN_FN fn);
00312
00313 CHIPCARD_API
00314 void LC_Card_SetGetPinStatusFn(LC_CARD *card, LC_CARD_GETPINSTATUS_FN fn);
00315
00316 CHIPCARD_API
00317 void LC_Card_SetIsoReadBinaryFn(LC_CARD *card, LC_CARD_ISOREADBINARY_FN f);
00318
00319 CHIPCARD_API
00320 void LC_Card_SetIsoWriteBinaryFn(LC_CARD *card, LC_CARD_ISOWRITEBINARY_FN f);
00321
00322 CHIPCARD_API
00323 void LC_Card_SetIsoUpdateBinaryFn(LC_CARD *card, LC_CARD_ISOUPDATEBINARY_FN f);
00324
00325 CHIPCARD_API
00326 void LC_Card_SetIsoEraseBinaryFn(LC_CARD *card, LC_CARD_ISOERASEBINARY_FN f);
00327
00328 CHIPCARD_API
00329 void LC_Card_SetIsoReadRecordFn(LC_CARD *card, LC_CARD_ISOREADRECORD_FN f);
00330
00331 CHIPCARD_API
00332 void LC_Card_SetIsoWriteRecordFn(LC_CARD *card, LC_CARD_ISOWRITERECORD_FN f);
00333
00334 CHIPCARD_API
00335 void LC_Card_SetIsoUpdateRecordFn(LC_CARD *card, LC_CARD_ISOUPDATERECORD_FN f);
00336
00337 CHIPCARD_API
00338 void LC_Card_SetIsoAppendRecordFn(LC_CARD *card, LC_CARD_ISOAPPENDRECORD_FN f);
00339
00340 CHIPCARD_API
00341 void LC_Card_SetIsoVerifyPinFn(LC_CARD *card, LC_CARD_ISOVERIFYPIN_FN f);
00342
00343 CHIPCARD_API
00344 void LC_Card_SetIsoModifyPinFn(LC_CARD *card, LC_CARD_ISOMODIFYPIN_FN f);
00345
00346 CHIPCARD_API
00347 void LC_Card_SetIsoPerformVerificationFn(LC_CARD *card,
00348 LC_CARD_ISOPERFORMVERIFICATION_FN f);
00349
00350 CHIPCARD_API
00351 void LC_Card_SetIsoPerformModificationFn(LC_CARD *card,
00352 LC_CARD_ISOPERFORMMODIFICATION_FN f);
00353
00354 CHIPCARD_API
00355 void LC_Card_SetIsoManageSeFn(LC_CARD *card, LC_CARD_ISOMANAGESE_FN f);
00356
00357 CHIPCARD_API
00358 void LC_Card_SetIsoSignFn(LC_CARD *card, LC_CARD_ISOSIGN_FN f);
00359
00360 CHIPCARD_API
00361 void LC_Card_SetIsoVerifyFn(LC_CARD *card, LC_CARD_ISOVERIFY_FN f);
00362
00363 CHIPCARD_API
00364 void LC_Card_SetIsoEncipherFn(LC_CARD *card, LC_CARD_ISOENCIPHER_FN f);
00365
00366 CHIPCARD_API
00367 void LC_Card_SetIsoDecipherFn(LC_CARD *card, LC_CARD_ISODECIPHER_FN f);
00384 CHIPCARD_API
00385 LC_CLIENT_RESULT LC_Card_Open(LC_CARD *card);
00386
00396 CHIPCARD_API
00397 LC_CLIENT_RESULT LC_Card_Close(LC_CARD *card);
00398
00399
00404 CHIPCARD_API
00405 void LC_Card_free(LC_CARD *cd);
00406
00407 CHIPCARD_API
00408 void LC_Card_List2_freeAll(LC_CARD_LIST2 *l);
00416 CHIPCARD_API
00417 LC_CLIENT_RESULT LC_Card_Check(LC_CARD *card);
00418
00425 CHIPCARD_API
00426 LC_CLIENT_RESULT LC_Card_Reset(LC_CARD *card);
00427
00435
00440 CHIPCARD_API
00441 GWEN_TYPE_UINT32 LC_Card_GetCardId(const LC_CARD *cd);
00442
00447 CHIPCARD_API
00448 GWEN_TYPE_UINT32 LC_Card_GetReaderFlags(const LC_CARD *cd);
00449
00454 CHIPCARD_API
00455 const char *LC_Card_GetCardType(const LC_CARD *cd);
00456
00461 CHIPCARD_API
00462 const GWEN_STRINGLIST *LC_Card_GetCardTypes(const LC_CARD *cd);
00463
00472 CHIPCARD_API
00473 GWEN_BUFFER *LC_Card_GetAtr(const LC_CARD *cd);
00474
00475
00479 CHIPCARD_API
00480 LC_CLIENT *LC_Card_GetClient(const LC_CARD *cd);
00537 CHIPCARD_API
00538 int LC_Card_SelectApp(LC_CARD *card, const char *appName);
00539
00544 CHIPCARD_API
00545 const char *LC_Card_GetSelectedApp(const LC_CARD *card);
00546
00553 CHIPCARD_API
00554 LC_CLIENT_RESULT LC_Card_SelectCardAndApp(LC_CARD *card,
00555 const char *cardName,
00556 const char *appName);
00557
00566 CHIPCARD_API
00567 LC_CLIENT_RESULT LC_Card_SelectMF(LC_CARD *card);
00585 CHIPCARD_API
00586 int LC_Card_GetRecordNumber(LC_CARD *card, const char *recName);
00587
00593 CHIPCARD_API
00594 int LC_Card_ParseRecord(LC_CARD *card,
00595 int recNum,
00596 GWEN_BUFFER *buf,
00597 GWEN_DB_NODE *dbRecord);
00598
00604 CHIPCARD_API
00605 int LC_Card_CreateRecord(LC_CARD *card,
00606 int recNum,
00607 GWEN_BUFFER *buf,
00608 GWEN_DB_NODE *dbRecord);
00609
00620 CHIPCARD_API
00621 int LC_Card_ParseData(LC_CARD *card,
00622 const char *format,
00623 GWEN_BUFFER *buf,
00624 GWEN_DB_NODE *dbData);
00625
00635 CHIPCARD_API
00636 int LC_Card_CreateData(LC_CARD *card,
00637 const char *format,
00638 GWEN_BUFFER *buf,
00639 GWEN_DB_NODE *dbData);
00640
00656 CHIPCARD_API
00657 GWEN_XMLNODE *LC_Card_GetAppInfo(const LC_CARD *card);
00658
00665 CHIPCARD_API
00666 GWEN_XMLNODE *LC_Card_GetEfInfo(const LC_CARD *card);
00667
00674 CHIPCARD_API
00675 GWEN_XMLNODE *LC_Card_GetDfInfo(const LC_CARD *card);
00676
00677
00687
00693 CHIPCARD_API
00694 LC_PININFO *LC_Card_GetPinInfoById(LC_CARD *card, GWEN_TYPE_UINT32 pid);
00695
00703 CHIPCARD_API
00704 LC_PININFO *LC_Card_GetPinInfoByName(LC_CARD *card, const char *name);
00705
00706 CHIPCARD_API
00707 LC_CLIENT_RESULT LC_Card_GetPinStatus(LC_CARD *card,
00708 unsigned int pid,
00709 int *maxErrors,
00710 int *currentErrors);
00711
00712 CHIPCARD_API
00713 LC_CLIENT_RESULT LC_Card_GetInitialPin(LC_CARD *card,
00714 int id,
00715 unsigned char *buffer,
00716 unsigned int maxLen,
00717 unsigned int *pinLength);
00718
00719 CHIPCARD_API
00720 LC_CLIENT_RESULT LC_Card_IsoVerifyPin(LC_CARD *card,
00721 GWEN_TYPE_UINT32 flags,
00722 const LC_PININFO *pi,
00723 const unsigned char *ptr,
00724 unsigned int size,
00725 int *triesLeft);
00726
00727 CHIPCARD_API
00728 LC_CLIENT_RESULT LC_Card_IsoModifyPin(LC_CARD *card,
00729 GWEN_TYPE_UINT32 flags,
00730 const LC_PININFO *pi,
00731 const unsigned char *oldptr,
00732 unsigned int oldsize,
00733 const unsigned char *newptr,
00734 unsigned int newsize,
00735 int *triesLeft);
00736
00737 CHIPCARD_API
00738 LC_CLIENT_RESULT LC_Card_IsoPerformVerification(LC_CARD *card,
00739 GWEN_TYPE_UINT32 flags,
00740 const LC_PININFO *pi,
00741 int *triesLeft);
00742
00743 CHIPCARD_API
00744 LC_CLIENT_RESULT LC_Card_IsoPerformModification(LC_CARD *card,
00745 GWEN_TYPE_UINT32 flags,
00746 const LC_PININFO *pi,
00747 int *triesLeft);
00748
00757 CHIPCARD_API
00758 LC_CLIENT_RESULT LC_Card_IsoReadBinary(LC_CARD *card,
00759 GWEN_TYPE_UINT32 flags,
00760 int offset,
00761 int size,
00762 GWEN_BUFFER *buf);
00763
00764 CHIPCARD_API
00765 LC_CLIENT_RESULT LC_Card_IsoWriteBinary(LC_CARD *card,
00766 GWEN_TYPE_UINT32 flags,
00767 int offset,
00768 const char *ptr,
00769 unsigned int size);
00770
00771
00772 CHIPCARD_API
00773 LC_CLIENT_RESULT LC_Card_IsoUpdateBinary(LC_CARD *card,
00774 GWEN_TYPE_UINT32 flags,
00775 int offset,
00776 const char *ptr,
00777 unsigned int size);
00778
00779 CHIPCARD_API
00780 LC_CLIENT_RESULT LC_Card_IsoEraseBinary(LC_CARD *card,
00781 GWEN_TYPE_UINT32 flags,
00782 int offset,
00783 unsigned int size);
00791
00792 CHIPCARD_API
00793 LC_CLIENT_RESULT LC_Card_IsoReadRecord(LC_CARD *card,
00794 GWEN_TYPE_UINT32 flags,
00795 int recNum,
00796 GWEN_BUFFER *buf);
00797 CHIPCARD_API
00798 LC_CLIENT_RESULT LC_Card_IsoWriteRecord(LC_CARD *card,
00799 GWEN_TYPE_UINT32 flags,
00800 int recNum,
00801 const char *ptr,
00802 unsigned int size);
00803
00804 CHIPCARD_API
00805 LC_CLIENT_RESULT LC_Card_IsoAppendRecord(LC_CARD *card,
00806 GWEN_TYPE_UINT32 flags,
00807 const char *ptr,
00808 unsigned int size);
00809
00810 CHIPCARD_API
00811 LC_CLIENT_RESULT LC_Card_IsoUpdateRecord(LC_CARD *card,
00812 GWEN_TYPE_UINT32 flags,
00813 int recNum,
00814 const char *ptr,
00815 unsigned int size);
00824
00825 CHIPCARD_API
00826 LC_CLIENT_RESULT LC_Card_IsoManageSe(LC_CARD *card,
00827 int tmpl, int kids, int kidp, int ar);
00828
00829 CHIPCARD_API
00830 LC_CLIENT_RESULT LC_Card_IsoEncipher(LC_CARD *card,
00831 const char *ptr,
00832 unsigned int size,
00833 GWEN_BUFFER *codeBuf);
00834
00835 CHIPCARD_API
00836 LC_CLIENT_RESULT LC_Card_IsoDecipher(LC_CARD *card,
00837 const char *ptr,
00838 unsigned int size,
00839 GWEN_BUFFER *plainBuf);
00840
00841 CHIPCARD_API
00842 LC_CLIENT_RESULT LC_Card_IsoSign(LC_CARD *card,
00843 const char *ptr,
00844 unsigned int size,
00845 GWEN_BUFFER *sigBuf);
00846
00847 CHIPCARD_API
00848 LC_CLIENT_RESULT LC_Card_IsoVerify(LC_CARD *card,
00849 const char *dptr,
00850 unsigned int dsize,
00851 const char *sigptr,
00852 unsigned int sigsize);
00853
00854
00866 CHIPCARD_API
00867 int LC_Card_GetLastSW1(const LC_CARD *card);
00868
00869 CHIPCARD_API
00870 int LC_Card_GetLastSW2(const LC_CARD *card);
00871
00872 CHIPCARD_API
00873 const char *LC_Card_GetLastResult(const LC_CARD *card);
00874
00875 CHIPCARD_API
00876 const char *LC_Card_GetLastText(const LC_CARD *card);
00877
00878 CHIPCARD_API
00879 void LC_Card_CreateResultString(const LC_CARD *card,
00880 const char *lastCommand,
00881 LC_CLIENT_RESULT res,
00882 GWEN_BUFFER *buf);
00890 CHIPCARD_API
00891 LC_CLIENT_RESULT LC_Card_ExecAPDU(LC_CARD *card,
00892 const char *apdu,
00893 unsigned int len,
00894 GWEN_BUFFER *rbuf,
00895 LC_CLIENT_CMDTARGET t,
00896 int timeout);
00897
00898 CHIPCARD_API
00899 LC_CLIENT_RESULT LC_Card_ExecCommand(LC_CARD *card,
00900 GWEN_DB_NODE *dbReq,
00901 GWEN_DB_NODE *dbResp,
00902 int timeout);
00909 CHIPCARD_API
00910 void LC_Card_Dump(const LC_CARD *cd, FILE *f, int indent);
00919
00923 CHIPCARD_API CHIPCARD_DEPRECATED
00924 LC_CLIENT_RESULT LC_Card_ReadBinary(LC_CARD *card,
00925 int offset,
00926 int size,
00927 GWEN_BUFFER *buf);
00928
00930 CHIPCARD_API CHIPCARD_DEPRECATED
00931 LC_CLIENT_RESULT LC_Card_WriteBinary(LC_CARD *card,
00932 int offset,
00933 GWEN_BUFFER *buf);
00934
00936 CHIPCARD_API CHIPCARD_DEPRECATED
00937 LC_CLIENT_RESULT LC_Card_WriteBinary2(LC_CARD *card,
00938 int offset,
00939 const char *ptr,
00940 unsigned int size);
00941
00943 CHIPCARD_API CHIPCARD_DEPRECATED
00944 LC_CLIENT_RESULT LC_Card_GetDriverVar(LC_CARD *card,
00945 const char *varName,
00946 GWEN_BUFFER *vbuf);
00947
00951
00952
00953
00954 #ifdef __cplusplus
00955 }
00956 #endif
00957
00958
00959 #endif
00960
00961
00962