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_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPTKEY, GWEN_CryptKey, GWENHYWFAR_API)
00092 void GWEN_CryptKey_List2_freeAll(GWEN_CRYPTKEY_LIST2 *stl);
00093
00094
00099 typedef GWEN_CRYPTKEY* (*GWEN_CRYPTKEY_DUP_FN)(const GWEN_CRYPTKEY *key);
00100
00101 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_ENCRYPT_FN)(const GWEN_CRYPTKEY *key,
00102 GWEN_BUFFER *src,
00103 GWEN_BUFFER *dst);
00104
00105 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_DECRYPT_FN)(const GWEN_CRYPTKEY *key,
00106 GWEN_BUFFER *src,
00107 GWEN_BUFFER *dst);
00108
00109 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_SIGN_FN)(const GWEN_CRYPTKEY *key,
00110 GWEN_BUFFER *src,
00111 GWEN_BUFFER *dst);
00112
00113 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_VERIFY_FN)(const GWEN_CRYPTKEY *key,
00114 GWEN_BUFFER *src,
00115 GWEN_BUFFER *dst);
00116
00117 typedef unsigned int
00118 (*GWEN_CRYPTKEY_GETCHUNKSIZE_FN)(const GWEN_CRYPTKEY *key);
00119
00120 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_FROMDB_FN)(GWEN_CRYPTKEY *key,
00121 GWEN_DB_NODE *db);
00122
00123 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_TODB_FN)(const GWEN_CRYPTKEY *key,
00124 GWEN_DB_NODE *db,
00125 int pub);
00126
00127 typedef void (*GWEN_CRYPTKEY_FREEKEYDATA_FN)(GWEN_CRYPTKEY *key);
00128
00129 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_GENERATEKEY_FN)(GWEN_CRYPTKEY *key,
00130 unsigned keylength);
00131
00132 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_OPEN_FN)(GWEN_CRYPTKEY *key);
00133
00134 typedef GWEN_ERRORCODE (*GWEN_CRYPTKEY_CLOSE_FN)(GWEN_CRYPTKEY *key);
00142 GWENHYWFAR_API
00143 GWEN_CRYPTKEY *GWEN_CryptKey_new();
00144
00145
00146 GWENHYWFAR_API
00147 GWEN_CRYPTKEY *GWEN_CryptKey_Factory(const char *t);
00148
00149 GWENHYWFAR_API
00150 void GWEN_CryptKey_free(GWEN_CRYPTKEY *key);
00151
00152 GWENHYWFAR_API
00153 GWEN_CRYPTKEY *GWEN_CryptKey_dup(const GWEN_CRYPTKEY *key);
00154
00155 GWENHYWFAR_API
00156 int GWEN_CryptKey_IsPublic(const GWEN_CRYPTKEY *key);
00157 GWENHYWFAR_API
00158 void GWEN_CryptKey_SetPublic(GWEN_CRYPTKEY *key, int i);
00159
00160 GWENHYWFAR_API
00161 GWEN_ERRORCODE GWEN_CryptKey_Encrypt(const GWEN_CRYPTKEY *key,
00162 GWEN_BUFFER *src,
00163 GWEN_BUFFER *dst);
00164
00165 GWENHYWFAR_API
00166 GWEN_ERRORCODE GWEN_CryptKey_Decrypt(const GWEN_CRYPTKEY *key,
00167 GWEN_BUFFER *src,
00168 GWEN_BUFFER *dst);
00169
00170 GWENHYWFAR_API
00171 GWEN_ERRORCODE GWEN_CryptKey_Sign(const GWEN_CRYPTKEY *key,
00172 GWEN_BUFFER *src,
00173 GWEN_BUFFER *dst);
00174
00175 GWENHYWFAR_API
00176 GWEN_ERRORCODE GWEN_CryptKey_Verify(const GWEN_CRYPTKEY *key,
00177 GWEN_BUFFER *src,
00178 GWEN_BUFFER *dst);
00179
00180 GWENHYWFAR_API
00181 unsigned int GWEN_CryptKey_GetChunkSize(const GWEN_CRYPTKEY *key);
00182
00183 GWENHYWFAR_API
00184 GWEN_CRYPTKEY *GWEN_CryptKey_FromDb(GWEN_DB_NODE *db);
00185
00186 GWENHYWFAR_API
00187 GWEN_ERRORCODE GWEN_CryptKey_ToDb(const GWEN_CRYPTKEY *key,
00188 GWEN_DB_NODE *db,
00189 int pub);
00190
00191 GWENHYWFAR_API
00192 GWEN_TYPE_UINT32 GWEN_CryptKey_GetFlags(const GWEN_CRYPTKEY *key);
00193 GWENHYWFAR_API
00194 void GWEN_CryptKey_SetFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00195 GWENHYWFAR_API
00196 void GWEN_CryptKey_AddFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00197 GWENHYWFAR_API
00198 void GWEN_CryptKey_SubFlags(GWEN_CRYPTKEY *key, GWEN_TYPE_UINT32 fl);
00199
00200
00207 GWENHYWFAR_API
00208 GWEN_ERRORCODE GWEN_CryptKey_SetData(GWEN_CRYPTKEY *key,
00209 const char *buffer,
00210 unsigned int bsize);
00211
00216 int GWEN_CryptKey_FromPassword(const char *password,
00217 unsigned char *buffer,
00218 unsigned int bsize);
00219
00231 int GWEN_CryptKey_FromPasswordSSL(const char *password,
00232 unsigned char *buffer,
00233 unsigned int bsize);
00234
00241 GWEN_ERRORCODE GWEN_CryptKey_GetData(GWEN_CRYPTKEY *key,
00242 char *buffer,
00243 unsigned int *bsize);
00244
00245
00246 GWENHYWFAR_API
00247 GWEN_ERRORCODE GWEN_CryptKey_Generate(GWEN_CRYPTKEY *key,
00248 unsigned int keylength);
00249
00250 GWENHYWFAR_API
00251 GWEN_ERRORCODE GWEN_CryptKey_Open(GWEN_CRYPTKEY *key);
00252
00253 GWENHYWFAR_API
00254 GWEN_ERRORCODE GWEN_CryptKey_Close(GWEN_CRYPTKEY *key);
00255
00260 GWENHYWFAR_API
00261 const GWEN_KEYSPEC *GWEN_CryptKey_GetKeySpec(const GWEN_CRYPTKEY *key);
00262
00268 GWENHYWFAR_API
00269 int GWEN_CryptKey_GetStatus(const GWEN_CRYPTKEY *key);
00270 GWENHYWFAR_API
00271 void GWEN_CryptKey_SetStatus(GWEN_CRYPTKEY *key, int i);
00272
00273
00274 GWENHYWFAR_API
00275 const char *GWEN_CryptKey_GetKeyType(const GWEN_CRYPTKEY *key);
00276 GWENHYWFAR_API
00277 void GWEN_CryptKey_SetKeyType(GWEN_CRYPTKEY *key,
00278 const char *s);
00279
00280 GWENHYWFAR_API
00281 const char *GWEN_CryptKey_GetKeyName(const GWEN_CRYPTKEY *key);
00282 GWENHYWFAR_API
00283 void GWEN_CryptKey_SetKeyName(GWEN_CRYPTKEY *key,
00284 const char *s);
00285
00286 GWENHYWFAR_API
00287 const char *GWEN_CryptKey_GetOwner(const GWEN_CRYPTKEY *key);
00288 GWENHYWFAR_API
00289 void GWEN_CryptKey_SetOwner(GWEN_CRYPTKEY *key,
00290 const char *s);
00291 GWENHYWFAR_API
00292 unsigned int GWEN_CryptKey_GetNumber(const GWEN_CRYPTKEY *key);
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 GWENHYWFAR_API
00299 void GWEN_CryptKey_SetVersion(GWEN_CRYPTKEY *key,
00300 unsigned int i);
00301
00302 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00303
00310 GWENHYWFAR_API
00311 void *GWEN_CryptKey_GetKeyData(const GWEN_CRYPTKEY *key);
00312
00320 GWENHYWFAR_API
00321 void GWEN_CryptKey_SetKeyData(GWEN_CRYPTKEY *key,
00322 void *kd);
00323 #endif
00324
00325 GWENHYWFAR_API
00326 int GWEN_CryptKey_GetOpenCount(const GWEN_CRYPTKEY *key);
00327
00328 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00329 GWENHYWFAR_API
00330 void GWEN_CryptKey_IncrementOpenCount(GWEN_CRYPTKEY *key);
00331 GWENHYWFAR_API
00332 void GWEN_CryptKey_DecrementOpenCount(GWEN_CRYPTKEY *key);
00333 #endif
00334
00339 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00340 GWENHYWFAR_API
00341 void GWEN_CryptKey_SetEncryptFn(GWEN_CRYPTKEY *key,
00342 GWEN_CRYPTKEY_ENCRYPT_FN encryptFn);
00343 GWENHYWFAR_API
00344 void GWEN_CryptKey_SetDecryptFn(GWEN_CRYPTKEY *key,
00345 GWEN_CRYPTKEY_DECRYPT_FN decryptFn);
00346 GWENHYWFAR_API
00347 void GWEN_CryptKey_SetSignFn(GWEN_CRYPTKEY *key,
00348 GWEN_CRYPTKEY_SIGN_FN signFn);
00349 GWENHYWFAR_API
00350 void GWEN_CryptKey_SetVerifyFn(GWEN_CRYPTKEY *key,
00351 GWEN_CRYPTKEY_VERIFY_FN verifyFn);
00352 GWENHYWFAR_API
00353 void GWEN_CryptKey_SetGetChunkSizeFn(GWEN_CRYPTKEY *key,
00354 GWEN_CRYPTKEY_GETCHUNKSIZE_FN getChunkSizeFn);
00355 GWENHYWFAR_API
00356 void GWEN_CryptKey_SetFromDbFn(GWEN_CRYPTKEY *key,
00357 GWEN_CRYPTKEY_FROMDB_FN fromDbFn);
00358 GWENHYWFAR_API
00359 void GWEN_CryptKey_SetToDbFn(GWEN_CRYPTKEY *key,
00360 GWEN_CRYPTKEY_TODB_FN toDbFn);
00361 GWENHYWFAR_API
00362 void GWEN_CryptKey_SetGenerateKeyFn(GWEN_CRYPTKEY *key,
00363 GWEN_CRYPTKEY_GENERATEKEY_FN generateKeyFn);
00364 GWENHYWFAR_API
00365 void GWEN_CryptKey_SetFreeKeyDataFn(GWEN_CRYPTKEY *key,
00366 GWEN_CRYPTKEY_FREEKEYDATA_FN freeKeyDataFn);
00367
00368 GWENHYWFAR_API
00369 void GWEN_CryptKey_SetOpenFn(GWEN_CRYPTKEY *key,
00370 GWEN_CRYPTKEY_OPEN_FN openKeyFn);
00371 GWENHYWFAR_API
00372 void GWEN_CryptKey_SetCloseFn(GWEN_CRYPTKEY *key,
00373 GWEN_CRYPTKEY_CLOSE_FN closeKeyFn);
00374 GWENHYWFAR_API
00375 void GWEN_CryptKey_SetDupFn(GWEN_CRYPTKEY *key,
00376 GWEN_CRYPTKEY_DUP_FN dupFn);
00377 #endif
00378
00384
00385
00386
00387
00388
00389
00390 typedef struct GWEN_CRYPTKEY_PROVIDER GWEN_CRYPTKEY_PROVIDER;
00391
00392 typedef GWEN_CRYPTKEY*
00393 (*GWEN_CRYPTPROVIDER_NEWKEY_FN)(GWEN_CRYPTKEY_PROVIDER *pr);
00394
00395 GWENHYWFAR_API
00396 GWEN_CRYPTKEY_PROVIDER *GWEN_CryptProvider_new();
00397 GWENHYWFAR_API
00398 void GWEN_CryptProvider_free(GWEN_CRYPTKEY_PROVIDER *pr);
00399
00400 GWENHYWFAR_API
00401 void GWEN_CryptProvider_SetNewKeyFn(GWEN_CRYPTKEY_PROVIDER *pr,
00402 GWEN_CRYPTPROVIDER_NEWKEY_FN newKeyFn);
00403 GWENHYWFAR_API
00404 void GWEN_CryptProvider_SetName(GWEN_CRYPTKEY_PROVIDER *pr,
00405 const char *name);
00406
00410 GWENHYWFAR_API
00411 GWEN_ERRORCODE GWEN_Crypt_RegisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00412 GWENHYWFAR_API
00413 GWEN_ERRORCODE GWEN_Crypt_UnregisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00414
00415 GWENHYWFAR_API
00416 void GWEN_Crypt_UnregisterAllProviders();
00417
00418
00419 #ifdef __cplusplus
00420 }
00421 #endif
00422
00423
00424
00425 #endif