14 #define DISABLE_DEBUGLOG
17 #include "cryptkeysym_p.h"
18 #include <gwenhywfar/misc.h>
19 #include <gwenhywfar/debug.h>
20 #include <gwenhywfar/cryptdefs.h>
21 #include <gwenhywfar/text.h>
33 const uint8_t *pInData,
37 GWEN_CRYPT_KEY_SYM *xk;
44 err=gcry_cipher_encrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
57 const uint8_t *pInData,
61 GWEN_CRYPT_KEY_SYM *xk;
68 err=gcry_cipher_decrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
82 GWEN_CRYPT_KEY_SYM *xk;
84 xk=(GWEN_CRYPT_KEY_SYM*) p;
85 if (xk->keyData && xk->keyLen) {
86 memset(xk->keyData, 0, xk->keyLen);
92 gcry_cipher_close(xk->algoHandle);
100 GWEN_CRYPT_KEY_SYM *xk;
121 return GCRY_CIPHER_MODE_NONE;
123 return GCRY_CIPHER_MODE_NONE;
125 return GCRY_CIPHER_MODE_ECB;
127 return GCRY_CIPHER_MODE_CFB;
129 return GCRY_CIPHER_MODE_CBC;
132 return GCRY_CIPHER_MODE_NONE;
143 GWEN_CRYPT_KEY_SYM *xk;
147 enum gcry_random_level q;
161 q=GCRY_STRONG_RANDOM;
165 q=GCRY_VERY_STRONG_RANDOM;
181 keyData=gcry_random_bytes(kbytes, q);
188 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
190 if ((err & GPG_ERR_CODE_MASK)==GPG_ERR_WEAK_KEY) {
203 memset(xk->keyData, 0, xk->keyLen);
218 const uint8_t *kd, uint32_t kl) {
220 GWEN_CRYPT_KEY_SYM *xk;
224 if (kl!=gcry_cipher_get_algo_keylen(algo)) {
226 (
int)kl, (
int)gcry_cipher_get_algo_keylen(algo));
250 if (kd==
NULL || kl==0) {
257 xk->keyData=(uint8_t*) malloc(kl);
259 memmove(xk->keyData, kd, kl);
263 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
283 GWEN_CRYPT_KEY_SYM *xk;
327 if (p==
NULL || len==0) {
334 xk->keyData=(uint8_t*) malloc(len);
336 memmove(xk->keyData, p, len);
340 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
353 GWEN_CRYPT_KEY_SYM *xk;
371 "keyData", xk->keyData, xk->keyLen);
381 GWEN_CRYPT_KEY_SYM *xk;
413 err=gcry_cipher_open(&xk->algoHandle,
428 if (p==
NULL || len==0) {
435 xk->keyData=(uint8_t*) malloc(len);
437 memmove(xk->keyData, p, len);
441 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
454 GWEN_CRYPT_KEY_SYM *xk;
475 "keyData", xk->keyData, xk->keyLen);
483 GWEN_CRYPT_KEY_SYM *xk;
495 if (xk->keyData && xk->keyLen) {
496 memset(xk->keyData, 0, xk->keyLen);
501 xk->keyData=(uint8_t*)malloc(kl);
503 memmove(xk->keyData, kd, kl);
507 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
520 GWEN_CRYPT_KEY_SYM *xk;
532 GWEN_CRYPT_KEY_SYM *xk;
560 const uint8_t *kd, uint32_t kl) {
566 memmove(new_kd, kd, 16);
567 memmove(new_kd+16, new_kd, 8);
569 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, new_kd, 24);
570 memset(new_kd, 0, 24);
575 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, kd, kl);
583 GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE,
"des3k", db);
600 memmove(new_kd, kd, 16);
601 memmove(new_kd+16, new_kd, 8);
603 memset(new_kd, 0, 24);
627 GWEN_CRYPT_KEY_SYM *xk;
634 if (kd==
NULL || kl==0) {
635 const uint8_t iv[]= {
636 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
638 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
641 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
660 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, quality);
666 const uint8_t *kd, uint32_t kl) {
668 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
677 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
"blowFish", db);
711 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, quality);
717 const uint8_t *kd, uint32_t kl) {
719 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
728 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
"aes128", db);
760 GWEN_CRYPT_KEY_SYM *xk;
767 if (kd==
NULL || kl==0) {
768 const uint8_t iv[]= {
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
770 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
772 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
775 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
GWENHYWFAR_CB int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
#define GWEN_DB_FLAGS_OVERWRITE_VARS
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_Generate(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, int quality)
GWENHYWFAR_CB void GWEN_Crypt_KeySym_freeData(GWEN_UNUSED void *bp, void *p)
int GWEN_Crypt_KeyAes128_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
struct GWEN_DB_NODE GWEN_DB_NODE
#define GWEN_ERROR_INVALID
int GWEN_Crypt_Key_GetKeySize(const GWEN_CRYPT_KEY *k)
void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k)
#define GWEN_FREE_OBJECT(varname)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Key_GetCryptAlgoId(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym__fromDb(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, const char *gname, GWEN_DB_NODE *db)
enum gcry_cipher_modes GWEN_Crypt_KeySym__MyMode2GMode(GWEN_CRYPT_CRYPTMODE mode)
int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
uint32_t GWEN_Crypt_KeyDes3K_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
int GWEN_Crypt_Key_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize)
#define GWEN_NEW_OBJECT(typ, varname)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
const char * GWEN_Crypt_CryptAlgoId_toString(GWEN_CRYPT_CRYPTALGOID a)
#define GWEN_DB_FLAGS_OVERWRITE_GROUPS
int GWEN_Crypt_KeyDes3K_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
const void * GWEN_DB_GetBinValue(GWEN_DB_NODE *n, const char *path, int idx, const void *defVal, unsigned int defValSize, unsigned int *returnValueSize)
#define GWEN_ERROR_GENERIC
int GWEN_Crypt_KeySym_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY
uint8_t * GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_dup(const GWEN_CRYPT_KEY *k)
int GWEN_Crypt_KeyAes128_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
GWENHYWFAR_CB int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_fromData(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, const uint8_t *kd, uint32_t kl)
void GWEN_Crypt_Random(int quality, uint8_t *buffer, uint32_t len)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
GWEN_CRYPT_KEY_DECIPHER_FN GWEN_Crypt_Key_SetDecipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_DECIPHER_FN f)
#define DBG_ERROR(dbg_logger, format, args...)
uint8_t * GWEN_Crypt_KeyAes128_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
#define DBG_INFO(dbg_logger, format, args...)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
int GWEN_Crypt_KeyBlowFish_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
#define GWEN_INHERIT(bt, t)
GWEN_CRYPT_KEY_ENCIPHER_FN GWEN_Crypt_Key_SetEncipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_ENCIPHER_FN f)
int GWEN_Crypt_KeyDes3K_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_Key_new(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize)
uint32_t GWEN_Crypt_KeyAes128_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
uint8_t * GWEN_Crypt_KeyDes3K_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
uint32_t GWEN_Crypt_KeySym_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
uint8_t * GWEN_Crypt_KeySym_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
GWEN_CRYPT_KEY * GWEN_Crypt_Key_fromDb(GWEN_DB_NODE *db)
#define GWEN_INHERIT_GETDATA(bt, t, element)
int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname)