00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
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
00391
00392
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