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
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
00396
00397
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