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,
38 GWEN_CRYPT_KEY_SYM *xk;
45 err=gcry_cipher_encrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
58 const uint8_t *pInData,
63 GWEN_CRYPT_KEY_SYM *xk;
70 err=gcry_cipher_decrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
84 GWEN_CRYPT_KEY_SYM *xk;
86 xk=(GWEN_CRYPT_KEY_SYM *) p;
87 if (xk->keyData && xk->keyLen) {
88 memset(xk->keyData, 0, xk->keyLen);
94 gcry_cipher_close(xk->algoHandle);
103 GWEN_CRYPT_KEY_SYM *xk;
125 return GCRY_CIPHER_MODE_NONE;
127 return GCRY_CIPHER_MODE_NONE;
129 return GCRY_CIPHER_MODE_ECB;
131 return GCRY_CIPHER_MODE_CFB;
133 return GCRY_CIPHER_MODE_CBC;
136 return GCRY_CIPHER_MODE_NONE;
148 GWEN_CRYPT_KEY_SYM *xk;
152 enum gcry_random_level q;
166 q=GCRY_STRONG_RANDOM;
170 q=GCRY_VERY_STRONG_RANDOM;
186 keyData=gcry_random_bytes(kbytes, q);
193 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
195 if ((err & GPG_ERR_CODE_MASK)==GPG_ERR_WEAK_KEY) {
208 memset(xk->keyData, 0, xk->keyLen);
223 const uint8_t *kd, uint32_t kl)
226 GWEN_CRYPT_KEY_SYM *xk;
230 if (kl!=gcry_cipher_get_algo_keylen(algo)) {
232 (
int)kl, (
int)gcry_cipher_get_algo_keylen(algo));
256 if (kd==
NULL || kl==0) {
263 xk->keyData=(uint8_t *) malloc(kl);
265 memmove(xk->keyData, kd, kl);
269 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
290 GWEN_CRYPT_KEY_SYM *xk;
334 if (p==
NULL || len==0) {
341 xk->keyData=(uint8_t *) malloc(len);
343 memmove(xk->keyData, p, len);
347 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
361 GWEN_CRYPT_KEY_SYM *xk;
379 "keyData", xk->keyData, xk->keyLen);
390 GWEN_CRYPT_KEY_SYM *xk;
422 err=gcry_cipher_open(&xk->algoHandle,
437 if (p==
NULL || len==0) {
444 xk->keyData=(uint8_t *) malloc(len);
446 memmove(xk->keyData, p, len);
450 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
464 GWEN_CRYPT_KEY_SYM *xk;
485 "keyData", xk->keyData, xk->keyLen);
494 GWEN_CRYPT_KEY_SYM *xk;
506 if (xk->keyData && xk->keyLen) {
507 memset(xk->keyData, 0, xk->keyLen);
512 xk->keyData=(uint8_t *)malloc(kl);
514 memmove(xk->keyData, kd, kl);
518 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
532 GWEN_CRYPT_KEY_SYM *xk;
545 GWEN_CRYPT_KEY_SYM *xk;
574 const uint8_t *kd, uint32_t kl)
581 memmove(new_kd, kd, 16);
582 memmove(new_kd+16, new_kd, 8);
584 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, new_kd, 24);
585 memset(new_kd, 0, 24);
590 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, kd, kl);
599 GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE,
"des3k", db);
618 memmove(new_kd, kd, 16);
619 memmove(new_kd+16, new_kd, 8);
621 memset(new_kd, 0, 24);
648 GWEN_CRYPT_KEY_SYM *xk;
655 if (kd==
NULL || kl==0) {
656 const uint8_t iv[]= {
657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
659 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
662 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
682 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, quality);
688 const uint8_t *kd, uint32_t kl)
691 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
701 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
"blowFish", db);
740 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, quality);
746 const uint8_t *kd, uint32_t kl)
749 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
759 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
"aes128", db);
796 GWEN_CRYPT_KEY_SYM *xk;
803 if (kd==
NULL || kl==0) {
804 const uint8_t iv[]= {
805 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
806 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
808 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
811 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
827 GCRY_CIPHER_AES256, GCRY_CIPHER_SECURE, quality);
833 const uint8_t *kd, uint32_t kl)
836 GCRY_CIPHER_AES256, GCRY_CIPHER_SECURE,
846 GCRY_CIPHER_AES256, GCRY_CIPHER_SECURE,
"aes256", db);
881 GWEN_CRYPT_KEY_SYM *xk;
888 if (kd==
NULL || kl==0) {
889 const uint8_t iv[]= {
890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
893 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
896 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)
int GWEN_Crypt_KeyAes256_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes256_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
#define GWEN_FREE_OBJECT(varname)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes256_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
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_KeyAes256_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
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_KeyAes256_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
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)
uint8_t * GWEN_Crypt_KeyAes256_GetKeyDataPtr(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...)
int GWEN_Crypt_KeyAes256_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
uint8_t * GWEN_Crypt_KeyAes128_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
uint32_t GWEN_Crypt_KeyAes256_GetKeyDataLen(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)