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;
127 return GCRY_CIPHER_MODE_NONE;
138 GWEN_CRYPT_KEY_SYM *xk;
142 enum gcry_random_level q;
152 case 0: q=GCRY_WEAK_RANDOM;
break;
153 case 1: q=GCRY_STRONG_RANDOM;
break;
155 default: q=GCRY_VERY_STRONG_RANDOM;
break;
170 keyData=gcry_random_bytes(kbytes, q);
177 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
179 if ((err & GPG_ERR_CODE_MASK)==GPG_ERR_WEAK_KEY) {
192 memset(xk->keyData, 0, xk->keyLen);
207 const uint8_t *kd, uint32_t kl) {
209 GWEN_CRYPT_KEY_SYM *xk;
213 if (kl!=gcry_cipher_get_algo_keylen(algo)) {
215 (
int)kl, (
int)gcry_cipher_get_algo_keylen(algo));
239 if (kd==
NULL || kl==0) {
246 xk->keyData=(uint8_t*) malloc(kl);
248 memmove(xk->keyData, kd, kl);
252 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
272 GWEN_CRYPT_KEY_SYM *xk;
316 if (p==
NULL || len==0) {
323 xk->keyData=(uint8_t*) malloc(len);
325 memmove(xk->keyData, p, len);
329 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
342 GWEN_CRYPT_KEY_SYM *xk;
360 "keyData", xk->keyData, xk->keyLen);
370 GWEN_CRYPT_KEY_SYM *xk;
402 err=gcry_cipher_open(&xk->algoHandle,
417 if (p==
NULL || len==0) {
424 xk->keyData=(uint8_t*) malloc(len);
426 memmove(xk->keyData, p, len);
430 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
443 GWEN_CRYPT_KEY_SYM *xk;
464 "keyData", xk->keyData, xk->keyLen);
472 GWEN_CRYPT_KEY_SYM *xk;
484 if (xk->keyData && xk->keyLen) {
485 memset(xk->keyData, 0, xk->keyLen);
490 xk->keyData=(uint8_t*)malloc(kl);
492 memmove(xk->keyData, kd, kl);
496 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
509 GWEN_CRYPT_KEY_SYM *xk;
521 GWEN_CRYPT_KEY_SYM *xk;
549 const uint8_t *kd, uint32_t kl) {
555 memmove(new_kd, kd, 16);
556 memmove(new_kd+16, new_kd, 8);
558 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, new_kd, 24);
559 memset(new_kd, 0, 24);
564 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, kd, kl);
572 GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE,
"des3k", db);
589 memmove(new_kd, kd, 16);
590 memmove(new_kd+16, new_kd, 8);
592 memset(new_kd, 0, 24);
616 GWEN_CRYPT_KEY_SYM *xk;
623 if (kd==
NULL || kl==0) {
625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
627 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
630 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
649 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, quality);
655 const uint8_t *kd, uint32_t kl) {
657 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
666 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
"blowFish", db);
700 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, quality);
706 const uint8_t *kd, uint32_t kl) {
708 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
717 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
"aes128", db);
749 GWEN_CRYPT_KEY_SYM *xk;
756 if (kd==
NULL || kl==0) {
758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
759 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
761 err=gcry_cipher_setiv(xk->algoHandle, iv,
sizeof(iv));
764 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);