gwenhywfar 5.12.0
cryptkeysym.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Wed Mar 16 2005
3 copyright : (C) 2005 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14#define DISABLE_DEBUGLOG
15
16
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>
22
23
24
25GWEN_INHERIT(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM)
26
27
28
29
30
31
33 const uint8_t *pInData,
34 uint32_t inLen,
35 uint8_t *pOutData,
36 uint32_t *pOutLen)
37{
38 GWEN_CRYPT_KEY_SYM *xk;
39 gcry_error_t err;
40
41 assert(k);
42 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
43 assert(xk);
44
45 err=gcry_cipher_encrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
46 if (err) {
47 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_encrypt(): %s", gcry_strerror(err));
48 return GWEN_ERROR_GENERIC;
49 }
50 *pOutLen=inLen;
51
52 return 0;
53}
54
55
56
58 const uint8_t *pInData,
59 uint32_t inLen,
60 uint8_t *pOutData,
61 uint32_t *pOutLen)
62{
63 GWEN_CRYPT_KEY_SYM *xk;
64 gcry_error_t err;
65
66 assert(k);
67 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
68 assert(xk);
69
70 err=gcry_cipher_decrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
71 if (err) {
72 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_decrypt(): %s", gcry_strerror(err));
73 return GWEN_ERROR_GENERIC;
74 }
75 *pOutLen=inLen;
76
77 return 0;
78}
79
80
81
83{
84 GWEN_CRYPT_KEY_SYM *xk;
85
86 xk=(GWEN_CRYPT_KEY_SYM *) p;
87 if (xk->keyData && xk->keyLen) {
88 memset(xk->keyData, 0, xk->keyLen);
89 free(xk->keyData);
90 }
91 xk->keyData=NULL;
92 xk->keyLen=0;
93 if (xk->algoValid)
94 gcry_cipher_close(xk->algoHandle);
96}
97
98
99
101{
102 GWEN_CRYPT_KEY *nk;
103 GWEN_CRYPT_KEY_SYM *xk;
104
105 assert(k);
106 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
107 assert(xk);
108
111 xk->mode,
112 xk->algo,
113 GCRY_CIPHER_SECURE,
114 xk->keyData,
115 xk->keyLen);
116 return nk;
117}
118
119
120
122{
123 switch (mode) {
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;
134 }
135
136 return GCRY_CIPHER_MODE_NONE;
137}
138
139
140
143 int algo,
144 unsigned int flags,
145 int quality)
146{
148 GWEN_CRYPT_KEY_SYM *xk;
149 int kbytes;
150 uint8_t *keyData;
151 gcry_error_t err;
152 enum gcry_random_level q;
153
154 k=GWEN_Crypt_Key_new(cryptAlgoId, keySize);
155 assert(k);
156 GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
160
161 switch (quality) {
162 case 0:
163 q=GCRY_WEAK_RANDOM;
164 break;
165 case 1:
166 q=GCRY_STRONG_RANDOM;
167 break;
168 case 2:
169 default:
170 q=GCRY_VERY_STRONG_RANDOM;
171 break;
172 }
173
174 /* open algo */
175 err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags);
176 if (err) {
177 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
179 return NULL;
180 }
181 xk->algoValid=1;
182 xk->mode=mode;
183
184 while (1) {
185 kbytes=keySize;
186 keyData=gcry_random_bytes(kbytes, q);
187
188 /* store key data */
189 xk->keyData=keyData;
190 xk->keyLen=kbytes;
191
192 /* set key in algo */
193 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
194 if (err) {
195 if ((err & GPG_ERR_CODE_MASK)==GPG_ERR_WEAK_KEY) {
196 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): weak key, will try again");
197 }
198 else {
199 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %d [%s]", err, gcry_strerror(err));
201 return NULL;
202 }
203 }
204 else
205 break;
206
207 /* try it again */
208 memset(xk->keyData, 0, xk->keyLen);
209 free(xk->keyData);
210 xk->keyData=NULL;
211 xk->keyLen=0;
212 }
213
214 return k;
215}
216
217
218
221 int algo,
222 unsigned int flags,
223 const uint8_t *kd, uint32_t kl)
224{
226 GWEN_CRYPT_KEY_SYM *xk;
227 gcry_error_t err;
228
229#if 0
230 if (kl!=gcry_cipher_get_algo_keylen(algo)) {
231 DBG_ERROR(GWEN_LOGDOMAIN, "Invalid key length (is %d, should be %d)",
232 (int)kl, (int)gcry_cipher_get_algo_keylen(algo));
233 return NULL;
234 }
235#endif
236
237 k=GWEN_Crypt_Key_new(cryptAlgoId, keySize);
238 assert(k);
239 GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
243
244 /* open algo */
245 err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags);
246 if (err) {
247 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
249 return NULL;
250 }
251 xk->algoValid=1;
252 xk->mode=mode;
253 xk->algo=algo;
254
255 /* read key data */
256 if (kd==NULL || kl==0) {
257 DBG_INFO(GWEN_LOGDOMAIN, "No key data");
259 return NULL;
260 }
261
262 /* store key data */
263 xk->keyData=(uint8_t *) malloc(kl);
264 assert(xk->keyData);
265 memmove(xk->keyData, kd, kl);
266 xk->keyLen=kl;
267
268 /* set key in algo */
269 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
270 if (err) {
271 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
273 return NULL;
274 }
275
276 return k;
277}
278
279
280
283 int algo,
284 unsigned int flags,
285 const char *gname,
286 GWEN_DB_NODE *db)
287{
288 gcry_error_t err;
290 GWEN_CRYPT_KEY_SYM *xk;
291 //unsigned int nbits;
292 GWEN_DB_NODE *dbR;
293 unsigned int len;
294 const char *p;
295
297 if (dbR==NULL) {
298 DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an %s key (no %s group)",
299 gname, gname);
300 return NULL;
301 }
302
304 if (k==NULL) {
305 DBG_INFO(GWEN_LOGDOMAIN, "here");
306 return NULL;
307 }
308 if (GWEN_Crypt_Key_GetCryptAlgoId(k)!=cryptAlgoId) {
309 DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an RSA key");
311 return NULL;
312 }
313 //nbits=GWEN_Crypt_Key_GetKeySize(k)*8;
314
315 /* extend key */
316 GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
320
321 /* open algo */
322 err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags);
323 if (err) {
324 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
326 return NULL;
327 }
328 xk->algoValid=1;
329 xk->mode=mode;
330 xk->algo=algo;
331
332 /* read key data */
333 p=GWEN_DB_GetBinValue(dbR, "keyData", 0, NULL, 0, &len);
334 if (p==NULL || len==0) {
335 DBG_INFO(GWEN_LOGDOMAIN, "No key data");
337 return NULL;
338 }
339
340 /* store key data */
341 xk->keyData=(uint8_t *) malloc(len);
342 assert(xk->keyData);
343 memmove(xk->keyData, p, len);
344 xk->keyLen=len;
345
346 /* set key in algo */
347 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
348 if (err) {
349 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
351 return NULL;
352 }
353
354 return k;
355}
356
357
358
359int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname)
360{
361 GWEN_CRYPT_KEY_SYM *xk;
362 GWEN_DB_NODE *dbR;
363 int rv;
364
365 assert(k);
366 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
367 assert(xk);
368
369 /* let key module wirte basic key info */
370 rv=GWEN_Crypt_Key_toDb(k, db);
371 if (rv)
372 return rv;
373
374 /* write sym stuff into our own group */
376 assert(dbR);
377
379 "keyData", xk->keyData, xk->keyLen);
380
381 return 0;
382}
383
384
385
387{
388 gcry_error_t err;
390 GWEN_CRYPT_KEY_SYM *xk;
391 //unsigned int nbits;
392 GWEN_DB_NODE *dbR;
393 unsigned int len;
394 const char *gname;
395 const char *p;
396
398 if (k==NULL) {
399 DBG_INFO(GWEN_LOGDOMAIN, "here");
400 return NULL;
401 }
402
404
406 if (dbR==NULL) {
407 DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an %s key (no %s group)",
408 gname, gname);
410 return NULL;
411 }
412
413 //nbits=GWEN_Crypt_Key_GetKeySize(k)*8;
414
415 /* extend key */
416 GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
420
421 /* open algo */
422 err=gcry_cipher_open(&xk->algoHandle,
425 GCRY_CIPHER_SECURE);
426 if (err) {
427 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
429 return NULL;
430 }
431 xk->algoValid=1;
432 xk->mode=mode;
434
435 /* read key data */
436 p=GWEN_DB_GetBinValue(dbR, "keyData", 0, NULL, 0, &len);
437 if (p==NULL || len==0) {
438 DBG_INFO(GWEN_LOGDOMAIN, "No key data");
440 return NULL;
441 }
442
443 /* store key data */
444 xk->keyData=(uint8_t *) malloc(len);
445 assert(xk->keyData);
446 memmove(xk->keyData, p, len);
447 xk->keyLen=len;
448
449 /* set key in algo */
450 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
451 if (err) {
452 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
454 return NULL;
455 }
456
457 return k;
458}
459
460
461
463{
464 GWEN_CRYPT_KEY_SYM *xk;
465 GWEN_DB_NODE *dbR;
466 int rv;
467 const char *gname;
468
469 assert(k);
470 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
471 assert(xk);
472
473 /* let key module wirte basic key info */
474 rv=GWEN_Crypt_Key_toDb(k, db);
475 if (rv)
476 return rv;
477
479
480 /* write sym stuff into our own group */
482 assert(dbR);
483
485 "keyData", xk->keyData, xk->keyLen);
486
487 return 0;
488}
489
490
491
492int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
493{
494 GWEN_CRYPT_KEY_SYM *xk;
495 gcry_error_t err;
496
497 if (!kd || !kl) {
498 DBG_ERROR(GWEN_LOGDOMAIN, "Empty keydata not allowed");
499 return GWEN_ERROR_INVALID;
500 }
501
502 assert(k);
503 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
504 assert(xk);
505
506 if (xk->keyData && xk->keyLen) {
507 memset(xk->keyData, 0, xk->keyLen);
508 free(xk->keyData);
509 }
510
511 /* store key data */
512 xk->keyData=(uint8_t *)malloc(kl);
513 assert(xk->keyData);
514 memmove(xk->keyData, kd, kl);
515 xk->keyLen=kl;
516
517 /* set key in algo */
518 err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
519 if (err) {
520 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
522 return GWEN_ERROR_GENERIC;
523 }
524
525 return 0;
526}
527
528
529
531{
532 GWEN_CRYPT_KEY_SYM *xk;
533
534 assert(k);
535 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
536 assert(xk);
537
538 return xk->keyData;
539}
540
541
542
544{
545 GWEN_CRYPT_KEY_SYM *xk;
546
547 assert(k);
548 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
549 assert(xk);
550
551 return xk->keyLen;
552}
553
554
555
556
558 int keySize,
559 int quality)
560{
561 uint8_t kd[16];
563
564 GWEN_Crypt_Random(quality, kd, 16);
565 k=GWEN_Crypt_KeyDes3K_fromData(mode, keySize, kd, 16);
566 memset(kd, 0, 16);
567
568 return k;
569}
570
571
572
574 const uint8_t *kd, uint32_t kl)
575{
576 if (kl==16) {
577 uint8_t new_kd[24];
579
580 /* 3key DES with only two keys, copy key1 as key3 */
581 memmove(new_kd, kd, 16);
582 memmove(new_kd+16, new_kd, 8);
583 k=GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Des3K, 24,
584 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, new_kd, 24);
585 memset(new_kd, 0, 24);
586 return k;
587 }
588 else
589 return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Des3K, keySize,
590 mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, kd, kl);
591}
592
593
594
596 GWEN_DB_NODE *db)
597{
598 return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Des3K, mode,
599 GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, "des3k", db);
600}
601
602
603
605{
606 return GWEN_Crypt_KeySym__toDb(k, db, "des3k");
607}
608
609
610
611int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
612{
613 if (kl==16) {
614 uint8_t new_kd[24];
615 int rv;
616
617 /* 3key DES with only two keys, copy key1 as key3 */
618 memmove(new_kd, kd, 16);
619 memmove(new_kd+16, new_kd, 8);
620 rv=GWEN_Crypt_KeySym_SetKeyData(k, new_kd, 24);
621 memset(new_kd, 0, 24);
622 return rv;
623 }
624 else
625 return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
626}
627
628
629
634
635
636
641
642
643
645 const uint8_t *kd,
646 uint32_t kl)
647{
648 GWEN_CRYPT_KEY_SYM *xk;
649 gcry_error_t err;
650
651 assert(k);
652 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
653 assert(xk);
654
655 if (kd==NULL || kl==0) {
656 const uint8_t iv[]= {
657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
658 };
659 err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv));
660 }
661 else
662 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
663 if (err) {
664 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err));
665 return GWEN_ERROR_GENERIC;
666 }
667
668 return 0;
669}
670
671
672
673
674
675
676
678 int keySize,
679 int quality)
680{
681 return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_BlowFish, keySize, mode,
682 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, quality);
683}
684
685
686
688 const uint8_t *kd, uint32_t kl)
689{
690 return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_BlowFish, keySize, mode,
691 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
692 kd, kl);
693}
694
695
696
698 GWEN_DB_NODE *db)
699{
700 return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_BlowFish, mode,
701 GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, "blowFish", db);
702}
703
704
705
707{
708 return GWEN_Crypt_KeySym__toDb(k, db, "blowFish");
709}
710
711
712
713int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
714{
715 return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
716}
717
718
719
724
725
726
731
732
733
734
736 int keySize,
737 int quality)
738{
739 return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_Aes128, keySize, mode,
740 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, quality);
741}
742
743
744
746 const uint8_t *kd, uint32_t kl)
747{
748 return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Aes128, keySize, mode,
749 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
750 kd, kl);
751}
752
753
754
756 GWEN_DB_NODE *db)
757{
758 return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Aes128, mode,
759 GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, "aes128", db);
760}
761
762
763
765{
766 return GWEN_Crypt_KeySym__toDb(k, db, "aes128");
767}
768
769
770
771int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
772{
773 return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
774}
775
776
777
782
783
784
789
790
791
793 const uint8_t *kd,
794 uint32_t kl)
795{
796 GWEN_CRYPT_KEY_SYM *xk;
797 gcry_error_t err;
798
799 assert(k);
800 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
801 assert(xk);
802
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
807 };
808 err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv));
809 }
810 else
811 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
812 if (err) {
813 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err));
814 return GWEN_ERROR_GENERIC;
815 }
816
817 return 0;
818}
819
820
821
823 int keySize,
824 int quality)
825{
826 return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_Aes256, keySize, mode,
827 GCRY_CIPHER_AES256, GCRY_CIPHER_SECURE, quality);
828}
829
830
831
833 const uint8_t *kd, uint32_t kl)
834{
835 return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Aes256, keySize, mode,
836 GCRY_CIPHER_AES256, GCRY_CIPHER_SECURE,
837 kd, kl);
838}
839
840
841
843 GWEN_DB_NODE *db)
844{
845 return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Aes256, mode,
846 GCRY_CIPHER_AES256, GCRY_CIPHER_SECURE, "aes256", db);
847}
848
849
850
852{
853 return GWEN_Crypt_KeySym__toDb(k, db, "aes256");
854}
855
856
857
858int GWEN_Crypt_KeyAes256_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
859{
860 return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
861}
862
863
864
869
870
871
876
878 const uint8_t *kd,
879 uint32_t kl)
880{
881 GWEN_CRYPT_KEY_SYM *xk;
882 gcry_error_t err;
883
884 assert(k);
885 xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
886 assert(xk);
887
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
892 };
893 err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv));
894 }
895 else
896 err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
897 if (err) {
898 DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err));
899 return GWEN_ERROR_GENERIC;
900 }
901
902 return 0;
903}
904
905
906
907
908
#define NULL
Definition binreloc.c:300
const char * GWEN_Crypt_CryptAlgoId_toString(GWEN_CRYPT_CRYPTALGOID a)
Definition cryptalgo.c:53
GWEN_CRYPT_CRYPTALGOID
Definition cryptalgo.h:52
GWEN_CRYPT_CRYPTMODE
Definition cryptalgo.h:55
@ GWEN_Crypt_CryptMode_Unknown
Definition cryptalgo.h:56
@ GWEN_Crypt_CryptMode_Ecb
Definition cryptalgo.h:58
@ GWEN_Crypt_CryptMode_Cbc
Definition cryptalgo.h:60
@ GWEN_Crypt_CryptMode_Cfb
Definition cryptalgo.h:59
@ GWEN_Crypt_CryptMode_None
Definition cryptalgo.h:57
void GWEN_Crypt_Random(int quality, uint8_t *buffer, uint32_t len)
Definition cryptdefs.c:551
GWEN_CRYPT_KEY * GWEN_Crypt_Key_new(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize)
Definition cryptkey.c:63
void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k)
Definition cryptkey.c:154
GWEN_CRYPT_KEY * GWEN_Crypt_Key_fromDb(GWEN_DB_NODE *db)
Definition cryptkey.c:80
GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Key_GetCryptAlgoId(const GWEN_CRYPT_KEY *k)
Definition cryptkey.c:171
int GWEN_Crypt_Key_GetKeySize(const GWEN_CRYPT_KEY *k)
Definition cryptkey.c:179
GWEN_CRYPT_KEY_ENCIPHER_FN GWEN_Crypt_Key_SetEncipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_ENCIPHER_FN f)
Definition cryptkey.c:245
int GWEN_Crypt_Key_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
Definition cryptkey.c:117
GWEN_CRYPT_KEY_DECIPHER_FN GWEN_Crypt_Key_SetDecipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_DECIPHER_FN f)
Definition cryptkey.c:259
struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY
Definition cryptkey.h:26
uint8_t * GWEN_Crypt_KeySym_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_dup(const GWEN_CRYPT_KEY *k)
uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_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)
int GWEN_Crypt_KeyAes256_SetIV(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_KeyDes3K_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
int GWEN_Crypt_KeyAes128_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
uint8_t * GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes256_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
uint8_t * GWEN_Crypt_KeyDes3K_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
int GWEN_Crypt_KeyAes128_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
int GWEN_Crypt_KeyBlowFish_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
int GWEN_Crypt_KeySym_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
GWENHYWFAR_CB int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
Definition cryptkeysym.c:57
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)
int GWEN_Crypt_KeyAes256_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
enum gcry_cipher_modes GWEN_Crypt_KeySym__MyMode2GMode(GWEN_CRYPT_CRYPTMODE mode)
uint32_t GWEN_Crypt_KeySym_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t 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)
Definition cryptkeysym.c:32
uint32_t GWEN_Crypt_KeyAes256_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
uint32_t GWEN_Crypt_KeyAes128_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes256_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes256_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
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)
uint8_t * GWEN_Crypt_KeyAes256_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
int GWEN_Crypt_KeyDes3K_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
uint8_t * GWEN_Crypt_KeyAes128_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
GWENHYWFAR_CB void GWEN_Crypt_KeySym_freeData(GWEN_UNUSED void *bp, void *p)
Definition cryptkeysym.c:82
int GWEN_Crypt_KeyAes256_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_Generate(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, int quality)
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
Definition db.c:1381
int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize)
Definition db.c:1269
const void * GWEN_DB_GetBinValue(GWEN_DB_NODE *n, const char *path, int idx, const void *defVal, unsigned int defValSize, unsigned int *returnValueSize)
Definition db.c:1237
#define GWEN_DB_FLAGS_OVERWRITE_GROUPS
Definition db.h:123
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition db.h:121
struct GWEN_DB_NODE GWEN_DB_NODE
Definition db.h:228
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
#define GWEN_ERROR_INVALID
Definition error.h:67
#define GWEN_ERROR_GENERIC
Definition error.h:62
#define GWEN_UNUSED
#define GWENHYWFAR_CB
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition inherit.h:300
#define GWEN_INHERIT(bt, t)
Definition inherit.h:264
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition inherit.h:279
#define GWEN_LOGDOMAIN
Definition logger.h:35
#define GWEN_FREE_OBJECT(varname)
Definition memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition memory.h:55
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
Definition path.h:84