gwenhywfar  4.99.8beta
ct.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Wed Mar 16 2005
3  copyright : (C) 2005-2010 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 "ct_p.h"
18 #include "i18n_l.h"
19 #include <gwenhywfar/misc.h>
20 #include <gwenhywfar/debug.h>
21 #include <gwenhywfar/gui.h>
22 
23 
24 
26 GWEN_LIST_FUNCTIONS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token)
27 GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token)
28 
29 
30 
31 
32 
34  const char *typeName,
35  const char *tokenName) {
36  GWEN_CRYPT_TOKEN *ct;
37 
38  assert(typeName);
39 
40  GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN, ct);
41  ct->refCount=1;
42  GWEN_INHERIT_INIT(GWEN_CRYPT_TOKEN, ct);
43  GWEN_LIST_INIT(GWEN_CRYPT_TOKEN, ct);
44 
45  ct->device=dev;
46  ct->typeName=strdup(typeName);
47  if (tokenName)
48  ct->tokenName=strdup(tokenName);
49 
50  return ct;
51 }
52 
53 
54 
56  if (ct) {
57  assert(ct->refCount);
58  if (ct->refCount==1) {
61  free(ct->tokenName);
62  free(ct->typeName);
63  ct->refCount=0;
64  GWEN_FREE_OBJECT(ct);
65  }
66  else {
67  ct->refCount--;
68  }
69  }
70 }
71 
72 
73 
75  assert(ct);
76  assert(ct->refCount);
77 
78  return ct->device;
79 }
80 
81 
82 
84  assert(ct);
85  assert(ct->refCount);
86 
87  return ct->typeName;
88 }
89 
90 
91 
93  assert(ct);
94  assert(ct->refCount);
95 
96  return ct->tokenName;
97 }
98 
99 
100 
102  assert(ct);
103  assert(ct->refCount);
104 
105  assert(s);
106 
107  free(ct->tokenName);
108  ct->tokenName=strdup(s);
109 }
110 
111 
112 
114  assert(ct);
115  assert(ct->refCount);
116 
117  return ct->friendlyName;
118 }
119 
120 
121 
123  assert(ct);
124  assert(ct->refCount);
125 
126  assert(s);
127 
128  free(ct->friendlyName);
129  ct->friendlyName=strdup(s);
130 }
131 
132 
133 
135  assert(ct);
136  assert(ct->refCount);
137 
138  return ct->flags;
139 }
140 
141 
142 
144  assert(ct);
145  assert(ct->refCount);
146 
147  ct->flags=f;
148 }
149 
150 
151 
153  assert(ct);
154  assert(ct->refCount);
155 
156  ct->flags|=f;
157 }
158 
159 
160 
162  assert(ct);
163  assert(ct->refCount);
164 
165  ct->flags&=~f;
166 }
167 
168 
169 
171  assert(ct);
172  assert(ct->refCount);
173 
174  return ct->modes;
175 }
176 
177 
178 
180  assert(ct);
181  assert(ct->refCount);
182 
183  ct->modes=f;
184 }
185 
186 
187 
189  assert(ct);
190  assert(ct->refCount);
191 
192  ct->modes|=f;
193 }
194 
195 
196 
198  assert(ct);
199  assert(ct->refCount);
200 
201  ct->modes&=~f;
202 }
203 
204 
205 
206 int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid) {
207  int rv;
208 
209  assert(ct);
210  assert(ct->refCount);
211 
212  if (ct->openCount) {
213  ct->openCount++;
214  return 0;
215  }
216 
217  if (ct->openFn)
218  rv=ct->openFn(ct, admin, gid);
219  else
221 
222  if (rv==0)
223  ct->openCount++;
224  return rv;
225 }
226 
227 
228 
230  int rv;
231 
232  assert(ct);
233  assert(ct->refCount);
234 
235  if (ct->createFn)
236  rv=ct->createFn(ct, gid);
237  else
239 
240  if (rv==0)
241  ct->openCount++;
242  return rv;
243 }
244 
245 
246 
247 int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid) {
248  assert(ct);
249  assert(ct->refCount);
250 
251  if (ct->openCount>1 && !abandon) {
252  ct->openCount--;
253  return 0;
254  }
255 
256  if (ct->closeFn) {
257  int rv;
258 
259  rv=ct->closeFn(ct, abandon, gid);
260  if (abandon)
261  ct->openCount=0;
262  else if (rv==0)
263  ct->openCount--;
264  return rv;
265  }
266  else
268 }
269 
270 
271 
273  assert(ct);
274  assert(ct->refCount);
275 
276  return (ct->openCount!=0);
277 }
278 
279 
280 
282  uint32_t *pIdList,
283  uint32_t *pCount,
284  uint32_t gid) {
285  assert(ct);
286  assert(ct->refCount);
287 
288  if (ct->openCount<1)
289  return GWEN_ERROR_NOT_OPEN;
290 
291  if (ct->getKeyIdListFn)
292  return ct->getKeyIdListFn(ct, pIdList, pCount, gid);
293  else
295 }
296 
297 
298 
300  uint32_t id,
301  uint32_t flags,
302  uint32_t gid) {
303  assert(ct);
304  assert(ct->refCount);
305 
306  if (ct->openCount<1) {
307  DBG_INFO(GWEN_LOGDOMAIN, "Token not open");
308  return NULL;
309  }
310 
311  if (ct->getKeyInfoFn)
312  return ct->getKeyInfoFn(ct, id, flags, gid);
313  else
314  return NULL;
315 }
316 
317 
318 
320  uint32_t id,
321  const GWEN_CRYPT_TOKEN_KEYINFO *ki,
322  uint32_t gid) {
323  assert(ct);
324  assert(ct->refCount);
325 
326  if (ct->openCount<1)
327  return GWEN_ERROR_NOT_OPEN;
328 
329  if (ct->setKeyInfoFn)
330  return ct->setKeyInfoFn(ct, id, ki, gid);
331  else
333 }
334 
335 
336 
338  uint32_t *pIdList,
339  uint32_t *pCount,
340  uint32_t gid) {
341  assert(ct);
342  assert(ct->refCount);
343 
344  if (ct->openCount<1)
345  return GWEN_ERROR_NOT_OPEN;
346 
347  if (ct->getContextIdListFn)
348  return ct->getContextIdListFn(ct, pIdList, pCount, gid);
349  else
351 }
352 
353 
354 
356  uint32_t id,
357  uint32_t gid) {
358  assert(ct);
359  assert(ct->refCount);
360 
361  if (ct->openCount<1) {
362  DBG_INFO(GWEN_LOGDOMAIN, "Token not open");
363  return NULL;
364  }
365 
366  if (ct->getContextFn)
367  return ct->getContextFn(ct, id, gid);
368  else
369  return NULL;
370 }
371 
372 
373 
375  uint32_t id,
376  const GWEN_CRYPT_TOKEN_CONTEXT *ctx,
377  uint32_t gid) {
378  assert(ct);
379  assert(ct->refCount);
380 
381  if (ct->openCount<1)
382  return GWEN_ERROR_NOT_OPEN;
383 
384  if (ct->setContextFn)
385  return ct->setContextFn(ct, id, ctx, gid);
386  else
388 }
389 
390 
391 
393  uint32_t keyId,
395  const uint8_t *pInData,
396  uint32_t inLen,
397  uint8_t *pSignatureData,
398  uint32_t *pSignatureLen,
399  uint32_t *pSeqCounter,
400  uint32_t gid) {
401  assert(ct);
402  assert(ct->refCount);
403 
404  if (ct->openCount<1)
405  return GWEN_ERROR_NOT_OPEN;
406 
407  if (ct->signFn)
408  return ct->signFn(ct, keyId, a, pInData, inLen, pSignatureData, pSignatureLen,
409  pSeqCounter, gid);
410  else
412 }
413 
414 
415 
417  uint32_t keyId,
419  const uint8_t *pInData,
420  uint32_t inLen,
421  const uint8_t *pSignatureData,
422  uint32_t signatureLen,
423  uint32_t seqCounter,
424  uint32_t gid) {
425  assert(ct);
426  assert(ct->refCount);
427 
428  if (ct->openCount<1)
429  return GWEN_ERROR_NOT_OPEN;
430 
431  if (ct->verifyFn)
432  return ct->verifyFn(ct, keyId, a, pInData, inLen, pSignatureData, signatureLen,
433  seqCounter, gid);
434  else
436 }
437 
438 
439 
441  uint32_t keyId,
443  const uint8_t *pInData,
444  uint32_t inLen,
445  uint8_t *pOutData,
446  uint32_t *pOutLen,
447  uint32_t gid) {
448  assert(ct);
449  assert(ct->refCount);
450 
451  if (ct->openCount<1)
452  return GWEN_ERROR_NOT_OPEN;
453 
454  if (ct->encipherFn)
455  return ct->encipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid);
456  else
458 }
459 
460 
461 
463  uint32_t keyId,
465  const uint8_t *pInData,
466  uint32_t inLen,
467  uint8_t *pOutData,
468  uint32_t *pOutLen,
469  uint32_t gid) {
470  assert(ct);
471  assert(ct->refCount);
472 
473  if (ct->openCount<1)
474  return GWEN_ERROR_NOT_OPEN;
475 
476  if (ct->decipherFn)
477  return ct->decipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid);
478  else
480 }
481 
482 
483 
484 
486  uint32_t keyId,
487  const GWEN_CRYPT_CRYPTALGO *a,
488  uint32_t gid) {
489  assert(ct);
490  assert(ct->refCount);
491 
492  if (ct->openCount<1)
493  return GWEN_ERROR_NOT_OPEN;
494 
495  if (ct->generateKeyFn)
496  return ct->generateKeyFn(ct, keyId, a, gid);
497  else
499 }
500 
501 
502 
503 int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid) {
504  assert(ct);
505  assert(ct->refCount);
506 
507  if (ct->openCount<1)
508  return GWEN_ERROR_NOT_OPEN;
509 
510  if (ct->changePinFn)
511  return ct->changePinFn(ct, admin, gid);
512  else
514 }
515 
516 
517 
518 int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid) {
519  assert(ct);
520  assert(ct->refCount);
521 
522  if (ct->openCount<1)
523  return GWEN_ERROR_NOT_OPEN;
524 
525  if (ct->activateKeyFn)
526  return ct->activateKeyFn(ct, id ,gid);
527  else
529 }
530 
531 
532 
533 
534 
535 
539 
540  assert(ct);
541  assert(ct->refCount);
542  of=ct->openFn;
543  ct->openFn=f;
544 
545  return of;
546 }
547 
548 
549 
553 
554  assert(ct);
555  assert(ct->refCount);
556  of=ct->createFn;
557  ct->createFn=f;
558 
559  return of;
560 
561 }
562 
563 
564 
568 
569  assert(ct);
570  assert(ct->refCount);
571  of=ct->closeFn;
572  ct->closeFn=f;
573 
574  return of;
575 }
576 
577 
578 
583 
584  assert(ct);
585  assert(ct->refCount);
586  of=ct->getKeyIdListFn;
587  ct->getKeyIdListFn=f;
588 
589  return of;
590 }
591 
592 
593 
598 
599  assert(ct);
600  assert(ct->refCount);
601  of=ct->getKeyInfoFn;
602  ct->getKeyInfoFn=f;
603 
604  return of;
605 }
606 
607 
608 
612 
613  assert(ct);
614  assert(ct->refCount);
615  of=ct->setKeyInfoFn;
616  ct->setKeyInfoFn=f;
617 
618  return of;
619 }
620 
621 
622 
627 
628  assert(ct);
629  assert(ct->refCount);
630  of=ct->getContextIdListFn;
631  ct->getContextIdListFn=f;
632 
633  return of;
634 }
635 
636 
637 
642 
643  assert(ct);
644  assert(ct->refCount);
645  of=ct->getContextFn;
646  ct->getContextFn=f;
647 
648  return of;
649 }
650 
651 
652 
657 
658  assert(ct);
659  assert(ct->refCount);
660  of=ct->setContextFn;
661  ct->setContextFn=f;
662 
663  return of;
664 }
665 
666 
667 
671 
672  assert(ct);
673  assert(ct->refCount);
674  of=ct->signFn;
675  ct->signFn=f;
676 
677  return of;
678 }
679 
680 
681 
685 
686  assert(ct);
687  assert(ct->refCount);
688  of=ct->verifyFn;
689  ct->verifyFn=f;
690 
691  return of;
692 }
693 
694 
695 
699 
700  assert(ct);
701  assert(ct->refCount);
702  of=ct->encipherFn;
703  ct->encipherFn=f;
704 
705  return of;
706 }
707 
708 
709 
713 
714  assert(ct);
715  assert(ct->refCount);
716  of=ct->decipherFn;
717  ct->decipherFn=f;
718 
719  return of;
720 }
721 
722 
723 
728 
729  assert(ct);
730  assert(ct->refCount);
731  of=ct->generateKeyFn;
732  ct->generateKeyFn=f;
733 
734  return of;
735 }
736 
737 
738 
742 
743  assert(ct);
744  assert(ct->refCount);
745  of=ct->changePinFn;
746  ct->changePinFn=f;
747 
748  return of;
749 }
750 
751 
752 
756 
757  assert(ct);
758  assert(ct->refCount);
759  of=ct->activateKeyFn;
760  ct->activateKeyFn=f;
761 
762  return of;
763 }
764 
765 
766 
767 
768 
771  GWEN_BUFFER *nbuf) {
772  const char *tname;
773  const char *dname;
774 
776  assert(tname);
778  if (!dname) {
779  DBG_ERROR(GWEN_LOGDOMAIN, "Token has no name");
780  return GWEN_ERROR_INVALID;
781  }
782 
783  GWEN_Buffer_AppendString(nbuf, "PASSWORD_");
784  GWEN_Buffer_AppendString(nbuf, tname);
785  GWEN_Buffer_AppendString(nbuf, "_");
786  GWEN_Buffer_AppendString(nbuf, dname);
788  GWEN_Buffer_AppendString(nbuf, ":MANAGE");
789 
790  return 0;
791 }
792 
793 
794 
798  uint32_t flags,
799  unsigned char *pwbuffer,
800  unsigned int minLength,
801  unsigned int maxLength,
802  unsigned int *pinLength,
803  uint32_t gid) {
804  int rv;
805  const char *dname;
806  const char *mode;
807  const char *numeric_warning = "";
808  char buffer[512];
809  GWEN_BUFFER *nameBuffer;
810 
811  assert(ct);
812  assert(ct->refCount);
813 
815  if (!dname || !*dname)
817 
819  mode=I18N("access password");
820  else if (pt==GWEN_Crypt_PinType_Manage)
821  mode=I18N("manager password");
822  else
823  mode=I18N("password");
824 
825  buffer[0]=0;
826  buffer[sizeof(buffer)-1]=0;
827  if (flags & GWEN_GUI_INPUT_FLAGS_NUMERIC) {
828  numeric_warning = I18N("\nYou must only enter numbers, not letters.");
829  }
830 
831  if (flags & GWEN_GUI_INPUT_FLAGS_CONFIRM) {
832  snprintf(buffer, sizeof(buffer)-1,
833  I18N("Please enter a new %s for \n"
834  "%s\n"
835  "The password must be at least %d characters long.%s"
836  "<html>"
837  "Please enter a new %s for <i>%s</i>. "
838  "The password must be at least %d characters long.%s"
839  "</html>"),
840  mode,
841  dname,
842  minLength,
843  numeric_warning,
844  mode,
845  dname,
846  minLength,
847  numeric_warning);
848  }
849  else {
850  snprintf(buffer, sizeof(buffer)-1,
851  I18N("Please enter the %s for \n"
852  "%s\n"
853  "%s<html>"
854  "Please enter the %s for <i>%s</i>.%s"
855  "</html>"),
856  mode,
857  dname,
858  numeric_warning,
859  mode,
860  dname,
861  numeric_warning);
862  }
863 
864  nameBuffer=GWEN_Buffer_new(0, 256, 0, 1);
865  GWEN_Crypt_Token__CreatePasswordName(ct, pt, nameBuffer);
866  rv=GWEN_Gui_GetPassword(flags,
867  GWEN_Buffer_GetStart(nameBuffer),
868  I18N("Enter Password"),
869  buffer,
870  (char*)pwbuffer,
871  minLength,
872  maxLength,
874  gid);
875  GWEN_Buffer_free(nameBuffer);
876  if (rv) {
877  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
878  return rv;
879  }
880 
881  *pinLength=strlen((char*)pwbuffer);
882 
885  pe,
886  pwbuffer,
887  maxLength,
888  pinLength);
889  if (rv) {
890  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
891  return rv;
892  }
893  }
894 
895  return 0;
896 }
897 
898 
899 
903  GWEN_UNUSED uint32_t flags,
904  const unsigned char *buffer,
905  unsigned int pinLength,
906  int isOk,
907  uint32_t gid) {
908  GWEN_BUFFER *nameBuffer;
909  int rv;
910  unsigned char ibuffer[256];
911 
912  assert(ct);
913  assert(ct->refCount);
914 
916  if (pinLength>=sizeof(ibuffer)) {
917  DBG_ERROR(GWEN_LOGDOMAIN, "Pin too long");
919  }
920  memset(ibuffer, 0, sizeof(ibuffer));
921  memmove(ibuffer, buffer, pinLength);
924  ibuffer,
925  sizeof(ibuffer)-1,
926  &pinLength);
927  if (rv) {
928  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
929  return rv;
930  }
931  buffer=ibuffer;
932  }
933 
934  nameBuffer=GWEN_Buffer_new(0, 256, 0, 1);
935  GWEN_Crypt_Token__CreatePasswordName(ct, pt, nameBuffer);
937  (const char*)buffer,
940  memset(ibuffer, 0, sizeof(ibuffer));
941  GWEN_Buffer_free(nameBuffer);
942  return rv;
943 
944 }
945 
946 
947 
950  uint32_t gid) {
951  char buffer[512];
952 
953  assert(ct);
954  assert(ct->refCount);
955 
956  buffer[0]=0;
957  buffer[sizeof(buffer)-1]=0;
958 
959  snprintf(buffer, sizeof(buffer)-1, "%s",
960  I18N("Please enter your PIN into the card reader."
961  "<html>"
962  "Please enter your PIN into the card reader."
963  "</html>"));
965  I18N("Secure PIN Input"),
966  buffer, gid);
967 }
968 
969 
970 
973  GWEN_UNUSED int ok,
974  uint32_t id) {
975  assert(ct);
976  assert(ct->refCount);
977 
978  GWEN_Gui_HideBox(id);
979 
980  return 0;
981 }
982 
983 
984 
986  int rv;
987  char buffer[512];
988  const char *dname;
989 
990  assert(ct);
991  assert(ct->refCount);
992 
993  buffer[0]=0;
994  buffer[sizeof(buffer)-1]=0;
995 
997  if (!dname || !*dname)
999 
1001  snprintf(buffer, sizeof(buffer)-1,
1002  I18N("Please insert the security disc\nfor %s"
1003  "<html>"
1004  "Please insert the security disc for <i>%s</i>"
1005  "</html>"), dname, dname);
1006  else
1007  snprintf(buffer, sizeof(buffer)-1,
1008  I18N("Please insert the chip card\nfor %s"
1009  "<html>"
1010  "Please insert the chip card for <i>%s</i>"
1011  "</html>"), dname, dname);
1012 
1016  I18N("Insert Medium"),
1017  buffer,
1018  I18N("OK"), I18N("Abort"), 0, gid);
1019  if (rv==2) {
1020  DBG_ERROR(GWEN_LOGDOMAIN, "User aborted");
1022  I18N("Aborted by user."));
1023  return GWEN_ERROR_USER_ABORTED;
1024  }
1025  else if (rv!=1) {
1029  I18N("Error"),
1030  I18N("An internal error occurred."),
1031  I18N("Dismiss"), 0, 0, gid);
1032  return -1;
1033  }
1034 
1035  return 0;
1036 }
1037 
1038 
1039 
1041  int rv;
1042  char buffer[512];
1043  const char *dname;
1044 
1045  assert(ct);
1046  assert(ct->refCount);
1047 
1048  buffer[0]=0;
1049  buffer[sizeof(buffer)-1]=0;
1050 
1052  if (!dname || !*dname)
1054 
1056  snprintf(buffer, sizeof(buffer)-1,
1057  I18N("Please insert the correct security disc\nfor %s"
1058  "<html>"
1059  "Please insert the correct security disc for <i>%s</i>"
1060  "</html>"), dname, dname);
1061  else {
1062  if (dname && *dname) {
1063  snprintf(buffer, sizeof(buffer)-1,
1064  I18N("The wrong chipcard has been inserted.\n"
1065  "Please insert the chipcard with the number\n"
1066  " %s\n"
1067  "into the card reader.\n"
1068  "<html>"
1069  "<p>The wrong card has been inserted.</p>"
1070  "<p>Please insert the chipcard with the number"
1071  "<b>%s</b> into the card reader.</p>"
1072  "</html>"),
1073  dname,
1074  dname);
1075  }
1076  else
1077  snprintf(buffer, sizeof(buffer)-1,
1078  I18N("Please insert the correct chipcard\nfor %s"
1079  "<html>"
1080  "Please insert the correct chipcard for <i>%s</i>"
1081  "</html>"), dname, dname);
1082  }
1083 
1087  I18N("Insert Medium"),
1088  buffer,
1089  I18N("OK"), I18N("Abort"), 0, gid);
1090  if (rv==2) {
1091  DBG_ERROR(GWEN_LOGDOMAIN, "User aborted");
1093  I18N("Aborted by user."));
1094  return GWEN_ERROR_USER_ABORTED;
1095  }
1096  else if (rv!=1) {
1100  I18N("Error"),
1101  I18N("An internal error occurred."),
1102  I18N("Dismiss"), 0, 0, gid);
1103  return -1;
1104  }
1105 
1106  return 0;
1107 }
1108 
1109 
1110 
1112  assert(s);
1113  if (strcasecmp(s, "none")==0)
1115  else if (strcasecmp(s, "file")==0)
1117  else if (strcasecmp(s, "card")==0)
1119  else if (strcasecmp(s, "any")==0)
1122 }
1123 
1124 
1125 
1127  switch(d) {
1129  return "none";
1131  return "file";
1133  return "card";
1135  return "any";
1136  default:
1137  return "unknown";
1138  }
1139 }
1140 
1141 
1142 
1143 
1144 
1145 
int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
Definition: gui.c:940
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:223
const GWEN_CRYPT_TOKEN_KEYINFO *GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid)
Definition: ct_be.h:39
#define I18N(m)
Definition: error.c:42
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_SETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid)
Definition: ct_be.h:57
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CHANGEPIN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
Definition: ct_be.h:107
#define GWEN_INHERIT_FINI(t, element)
Definition: inherit.h:238
int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
Definition: ct.c:503
#define GWEN_ERROR_INVALID
Definition: error.h:67
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
Definition: ct_be.h:35
const char * GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:83
uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:170
int GWEN_Crypt_TransformPin(GWEN_CRYPT_PINENCODING peSrc, GWEN_CRYPT_PINENCODING peDst, unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength)
Definition: cryptdefs.c:401
#define GWEN_GUI_INPUT_FLAGS_CONFIRM
Definition: gui.h:211
int GWEN_Crypt_Token_Sign(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid)
Definition: ct.c:392
void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s)
Definition: ct.c:122
GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f)
Definition: ct.c:753
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
Definition: ct_be.h:109
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
Definition: ct_be.h:49
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_SIGN_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen, uint32_t *pSeqCounter, uint32_t gid)
Definition: ct_be.h:63
int GWEN_Crypt_Token_Encipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid)
Definition: ct.c:440
int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
Definition: ct.c:247
#define GWEN_GUI_INPUT_FLAGS_NUMERIC
Definition: gui.h:215
const char * GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:113
GWEN_CRYPT_PINTYPE
Definition: cryptdefs.h:26
GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXT_FN f)
Definition: ct.c:639
int GWEN_Crypt_Token_Verify(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid)
Definition: ct.c:416
int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid)
Definition: ct.c:319
GWEN_CRYPT_TOKEN_VERIFY_FN GWEN_Crypt_Token_SetVerifyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_VERIFY_FN f)
Definition: ct.c:682
struct GWEN_CRYPT_PADDALGO GWEN_CRYPT_PADDALGO
Definition: paddalgo.h:21
void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
Definition: ct.c:143
#define GWEN_LOGDOMAIN
Definition: logger.h:35
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GENERATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
Definition: ct_be.h:102
int GWEN_Gui_MessageBox(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid)
Definition: gui.c:821
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:38
#define GWEN_ERROR_BUFFER_OVERFLOW
Definition: error.h:79
int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
Definition: ct.c:985
GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CHANGEPIN_FN f)
Definition: ct.c:739
int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
Definition: ct.c:281
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_VERIFY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen, uint32_t seqCounter, uint32_t gid)
Definition: ct_be.h:73
GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYINFO_FN f)
Definition: ct.c:595
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
Definition: ct.c:485
int GWEN_Crypt_Token_EndEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, GWEN_UNUSED int ok, uint32_t id)
Definition: ct.c:971
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CREATE_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
Definition: ct_be.h:32
#define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS
Definition: gui.h:337
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_DECIPHER_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid)
Definition: ct_be.h:92
uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:134
uint32_t GWEN_Gui_ShowBox(uint32_t flags, const char *title, const char *text, uint32_t guiid)
Definition: gui.c:881
GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GENERATEKEY_FN f)
Definition: ct.c:725
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_OPEN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
Definition: ct_be.h:31
void GWEN_Gui_HideBox(uint32_t id)
Definition: gui.c:896
GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:74
int GWEN_Crypt_Token_SetPinStatus(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_CRYPT_PINENCODING pe, GWEN_UNUSED uint32_t flags, const unsigned char *buffer, unsigned int pinLength, int isOk, uint32_t gid)
Definition: ct.c:900
#define GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL
Definition: gui.h:331
#define GWEN_INHERIT_INIT(t, element)
Definition: inherit.h:223
int GWEN_Crypt_Token__CreatePasswordName(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_BUFFER *nbuf)
Definition: ct.c:769
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:83
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN
Definition: ct.h:19
#define GWEN_GUI_MSG_FLAGS_TYPE_ERROR
Definition: gui.h:293
int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
Definition: ct.c:206
void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
Definition: ct.c:197
const GWEN_CRYPT_TOKEN_CONTEXT * GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
Definition: ct.c:355
struct GWEN_CRYPT_TOKEN_KEYINFO GWEN_CRYPT_TOKEN_KEYINFO
Definition: ct_keyinfo.h:121
GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_OPEN_FN f)
Definition: ct.c:536
#define GWEN_GUI_SHOWBOX_FLAGS_BEEP
Definition: gui.h:353
void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
Definition: ct.c:179
GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SIGN_FN f)
Definition: ct.c:668
struct GWEN_CRYPT_CRYPTALGO GWEN_CRYPT_CRYPTALGO
Definition: cryptalgo.h:20
struct GWEN_CRYPT_TOKEN_CONTEXT GWEN_CRYPT_TOKEN_CONTEXT
Definition: ct_context.h:185
void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:55
#define GWEN_ERROR_NOT_OPEN
Definition: error.h:70
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CREATE_FN f)
Definition: ct.c:550
int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
Definition: ct.c:1040
GWEN_CRYPT_TOKEN * GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, const char *typeName, const char *tokenName)
Definition: ct.c:33
GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s)
Definition: ct.c:1111
int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:272
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CLOSE_FN)(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
Definition: ct_be.h:33
int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
Definition: ct.c:229
GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f)
Definition: ct.c:624
const char * GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct)
Definition: ct.c:92
const char * GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d)
Definition: ct.c:1126
int GWEN_Gui_GetPassword(uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid)
Definition: gui.c:996
#define GWEN_GUI_MSG_FLAGS_CONFIRM_B1
Definition: gui.h:299
int GWEN_Crypt_Token_GetPin(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_CRYPT_PINENCODING pe, uint32_t flags, unsigned char *pwbuffer, unsigned int minLength, unsigned int maxLength, unsigned int *pinLength, uint32_t gid)
Definition: ct.c:795
GWEN_CRYPT_PINENCODING
Definition: cryptdefs.h:39
GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_DECIPHER_FN f)
Definition: ct.c:710
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_ENCIPHER_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid)
Definition: ct_be.h:83
GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ENCIPHER_FN f)
Definition: ct.c:696
int GWEN_Crypt_Token_Decipher(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, GWEN_CRYPT_PADDALGO *a, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen, uint32_t gid)
Definition: ct.c:462
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETKEYINFO_FN f)
Definition: ct.c:609
GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CLOSE_FN f)
Definition: ct.c:565
GWEN_CRYPT_TOKEN_DEVICE
Definition: ct.h:35
int GWEN_Gui_SetPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid)
Definition: gui.c:1034
#define GWEN_LIST_FUNCTIONS(t, pr)
Definition: list1.h:366
#define GWEN_ERROR_USER_ABORTED
Definition: error.h:65
GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f)
Definition: ct.c:580
int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
Definition: ct.c:337
uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, uint32_t gid)
Definition: ct.c:948
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_SETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid)
Definition: ct_be.h:44
int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
Definition: ct.c:518
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:474
#define GWEN_INHERIT_FUNCTIONS(t)
Definition: inherit.h:163
GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETCONTEXT_FN f)
Definition: ct.c:654
#define GWEN_UNUSED
void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
Definition: ct.c:152
const GWEN_CRYPT_TOKEN_CONTEXT *GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
Definition: ct_be.h:53
int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid)
Definition: ct.c:374
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:1014
void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
Definition: ct.c:161
void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s)
Definition: ct.c:101
#define GWEN_GUI_MSG_FLAGS_TYPE_WARN
Definition: gui.h:287
void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
Definition: ct.c:188
const GWEN_CRYPT_TOKEN_KEYINFO * GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid)
Definition: ct.c:299
#define GWEN_ERROR_NOT_IMPLEMENTED
Definition: error.h:108