gwenhywfar  4.99.8beta
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 
25 GWEN_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  GWEN_CRYPT_KEY_SYM *xk;
38  gcry_error_t err;
39 
40  assert(k);
41  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
42  assert(xk);
43 
44  err=gcry_cipher_encrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
45  if (err) {
46  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_encrypt(): %s", gcry_strerror(err));
47  return GWEN_ERROR_GENERIC;
48  }
49  *pOutLen=inLen;
50 
51  return 0;
52 }
53 
54 
55 
57  const uint8_t *pInData,
58  uint32_t inLen,
59  uint8_t *pOutData,
60  uint32_t *pOutLen) {
61  GWEN_CRYPT_KEY_SYM *xk;
62  gcry_error_t err;
63 
64  assert(k);
65  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
66  assert(xk);
67 
68  err=gcry_cipher_decrypt(xk->algoHandle, pOutData, inLen, pInData, inLen);
69  if (err) {
70  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_decrypt(): %s", gcry_strerror(err));
71  return GWEN_ERROR_GENERIC;
72  }
73  *pOutLen=inLen;
74 
75  return 0;
76 }
77 
78 
79 
81 void GWEN_Crypt_KeySym_freeData(GWEN_UNUSED void *bp, void *p) {
82  GWEN_CRYPT_KEY_SYM *xk;
83 
84  xk=(GWEN_CRYPT_KEY_SYM*) p;
85  if (xk->keyData && xk->keyLen) {
86  memset(xk->keyData, 0, xk->keyLen);
87  free(xk->keyData);
88  }
89  xk->keyData=NULL;
90  xk->keyLen=0;
91  if (xk->algoValid)
92  gcry_cipher_close(xk->algoHandle);
93  GWEN_FREE_OBJECT(xk);
94 }
95 
96 
97 
99  GWEN_CRYPT_KEY *nk;
100  GWEN_CRYPT_KEY_SYM *xk;
101 
102  assert(k);
103  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
104  assert(xk);
105 
108  xk->mode,
109  xk->algo,
110  GCRY_CIPHER_SECURE,
111  xk->keyData,
112  xk->keyLen);
113  return nk;
114 }
115 
116 
117 
119  switch(mode) {
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;
130  }
131 
132  return GCRY_CIPHER_MODE_NONE;
133 }
134 
135 
136 
139  int algo,
140  unsigned int flags,
141  int quality) {
142  GWEN_CRYPT_KEY *k;
143  GWEN_CRYPT_KEY_SYM *xk;
144  int kbytes;
145  uint8_t *keyData;
146  gcry_error_t err;
147  enum gcry_random_level q;
148 
149  k=GWEN_Crypt_Key_new(cryptAlgoId, keySize);
150  assert(k);
151  GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
155 
156  switch(quality) {
157  case 0:
158  q=GCRY_WEAK_RANDOM;
159  break;
160  case 1:
161  q=GCRY_STRONG_RANDOM;
162  break;
163  case 2:
164  default:
165  q=GCRY_VERY_STRONG_RANDOM;
166  break;
167  }
168 
169  /* open algo */
170  err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags);
171  if (err) {
172  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
174  return NULL;
175  }
176  xk->algoValid=1;
177  xk->mode=mode;
178 
179  while(1) {
180  kbytes=keySize;
181  keyData=gcry_random_bytes(kbytes, q);
182 
183  /* store key data */
184  xk->keyData=keyData;
185  xk->keyLen=kbytes;
186 
187  /* set key in algo */
188  err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
189  if (err) {
190  if ((err & GPG_ERR_CODE_MASK)==GPG_ERR_WEAK_KEY) {
191  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): weak key, will try again");
192  }
193  else {
194  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %d [%s]", err, gcry_strerror(err));
196  return NULL;
197  }
198  }
199  else
200  break;
201 
202  /* try it again */
203  memset(xk->keyData, 0, xk->keyLen);
204  free(xk->keyData);
205  xk->keyData=NULL;
206  xk->keyLen=0;
207  }
208 
209  return k;
210 }
211 
212 
213 
216  int algo,
217  unsigned int flags,
218  const uint8_t *kd, uint32_t kl) {
219  GWEN_CRYPT_KEY *k;
220  GWEN_CRYPT_KEY_SYM *xk;
221  gcry_error_t err;
222 
223 #if 0
224  if (kl!=gcry_cipher_get_algo_keylen(algo)) {
225  DBG_ERROR(GWEN_LOGDOMAIN, "Invalid key length (is %d, should be %d)",
226  (int)kl, (int)gcry_cipher_get_algo_keylen(algo));
227  return NULL;
228  }
229 #endif
230 
231  k=GWEN_Crypt_Key_new(cryptAlgoId, keySize);
232  assert(k);
233  GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
237 
238  /* open algo */
239  err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags);
240  if (err) {
241  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
243  return NULL;
244  }
245  xk->algoValid=1;
246  xk->mode=mode;
247  xk->algo=algo;
248 
249  /* read key data */
250  if (kd==NULL || kl==0) {
251  DBG_INFO(GWEN_LOGDOMAIN, "No key data");
253  return NULL;
254  }
255 
256  /* store key data */
257  xk->keyData=(uint8_t*) malloc(kl);
258  assert(xk->keyData);
259  memmove(xk->keyData, kd, kl);
260  xk->keyLen=kl;
261 
262  /* set key in algo */
263  err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
264  if (err) {
265  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
267  return NULL;
268  }
269 
270  return k;
271 }
272 
273 
274 
277  int algo,
278  unsigned int flags,
279  const char *gname,
280  GWEN_DB_NODE *db) {
281  gcry_error_t err;
282  GWEN_CRYPT_KEY *k;
283  GWEN_CRYPT_KEY_SYM *xk;
284  //unsigned int nbits;
285  GWEN_DB_NODE *dbR;
286  unsigned int len;
287  const char *p;
288 
290  if (dbR==NULL) {
291  DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an %s key (no %s group)",
292  gname, gname);
293  return NULL;
294  }
295 
296  k=GWEN_Crypt_Key_fromDb(db);
297  if (k==NULL) {
298  DBG_INFO(GWEN_LOGDOMAIN, "here");
299  return NULL;
300  }
301  if (GWEN_Crypt_Key_GetCryptAlgoId(k)!=cryptAlgoId) {
302  DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an RSA key");
304  return NULL;
305  }
306  //nbits=GWEN_Crypt_Key_GetKeySize(k)*8;
307 
308  /* extend key */
309  GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
313 
314  /* open algo */
315  err=gcry_cipher_open(&xk->algoHandle, algo, GWEN_Crypt_KeySym__MyMode2GMode(mode), flags);
316  if (err) {
317  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
319  return NULL;
320  }
321  xk->algoValid=1;
322  xk->mode=mode;
323  xk->algo=algo;
324 
325  /* read key data */
326  p=GWEN_DB_GetBinValue(dbR, "keyData", 0, NULL, 0, &len);
327  if (p==NULL || len==0) {
328  DBG_INFO(GWEN_LOGDOMAIN, "No key data");
330  return NULL;
331  }
332 
333  /* store key data */
334  xk->keyData=(uint8_t*) malloc(len);
335  assert(xk->keyData);
336  memmove(xk->keyData, p, len);
337  xk->keyLen=len;
338 
339  /* set key in algo */
340  err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
341  if (err) {
342  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
344  return NULL;
345  }
346 
347  return k;
348 }
349 
350 
351 
352 int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname) {
353  GWEN_CRYPT_KEY_SYM *xk;
354  GWEN_DB_NODE *dbR;
355  int rv;
356 
357  assert(k);
358  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
359  assert(xk);
360 
361  /* let key module wirte basic key info */
362  rv=GWEN_Crypt_Key_toDb(k, db);
363  if (rv)
364  return rv;
365 
366  /* write sym stuff into our own group */
368  assert(dbR);
369 
371  "keyData", xk->keyData, xk->keyLen);
372 
373  return 0;
374 }
375 
376 
377 
379  gcry_error_t err;
380  GWEN_CRYPT_KEY *k;
381  GWEN_CRYPT_KEY_SYM *xk;
382  //unsigned int nbits;
383  GWEN_DB_NODE *dbR;
384  unsigned int len;
385  const char *gname;
386  const char *p;
387 
388  k=GWEN_Crypt_Key_fromDb(db);
389  if (k==NULL) {
390  DBG_INFO(GWEN_LOGDOMAIN, "here");
391  return NULL;
392  }
393 
395 
397  if (dbR==NULL) {
398  DBG_ERROR(GWEN_LOGDOMAIN, "DB does not contain an %s key (no %s group)",
399  gname, gname);
401  return NULL;
402  }
403 
404  //nbits=GWEN_Crypt_Key_GetKeySize(k)*8;
405 
406  /* extend key */
407  GWEN_NEW_OBJECT(GWEN_CRYPT_KEY_SYM, xk);
411 
412  /* open algo */
413  err=gcry_cipher_open(&xk->algoHandle,
416  GCRY_CIPHER_SECURE);
417  if (err) {
418  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_open(): %s", gcry_strerror(err));
420  return NULL;
421  }
422  xk->algoValid=1;
423  xk->mode=mode;
424  xk->algo=GWEN_Crypt_Key_GetCryptAlgoId(k);
425 
426  /* read key data */
427  p=GWEN_DB_GetBinValue(dbR, "keyData", 0, NULL, 0, &len);
428  if (p==NULL || len==0) {
429  DBG_INFO(GWEN_LOGDOMAIN, "No key data");
431  return NULL;
432  }
433 
434  /* store key data */
435  xk->keyData=(uint8_t*) malloc(len);
436  assert(xk->keyData);
437  memmove(xk->keyData, p, len);
438  xk->keyLen=len;
439 
440  /* set key in algo */
441  err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
442  if (err) {
443  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
445  return NULL;
446  }
447 
448  return k;
449 }
450 
451 
452 
454  GWEN_CRYPT_KEY_SYM *xk;
455  GWEN_DB_NODE *dbR;
456  int rv;
457  const char *gname;
458 
459  assert(k);
460  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
461  assert(xk);
462 
463  /* let key module wirte basic key info */
464  rv=GWEN_Crypt_Key_toDb(k, db);
465  if (rv)
466  return rv;
467 
469 
470  /* write sym stuff into our own group */
472  assert(dbR);
473 
475  "keyData", xk->keyData, xk->keyLen);
476 
477  return 0;
478 }
479 
480 
481 
482 int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) {
483  GWEN_CRYPT_KEY_SYM *xk;
484  gcry_error_t err;
485 
486  if (!kd || !kl) {
487  DBG_ERROR(GWEN_LOGDOMAIN, "Empty keydata not allowed");
488  return GWEN_ERROR_INVALID;
489  }
490 
491  assert(k);
492  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
493  assert(xk);
494 
495  if (xk->keyData && xk->keyLen) {
496  memset(xk->keyData, 0, xk->keyLen);
497  free(xk->keyData);
498  }
499 
500  /* store key data */
501  xk->keyData=(uint8_t*)malloc(kl);
502  assert(xk->keyData);
503  memmove(xk->keyData, kd, kl);
504  xk->keyLen=kl;
505 
506  /* set key in algo */
507  err=gcry_cipher_setkey(xk->algoHandle, xk->keyData, xk->keyLen);
508  if (err) {
509  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setkey(): %s", gcry_strerror(err));
511  return GWEN_ERROR_GENERIC;
512  }
513 
514  return 0;
515 }
516 
517 
518 
520  GWEN_CRYPT_KEY_SYM *xk;
521 
522  assert(k);
523  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
524  assert(xk);
525 
526  return xk->keyData;
527 }
528 
529 
530 
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->keyLen;
539 }
540 
541 
542 
543 
545  int keySize,
546  int quality) {
547  uint8_t kd[16];
548  GWEN_CRYPT_KEY *k;
549 
550  GWEN_Crypt_Random(quality, kd, 16);
551  k=GWEN_Crypt_KeyDes3K_fromData(mode, keySize, kd, 16);
552  memset(kd, 0, 16);
553 
554  return k;
555 }
556 
557 
558 
560  const uint8_t *kd, uint32_t kl) {
561  if (kl==16) {
562  uint8_t new_kd[24];
563  GWEN_CRYPT_KEY *k;
564 
565  /* 3key DES with only two keys, copy key1 as key3 */
566  memmove(new_kd, kd, 16);
567  memmove(new_kd+16, new_kd, 8);
568  k=GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Des3K, 24,
569  mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, new_kd, 24);
570  memset(new_kd, 0, 24);
571  return k;
572  }
573  else
574  return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Des3K, keySize,
575  mode, GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, kd, kl);
576 }
577 
578 
579 
581  GWEN_DB_NODE *db) {
582  return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Des3K, mode,
583  GCRY_CIPHER_3DES, GCRY_CIPHER_SECURE, "des3k", db);
584 }
585 
586 
587 
589  return GWEN_Crypt_KeySym__toDb(k, db, "des3k");
590 }
591 
592 
593 
594 int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) {
595  if (kl==16) {
596  uint8_t new_kd[24];
597  int rv;
598 
599  /* 3key DES with only two keys, copy key1 as key3 */
600  memmove(new_kd, kd, 16);
601  memmove(new_kd+16, new_kd, 8);
602  rv=GWEN_Crypt_KeySym_SetKeyData(k, new_kd, 24);
603  memset(new_kd, 0, 24);
604  return rv;
605  }
606  else
607  return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
608 }
609 
610 
611 
614 }
615 
616 
617 
620 }
621 
622 
623 
625  const uint8_t *kd,
626  uint32_t kl) {
627  GWEN_CRYPT_KEY_SYM *xk;
628  gcry_error_t err;
629 
630  assert(k);
631  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
632  assert(xk);
633 
634  if (kd==NULL || kl==0) {
635  const uint8_t iv[]= {
636  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
637  };
638  err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv));
639  }
640  else
641  err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
642  if (err) {
643  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err));
644  return GWEN_ERROR_GENERIC;
645  }
646 
647  return 0;
648 }
649 
650 
651 
652 
653 
654 
655 
657  int keySize,
658  int quality) {
659  return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_BlowFish, keySize, mode,
660  GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, quality);
661 }
662 
663 
664 
666  const uint8_t *kd, uint32_t kl) {
667  return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_BlowFish, keySize, mode,
668  GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE,
669  kd, kl);
670 }
671 
672 
673 
675  GWEN_DB_NODE *db) {
676  return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_BlowFish, mode,
677  GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_SECURE, "blowFish", db);
678 }
679 
680 
681 
683  return GWEN_Crypt_KeySym__toDb(k, db, "blowFish");
684 }
685 
686 
687 
688 int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) {
689  return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
690 }
691 
692 
693 
696 }
697 
698 
699 
702 }
703 
704 
705 
706 
708  int keySize,
709  int quality) {
710  return GWEN_Crypt_KeySym_Generate(GWEN_Crypt_CryptAlgoId_Aes128, keySize, mode,
711  GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, quality);
712 }
713 
714 
715 
717  const uint8_t *kd, uint32_t kl) {
718  return GWEN_Crypt_KeySym_fromData(GWEN_Crypt_CryptAlgoId_Aes128, keySize, mode,
719  GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE,
720  kd, kl);
721 }
722 
723 
724 
726  GWEN_DB_NODE *db) {
727  return GWEN_Crypt_KeySym__fromDb(GWEN_Crypt_CryptAlgoId_Aes128, mode,
728  GCRY_CIPHER_AES128, GCRY_CIPHER_SECURE, "aes128", db);
729 }
730 
731 
732 
734  return GWEN_Crypt_KeySym__toDb(k, db, "aes128");
735 }
736 
737 
738 
739 int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl) {
740  return GWEN_Crypt_KeySym_SetKeyData(k, kd, kl);
741 }
742 
743 
744 
747 }
748 
749 
750 
753 }
754 
755 
756 
758  const uint8_t *kd,
759  uint32_t kl) {
760  GWEN_CRYPT_KEY_SYM *xk;
761  gcry_error_t err;
762 
763  assert(k);
764  xk=GWEN_INHERIT_GETDATA(GWEN_CRYPT_KEY, GWEN_CRYPT_KEY_SYM, k);
765  assert(xk);
766 
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
771  };
772  err=gcry_cipher_setiv(xk->algoHandle, iv, sizeof(iv));
773  }
774  else
775  err=gcry_cipher_setiv(xk->algoHandle, kd, kl);
776  if (err) {
777  DBG_INFO(GWEN_LOGDOMAIN, "gcry_cipher_setiv(): %s", gcry_strerror(err));
778  return GWEN_ERROR_GENERIC;
779  }
780 
781  return 0;
782 }
783 
784 
785 
786 
787 
788 
789 
790 
791 
792 
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
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_Generate(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize, GWEN_CRYPT_CRYPTMODE mode, int algo, unsigned int flags, int quality)
Definition: cryptkeysym.c:137
GWENHYWFAR_CB void GWEN_Crypt_KeySym_freeData(GWEN_UNUSED void *bp, void *p)
Definition: cryptkeysym.c:81
int GWEN_Crypt_KeyAes128_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:757
int GWEN_Crypt_KeySym_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:482
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
#define GWEN_ERROR_INVALID
Definition: error.h:67
int GWEN_Crypt_Key_GetKeySize(const GWEN_CRYPT_KEY *k)
Definition: cryptkey.c:171
void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k)
Definition: cryptkey.c:148
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:716
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
Definition: cryptkeysym.c:544
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:378
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:559
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_Key_GetCryptAlgoId(const GWEN_CRYPT_KEY *k)
Definition: cryptkey.c:164
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)
Definition: cryptkeysym.c:275
enum gcry_cipher_modes GWEN_Crypt_KeySym__MyMode2GMode(GWEN_CRYPT_CRYPTMODE mode)
Definition: cryptkeysym.c:118
int GWEN_Crypt_KeyAes128_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:739
uint32_t GWEN_Crypt_KeyDes3K_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:618
int GWEN_Crypt_Key_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
Definition: cryptkey.c:113
int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize)
Definition: db.c:1151
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
Definition: cryptkeysym.c:656
GWEN_CRYPT_CRYPTALGOID
Definition: cryptalgo.h:50
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:725
const char * GWEN_Crypt_CryptAlgoId_toString(GWEN_CRYPT_CRYPTALGOID a)
Definition: cryptalgo.c:52
#define GWEN_DB_FLAGS_OVERWRITE_GROUPS
Definition: db.h:123
int GWEN_Crypt_KeyDes3K_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:588
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:1120
#define GWEN_ERROR_GENERIC
Definition: error.h:62
int GWEN_Crypt_KeySym_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:453
uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:700
struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY
Definition: cryptkey.h:26
uint8_t * GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:694
GWEN_CRYPT_KEY * GWEN_Crypt_KeySym_dup(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:98
int GWEN_Crypt_KeyAes128_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:733
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
Definition: db.c:1260
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:56
int GWEN_Crypt_KeyDes3K_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:594
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)
Definition: cryptkeysym.c:214
void GWEN_Crypt_Random(int quality, uint8_t *buffer, uint32_t len)
Definition: cryptdefs.c:538
GWEN_CRYPT_KEY * GWEN_Crypt_KeyAes128_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
Definition: cryptkeysym.c:707
GWEN_CRYPT_KEY_DECIPHER_FN GWEN_Crypt_Key_SetDecipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_DECIPHER_FN f)
Definition: cryptkey.c:243
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
uint8_t * GWEN_Crypt_KeyAes128_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:745
int GWEN_Crypt_KeyBlowFish_SetKeyData(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:688
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:665
GWEN_CRYPT_KEY * GWEN_Crypt_KeyDes3K_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:580
int GWEN_Crypt_KeyBlowFish_toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:682
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromDb(GWEN_CRYPT_CRYPTMODE mode, GWEN_DB_NODE *db)
Definition: cryptkeysym.c:674
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
GWEN_CRYPT_KEY_ENCIPHER_FN GWEN_Crypt_Key_SetEncipherFn(GWEN_CRYPT_KEY *k, GWEN_CRYPT_KEY_ENCIPHER_FN f)
Definition: cryptkey.c:230
int GWEN_Crypt_KeyDes3K_SetIV(GWEN_CRYPT_KEY *k, const uint8_t *kd, uint32_t kl)
Definition: cryptkeysym.c:624
GWEN_CRYPT_KEY * GWEN_Crypt_Key_new(GWEN_CRYPT_CRYPTALGOID cryptAlgoId, int keySize)
Definition: cryptkey.c:61
uint32_t GWEN_Crypt_KeyAes128_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:751
uint8_t * GWEN_Crypt_KeyDes3K_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:612
uint32_t GWEN_Crypt_KeySym_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:531
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
uint8_t * GWEN_Crypt_KeySym_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
Definition: cryptkeysym.c:519
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
Definition: path.h:84
GWEN_CRYPT_KEY * GWEN_Crypt_Key_fromDb(GWEN_DB_NODE *db)
Definition: cryptkey.c:77
#define GWEN_UNUSED
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:271
int GWEN_Crypt_KeySym__toDb(const GWEN_CRYPT_KEY *k, GWEN_DB_NODE *db, const char *gname)
Definition: cryptkeysym.c:352
GWEN_CRYPT_CRYPTMODE
Definition: cryptalgo.h:53