crypt.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile: crypt.h,v $
00003  -------------------
00004  cvs         : $Id: crypt.h,v 1.24 2005/09/29 03:21:55 aquamaniac Exp $
00005  begin       : Thu Nov 06 2003
00006  copyright   : (C) 2003 by Martin Preuss
00007  email       : martin@libchipcard.de
00008 
00009  ***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or         *
00012  *   modify it under the terms of the GNU Lesser General Public            *
00013  *   License as published by the Free Software Foundation; either          *
00014  *   version 2.1 of the License, or (at your option) any later version.    *
00015  *                                                                         *
00016  *   This library is distributed in the hope that it will be useful,       *
00017  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00018  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00019  *   Lesser General Public License for more details.                       *
00020  *                                                                         *
00021  *   You should have received a copy of the GNU Lesser General Public      *
00022  *   License along with this library; if not, write to the Free Software   *
00023  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
00024  *   MA  02111-1307  USA                                                   *
00025  *                                                                         *
00026  ***************************************************************************/
00027 
00028 
00029 #ifndef GWENHYWFAR_CRYPT_H
00030 #define GWENHYWFAR_CRYPT_H
00031 
00032 
00033 #include <gwenhywfar/error.h>
00034 #include <gwenhywfar/buffer.h>
00035 #include <gwenhywfar/db.h>
00036 #include <gwenhywfar/keyspec.h>
00037 #include <gwenhywfar/inherit.h>
00038 #include <gwenhywfar/list2.h>
00039 
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043 
00044 #define GWEN_CRYPT_ERROR_TYPE "Crypt"
00045 #define GWEN_CRYPT_ERROR_ALREADY_REGISTERED 1
00046 #define GWEN_CRYPT_ERROR_NOT_REGISTERED     2
00047 #define GWEN_CRYPT_ERROR_BAD_SIZE           3
00048 #define GWEN_CRYPT_ERROR_BUFFER_FULL        4
00049 #define GWEN_CRYPT_ERROR_ENCRYPT            5
00050 #define GWEN_CRYPT_ERROR_DECRYPT            6
00051 #define GWEN_CRYPT_ERROR_SIGN               7
00052 #define GWEN_CRYPT_ERROR_VERIFY             8
00053 #define GWEN_CRYPT_ERROR_UNSUPPORTED        9
00054 #define GWEN_CRYPT_ERROR_SSL                10
00055 #define GWEN_CRYPT_ERROR_GENERIC            11
00056 
00057 
00062 #define GWEN_CRYPT_FLAG_DISABLE_SMALLER_SIGNATURE 0x00000001
00063 
00064 int GWEN_Crypt_IsAvailable();
00065 
00066 
00075 GWENHYWFAR_API
00076   GWEN_ERRORCODE GWEN_CryptImpl_Init();
00077 
00083 GWENHYWFAR_API
00084   GWEN_ERRORCODE GWEN_CryptImpl_Fini();
00088 typedef struct GWEN_CRYPTKEY GWEN_CRYPTKEY;
00089 
00090 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWENHYWFAR_API)
00091 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWEN_CryptKey, GWENHYWFAR_API)
00092 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWEN_CryptKey, GWENHYWFAR_API)
00093 void GWEN_CryptKey_List2_freeAll(GWEN_CRYPTKEY_LIST2 *stl);
00094 
00095 
00100 typedef GWEN_CRYPTKEY* (*GWEN_CRYPTKEY_DUP_FN)(const GWEN_CRYPTKEY *key);
00101 
00102 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_ENCRYPT_FN)(const GWEN_CRYPTKEY *key,
00103                                                    GWEN_BUFFER *src,
00104                                                    GWEN_BUFFER *dst);
00105 
00106 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_DECRYPT_FN)(const GWEN_CRYPTKEY *key,
00107                                                    GWEN_BUFFER *src,
00108                                                    GWEN_BUFFER *dst);
00109 
00110 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_SIGN_FN)(const GWEN_CRYPTKEY *key,
00111                                                 GWEN_BUFFER *src,
00112                                                 GWEN_BUFFER *dst);
00113 
00114 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_VERIFY_FN)(const GWEN_CRYPTKEY *key,
00115                                                   GWEN_BUFFER *src,
00116                                                   GWEN_BUFFER *dst);
00117 
00118 typedef unsigned int
00119     (*GWEN_CRYPTKEY_GETCHUNKSIZE_FN)(const GWEN_CRYPTKEY *key);
00120 
00121 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_FROMDB_FN)(GWEN_CRYPTKEY *key,
00122                                                   GWEN_DB_NODE *db);
00123 
00124 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_TODB_FN)(const GWEN_CRYPTKEY *key,
00125                                                 GWEN_DB_NODE *db,
00126                                                 int pub);
00127 
00128 typedef void (*GWEN_CRYPTKEY_FREEKEYDATA_FN)(GWEN_CRYPTKEY *key);
00129 
00130 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_GENERATEKEY_FN)(GWEN_CRYPTKEY *key,
00131                                                        unsigned int keylength);
00132 
00133 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_OPEN_FN)(GWEN_CRYPTKEY *key);
00134 
00135 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_CLOSE_FN)(GWEN_CRYPTKEY *key);
00143 GWENHYWFAR_API
00144   GWEN_CRYPTKEY *GWEN_CryptKey_new();
00145 
00146 
00147 GWENHYWFAR_API
00148   GWEN_CRYPTKEY *GWEN_CryptKey_Factory(const char *t);
00149 
00150 GWENHYWFAR_API
00151   void GWEN_CryptKey_free(GWEN_CRYPTKEY *key);
00152 
00153 GWENHYWFAR_API
00154   GWEN_CRYPTKEY *GWEN_CryptKey_dup(const GWEN_CRYPTKEY *key);
00155 
00156 GWENHYWFAR_API
00157   int GWEN_CryptKey_IsPublic(const GWEN_CRYPTKEY *key);
00158 GWENHYWFAR_API
00159   void GWEN_CryptKey_SetPublic(GWEN_CRYPTKEY *key, int i);
00160 
00161 GWENHYWFAR_API
00162   GWEN_ERRORCODE GWEN_CryptKey_Encrypt(const GWEN_CRYPTKEY *key,
00163                                        GWEN_BUFFER *src,
00164                                        GWEN_BUFFER *dst);
00165 
00166 GWENHYWFAR_API
00167   GWEN_ERRORCODE GWEN_CryptKey_Decrypt(const GWEN_CRYPTKEY *key,
00168                                        GWEN_BUFFER *src,
00169                                        GWEN_BUFFER *dst);
00170 
00171 GWENHYWFAR_API
00172   GWEN_ERRORCODE GWEN_CryptKey_Sign(const GWEN_CRYPTKEY *key,
00173                                     GWEN_BUFFER *src,
00174                                     GWEN_BUFFER *dst);
00175 
00176 GWENHYWFAR_API
00177   GWEN_ERRORCODE GWEN_CryptKey_Verify(const GWEN_CRYPTKEY *key,
00178                                       GWEN_BUFFER *src,
00179                                       GWEN_BUFFER *dst);
00180 
00181 GWENHYWFAR_API
00182 unsigned int GWEN_CryptKey_GetChunkSize(const GWEN_CRYPTKEY *key);
00183 
00184 GWENHYWFAR_API
00185   GWEN_CRYPTKEY *GWEN_CryptKey_FromDb(GWEN_DB_NODE *db);
00186 
00187 GWENHYWFAR_API
00188   GWEN_ERRORCODE GWEN_CryptKey_ToDb(const GWEN_CRYPTKEY *key,
00189                                     GWEN_DB_NODE *db,
00190                                     int pub);
00191 
00192 GWENHYWFAR_API
00193 GWEN_TYPE_UINT32 GWEN_CryptKey_GetFlags(const GWEN_CRYPTKEY *key);
00194 GWENHYWFAR_API
00195 void GWEN_CryptKey_SetFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00196 GWENHYWFAR_API
00197 void GWEN_CryptKey_AddFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00198 GWENHYWFAR_API
00199 void GWEN_CryptKey_SubFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00200 
00201 
00208 GWENHYWFAR_API
00209   GWEN_ERRORCODE GWEN_CryptKey_SetData(GWEN_CRYPTKEY *key,
00210                                        const char *buffer,
00211                                        unsigned int bsize);
00212 
00217 int GWEN_CryptKey_FromPassword(const char *password,
00218                                unsigned char *buffer,
00219                                unsigned int bsize);
00220 
00232 int GWEN_CryptKey_FromPasswordSSL(const char *password,
00233                                   unsigned char *buffer,
00234                                   unsigned int bsize);
00235 
00242 GWEN_ERRORCODE GWEN_CryptKey_GetData(GWEN_CRYPTKEY *key,
00243                                      char *buffer,
00244                                      unsigned int *bsize);
00245 
00246 
00247 GWENHYWFAR_API
00248   GWEN_ERRORCODE GWEN_CryptKey_Generate(GWEN_CRYPTKEY *key,
00249                                         unsigned int keylength);
00250 
00251 GWENHYWFAR_API
00252   GWEN_ERRORCODE GWEN_CryptKey_Open(GWEN_CRYPTKEY *key);
00253 
00254 GWENHYWFAR_API
00255   GWEN_ERRORCODE GWEN_CryptKey_Close(GWEN_CRYPTKEY *key);
00256 
00261 GWENHYWFAR_API
00262   const GWEN_KEYSPEC *GWEN_CryptKey_GetKeySpec(const GWEN_CRYPTKEY *key);
00263 
00264 GWENHYWFAR_API
00265 void GWEN_CryptKey_SetKeySpec(GWEN_CRYPTKEY *key,
00266                               const GWEN_KEYSPEC *cks);
00267 
00273 GWENHYWFAR_API
00274 int GWEN_CryptKey_GetStatus(const GWEN_CRYPTKEY *key);
00275 GWENHYWFAR_API
00276 void GWEN_CryptKey_SetStatus(GWEN_CRYPTKEY *key, int i);
00277 
00278 
00279 GWENHYWFAR_API
00280   const char *GWEN_CryptKey_GetKeyType(const GWEN_CRYPTKEY *key);
00281 GWENHYWFAR_API
00282   void GWEN_CryptKey_SetKeyType(GWEN_CRYPTKEY *key,
00283                                 const char *s);
00284 
00285 GWENHYWFAR_API
00286   const char *GWEN_CryptKey_GetKeyName(const GWEN_CRYPTKEY *key);
00287 GWENHYWFAR_API
00288   void GWEN_CryptKey_SetKeyName(GWEN_CRYPTKEY *key,
00289                                 const char *s);
00290 
00291 GWENHYWFAR_API
00292   const char *GWEN_CryptKey_GetOwner(const GWEN_CRYPTKEY *key);
00293 GWENHYWFAR_API
00294   void GWEN_CryptKey_SetOwner(GWEN_CRYPTKEY *key,
00295                               const char *s);
00296 GWENHYWFAR_API
00297   unsigned int GWEN_CryptKey_GetNumber(const GWEN_CRYPTKEY *key);
00298 GWENHYWFAR_API
00299   void GWEN_CryptKey_SetNumber(GWEN_CRYPTKEY *key,
00300                                unsigned int i);
00301 GWENHYWFAR_API
00302   unsigned int GWEN_CryptKey_GetVersion(const GWEN_CRYPTKEY *key);
00303 GWENHYWFAR_API
00304   void GWEN_CryptKey_SetVersion(GWEN_CRYPTKEY *key,
00305                                 unsigned int i);
00306 
00307 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00308 
00315 GWENHYWFAR_API
00316   void *GWEN_CryptKey_GetKeyData(const GWEN_CRYPTKEY *key);
00317 
00325 GWENHYWFAR_API
00326   void GWEN_CryptKey_SetKeyData(GWEN_CRYPTKEY *key,
00327                                 void *kd);
00328 #endif
00329 
00330 GWENHYWFAR_API
00331   int GWEN_CryptKey_GetOpenCount(const GWEN_CRYPTKEY *key);
00332 
00333 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00334 GWENHYWFAR_API
00335   void GWEN_CryptKey_IncrementOpenCount(GWEN_CRYPTKEY *key);
00336 GWENHYWFAR_API
00337   void GWEN_CryptKey_DecrementOpenCount(GWEN_CRYPTKEY *key);
00338 #endif
00339 
00344 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00345 GWENHYWFAR_API
00346   void GWEN_CryptKey_SetEncryptFn(GWEN_CRYPTKEY *key,
00347                                   GWEN_CRYPTKEY_ENCRYPT_FN encryptFn);
00348 GWENHYWFAR_API
00349   void GWEN_CryptKey_SetDecryptFn(GWEN_CRYPTKEY *key,
00350                                   GWEN_CRYPTKEY_DECRYPT_FN decryptFn);
00351 GWENHYWFAR_API
00352   void GWEN_CryptKey_SetSignFn(GWEN_CRYPTKEY *key,
00353                                GWEN_CRYPTKEY_SIGN_FN signFn);
00354 GWENHYWFAR_API
00355   void GWEN_CryptKey_SetVerifyFn(GWEN_CRYPTKEY *key,
00356                                  GWEN_CRYPTKEY_VERIFY_FN verifyFn);
00357 GWENHYWFAR_API
00358   void GWEN_CryptKey_SetGetChunkSizeFn(GWEN_CRYPTKEY *key,
00359                                        GWEN_CRYPTKEY_GETCHUNKSIZE_FN getChunkSizeFn);
00360 GWENHYWFAR_API
00361   void GWEN_CryptKey_SetFromDbFn(GWEN_CRYPTKEY *key,
00362                                  GWEN_CRYPTKEY_FROMDB_FN fromDbFn);
00363 GWENHYWFAR_API
00364   void GWEN_CryptKey_SetToDbFn(GWEN_CRYPTKEY *key,
00365                                GWEN_CRYPTKEY_TODB_FN toDbFn);
00366 GWENHYWFAR_API
00367   void GWEN_CryptKey_SetGenerateKeyFn(GWEN_CRYPTKEY *key,
00368                                       GWEN_CRYPTKEY_GENERATEKEY_FN generateKeyFn);
00369 GWENHYWFAR_API
00370   void GWEN_CryptKey_SetFreeKeyDataFn(GWEN_CRYPTKEY *key,
00371                                       GWEN_CRYPTKEY_FREEKEYDATA_FN freeKeyDataFn);
00372 
00373 GWENHYWFAR_API
00374   void GWEN_CryptKey_SetOpenFn(GWEN_CRYPTKEY *key,
00375                                GWEN_CRYPTKEY_OPEN_FN openKeyFn);
00376 GWENHYWFAR_API
00377   void GWEN_CryptKey_SetCloseFn(GWEN_CRYPTKEY *key,
00378                                 GWEN_CRYPTKEY_CLOSE_FN closeKeyFn);
00379 GWENHYWFAR_API
00380   void GWEN_CryptKey_SetDupFn(GWEN_CRYPTKEY *key,
00381                               GWEN_CRYPTKEY_DUP_FN dupFn);
00382 #endif
00383 
00389   /* _______________________________________________________________________
00390    * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
00391    *                           Crypt provider (plugin)
00392    * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
00393    */
00394 
00395 typedef struct GWEN_CRYPTKEY_PROVIDER GWEN_CRYPTKEY_PROVIDER;
00396 
00397 typedef GWEN_CRYPTKEY*
00398     (*GWEN_CRYPTPROVIDER_NEWKEY_FN)(GWEN_CRYPTKEY_PROVIDER *pr);
00399 
00400 GWENHYWFAR_API
00401   GWEN_CRYPTKEY_PROVIDER *GWEN_CryptProvider_new();
00402 GWENHYWFAR_API
00403   void GWEN_CryptProvider_free(GWEN_CRYPTKEY_PROVIDER *pr);
00404 
00405 GWENHYWFAR_API
00406   void GWEN_CryptProvider_SetNewKeyFn(GWEN_CRYPTKEY_PROVIDER *pr,
00407                                       GWEN_CRYPTPROVIDER_NEWKEY_FN newKeyFn);
00408 GWENHYWFAR_API
00409   void GWEN_CryptProvider_SetName(GWEN_CRYPTKEY_PROVIDER *pr,
00410                                   const char *name);
00411 
00415 GWENHYWFAR_API
00416   GWEN_ERRORCODE GWEN_Crypt_RegisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00417 GWENHYWFAR_API
00418   GWEN_ERRORCODE GWEN_Crypt_UnregisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00419 
00420 GWENHYWFAR_API
00421   void GWEN_Crypt_UnregisterAllProviders();
00422 
00423 
00424 #ifdef __cplusplus
00425 }
00426 #endif
00427 
00428 
00429 
00430 #endif

Generated on Wed Jan 11 16:49:07 2006 for gwenhywfar by  doxygen 1.4.6