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
00263 GWENHYWFAR_API
00264 void GWEN_CryptKey_SetKeySpec(GWEN_CRYPTKEY *key,
00265 const GWEN_KEYSPEC *cks);
00266
00272 GWENHYWFAR_API
00273 int GWEN_CryptKey_GetStatus(const GWEN_CRYPTKEY *key);
00274 GWENHYWFAR_API
00275 void GWEN_CryptKey_SetStatus(GWEN_CRYPTKEY *key, int i);
00276
00277
00278 GWENHYWFAR_API
00279 const char *GWEN_CryptKey_GetKeyType(const GWEN_CRYPTKEY *key);
00280 GWENHYWFAR_API
00281 void GWEN_CryptKey_SetKeyType(GWEN_CRYPTKEY *key,
00282 const char *s);
00283
00284 GWENHYWFAR_API
00285 const char *GWEN_CryptKey_GetKeyName(const GWEN_CRYPTKEY *key);
00286 GWENHYWFAR_API
00287 void GWEN_CryptKey_SetKeyName(GWEN_CRYPTKEY *key,
00288 const char *s);
00289
00290 GWENHYWFAR_API
00291 const char *GWEN_CryptKey_GetOwner(const GWEN_CRYPTKEY *key);
00292 GWENHYWFAR_API
00293 void GWEN_CryptKey_SetOwner(GWEN_CRYPTKEY *key,
00294 const char *s);
00295 GWENHYWFAR_API
00296 unsigned int GWEN_CryptKey_GetNumber(const GWEN_CRYPTKEY *key);
00297 GWENHYWFAR_API
00298 void GWEN_CryptKey_SetNumber(GWEN_CRYPTKEY *key,
00299 unsigned int i);
00300 GWENHYWFAR_API
00301 unsigned int GWEN_CryptKey_GetVersion(const GWEN_CRYPTKEY *key);
00302 GWENHYWFAR_API
00303 void GWEN_CryptKey_SetVersion(GWEN_CRYPTKEY *key,
00304 unsigned int i);
00305
00306 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00314 GWENHYWFAR_API
00315 void *GWEN_CryptKey_GetKeyData(const GWEN_CRYPTKEY *key);
00316
00324 GWENHYWFAR_API
00325 void GWEN_CryptKey_SetKeyData(GWEN_CRYPTKEY *key,
00326 void *kd);
00327 #endif
00328
00329 GWENHYWFAR_API
00330 int GWEN_CryptKey_GetOpenCount(const GWEN_CRYPTKEY *key);
00331
00332 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00333 GWENHYWFAR_API
00334 void GWEN_CryptKey_IncrementOpenCount(GWEN_CRYPTKEY *key);
00335 GWENHYWFAR_API
00336 void GWEN_CryptKey_DecrementOpenCount(GWEN_CRYPTKEY *key);
00337 #endif
00338
00343 #if (defined(GWEN_EXTEND_CRYPTKEY) || defined(DOXYGEN))
00344 GWENHYWFAR_API
00345 void GWEN_CryptKey_SetEncryptFn(GWEN_CRYPTKEY *key,
00346 GWEN_CRYPTKEY_ENCRYPT_FN encryptFn);
00347 GWENHYWFAR_API
00348 void GWEN_CryptKey_SetDecryptFn(GWEN_CRYPTKEY *key,
00349 GWEN_CRYPTKEY_DECRYPT_FN decryptFn);
00350 GWENHYWFAR_API
00351 void GWEN_CryptKey_SetSignFn(GWEN_CRYPTKEY *key,
00352 GWEN_CRYPTKEY_SIGN_FN signFn);
00353 GWENHYWFAR_API
00354 void GWEN_CryptKey_SetVerifyFn(GWEN_CRYPTKEY *key,
00355 GWEN_CRYPTKEY_VERIFY_FN verifyFn);
00356 GWENHYWFAR_API
00357 void GWEN_CryptKey_SetGetChunkSizeFn(GWEN_CRYPTKEY *key,
00358 GWEN_CRYPTKEY_GETCHUNKSIZE_FN getChunkSizeFn);
00359 GWENHYWFAR_API
00360 void GWEN_CryptKey_SetFromDbFn(GWEN_CRYPTKEY *key,
00361 GWEN_CRYPTKEY_FROMDB_FN fromDbFn);
00362 GWENHYWFAR_API
00363 void GWEN_CryptKey_SetToDbFn(GWEN_CRYPTKEY *key,
00364 GWEN_CRYPTKEY_TODB_FN toDbFn);
00365 GWENHYWFAR_API
00366 void GWEN_CryptKey_SetGenerateKeyFn(GWEN_CRYPTKEY *key,
00367 GWEN_CRYPTKEY_GENERATEKEY_FN generateKeyFn);
00368 GWENHYWFAR_API
00369 void GWEN_CryptKey_SetFreeKeyDataFn(GWEN_CRYPTKEY *key,
00370 GWEN_CRYPTKEY_FREEKEYDATA_FN freeKeyDataFn);
00371
00372 GWENHYWFAR_API
00373 void GWEN_CryptKey_SetOpenFn(GWEN_CRYPTKEY *key,
00374 GWEN_CRYPTKEY_OPEN_FN openKeyFn);
00375 GWENHYWFAR_API
00376 void GWEN_CryptKey_SetCloseFn(GWEN_CRYPTKEY *key,
00377 GWEN_CRYPTKEY_CLOSE_FN closeKeyFn);
00378 GWENHYWFAR_API
00379 void GWEN_CryptKey_SetDupFn(GWEN_CRYPTKEY *key,
00380 GWEN_CRYPTKEY_DUP_FN dupFn);
00381 #endif
00388
00389
00390
00391
00392
00393
00394 typedef struct GWEN_CRYPTKEY_PROVIDER GWEN_CRYPTKEY_PROVIDER;
00395
00396 typedef GWEN_CRYPTKEY*
00397 (*GWEN_CRYPTPROVIDER_NEWKEY_FN)(GWEN_CRYPTKEY_PROVIDER *pr);
00398
00399 GWENHYWFAR_API
00400 GWEN_CRYPTKEY_PROVIDER *GWEN_CryptProvider_new();
00401 GWENHYWFAR_API
00402 void GWEN_CryptProvider_free(GWEN_CRYPTKEY_PROVIDER *pr);
00403
00404 GWENHYWFAR_API
00405 void GWEN_CryptProvider_SetNewKeyFn(GWEN_CRYPTKEY_PROVIDER *pr,
00406 GWEN_CRYPTPROVIDER_NEWKEY_FN newKeyFn);
00407 GWENHYWFAR_API
00408 void GWEN_CryptProvider_SetName(GWEN_CRYPTKEY_PROVIDER *pr,
00409 const char *name);
00410
00414 GWENHYWFAR_API
00415 GWEN_ERRORCODE GWEN_Crypt_RegisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00416 GWENHYWFAR_API
00417 GWEN_ERRORCODE GWEN_Crypt_UnregisterProvider(GWEN_CRYPTKEY_PROVIDER *pr);
00418
00419 GWENHYWFAR_API
00420 void GWEN_Crypt_UnregisterAllProviders();
00421
00422
00423 #ifdef __cplusplus
00424 }
00425 #endif
00426
00427
00428
00429 #endif