00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef GWEN_CRYPTTOKEN_H
00015 #define GWEN_CRYPTTOKEN_H
00016
00017 #include <gwenhywfar/keyspec.h>
00018 #include <gwenhywfar/crypt.h>
00019 #include <gwenhywfar/buffer.h>
00020 #include <gwenhywfar/db.h>
00021 #include <gwenhywfar/xml.h>
00022 #include <gwenhywfar/plugin.h>
00023
00024 #define GWEN_CRYPTMANAGER_NAME "GWEN_CRYPTMANAGER"
00025
00026
00027 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_CAN_SIGN 0x00000001
00028 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_CAN_VERIFY 0x00000002
00029 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_CAN_ENCRYPT 0x00000004
00030 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_CAN_DECRYPT 0x00000008
00031 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_READABLE 0x00000010
00032 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_WRITEABLE 0x00000020
00033 #define GWEN_CRYPTTOKEN_KEYINFO_FLAGS_HAS_SIGNSEQ 0x00000040
00034
00035
00036 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_MANAGEMENT 0x00000001
00037 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_ALLOW_ADD 0x00000002
00038 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_RO_KEYS 0x00000004
00039 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_RO_DESCR 0x00000008
00040 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_RO_SIGNDESCR 0x00000010
00041 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_RO_CRYPTDESCR 0x00000020
00042 #define GWEN_CRYPTTOKEN_FLAGS_CONTEXT_RO_KEYDESCRS 0x00000040
00043
00044 #define GWEN_CRYPTTOKEN_FLAGS_MANAGES_SIGNSEQ 0x00010000
00045 #define GWEN_CRYPTTOKEN_FLAGS_PREDEF_CONTEXT_ONLY 0x00020000
00046
00047
00048
00049 typedef struct GWEN_CRYPTTOKEN_SIGNINFO GWEN_CRYPTTOKEN_SIGNINFO;
00050 typedef struct GWEN_CRYPTTOKEN_CRYPTINFO GWEN_CRYPTTOKEN_CRYPTINFO;
00051 typedef struct GWEN_CRYPTTOKEN_KEYINFO GWEN_CRYPTTOKEN_KEYINFO;
00052 typedef struct GWEN_CRYPTTOKEN_CONTEXT GWEN_CRYPTTOKEN_CONTEXT;
00053 typedef struct GWEN_CRYPTTOKEN GWEN_CRYPTTOKEN;
00054
00055
00056 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN_SIGNINFO,
00057 GWEN_CryptToken_SignInfo,
00058 GWENHYWFAR_API)
00059 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN_CRYPTINFO,
00060 GWEN_CryptToken_CryptInfo,
00061 GWENHYWFAR_API)
00062 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN_KEYINFO,
00063 GWEN_CryptToken_KeyInfo,
00064 GWENHYWFAR_API)
00065
00066 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN_CONTEXT,
00067 GWEN_CryptToken_Context,
00068 GWENHYWFAR_API)
00069
00070 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN,
00071 GWEN_CryptToken,
00072 GWENHYWFAR_API)
00073 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN,
00074 GWENHYWFAR_API)
00075
00076
00077 typedef enum {
00078 GWEN_CryptToken_HashAlgo_Unknown=-1,
00079 GWEN_CryptToken_HashAlgo_None=0,
00081 GWEN_CryptToken_HashAlgo_SHA1,
00083 GWEN_CryptToken_HashAlgo_RMD160,
00085 GWEN_CryptToken_HashAlgo_MD5
00086 } GWEN_CRYPTTOKEN_HASHALGO;
00087
00088 GWEN_CRYPTTOKEN_HASHALGO GWEN_CryptToken_HashAlgo_fromString(const char *s);
00089 const char *GWEN_CryptToken_HashAlgo_toString(GWEN_CRYPTTOKEN_HASHALGO a);
00090
00091
00092 typedef enum {
00093 GWEN_CryptToken_PaddAlgo_Unknown=-1,
00094 GWEN_CryptToken_PaddAlgo_None=0,
00096 GWEN_CryptToken_PaddAlgo_ISO9796_1,
00098 GWEN_CryptToken_PaddAlgo_ISO9796_1A4,
00100 GWEN_CryptToken_PaddAlgo_ISO9796_2,
00102 GWEN_CryptToken_PaddAlgo_PKCS1_1,
00104 GWEN_CryptToken_PaddAlgo_PKCS1_2,
00106 GWEN_CryptToken_PaddAlgo_LeftZero,
00108 GWEN_CryptToken_PaddAlgo_RightZero,
00110 GWEN_CryptToken_PaddAlgo_ANSIX9_23
00111 } GWEN_CRYPTTOKEN_PADDALGO;
00112
00113 GWEN_CRYPTTOKEN_PADDALGO GWEN_CryptToken_PaddAlgo_fromString(const char *s);
00114 const char *GWEN_CryptToken_PaddAlgo_toString(GWEN_CRYPTTOKEN_PADDALGO a);
00115
00116
00117 typedef enum {
00118 GWEN_CryptToken_CryptAlgo_Unknown=-1,
00119 GWEN_CryptToken_CryptAlgo_None=0,
00121 GWEN_CryptToken_CryptAlgo_RSA,
00123 GWEN_CryptToken_CryptAlgo_DSA,
00124
00125 GWEN_CryptToken_CryptAlgo_DES,
00127 GWEN_CryptToken_CryptAlgo_DES_3K
00128 } GWEN_CRYPTTOKEN_CRYPTALGO;
00129
00130 GWEN_CRYPTTOKEN_CRYPTALGO GWEN_CryptToken_CryptAlgo_fromString(const char *s);
00131 const char *GWEN_CryptToken_CryptAlgo_toString(GWEN_CRYPTTOKEN_CRYPTALGO a);
00132
00133
00134
00135 typedef enum {
00136 GWEN_CryptToken_Device_Unknown=-1,
00137 GWEN_CryptToken_Device_None=0,
00138 GWEN_CryptToken_Device_File,
00139 GWEN_CryptToken_Device_Card
00140 } GWEN_CRYPTTOKEN_DEVICE;
00141
00142 GWEN_CRYPTTOKEN_DEVICE GWEN_CryptToken_Device_fromString(const char *s);
00143 const char *GWEN_CryptToken_Device_toString(GWEN_CRYPTTOKEN_DEVICE d);
00144
00145
00146
00147 typedef enum {
00148 GWEN_CryptToken_PinType_Unknown=-1,
00149 GWEN_CryptToken_PinType_None=0,
00150 GWEN_CryptToken_PinType_Access,
00151 GWEN_CryptToken_PinType_Manage
00152 } GWEN_CRYPTTOKEN_PINTYPE;
00153
00154 GWEN_CRYPTTOKEN_PINTYPE GWEN_CryptToken_PinType_fromString(const char *s);
00155 const char *GWEN_CryptToken_PinType_toString(GWEN_CRYPTTOKEN_PINTYPE pt);
00156
00157
00158
00159 typedef enum {
00160 GWEN_CryptToken_PinEncoding_Unknown=-1,
00161 GWEN_CryptToken_PinEncoding_None=0,
00162 GWEN_CryptToken_PinEncoding_Bin,
00163 GWEN_CryptToken_PinEncoding_BCD,
00164 GWEN_CryptToken_PinEncoding_ASCII
00165 } GWEN_CRYPTTOKEN_PINENCODING;
00166
00167 GWEN_CRYPTTOKEN_PINENCODING
00168 GWEN_CryptToken_PinEncoding_fromString(const char *s);
00169 const char*
00170 GWEN_CryptToken_PinEncoding_toString(GWEN_CRYPTTOKEN_PINENCODING pe);
00171
00172
00173
00174
00179 GWEN_CRYPTTOKEN_SIGNINFO *GWEN_CryptToken_SignInfo_new();
00180 void GWEN_CryptToken_SignInfo_free(GWEN_CRYPTTOKEN_SIGNINFO *si);
00181 GWEN_CRYPTTOKEN_SIGNINFO*
00182 GWEN_CryptToken_SignInfo_dup(const GWEN_CRYPTTOKEN_SIGNINFO *si);
00183 GWEN_CRYPTTOKEN_SIGNINFO *GWEN_CryptToken_SignInfo_fromDb(GWEN_DB_NODE *db);
00184 void GWEN_CryptToken_SignInfo_toDb(const GWEN_CRYPTTOKEN_SIGNINFO *si,
00185 GWEN_DB_NODE *db);
00186 GWEN_CRYPTTOKEN_SIGNINFO *GWEN_CryptToken_SignInfo_fromXml(GWEN_XMLNODE *n);
00187
00188
00189 GWEN_TYPE_UINT32
00190 GWEN_CryptToken_SignInfo_GetId(const GWEN_CRYPTTOKEN_SIGNINFO *si);
00191 void GWEN_CryptToken_SignInfo_SetId(GWEN_CRYPTTOKEN_SIGNINFO *si,
00192 GWEN_TYPE_UINT32 id);
00193
00194 GWEN_CRYPTTOKEN_HASHALGO
00195 GWEN_CryptToken_SignInfo_GetHashAlgo(const GWEN_CRYPTTOKEN_SIGNINFO *si);
00196 void GWEN_CryptToken_SignInfo_SetHashAlgo(GWEN_CRYPTTOKEN_SIGNINFO *si,
00197 GWEN_CRYPTTOKEN_HASHALGO a);
00198
00199 GWEN_CRYPTTOKEN_PADDALGO
00200 GWEN_CryptToken_SignInfo_GetPaddAlgo(const GWEN_CRYPTTOKEN_SIGNINFO *si);
00201 void GWEN_CryptToken_SignInfo_SetPaddAlgo(GWEN_CRYPTTOKEN_SIGNINFO *si,
00202 GWEN_CRYPTTOKEN_PADDALGO a);
00211 GWEN_CRYPTTOKEN_CRYPTINFO *GWEN_CryptToken_CryptInfo_new();
00212 void GWEN_CryptToken_CryptInfo_free(GWEN_CRYPTTOKEN_CRYPTINFO *ci);
00213 GWEN_CRYPTTOKEN_CRYPTINFO*
00214 GWEN_CryptToken_CryptInfo_dup(const GWEN_CRYPTTOKEN_CRYPTINFO *ci);
00215
00216 GWEN_CRYPTTOKEN_CRYPTINFO *GWEN_CryptToken_CryptInfo_fromDb(GWEN_DB_NODE *db);
00217 void GWEN_CryptToken_CryptInfo_toDb(const GWEN_CRYPTTOKEN_CRYPTINFO *ci,
00218 GWEN_DB_NODE *db);
00219 GWEN_CRYPTTOKEN_CRYPTINFO *GWEN_CryptToken_CryptInfo_fromXml(GWEN_XMLNODE *n);
00220
00221
00222 GWEN_TYPE_UINT32
00223 GWEN_CryptToken_CryptInfo_GetId(const GWEN_CRYPTTOKEN_CRYPTINFO *ci);
00224 void GWEN_CryptToken_CryptInfo_SetId(GWEN_CRYPTTOKEN_CRYPTINFO *ci,
00225 GWEN_TYPE_UINT32 id);
00226
00227 GWEN_CRYPTTOKEN_CRYPTALGO
00228 GWEN_CryptToken_CryptInfo_GetCryptAlgo(const GWEN_CRYPTTOKEN_CRYPTINFO *ci);
00229 void GWEN_CryptToken_CryptInfo_SetCryptAlgo(GWEN_CRYPTTOKEN_CRYPTINFO *ci,
00230 GWEN_CRYPTTOKEN_CRYPTALGO a);
00231
00232 GWEN_CRYPTTOKEN_PADDALGO
00233 GWEN_CryptToken_CryptInfo_GetPaddAlgo(const GWEN_CRYPTTOKEN_CRYPTINFO *ci);
00234 void GWEN_CryptToken_CryptInfo_SetPaddAlgo(GWEN_CRYPTTOKEN_CRYPTINFO *ci,
00235 GWEN_CRYPTTOKEN_PADDALGO a);
00244 GWEN_CRYPTTOKEN_KEYINFO *GWEN_CryptToken_KeyInfo_new();
00245 void GWEN_CryptToken_KeyInfo_free(GWEN_CRYPTTOKEN_KEYINFO *ki);
00246 GWEN_CRYPTTOKEN_KEYINFO*
00247 GWEN_CryptToken_KeyInfo_dup(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00248
00249 GWEN_CRYPTTOKEN_KEYINFO *GWEN_CryptToken_KeyInfo_fromDb(GWEN_DB_NODE *db);
00250 void GWEN_CryptToken_KeyInfo_toDb(const GWEN_CRYPTTOKEN_KEYINFO *ki,
00251 GWEN_DB_NODE *db);
00252 GWEN_CRYPTTOKEN_KEYINFO *GWEN_CryptToken_KeyInfo_fromXml(GWEN_XMLNODE *n);
00253
00254 int GWEN_CryptToken_KeyInfo_GetKeyId(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00255 void GWEN_CryptToken_KeyInfo_SetKeyId(GWEN_CRYPTTOKEN_KEYINFO *ki,
00256 int id);
00257
00258 int GWEN_CryptToken_KeyInfo_GetKeySize(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00259 void GWEN_CryptToken_KeyInfo_SetKeySize(GWEN_CRYPTTOKEN_KEYINFO *ki,
00260 int i);
00261
00262 int GWEN_CryptToken_KeyInfo_GetChunkSize(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00263 void GWEN_CryptToken_KeyInfo_SetChunkSize(GWEN_CRYPTTOKEN_KEYINFO *ki,
00264 int i);
00265
00266 GWEN_CRYPTTOKEN_CRYPTALGO
00267 GWEN_CryptToken_KeyInfo_GetCryptAlgo(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00268 void GWEN_CryptToken_KeyInfo_SetCryptAlgo(GWEN_CRYPTTOKEN_KEYINFO *ki,
00269 GWEN_CRYPTTOKEN_CRYPTALGO a);
00270
00271 GWEN_TYPE_UINT32
00272 GWEN_CryptToken_KeyInfo_GetKeyFlags(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00273 void GWEN_CryptToken_KeyInfo_SetKeyFlags(GWEN_CRYPTTOKEN_KEYINFO *ki,
00274 GWEN_TYPE_UINT32 fl);
00275 void GWEN_CryptToken_KeyInfo_AddKeyFlags(GWEN_CRYPTTOKEN_KEYINFO *ki,
00276 GWEN_TYPE_UINT32 fl);
00277 void GWEN_CryptToken_KeyInfo_SubKeyFlags(GWEN_CRYPTTOKEN_KEYINFO *ki,
00278 GWEN_TYPE_UINT32 fl);
00279
00280 const char*
00281 GWEN_CryptToken_KeyInfo_GetDescription(const GWEN_CRYPTTOKEN_KEYINFO *ki);
00282 void GWEN_CryptToken_KeyInfo_SetDescription(GWEN_CRYPTTOKEN_KEYINFO *ki,
00283 const char *s);
00284
00295 GWEN_CRYPTTOKEN_CONTEXT *GWEN_CryptToken_Context_new();
00296 void GWEN_CryptToken_Context_free(GWEN_CRYPTTOKEN_CONTEXT *ctx);
00297 GWEN_CRYPTTOKEN_CONTEXT*
00298 GWEN_CryptToken_Context_dup(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00299 GWEN_CRYPTTOKEN_CONTEXT *GWEN_CryptToken_Context_fromDb(GWEN_DB_NODE *db);
00300 void GWEN_CryptToken_Context_toDb(const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00301 GWEN_DB_NODE *db);
00302 GWEN_CRYPTTOKEN_CONTEXT *GWEN_CryptToken_Context_fromXml(GWEN_XMLNODE *n);
00303
00304
00305 GWEN_TYPE_UINT32
00306 GWEN_CryptToken_Context_GetId(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00307 void GWEN_CryptToken_Context_SetId(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00308 GWEN_TYPE_UINT32 id);
00309
00310 const char*
00311 GWEN_CryptToken_Context_GetDescription(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00312 void GWEN_CryptToken_Context_SetDescription(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00313 const char *s);
00314
00315 const GWEN_CRYPTTOKEN_KEYINFO*
00316 GWEN_CryptToken_Context_GetSignKeyInfo(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00317 void
00318 GWEN_CryptToken_Context_SetSignKeyInfo(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00319 const GWEN_CRYPTTOKEN_KEYINFO *ki);
00320
00321 const GWEN_CRYPTTOKEN_KEYINFO*
00322 GWEN_CryptToken_Context_GetVerifyKeyInfo(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00323 void
00324 GWEN_CryptToken_Context_SetVerifyKeyInfo(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00325 const GWEN_CRYPTTOKEN_KEYINFO *ki);
00326
00327 const GWEN_CRYPTTOKEN_KEYINFO*
00328 GWEN_CryptToken_Context_GetEncryptKeyInfo(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00329 void
00330 GWEN_CryptToken_Context_SetEncryptKeyInfo(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00331 const GWEN_CRYPTTOKEN_KEYINFO *ki);
00332
00333 const GWEN_CRYPTTOKEN_KEYINFO*
00334 GWEN_CryptToken_Context_GetDecryptKeyInfo(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00335 void
00336 GWEN_CryptToken_Context_SetDecryptKeyInfo(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00337 const GWEN_CRYPTTOKEN_KEYINFO *ki);
00338
00339 const GWEN_CRYPTTOKEN_SIGNINFO*
00340 GWEN_CryptToken_GetSignInfo(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00341 void GWEN_CryptToken_SetSignInfo(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00342 const GWEN_CRYPTTOKEN_SIGNINFO *si);
00343
00344 const GWEN_CRYPTTOKEN_CRYPTINFO*
00345 GWEN_CryptToken_GetCryptInfo(const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00346 void GWEN_CryptToken_SetCryptInfo(GWEN_CRYPTTOKEN_CONTEXT *ctx,
00347 const GWEN_CRYPTTOKEN_CRYPTINFO *ci);
00358
00359
00360
00361 typedef int (*GWEN_CRYPTTOKEN_OPEN_FN)(GWEN_CRYPTTOKEN *ct,
00362 int manage);
00363 typedef int (*GWEN_CRYPTTOKEN_CLOSE_FN)(GWEN_CRYPTTOKEN *ct);
00364
00365 typedef int (*GWEN_CRYPTTOKEN_SIGN_FN)(GWEN_CRYPTTOKEN *ct,
00366 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00367 GWEN_BUFFER *src,
00368 GWEN_BUFFER *dst);
00369 typedef int (*GWEN_CRYPTTOKEN_VERIFY_FN)(GWEN_CRYPTTOKEN *ct,
00370 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00371 GWEN_BUFFER *src,
00372 GWEN_BUFFER *dst);
00373 typedef int (*GWEN_CRYPTTOKEN_ENCRYPT_FN)(GWEN_CRYPTTOKEN *ct,
00374 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00375 GWEN_BUFFER *src,
00376 GWEN_BUFFER *dst);
00377 typedef int (*GWEN_CRYPTTOKEN_DECRYPT_FN)(GWEN_CRYPTTOKEN *ct,
00378 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00379 GWEN_BUFFER *src,
00380 GWEN_BUFFER *dst);
00381 typedef int (*GWEN_CRYPTTOKEN_READKEY_FN)(GWEN_CRYPTTOKEN *ct,
00382 GWEN_TYPE_UINT32 kid,
00383 GWEN_CRYPTKEY **key);
00384 typedef int (*GWEN_CRYPTTOKEN_WRITEKEY_FN)(GWEN_CRYPTTOKEN *ct,
00385 GWEN_TYPE_UINT32 kid,
00386 const GWEN_CRYPTKEY *key);
00387 typedef int (*GWEN_CRYPTTOKEN_GENERATEKEY_FN)(GWEN_CRYPTTOKEN *ct,
00388 const GWEN_CRYPTTOKEN_KEYINFO *ki,
00389 GWEN_CRYPTKEY **key);
00390
00391 typedef int (*GWEN_CRYPTTOKEN_GETSIGNSEQ_FN)(GWEN_CRYPTTOKEN *ct,
00392 GWEN_TYPE_UINT32 kid,
00393 GWEN_TYPE_UINT32 *signSeq);
00394
00395 typedef int
00396 (*GWEN_CRYPTTOKEN_ADDCONTEXT_FN)(GWEN_CRYPTTOKEN *ct,
00397 const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00398 typedef int
00399 (*GWEN_CRYPTTOKEN_FILLCONTEXTLIST_FN)(GWEN_CRYPTTOKEN *ct,
00400 GWEN_CRYPTTOKEN_CONTEXT_LIST *l);
00401 typedef int
00402 (*GWEN_CRYPTTOKEN_FILLSIGNINFOLIST_FN)(GWEN_CRYPTTOKEN *ct,
00403 GWEN_CRYPTTOKEN_SIGNINFO_LIST *l);
00404
00405 typedef int
00406 (*GWEN_CRYPTTOKEN_FILLCRYPTINFOLIST_FN)(GWEN_CRYPTTOKEN *ct,
00407 GWEN_CRYPTTOKEN_CRYPTINFO_LIST *l);
00408
00409 typedef int
00410 (*GWEN_CRYPTTOKEN_FILLKEYINFOLIST_FN)(GWEN_CRYPTTOKEN *ct,
00411 GWEN_CRYPTTOKEN_KEYINFO_LIST *l);
00412
00413
00414
00415
00416 GWEN_CRYPTTOKEN *GWEN_CryptToken_new(GWEN_PLUGIN_MANAGER *pm,
00417 GWEN_CRYPTTOKEN_DEVICE devType,
00418 const char *typeName,
00419 const char *subTypeName,
00420 const char *name);
00421 void GWEN_CryptToken_free(GWEN_CRYPTTOKEN *ct);
00422
00423 GWEN_CRYPTTOKEN *GWEN_CryptToken_fromXml(GWEN_PLUGIN_MANAGER *pm,
00424 GWEN_CRYPTTOKEN_DEVICE devType,
00425 GWEN_XMLNODE *n);
00426
00427 int GWEN_CryptToken_ReadXml(GWEN_CRYPTTOKEN *ct, GWEN_XMLNODE *n);
00428
00429 GWEN_PLUGIN_MANAGER*
00430 GWEN_CryptToken_GetCryptManager(const GWEN_CRYPTTOKEN *ct);
00431 const char *GWEN_CryptToken_GetTokenName(const GWEN_CRYPTTOKEN *ct);
00432 void GWEN_CryptToken_SetTokenName(GWEN_CRYPTTOKEN *ct, const char *s);
00433
00434 const char *GWEN_CryptToken_GetTokenType(const GWEN_CRYPTTOKEN *ct);
00435 const char *GWEN_CryptToken_GetTokenSubType(const GWEN_CRYPTTOKEN *ct);
00436 GWEN_CRYPTTOKEN_DEVICE
00437 GWEN_CryptToken_GetDeviceType(const GWEN_CRYPTTOKEN *ct);
00438
00439
00440 void GWEN_CryptToken_SetOpenFn(GWEN_CRYPTTOKEN *ct,
00441 GWEN_CRYPTTOKEN_OPEN_FN fn);
00442 void GWEN_CryptToken_SetCloseFn(GWEN_CRYPTTOKEN *ct,
00443 GWEN_CRYPTTOKEN_CLOSE_FN fn);
00444 void GWEN_CryptToken_SetSignFn(GWEN_CRYPTTOKEN *ct,
00445 GWEN_CRYPTTOKEN_SIGN_FN fn);
00446 void GWEN_CryptToken_SetVerifyFn(GWEN_CRYPTTOKEN *ct,
00447 GWEN_CRYPTTOKEN_VERIFY_FN fn);
00448 void GWEN_CryptToken_SetEncryptFn(GWEN_CRYPTTOKEN *ct,
00449 GWEN_CRYPTTOKEN_ENCRYPT_FN fn);
00450 void GWEN_CryptToken_SetDecryptFn(GWEN_CRYPTTOKEN *ct,
00451 GWEN_CRYPTTOKEN_DECRYPT_FN fn);
00452 void GWEN_CryptToken_SetReadKeyFn(GWEN_CRYPTTOKEN *ct,
00453 GWEN_CRYPTTOKEN_READKEY_FN fn);
00454 void GWEN_CryptToken_SetWriteKeyFn(GWEN_CRYPTTOKEN *ct,
00455 GWEN_CRYPTTOKEN_WRITEKEY_FN fn);
00456 void GWEN_CryptToken_SetGenerateKeyFn(GWEN_CRYPTTOKEN *ct,
00457 GWEN_CRYPTTOKEN_GENERATEKEY_FN fn);
00458 void GWEN_CryptToken_SetAddContextFn(GWEN_CRYPTTOKEN *ct,
00459 GWEN_CRYPTTOKEN_ADDCONTEXT_FN fn);
00460 void GWEN_CryptToken_SetFillContextListFn(GWEN_CRYPTTOKEN *ct,
00461 GWEN_CRYPTTOKEN_FILLCONTEXTLIST_FN fn);
00462 void GWEN_CryptToken_SetFillSignInfoListFn(GWEN_CRYPTTOKEN *ct,
00463 GWEN_CRYPTTOKEN_FILLSIGNINFOLIST_FN fn);
00464 void GWEN_CryptToken_SetFillCryptInfoListFn(GWEN_CRYPTTOKEN *ct,
00465 GWEN_CRYPTTOKEN_FILLCRYPTINFOLIST_FN fn);
00466 void GWEN_CryptToken_SetFillKeyInfoListFn(GWEN_CRYPTTOKEN *ct,
00467 GWEN_CRYPTTOKEN_FILLKEYINFOLIST_FN fn);
00468 void GWEN_CryptToken_SetGetSignSeqFn(GWEN_CRYPTTOKEN *ct,
00469 GWEN_CRYPTTOKEN_GETSIGNSEQ_FN fn);
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479 int GWEN_CryptToken_Open(GWEN_CRYPTTOKEN *ct, int manage);
00480
00481 int GWEN_CryptToken_Close(GWEN_CRYPTTOKEN *ct);
00482
00483 int GWEN_CryptToken_Sign(GWEN_CRYPTTOKEN *ct,
00484 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00485 GWEN_BUFFER *src,
00486 GWEN_BUFFER *dst);
00487 int GWEN_CryptToken_Verify(GWEN_CRYPTTOKEN *ct,
00488 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00489 GWEN_BUFFER *src,
00490 GWEN_BUFFER *dst);
00491 int GWEN_CryptToken_Encrypt(GWEN_CRYPTTOKEN *ct,
00492 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00493 GWEN_BUFFER *src,
00494 GWEN_BUFFER *dst);
00495 int GWEN_CryptToken_Decrypt(GWEN_CRYPTTOKEN *ct,
00496 const GWEN_CRYPTTOKEN_CONTEXT *ctx,
00497 GWEN_BUFFER *src,
00498 GWEN_BUFFER *dst);
00499 int GWEN_CryptToken_ReadKey(GWEN_CRYPTTOKEN *ct,
00500 GWEN_TYPE_UINT32 kid,
00501 GWEN_CRYPTKEY **key);
00502 int GWEN_CryptToken_WriteKey(GWEN_CRYPTTOKEN *ct,
00503 GWEN_TYPE_UINT32 kid,
00504 const GWEN_CRYPTKEY *key);
00505 int GWEN_CryptToken_GenerateKey(GWEN_CRYPTTOKEN *ct,
00506 const GWEN_CRYPTTOKEN_KEYINFO *ki,
00507 GWEN_CRYPTKEY **key);
00508
00509 int GWEN_CryptToken_GetSignSeq(GWEN_CRYPTTOKEN *ct,
00510 GWEN_TYPE_UINT32 kid,
00511 GWEN_TYPE_UINT32 *signSeq);
00512
00513 int GWEN_CryptToken_AddContext(GWEN_CRYPTTOKEN *ct,
00514 const GWEN_CRYPTTOKEN_CONTEXT *ctx);
00515 int GWEN_CryptToken_FillContextList(GWEN_CRYPTTOKEN *ct,
00516 GWEN_CRYPTTOKEN_CONTEXT_LIST *l);
00517 int GWEN_CryptToken_FillSignInfoList(GWEN_CRYPTTOKEN *ct,
00518 GWEN_CRYPTTOKEN_SIGNINFO_LIST *l);
00519
00520 int GWEN_CryptToken_FillCryptInfoList(GWEN_CRYPTTOKEN *ct,
00521 GWEN_CRYPTTOKEN_CRYPTINFO_LIST *l);
00522
00523 int GWEN_CryptToken_FillKeyInfoList(GWEN_CRYPTTOKEN *ct,
00524 GWEN_CRYPTTOKEN_KEYINFO_LIST *l);
00525
00526
00527
00528
00529 const GWEN_CRYPTTOKEN_SIGNINFO*
00530 GWEN_CryptToken_GetSignInfoByAlgos(GWEN_CRYPTTOKEN *ct,
00531 GWEN_CRYPTTOKEN_HASHALGO hashAlgo,
00532 GWEN_CRYPTTOKEN_PADDALGO paddAlgo);
00533
00534 const GWEN_CRYPTTOKEN_CRYPTINFO*
00535 GWEN_CryptToken_GetCryptInfoByAlgos(GWEN_CRYPTTOKEN *ct,
00536 GWEN_CRYPTTOKEN_CRYPTALGO cryptAlgo,
00537 GWEN_CRYPTTOKEN_PADDALGO paddAlgo);
00538
00539 const GWEN_CRYPTTOKEN_KEYINFO*
00540 GWEN_CryptToken_GetKeyInfoById(GWEN_CRYPTTOKEN *ct,
00541 GWEN_TYPE_UINT32 kid);
00542
00543 const GWEN_CRYPTTOKEN_CONTEXT*
00544 GWEN_CryptToken_GetContextById(GWEN_CRYPTTOKEN *ct,
00545 GWEN_TYPE_UINT32 id);
00546
00547
00548 int GWEN_CryptToken_Hash(GWEN_CRYPTTOKEN_HASHALGO algo,
00549 const char *src,
00550 unsigned int slen,
00551 GWEN_BUFFER *dstBuf);
00552
00553 int GWEN_CryptToken_Padd(GWEN_CRYPTTOKEN_PADDALGO algo,
00554 unsigned int dstSize,
00555 GWEN_BUFFER *buf);
00556
00557 int GWEN_CryptToken_Unpadd(GWEN_CRYPTTOKEN_PADDALGO algo,
00558 GWEN_BUFFER *buf);
00559
00560
00570
00571 typedef GWEN_CRYPTTOKEN*
00572 (*GWEN_CRYPTTOKEN_PLUGIN_CREATETOKEN_FN)(GWEN_PLUGIN *pl,
00573 const char *subTypeName,
00574 const char *name);
00575
00576 typedef int
00577 (*GWEN_CRYPTTOKEN_PLUGIN_CHECKTOKEN_FN)(GWEN_PLUGIN *pl,
00578 GWEN_BUFFER *subTypeName,
00579 GWEN_BUFFER *name);
00580
00581
00582
00583 GWEN_PLUGIN *GWEN_CryptToken_Plugin_new(GWEN_PLUGIN_MANAGER *mgr,
00584 GWEN_CRYPTTOKEN_DEVICE devType,
00585 const char *typeName,
00586 const char *fileName);
00587
00588
00589 GWEN_CRYPTTOKEN*
00590 GWEN_CryptToken_Plugin_CreateToken(GWEN_PLUGIN *pl,
00591 const char *subTypeName,
00592 const char *name);
00593
00614 int GWEN_CryptToken_Plugin_CheckToken(GWEN_PLUGIN *pl,
00615 GWEN_BUFFER *subTypeName,
00616 GWEN_BUFFER *name);
00617
00618
00619 GWEN_PLUGIN_MANAGER*
00620 GWEN_CryptToken_Plugin_GetCryptManager(const GWEN_PLUGIN *pl);
00621
00622
00623 GWEN_CRYPTTOKEN_DEVICE
00624 GWEN_CryptToken_Plugin_GetDeviceType(const GWEN_PLUGIN *pl);
00625
00626
00627 void GWEN_CryptToken_Plugin_SetCreateTokenFn(GWEN_PLUGIN *pl,
00628 GWEN_CRYPTTOKEN_PLUGIN_CREATETOKEN_FN fn);
00629 void GWEN_CryptToken_Plugin_SetCheckTokenFn(GWEN_PLUGIN *pl,
00630 GWEN_CRYPTTOKEN_PLUGIN_CHECKTOKEN_FN fn);
00631
00632
00641 typedef int (*GWEN_CRYPTMANAGER_GETPIN_FN)(GWEN_PLUGIN_MANAGER *mgr,
00642 GWEN_CRYPTTOKEN *token,
00643 GWEN_CRYPTTOKEN_PINTYPE pt,
00644 GWEN_CRYPTTOKEN_PINENCODING *pe,
00645 unsigned char *buffer,
00646 unsigned int minLength,
00647 unsigned int maxLength,
00648 unsigned int *pinLength);
00649
00650 typedef int (*GWEN_CRYPTMANAGER_BEGIN_ENTER_PIN_FN)(GWEN_PLUGIN_MANAGER *mgr,
00651 GWEN_CRYPTTOKEN *token,
00652 GWEN_CRYPTTOKEN_PINTYPE pt);
00653 typedef int (*GWEN_CRYPTMANAGER_END_ENTER_PIN_FN)(GWEN_PLUGIN_MANAGER *mgr,
00654 GWEN_CRYPTTOKEN *token,
00655 GWEN_CRYPTTOKEN_PINTYPE pt,
00656 int ok);
00657 typedef int (*GWEN_CRYPTMANAGER_INSERT_TOKEN_FN)(GWEN_PLUGIN_MANAGER *mgr,
00658 GWEN_CRYPTTOKEN *token);
00659 typedef int (*GWEN_CRYPTMANAGER_INSERT_CORRECT_TOKEN_FN)(GWEN_PLUGIN_MANAGER *mgr,
00660 GWEN_CRYPTTOKEN *token);
00661 typedef int (*GWEN_CRYPTMANAGER_SHOW_MESSAGE_FN)(GWEN_PLUGIN_MANAGER *mgr,
00662 GWEN_CRYPTTOKEN *token,
00663 const char *msg);
00664
00665
00666
00667
00668 GWEN_PLUGIN_MANAGER *GWEN_CryptManager_new();
00669
00670
00671 void GWEN_CryptManager_SetGetPinFn(GWEN_PLUGIN_MANAGER *cm,
00672 GWEN_CRYPTMANAGER_GETPIN_FN fn);
00673
00674 void GWEN_CryptManager_SetBeginEnterPinFn(GWEN_PLUGIN_MANAGER *cm,
00675 GWEN_CRYPTMANAGER_BEGIN_ENTER_PIN_FN fn);
00676 void GWEN_CryptManager_SetEndEnterPinFn(GWEN_PLUGIN_MANAGER *cm,
00677 GWEN_CRYPTMANAGER_END_ENTER_PIN_FN fn);
00678
00679 void GWEN_CryptManager_SetInsertTokenFn(GWEN_PLUGIN_MANAGER *cm,
00680 GWEN_CRYPTMANAGER_INSERT_TOKEN_FN fn);
00681 void GWEN_CryptManager_SetInsertCorrectTokenFn(GWEN_PLUGIN_MANAGER *cm,
00682 GWEN_CRYPTMANAGER_INSERT_CORRECT_TOKEN_FN fn);
00683 void GWEN_CryptManager_SetShowMessageFn(GWEN_PLUGIN_MANAGER *cm,
00684 GWEN_CRYPTMANAGER_SHOW_MESSAGE_FN fn);
00685
00686
00687
00688 int GWEN_CryptManager_GetPin(GWEN_PLUGIN_MANAGER *cm,
00689 GWEN_CRYPTTOKEN *token,
00690 GWEN_CRYPTTOKEN_PINTYPE pt,
00691 GWEN_CRYPTTOKEN_PINENCODING *pe,
00692 unsigned char *buffer,
00693 unsigned int minLength,
00694 unsigned int maxLength,
00695 unsigned int *pinLength);
00696
00697 int GWEN_CryptManager_BeginEnterPin(GWEN_PLUGIN_MANAGER *cm,
00698 GWEN_CRYPTTOKEN *token,
00699 GWEN_CRYPTTOKEN_PINTYPE pt);
00700 int GWEN_CryptManager_EndEnterPin(GWEN_PLUGIN_MANAGER *cm,
00701 GWEN_CRYPTTOKEN *token,
00702 GWEN_CRYPTTOKEN_PINTYPE pt,
00703 int ok);
00704 int GWEN_CryptManager_InsertToken(GWEN_PLUGIN_MANAGER *cm,
00705 GWEN_CRYPTTOKEN *token);
00706 int GWEN_CryptManager_InsertCorrectToken(GWEN_PLUGIN_MANAGER *cm,
00707 GWEN_CRYPTTOKEN *token);
00708
00709 int GWEN_CryptManager_ShowMessage(GWEN_PLUGIN_MANAGER *cm,
00710 GWEN_CRYPTTOKEN *token,
00711 const char *msg);
00717 #endif
00718
00719