crypttoken.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile: crypttoken.h,v $
00003                              -------------------
00004     cvs         : $Id: crypttoken.h,v 1.3 2005/04/30 07:54:55 aquamaniac Exp $
00005     begin       : Wed Mar 16 2005
00006     copyright   : (C) 2005 by Martin Preuss
00007     email       : martin@libchipcard.de
00008 
00009  ***************************************************************************
00010  *          Please see toplevel file COPYING for license details           *
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   /* DES */
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  * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
00475  *                               Virtual Functions
00476  * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
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 /* GWEN_CRYPTTOKEN_H */
00718 
00719 

Generated on Thu Mar 16 00:13:22 2006 for gwenhywfar by  doxygen 1.4.6