# 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