1 /*************************************************************************** 2 begin : Mon Mar 01 2004 3 copyright : (C) 2004-2010 by Martin Preuss 4 email : martin@libchipcard.de 5 6 *************************************************************************** 7 * Please see toplevel file COPYING for license details * 8 ***************************************************************************/ 9 10 11 #ifndef CHIPCARD_CLIENT_CARD_P_H 12 #define CHIPCARD_CLIENT_CARD_P_H 13 14 15 #include "card_l.h" 16 #include <gwenhywfar/inherit.h> 17 18 19 #define LC_PCSC_MAX_FEATURES 32 20 21 22 23 struct LC_CARD { 24 GWEN_LIST_ELEMENT(LC_CARD) 25 GWEN_INHERIT_ELEMENT(LC_CARD) 26 LC_CLIENT *client; 27 28 char *readerType; 29 char *driverType; 30 uint32_t readerFlags; 31 char *cardType; 32 GWEN_BUFFER *atr; 33 GWEN_STRINGLIST *cardTypes; 34 35 LC_CARD_OPEN_FN openFn; 36 LC_CARD_CLOSE_FN closeFn; 37 38 int connected; 39 40 int lastSW1; 41 int lastSW2; 42 char *lastResult; 43 char *lastText; 44 45 GWEN_DB_NODE *dbCommandCache; 46 GWEN_XMLNODE *cardNode; 47 GWEN_XMLNODE *appNode; 48 GWEN_XMLNODE *dfNode; 49 GWEN_XMLNODE *efNode; 50 51 /* SCard stuff */ 52 SCARDHANDLE scardHandle; 53 uint32_t featureCode[LC_PCSC_MAX_FEATURES]; 54 DWORD protocol; 55 char *readerName; 56 57 /* ISO stuff */ 58 LC_CARD_GETPINSTATUS_FN getPinStatusFn; 59 LC_CARD_GETINITIALPIN_FN getInitialPinFn; 60 61 LC_CARD_ISOREADBINARY_FN readBinaryFn; 62 LC_CARD_ISOWRITEBINARY_FN writeBinaryFn; 63 LC_CARD_ISOUPDATEBINARY_FN updateBinaryFn; 64 LC_CARD_ISOERASEBINARY_FN eraseBinaryFn; 65 LC_CARD_ISOREADRECORD_FN readRecordFn; 66 LC_CARD_ISOWRITERECORD_FN writeRecordFn; 67 LC_CARD_ISOAPPENDRECORD_FN appendRecordFn; 68 LC_CARD_ISOUPDATERECORD_FN updateRecordFn; 69 LC_CARD_ISOVERIFYPIN_FN verifyPinFn; 70 LC_CARD_ISOMODIFYPIN_FN modifyPinFn; 71 72 LC_CARD_ISOPERFORMVERIFICATION_FN performVerificationFn; 73 LC_CARD_ISOPERFORMMODIFICATION_FN performModificationFn; 74 75 LC_CARD_ISOMANAGESE_FN manageSeFn; 76 LC_CARD_ISOSIGN_FN signFn; 77 LC_CARD_ISOVERIFY_FN verifyFn; 78 LC_CARD_ISOENCIPHER_FN encipherFn; 79 LC_CARD_ISODECIPHER_FN decipherFn; 80 LC_CARD_ISOINTERNALAUTH_FN internalAuthFn; 81 82 int usage; 83 }; 84 85 86 87 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__Open(LC_CARD *card); 88 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__Close(LC_CARD *card); 89 90 91 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoReadBinary(LC_CARD *card, 92 uint32_t flags, 93 int offset, 94 int size, 95 GWEN_BUFFER *buf); 96 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoUpdateBinary(LC_CARD *card, 97 uint32_t flags, 98 int offset, 99 const char *ptr, 100 unsigned int size); 101 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoWriteBinary(LC_CARD *card, 102 uint32_t flags, 103 int offset, 104 const char *ptr, 105 unsigned int size); 106 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoEraseBinary(LC_CARD *card, 107 uint32_t flags, 108 int offset, 109 unsigned int size); 110 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoReadRecord(LC_CARD *card, 111 uint32_t flags, 112 int recNum, 113 GWEN_BUFFER *buf); 114 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoWriteRecord(LC_CARD *card, 115 uint32_t flags, 116 int recNum, 117 const char *ptr, 118 unsigned int size); 119 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoUpdateRecord(LC_CARD *card, 120 uint32_t flags, 121 int recNum, 122 const char *ptr, 123 unsigned int size); 124 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoAppendRecord(LC_CARD *card, 125 uint32_t flags, 126 const char *ptr, 127 unsigned int size); 128 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoVerifyPin(LC_CARD *card, 129 uint32_t flags, 130 const LC_PININFO *pi, 131 const unsigned char *ptr, 132 unsigned int size, 133 int *triesLeft); 134 135 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoPerformVerification(LC_CARD *card, 136 uint32_t flags, 137 const LC_PININFO *pi, 138 int *triesLeft); 139 140 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoModifyPin(LC_CARD *card, 141 uint32_t flags, 142 const LC_PININFO *pi, 143 const unsigned char *oldptr, 144 unsigned int oldsize, 145 const unsigned char *newptr, 146 unsigned int newsize, 147 int *triesLeft); 148 149 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoPerformModification(LC_CARD *card, 150 uint32_t flags, 151 const LC_PININFO *pi, 152 int *triesLeft); 153 154 155 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoManageSe(LC_CARD *card, 156 int tmpl, int kids, int kidp, int ar); 157 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoEncipher(LC_CARD *card, 158 const char *ptr, 159 unsigned int size, 160 GWEN_BUFFER *codeBuf); 161 LC_CLIENT_RESULT CHIPCARD_CB LC_Card__IsoDecipher(LC_CARD *card, 162 const char *ptr, 163 unsigned int size, 164 GWEN_BUFFER *plainBuf); 165 166 167 GWEN_XMLNODE *LC_Card_FindFile(LC_CARD *card, 168 const char *type, 169 const char *fname); 170 171 172 173 #endif /* CHIPCARD_CLIENT_CARD_P_H */ 174