14 #define DISABLE_DEBUGLOG
19 #include <gwenhywfar/misc.h>
20 #include <gwenhywfar/debug.h>
21 #include <gwenhywfar/gui.h>
35 const
char *tokenName) {
46 ct->typeName=strdup(typeName);
48 ct->tokenName=strdup(tokenName);
58 if (ct->refCount==1) {
103 assert(ct->refCount);
108 ct->tokenName=strdup(s);
115 assert(ct->refCount);
117 return ct->friendlyName;
124 assert(ct->refCount);
128 free(ct->friendlyName);
129 ct->friendlyName=strdup(s);
136 assert(ct->refCount);
145 assert(ct->refCount);
154 assert(ct->refCount);
163 assert(ct->refCount);
172 assert(ct->refCount);
181 assert(ct->refCount);
190 assert(ct->refCount);
199 assert(ct->refCount);
210 assert(ct->refCount);
218 rv=ct->openFn(ct, admin, gid);
233 assert(ct->refCount);
236 rv=ct->createFn(ct, gid);
249 assert(ct->refCount);
251 if (ct->openCount>1 && !abandon) {
259 rv=ct->closeFn(ct, abandon, gid);
274 assert(ct->refCount);
276 return (ct->openCount!=0);
286 assert(ct->refCount);
291 if (ct->getKeyIdListFn)
292 return ct->getKeyIdListFn(ct, pIdList, pCount, gid);
304 assert(ct->refCount);
306 if (ct->openCount<1) {
311 if (ct->getKeyInfoFn)
312 return ct->getKeyInfoFn(ct,
id, flags, gid);
324 assert(ct->refCount);
329 if (ct->setKeyInfoFn)
330 return ct->setKeyInfoFn(ct,
id, ki, gid);
342 assert(ct->refCount);
347 if (ct->getContextIdListFn)
348 return ct->getContextIdListFn(ct, pIdList, pCount, gid);
359 assert(ct->refCount);
361 if (ct->openCount<1) {
366 if (ct->getContextFn)
367 return ct->getContextFn(ct,
id, gid);
379 assert(ct->refCount);
384 if (ct->setContextFn)
385 return ct->setContextFn(ct,
id, ctx, gid);
395 const uint8_t *pInData,
397 uint8_t *pSignatureData,
398 uint32_t *pSignatureLen,
399 uint32_t *pSeqCounter,
402 assert(ct->refCount);
408 return ct->signFn(ct, keyId, a, pInData, inLen, pSignatureData, pSignatureLen,
419 const uint8_t *pInData,
421 const uint8_t *pSignatureData,
422 uint32_t signatureLen,
426 assert(ct->refCount);
432 return ct->verifyFn(ct, keyId, a, pInData, inLen, pSignatureData, signatureLen,
443 const uint8_t *pInData,
449 assert(ct->refCount);
455 return ct->encipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid);
465 const uint8_t *pInData,
471 assert(ct->refCount);
477 return ct->decipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid);
490 assert(ct->refCount);
495 if (ct->generateKeyFn)
496 return ct->generateKeyFn(ct, keyId, a, gid);
505 assert(ct->refCount);
511 return ct->changePinFn(ct, admin, gid);
520 assert(ct->refCount);
525 if (ct->activateKeyFn)
526 return ct->activateKeyFn(ct,
id ,gid);
541 assert(ct->refCount);
555 assert(ct->refCount);
570 assert(ct->refCount);
585 assert(ct->refCount);
586 of=ct->getKeyIdListFn;
587 ct->getKeyIdListFn=f;
600 assert(ct->refCount);
614 assert(ct->refCount);
629 assert(ct->refCount);
630 of=ct->getContextIdListFn;
631 ct->getContextIdListFn=f;
644 assert(ct->refCount);
659 assert(ct->refCount);
673 assert(ct->refCount);
687 assert(ct->refCount);
701 assert(ct->refCount);
715 assert(ct->refCount);
730 assert(ct->refCount);
731 of=ct->generateKeyFn;
744 assert(ct->refCount);
758 assert(ct->refCount);
759 of=ct->activateKeyFn;
799 unsigned char *pwbuffer,
800 unsigned int minLength,
801 unsigned int maxLength,
802 unsigned int *pinLength,
807 const char *numeric_warning =
"";
812 assert(ct->refCount);
815 if (!dname || !*dname)
819 mode=
I18N(
"access password");
821 mode=
I18N(
"manager password");
823 mode=
I18N(
"password");
826 buffer[
sizeof(buffer)-1]=0;
828 numeric_warning =
I18N(
"\nYou must only enter numbers, not letters.");
832 snprintf(buffer,
sizeof(buffer)-1,
833 I18N(
"Please enter a new %s for \n"
835 "The password must be at least %d characters long.%s"
837 "Please enter a new %s for <i>%s</i>. "
838 "The password must be at least %d characters long.%s"
850 snprintf(buffer,
sizeof(buffer)-1,
851 I18N(
"Please enter the %s for \n"
854 "Please enter the %s for <i>%s</i>.%s"
868 I18N(
"Enter Password"),
879 *pinLength=strlen((
char*)pwbuffer);
902 const unsigned char *buffer,
903 unsigned int pinLength,
908 unsigned char ibuffer[256];
911 assert(ct->refCount);
914 if (pinLength>=
sizeof(ibuffer)) {
918 memset(ibuffer, 0,
sizeof(ibuffer));
919 memmove(ibuffer, buffer, pinLength);
938 memset(ibuffer, 0,
sizeof(ibuffer));
952 assert(ct->refCount);
955 buffer[
sizeof(buffer)-1]=0;
957 snprintf(buffer,
sizeof(buffer)-1,
"%s",
958 I18N(
"Please enter your PIN into the card reader."
960 "Please enter your PIN into the card reader."
963 I18N(
"Secure PIN Input"),
974 assert(ct->refCount);
989 assert(ct->refCount);
992 buffer[
sizeof(buffer)-1]=0;
995 if (!dname || !*dname)
999 snprintf(buffer,
sizeof(buffer)-1,
1000 I18N(
"Please insert the security disc\nfor %s"
1002 "Please insert the security disc for <i>%s</i>"
1003 "</html>"), dname, dname);
1005 snprintf(buffer,
sizeof(buffer)-1,
1006 I18N(
"Please insert the chip card\nfor %s"
1008 "Please insert the chip card for <i>%s</i>"
1009 "</html>"), dname, dname);
1014 I18N(
"Insert Medium"),
1016 I18N(
"OK"),
I18N(
"Abort"), 0, gid);
1020 I18N(
"Aborted by user."));
1028 I18N(
"An internal error occurred."),
1029 I18N(
"Dismiss"), 0, 0, gid);
1044 assert(ct->refCount);
1047 buffer[
sizeof(buffer)-1]=0;
1050 if (!dname || !*dname)
1054 snprintf(buffer,
sizeof(buffer)-1,
1055 I18N(
"Please insert the correct security disc\nfor %s"
1057 "Please insert the correct security disc for <i>%s</i>"
1058 "</html>"), dname, dname);
1060 if (dname && *dname) {
1061 snprintf(buffer,
sizeof(buffer)-1,
1062 I18N(
"The wrong chipcard has been inserted.\n"
1063 "Please insert the chipcard with the number\n"
1065 "into the card reader.\n"
1067 "<p>The wrong card has been inserted.</p>"
1068 "<p>Please insert the chipcard with the number"
1069 "<b>%s</b> into the card reader.</p>"
1075 snprintf(buffer,
sizeof(buffer)-1,
1076 I18N(
"Please insert the correct chipcard\nfor %s"
1078 "Please insert the correct chipcard for <i>%s</i>"
1079 "</html>"), dname, dname);
1085 I18N(
"Insert Medium"),
1087 I18N(
"OK"),
I18N(
"Abort"), 0, gid);
1091 I18N(
"Aborted by user."));
1099 I18N(
"An internal error occurred."),
1100 I18N(
"Dismiss"), 0, 0, gid);
1111 if (strcasecmp(s,
"none")==0)
1113 else if (strcasecmp(s,
"file")==0)
1115 else if (strcasecmp(s,
"card")==0)
1117 else if (strcasecmp(s,
"any")==0)