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_H 12 #define GWEN_CRYPT_CRYPTTOKEN_H 13 14 #include <gwenhywfar/list1.h> 15 #include <gwenhywfar/list2.h> 16 17 18 19 typedef struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN; 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 26 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API) 27 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API) 28 29 #ifdef __cplusplus 30 } 31 #endif 32 33 34 35 typedef enum { 36 GWEN_Crypt_Token_Device_Unknown=-1, 37 GWEN_Crypt_Token_Device_None=0, 38 GWEN_Crypt_Token_Device_File, 39 GWEN_Crypt_Token_Device_Card, 40 GWEN_Crypt_Token_Device_Any=999 41 } GWEN_CRYPT_TOKEN_DEVICE; 42 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 /** @name Converting Device Types to and from Strings 49 * 50 */ 51 /*@{*/ 52 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s); 53 GWENHYWFAR_API const char *GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d); 54 /*@}*/ 55 56 57 58 #define GWEN_CRYPT_TOKEN_MODE_SECURE_PIN_ENTRY 0x00000001 59 #define GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY 0x00000002 60 /** this flag allows updating of old CryptToken files to newer versions */ 61 #define GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE 0x00000004 62 #define GWEN_CRYPT_TOKEN_MODE_EXP_65537 0x00000008 63 #define GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN 0x00000010 64 65 66 67 #define GWEN_CRYPT_TOKEN_FLAGS_MANAGES_SIGNSEQ 0x00000001 68 69 70 71 #include <gwenhywfar/ct_keyinfo.h> 72 #include <gwenhywfar/ct_context.h> 73 #include <gwenhywfar/paddalgo.h> 74 #include <gwenhywfar/hashalgo.h> 75 #include <gwenhywfar/cryptalgo.h> 76 #include <gwenhywfar/cryptdefs.h> 77 78 79 /** @name Basic Informations about a CryptToken 80 * 81 */ 82 /*@{*/ 83 GWENHYWFAR_API void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct); 84 /*@}*/ 85 86 87 88 /** @name Basic Informations about a CryptToken 89 * 90 */ 91 /*@{*/ 92 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct); 93 94 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct); 95 96 GWENHYWFAR_API void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f); 97 98 GWENHYWFAR_API void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f); 99 100 GWENHYWFAR_API void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f); 101 102 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct); 103 104 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct); 105 106 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct); 107 108 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct); 109 110 GWENHYWFAR_API void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s); 111 /*@}*/ 112 113 114 115 /** @name Open, Create and Close 116 * 117 */ 118 /*@{*/ 119 GWENHYWFAR_API int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); 120 121 122 GWENHYWFAR_API int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid); 123 124 GWENHYWFAR_API int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); 125 126 GWENHYWFAR_API int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct); 127 128 /*@}*/ 129 130 131 132 /** @name Cryptographic Objects 133 * 134 */ 135 /*@{*/ 136 GWENHYWFAR_API int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct, 137 uint32_t *pIdList, 138 uint32_t *pCount, 139 uint32_t gid); 140 141 GWENHYWFAR_API const GWEN_CRYPT_TOKEN_KEYINFO *GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct, 142 uint32_t id, 143 uint32_t flags, 144 uint32_t gid); 145 146 GWENHYWFAR_API int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct, 147 uint32_t id, 148 const GWEN_CRYPT_TOKEN_KEYINFO *ki, 149 uint32_t gid); 150 151 152 GWENHYWFAR_API int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct, 153 uint32_t *pIdList, 154 uint32_t *pCount, 155 uint32_t gid); 156 157 GWENHYWFAR_API const GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct, 158 uint32_t id, 159 uint32_t gid); 160 161 GWENHYWFAR_API int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct, 162 uint32_t id, 163 const GWEN_CRYPT_TOKEN_CONTEXT *ctx, 164 uint32_t gid); 165 /*@}*/ 166 167 168 169 /** @name Cryptographic Operations 170 * 171 */ 172 /*@{*/ 173 GWENHYWFAR_API int GWEN_Crypt_Token_Sign(GWEN_CRYPT_TOKEN *ct, 174 uint32_t keyId, 175 GWEN_CRYPT_PADDALGO *a, 176 const uint8_t *pInData, 177 uint32_t inLen, 178 uint8_t *pSignatureData, 179 uint32_t *pSignatureLen, 180 uint32_t *pSeqCounter, 181 uint32_t gid); 182 183 GWENHYWFAR_API int GWEN_Crypt_Token_Verify(GWEN_CRYPT_TOKEN *ct, 184 uint32_t keyId, 185 GWEN_CRYPT_PADDALGO *a, 186 const uint8_t *pInData, 187 uint32_t inLen, 188 const uint8_t *pSignatureData, 189 uint32_t signatureLen, 190 uint32_t seqCounter, 191 uint32_t gid); 192 193 GWENHYWFAR_API int GWEN_Crypt_Token_Encipher(GWEN_CRYPT_TOKEN *ct, 194 uint32_t keyId, 195 GWEN_CRYPT_PADDALGO *a, 196 const uint8_t *pInData, 197 uint32_t inLen, 198 uint8_t *pOutData, 199 uint32_t *pOutLen, 200 uint32_t gid); 201 202 GWENHYWFAR_API int GWEN_Crypt_Token_Decipher(GWEN_CRYPT_TOKEN *ct, 203 uint32_t keyId, 204 GWEN_CRYPT_PADDALGO *a, 205 const uint8_t *pInData, 206 uint32_t inLen, 207 uint8_t *pOutData, 208 uint32_t *pOutLen, 209 uint32_t gid); 210 /*@}*/ 211 212 213 214 /** @name Administrative Operations 215 * 216 */ 217 /*@{*/ 218 GWENHYWFAR_API int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct, 219 uint32_t keyId, 220 const GWEN_CRYPT_CRYPTALGO *a, 221 uint32_t gid); 222 223 GWENHYWFAR_API int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); 224 225 GWENHYWFAR_API int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid); 226 227 /*@}*/ 228 229 230 #ifdef __cplusplus 231 } 232 #endif 233 234 235 236 #endif 237 238 239