1 /*************************************************************************** 2 begin : Wed Mar 16 2005 3 copyright : (C) 2005 by Martin Preuss 4 email : martin@libchipcard.de 5 6 *************************************************************************** 7 * Please see toplevel file COPYING for license details * 8 ***************************************************************************/ 9 10 11 #ifndef GWEN_CRYPT_CRYPTTOKEN_BE_H 12 #define GWEN_CRYPT_CRYPTTOKEN_BE_H 13 14 15 #include <gwenhywfar/ct.h> 16 #include <gwenhywfar/inherit.h> 17 #include <gwenhywfar/buffer.h> 18 #include <gwenhywfar/hashalgo.h> 19 20 21 22 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWENHYWFAR_API) 23 24 25 26 27 /** @name Prototypes for Virtual Functions 28 * 29 */ 30 /*@{*/ 31 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_OPEN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); 32 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_CREATE_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t gid); 33 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_CLOSE_FN)(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); 34 35 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, 36 uint32_t *pIdList, 37 uint32_t *pCount, 38 uint32_t gid); 39 typedef const GWEN_CRYPT_TOKEN_KEYINFO *GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, 40 uint32_t id, 41 uint32_t flags, 42 uint32_t gid); 43 44 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_SETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, 45 uint32_t id, 46 const GWEN_CRYPT_TOKEN_KEYINFO *ki, 47 uint32_t gid); 48 49 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, 50 uint32_t *pIdList, 51 uint32_t *pCount, 52 uint32_t gid); 53 typedef const GWEN_CRYPT_TOKEN_CONTEXT *GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, 54 uint32_t id, 55 uint32_t gid); 56 57 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_SETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, 58 uint32_t id, 59 const GWEN_CRYPT_TOKEN_CONTEXT *ctx, 60 uint32_t gid); 61 62 63 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_SIGN_FN)(GWEN_CRYPT_TOKEN *ct, 64 uint32_t keyId, 65 GWEN_CRYPT_PADDALGO *a, 66 const uint8_t *pInData, 67 uint32_t inLen, 68 uint8_t *pSignatureData, 69 uint32_t *pSignatureLen, 70 uint32_t *pSeqCounter, 71 uint32_t gid); 72 73 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_VERIFY_FN)(GWEN_CRYPT_TOKEN *ct, 74 uint32_t keyId, 75 GWEN_CRYPT_PADDALGO *a, 76 const uint8_t *pInData, 77 uint32_t inLen, 78 const uint8_t *pSignatureData, 79 uint32_t signatureLen, 80 uint32_t seqCounter, 81 uint32_t gid); 82 83 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_ENCIPHER_FN)(GWEN_CRYPT_TOKEN *ct, 84 uint32_t keyId, 85 GWEN_CRYPT_PADDALGO *a, 86 const uint8_t *pInData, 87 uint32_t inLen, 88 uint8_t *pOutData, 89 uint32_t *pOutLen, 90 uint32_t gid); 91 92 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_DECIPHER_FN)(GWEN_CRYPT_TOKEN *ct, 93 uint32_t keyId, 94 GWEN_CRYPT_PADDALGO *a, 95 const uint8_t *pInData, 96 uint32_t inLen, 97 uint8_t *pOutData, 98 uint32_t *pOutLen, 99 uint32_t gid); 100 101 102 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GENERATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, 103 uint32_t keyId, 104 const GWEN_CRYPT_CRYPTALGO *a, 105 uint32_t gid); 106 107 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_CHANGEPIN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); 108 109 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); 110 111 /*@}*/ 112 113 114 115 116 /** @name Contructor 117 * 118 */ 119 /*@{*/ 120 GWENHYWFAR_API GWEN_CRYPT_TOKEN *GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, 121 const char *typeName, 122 const char *tokenName); 123 /*@}*/ 124 125 126 127 /** @name Setting CryptToken Information 128 * 129 */ 130 /*@{*/ 131 GWENHYWFAR_API void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s); 132 133 GWENHYWFAR_API void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f); 134 GWENHYWFAR_API void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f); 135 GWENHYWFAR_API void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f); 136 /*@}*/ 137 138 139 140 /** @name Interactive Helper Functions 141 * 142 */ 143 /*@{*/ 144 GWENHYWFAR_API int GWEN_Crypt_Token_GetPin(GWEN_CRYPT_TOKEN *ct, 145 GWEN_CRYPT_PINTYPE pt, 146 GWEN_CRYPT_PINENCODING pe, 147 uint32_t flags, 148 unsigned char *pwbuffer, 149 unsigned int minLength, 150 unsigned int maxLength, 151 unsigned int *pinLength, 152 uint32_t gid); 153 154 155 GWENHYWFAR_API int GWEN_Crypt_Token_SetPinStatus(GWEN_CRYPT_TOKEN *ct, 156 GWEN_CRYPT_PINTYPE pt, 157 GWEN_CRYPT_PINENCODING pe, 158 uint32_t flags, 159 const unsigned char *buffer, 160 unsigned int pinLength, 161 int isOk, 162 uint32_t gid); 163 164 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_CRYPT_TOKEN *ct, 165 GWEN_CRYPT_PINTYPE pt, 166 uint32_t gid); 167 168 GWENHYWFAR_API int GWEN_Crypt_Token_EndEnterPin(GWEN_CRYPT_TOKEN *ct, 169 GWEN_CRYPT_PINTYPE pt, 170 int ok, 171 uint32_t id); 172 173 GWENHYWFAR_API int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid); 174 175 GWENHYWFAR_API int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid); 176 /*@}*/ 177 178 179 180 181 /** @name Setter for Virtual Functions 182 * 183 */ 184 /*@{*/ 185 GWENHYWFAR_API GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, 186 GWEN_CRYPT_TOKEN_OPEN_FN f); 187 188 GWENHYWFAR_API GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, 189 GWEN_CRYPT_TOKEN_CREATE_FN f); 190 191 GWENHYWFAR_API GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct, 192 GWEN_CRYPT_TOKEN_CLOSE_FN f); 193 194 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, 195 GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f); 196 197 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, 198 GWEN_CRYPT_TOKEN_GETKEYINFO_FN f); 199 200 GWENHYWFAR_API GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, 201 GWEN_CRYPT_TOKEN_SETKEYINFO_FN f); 202 203 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct, 204 GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f); 205 206 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, 207 GWEN_CRYPT_TOKEN_GETCONTEXT_FN f); 208 209 GWENHYWFAR_API GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, 210 GWEN_CRYPT_TOKEN_SETCONTEXT_FN f); 211 212 GWENHYWFAR_API GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct, 213 GWEN_CRYPT_TOKEN_SIGN_FN f); 214 215 GWENHYWFAR_API GWEN_CRYPT_TOKEN_VERIFY_FN GWEN_Crypt_Token_SetVerifyFn(GWEN_CRYPT_TOKEN *ct, 216 GWEN_CRYPT_TOKEN_VERIFY_FN f); 217 218 GWENHYWFAR_API GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct, 219 GWEN_CRYPT_TOKEN_ENCIPHER_FN f); 220 221 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, 222 GWEN_CRYPT_TOKEN_DECIPHER_FN f); 223 224 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, 225 GWEN_CRYPT_TOKEN_GENERATEKEY_FN f); 226 227 GWENHYWFAR_API GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct, 228 GWEN_CRYPT_TOKEN_CHANGEPIN_FN f); 229 230 GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, 231 GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f); 232 233 /*@}*/ 234 235 236 237 238 #endif 239 240 241