crypt.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile$
00003  -------------------
00004  cvs         : $Id: crypt.h 985 2006-02-10 03:17:04Z aquamaniac $
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 
00045 #define GWEN_CRYPT_ERROR_TYPE "Crypt"
00046 #define GWEN_CRYPT_ERROR_ALREADY_REGISTERED 1
00047 #define GWEN_CRYPT_ERROR_NOT_REGISTERED     2
00048 #define GWEN_CRYPT_ERROR_BAD_SIZE           3
00049 #define GWEN_CRYPT_ERROR_BUFFER_FULL        4
00050 #define GWEN_CRYPT_ERROR_ENCRYPT            5
00051 #define GWEN_CRYPT_ERROR_DECRYPT            6
00052 #define GWEN_CRYPT_ERROR_SIGN               7
00053 #define GWEN_CRYPT_ERROR_VERIFY             8
00054 #define GWEN_CRYPT_ERROR_UNSUPPORTED        9
00055 #define GWEN_CRYPT_ERROR_SSL                10
00056 #define GWEN_CRYPT_ERROR_GENERIC            11
00057 
00058 
00063 #define GWEN_CRYPT_FLAG_DISABLE_SMALLER_SIGNATURE 0x00000001
00064 
00065 GWENHYWFAR_API
00066 int GWEN_Crypt_IsAvailable();
00067 
00068 
00069 typedef struct GWEN_CRYPTKEY GWEN_CRYPTKEY;
00070 
00071 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWENHYWFAR_API)
00072 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWEN_CryptKey, GWENHYWFAR_API)
00073 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWEN_CryptKey, GWENHYWFAR_API)
00074 
00075 GWENHYWFAR_API
00076 void GWEN_CryptKey_List2_freeAll(GWEN_CRYPTKEY_LIST2 *stl);
00077 
00078 
00083 typedef GWEN_CRYPTKEY* (*GWEN_CRYPTKEY_DUP_FN)(const GWEN_CRYPTKEY *key);
00084 
00085 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_ENCRYPT_FN)(const GWEN_CRYPTKEY *key,
00086                                                    GWEN_BUFFER *src,
00087                                                    GWEN_BUFFER *dst);
00088 
00089 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_DECRYPT_FN)(const GWEN_CRYPTKEY *key,
00090                                                    GWEN_BUFFER *src,
00091                                                    GWEN_BUFFER *dst);
00092 
00093 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_SIGN_FN)(const GWEN_CRYPTKEY *key,
00094                                                 GWEN_BUFFER *src,
00095                                                 GWEN_BUFFER *dst);
00096 
00097 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_VERIFY_FN)(const GWEN_CRYPTKEY *key,
00098                                                   GWEN_BUFFER *src,
00099                                                   GWEN_BUFFER *dst);
00100 
00101 typedef unsigned int
00102     (*GWEN_CRYPTKEY_GETCHUNKSIZE_FN)(const GWEN_CRYPTKEY *key);
00103 
00104 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_FROMDB_FN)(GWEN_CRYPTKEY *key,
00105                                                   GWEN_DB_NODE *db);
00106 
00107 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_TODB_FN)(const GWEN_CRYPTKEY *key,
00108                                                 GWEN_DB_NODE *db,
00109                                                 int pub);
00110 
00111 typedef void (*GWEN_CRYPTKEY_FREEKEYDATA_FN)(GWEN_CRYPTKEY *key);
00112 
00113 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_GENERATEKEY_FN)(GWEN_CRYPTKEY *key,
00114                                                        unsigned int keylength);
00115 
00116 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_OPEN_FN)(GWEN_CRYPTKEY *key);
00117 
00118 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_CLOSE_FN)(GWEN_CRYPTKEY *key);
00126 GWENHYWFAR_API
00127   GWEN_CRYPTKEY *GWEN_CryptKey_new();
00128 
00129 
00130 GWENHYWFAR_API
00131   GWEN_CRYPTKEY *GWEN_CryptKey_Factory(const char *t);
00132 
00133 GWENHYWFAR_API
00134   void GWEN_CryptKey_free(GWEN_CRYPTKEY *key);
00135 
00136 GWENHYWFAR_API
00137   GWEN_CRYPTKEY *GWEN_CryptKey_dup(const GWEN_CRYPTKEY *key);
00138 
00139 GWENHYWFAR_API
00140   int GWEN_CryptKey_IsPublic(const GWEN_CRYPTKEY *key);
00141 
00142 GWENHYWFAR_API
00143   void GWEN_CryptKey_SetPublic(GWEN_CRYPTKEY *key, int i);
00144 
00145 GWENHYWFAR_API
00146   GWEN_ERRORCODE GWEN_CryptKey_Encrypt(const GWEN_CRYPTKEY *key,
00147                                        GWEN_BUFFER *src,
00148                                        GWEN_BUFFER *dst);
00149 
00150 GWENHYWFAR_API
00151   GWEN_ERRORCODE GWEN_CryptKey_Decrypt(const GWEN_CRYPTKEY *key,
00152                                        GWEN_BUFFER *src,
00153                                        GWEN_BUFFER *dst);
00154 
00155 GWENHYWFAR_API
00156   GWEN_ERRORCODE GWEN_CryptKey_Sign(const GWEN_CRYPTKEY *key,
00157                                     GWEN_BUFFER *src,
00158                                     GWEN_BUFFER *dst);
00159 
00160 GWENHYWFAR_API
00161   GWEN_ERRORCODE GWEN_CryptKey_Verify(const GWEN_CRYPTKEY *key,
00162                                       GWEN_BUFFER *src,
00163                                       GWEN_BUFFER *dst);
00164 
00165 GWENHYWFAR_API
00166 unsigned int GWEN_CryptKey_GetChunkSize(const GWEN_CRYPTKEY *key);
00167 
00168 GWENHYWFAR_API
00169   GWEN_CRYPTKEY *GWEN_CryptKey_fromDb(GWEN_DB_NODE *db);
00170 
00171 GWENHYWFAR_API
00172   GWEN_ERRORCODE GWEN_CryptKey_toDb(const GWEN_CRYPTKEY *key,
00173                                     GWEN_DB_NODE *db,
00174                                     int pub);
00175 
00176 GWENHYWFAR_API
00177 GWEN_TYPE_UINT32 GWEN_CryptKey_GetFlags(const GWEN_CRYPTKEY *key);
00178 
00179 GWENHYWFAR_API
00180 void GWEN_CryptKey_SetFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00181 
00182 GWENHYWFAR_API
00183 void GWEN_CryptKey_AddFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00184 
00185 GWENHYWFAR_API
00186 void GWEN_CryptKey_SubFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00187 
00188 
00195 GWENHYWFAR_API
00196   GWEN_ERRORCODE GWEN_CryptKey_SetData(GWEN_CRYPTKEY *key,
00197                                        const char *buffer,
00198                                        unsigned int bsize);
00199 
00204 GWENHYWFAR_API
00205 int GWEN_CryptKey_FromPassword(const char *password,
00206                                unsigned char *buffer,
00207                                unsigned int bsize);
00208 
00220 GWENHYWFAR_API
00221 int GWEN_CryptKey_FromPasswordSSL(const char *password,
00222                                   unsigned char *buffer,
00223                                   unsigned int bsize);
00224 
00231 GWENHYWFAR_API
00232 GWEN_ERRORCODE GWEN_CryptKey_GetData(GWEN_CRYPTKEY *key,
00233                                      char *buffer,
00234                                      unsigned int *bsize);
00235 
00236 
00237 GWENHYWFAR_API
00238   GWEN_ERRORCODE GWEN_CryptKey_Generate(GWEN_CRYPTKEY *key,
00239                                         unsigned int keylength);
00240 
00241 GWENHYWFAR_API
00242   GWEN_ERRORCODE GWEN_CryptKey_Open(GWEN_CRYPTKEY *key);
00243 
00244 GWENHYWFAR_API
00245   GWEN_ERRORCODE GWEN_CryptKey_Close(GWEN_CRYPTKEY *key);
00246 
00251 GWENHYWFAR_API
00252   const GWEN_KEYSPEC *GWEN_CryptKey_GetKeySpec(const GWEN_CRYPTKEY *key);
00253 
00254 GWENHYWFAR_API
00255 void GWEN_CryptKey_SetKeySpec(GWEN_CRYPTKEY *key,
00256                               const GWEN_KEYSPEC *cks);
00257 
00263 GWENHYWFAR_API
00264 int GWEN_CryptKey_GetStatus(const GWEN_CRYPTKEY *key);
00265 
00266 GWENHYWFAR_API
00267 void GWEN_CryptKey_SetStatus(GWEN_CRYPTKEY *key, int i);
00268 
00269 
00270 GWENHYWFAR_API
00271   const char *GWEN_CryptKey_GetKeyType(const GWEN_CRYPTKEY *key);
00272 
00273 GWENHYWFAR_API
00274   void GWEN_CryptKey_SetKeyType(GWEN_CRYPTKEY *key,
00275                                 const char *s);
00276 
00277 GWENHYWFAR_API
00278   const char *GWEN_CryptKey_GetKeyName(const GWEN_CRYPTKEY *key);
00279 
00280 GWENHYWFAR_API
00281   void GWEN_CryptKey_SetKeyName(GWEN_CRYPTKEY *key,
00282                                 const char *s);
00283 
00284 GWENHYWFAR_API
00285   const char *GWEN_CryptKey_GetOwner(const GWEN_CRYPTKEY *key);
00286 
00287 GWENHYWFAR_API
00288   void GWEN_CryptKey_SetOwner(GWEN_CRYPTKEY *key,
00289                               const char *s);
00290 GWENHYWFAR_API
00291   unsigned int GWEN_CryptKey_GetNumber(const GWEN_CRYPTKEY *key);
00292 
00293 GWENHYWFAR_API
00294   void GWEN_CryptKey_SetNumber(GWEN_CRYPTKEY *key,
00295                                unsigned int i);
00296 GWENHYWFAR_API
00297   unsigned int GWEN_CryptKey_GetVersion(const GWEN_CRYPTKEY *key);
00298 
00299 GWENHYWFAR_API
00300   void GWEN_CryptKey_SetVersion(GWEN_CRYPTKEY *key,
00301                                 unsigned int i);
00302 
00303 GWENHYWFAR_API
00304 unsigned int GWEN_CryptKey_GetKeyLength(const GWEN_CRYPTKEY *key);
00305 
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 
00329 GWENHYWFAR_API
00330 void GWEN_CryptKey_SetKeyLength(GWEN_CRYPTKEY *key, unsigned int i);
00331 
00332 #endif
00333 
00334 GWENHYWFAR_API
00335   int GWEN_CryptKey_GetOpenCount(const GWEN_CRYPTKEY *key);
00336 
00337 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00338 GWENHYWFAR_API
00339   void GWEN_CryptKey_IncrementOpenCount(GWEN_CRYPTKEY *key);
00340 
00341 GWENHYWFAR_API
00342   void GWEN_CryptKey_DecrementOpenCount(GWEN_CRYPTKEY *key);
00343 #endif
00344 
00349 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00350 GWENHYWFAR_API
00351   void GWEN_CryptKey_SetEncryptFn(GWEN_CRYPTKEY *key,
00352                                   GWEN_CRYPTKEY_ENCRYPT_FN encryptFn);
00353 GWENHYWFAR_API
00354   void GWEN_CryptKey_SetDecryptFn(GWEN_CRYPTKEY *key,
00355                                   GWEN_CRYPTKEY_DECRYPT_FN decryptFn);
00356 GWENHYWFAR_API
00357   void GWEN_CryptKey_SetSignFn(GWEN_CRYPTKEY *key,
00358                                GWEN_CRYPTKEY_SIGN_FN signFn);
00359 GWENHYWFAR_API
00360   void GWEN_CryptKey_SetVerifyFn(GWEN_CRYPTKEY *key,
00361                                  GWEN_CRYPTKEY_VERIFY_FN verifyFn);
00362 GWENHYWFAR_API
00363   void GWEN_CryptKey_SetGetChunkSizeFn(GWEN_CRYPTKEY *key,
00364                                        GWEN_CRYPTKEY_GETCHUNKSIZE_FN getChunkSizeFn);
00365 GWENHYWFAR_API
00366   void GWEN_CryptKey_SetFromDbFn(GWEN_CRYPTKEY *key,
00367                                  GWEN_CRYPTKEY_FROMDB_FN fromDbFn);
00368 GWENHYWFAR_API
00369   void GWEN_CryptKey_SetToDbFn(GWEN_CRYPTKEY *key,
00370                                GWEN_CRYPTKEY_TODB_FN toDbFn);
00371 GWENHYWFAR_API
00372   void GWEN_CryptKey_SetGenerateKeyFn(GWEN_CRYPTKEY *key,
00373                                       GWEN_CRYPTKEY_GENERATEKEY_FN generateKeyFn);
00374 GWENHYWFAR_API
00375   void GWEN_CryptKey_SetFreeKeyDataFn(GWEN_CRYPTKEY *key,
00376                                       GWEN_CRYPTKEY_FREEKEYDATA_FN freeKeyDataFn);
00377 
00378 GWENHYWFAR_API
00379   void GWEN_CryptKey_SetOpenFn(GWEN_CRYPTKEY *key,
00380                                GWEN_CRYPTKEY_OPEN_FN openKeyFn);
00381 GWENHYWFAR_API
00382   void GWEN_CryptKey_SetCloseFn(GWEN_CRYPTKEY *key,
00383                                 GWEN_CRYPTKEY_CLOSE_FN closeKeyFn);
00384 GWENHYWFAR_API
00385   void GWEN_CryptKey_SetDupFn(GWEN_CRYPTKEY *key,
00386                               GWEN_CRYPTKEY_DUP_FN dupFn);
00387 #endif
00388 
00394   /* _______________________________________________________________________
00395    * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
00396    *                           Crypt provider (plugin)
00397    * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
00398    */
00399 
00400 typedef struct GWEN_CRYPTKEY_PROVIDER GWEN_CRYPTKEY_PROVIDER;
00401 
00402 typedef GWEN_CRYPTKEY*
00403     (*GWEN_CRYPTPROVIDER_NEWKEY_FN)(GWEN_CRYPTKEY_PROVIDER *pr);
00404 
00405 GWENHYWFAR_API
00406   GWEN_CRYPTKEY_PROVIDER *GWEN_CryptProvider_new();
00407 GWENHYWFAR_API
00408   void GWEN_CryptProvider_free(GWEN_CRYPTKEY_PROVIDER *pr);
00409 
00410 GWENHYWFAR_API
00411   void GWEN_CryptProvider_SetNewKeyFn(GWEN_CRYPTKEY_PROVIDER *pr,
00412                                       GWEN_CRYPTPROVIDER_NEWKEY_FN newKeyFn);
00413 GWENHYWFAR_API
00414   void GWEN_CryptProvider_SetName(GWEN_CRYPTKEY_PROVIDER *pr,
00415                                   const char *name);
00416 
00420 GWENHYWFAR_API
00421   GWEN_ERRORCODE GWEN_Crypt_RegisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00422 
00423 GWENHYWFAR_API
00424   GWEN_ERRORCODE GWEN_Crypt_UnregisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00425 
00426 GWENHYWFAR_API
00427   void GWEN_Crypt_UnregisterAllProviders();
00428 
00429 
00430 GWENHYWFAR_API
00431 long int GWEN_Random();
00432 
00433 
00434 #ifdef __cplusplus
00435 }
00436 #endif
00437 
00438 
00439 
00440 #endif

Generated on Sat Sep 16 11:19:14 2006 for gwenhywfar by  doxygen 1.4.7