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"),
881 *pinLength=strlen((
char*)pwbuffer);
904 const unsigned char *buffer,
905 unsigned int pinLength,
910 unsigned char ibuffer[256];
913 assert(ct->refCount);
916 if (pinLength>=
sizeof(ibuffer)) {
920 memset(ibuffer, 0,
sizeof(ibuffer));
921 memmove(ibuffer, buffer, pinLength);
940 memset(ibuffer, 0,
sizeof(ibuffer));
954 assert(ct->refCount);
957 buffer[
sizeof(buffer)-1]=0;
959 snprintf(buffer,
sizeof(buffer)-1,
"%s",
960 I18N(
"Please enter your PIN into the card reader."
962 "Please enter your PIN into the card reader."
965 I18N(
"Secure PIN Input"),
976 assert(ct->refCount);
991 assert(ct->refCount);
994 buffer[
sizeof(buffer)-1]=0;
997 if (!dname || !*dname)
1001 snprintf(buffer,
sizeof(buffer)-1,
1002 I18N(
"Please insert the security disc\nfor %s"
1004 "Please insert the security disc for <i>%s</i>"
1005 "</html>"), dname, dname);
1007 snprintf(buffer,
sizeof(buffer)-1,
1008 I18N(
"Please insert the chip card\nfor %s"
1010 "Please insert the chip card for <i>%s</i>"
1011 "</html>"), dname, dname);
1016 I18N(
"Insert Medium"),
1018 I18N(
"OK"),
I18N(
"Abort"), 0, gid);
1022 I18N(
"Aborted by user."));
1030 I18N(
"An internal error occurred."),
1031 I18N(
"Dismiss"), 0, 0, gid);
1046 assert(ct->refCount);
1049 buffer[
sizeof(buffer)-1]=0;
1052 if (!dname || !*dname)
1056 snprintf(buffer,
sizeof(buffer)-1,
1057 I18N(
"Please insert the correct security disc\nfor %s"
1059 "Please insert the correct security disc for <i>%s</i>"
1060 "</html>"), dname, dname);
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"
1067 "into the card reader.\n"
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>"
1077 snprintf(buffer,
sizeof(buffer)-1,
1078 I18N(
"Please insert the correct chipcard\nfor %s"
1080 "Please insert the correct chipcard for <i>%s</i>"
1081 "</html>"), dname, dname);
1087 I18N(
"Insert Medium"),
1089 I18N(
"OK"),
I18N(
"Abort"), 0, gid);
1093 I18N(
"Aborted by user."));
1101 I18N(
"An internal error occurred."),
1102 I18N(
"Dismiss"), 0, 0, gid);
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)
int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
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)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_SETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CHANGEPIN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
#define GWEN_INHERIT_FINI(t, element)
int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
#define GWEN_ERROR_INVALID
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
const char * GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct)
uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct)
int GWEN_Crypt_TransformPin(GWEN_CRYPT_PINENCODING peSrc, GWEN_CRYPT_PINENCODING peDst, unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength)
#define GWEN_GUI_INPUT_FLAGS_CONFIRM
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)
void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s)
GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f)
#define GWEN_FREE_OBJECT(varname)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
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)
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)
int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
#define GWEN_GUI_INPUT_FLAGS_NUMERIC
const char * GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct)
GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXT_FN f)
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)
int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid)
GWEN_CRYPT_TOKEN_VERIFY_FN GWEN_Crypt_Token_SetVerifyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_VERIFY_FN f)
struct GWEN_CRYPT_PADDALGO GWEN_CRYPT_PADDALGO
void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GENERATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
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)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
#define GWEN_ERROR_BUFFER_OVERFLOW
int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CHANGEPIN_FN f)
int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
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)
GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYINFO_FN f)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
int GWEN_Crypt_Token_EndEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, GWEN_UNUSED int ok, uint32_t id)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CREATE_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
#define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS
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)
uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct)
uint32_t GWEN_Gui_ShowBox(uint32_t flags, const char *title, const char *text, uint32_t guiid)
GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GENERATEKEY_FN f)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_OPEN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
void GWEN_Gui_HideBox(uint32_t id)
GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct)
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)
#define GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL
#define GWEN_INHERIT_INIT(t, element)
int GWEN_Crypt_Token__CreatePasswordName(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_BUFFER *nbuf)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN
#define GWEN_GUI_MSG_FLAGS_TYPE_ERROR
int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
const GWEN_CRYPT_TOKEN_CONTEXT * GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
struct GWEN_CRYPT_TOKEN_KEYINFO GWEN_CRYPT_TOKEN_KEYINFO
GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_OPEN_FN f)
#define GWEN_GUI_SHOWBOX_FLAGS_BEEP
void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SIGN_FN f)
struct GWEN_CRYPT_CRYPTALGO GWEN_CRYPT_CRYPTALGO
struct GWEN_CRYPT_TOKEN_CONTEXT GWEN_CRYPT_TOKEN_CONTEXT
void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct)
#define GWEN_ERROR_NOT_OPEN
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CREATE_FN f)
int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
GWEN_CRYPT_TOKEN * GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, const char *typeName, const char *tokenName)
GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s)
int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CLOSE_FN)(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f)
const char * GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct)
const char * GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d)
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)
#define GWEN_GUI_MSG_FLAGS_CONFIRM_B1
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)
GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_DECIPHER_FN f)
#define DBG_INFO(dbg_logger, format, args...)
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)
GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ENCIPHER_FN f)
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)
#define GWEN_LIST_INIT(t, element)
GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETKEYINFO_FN f)
GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CLOSE_FN f)
int GWEN_Gui_SetPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid)
#define GWEN_LIST_FUNCTIONS(t, pr)
#define GWEN_ERROR_USER_ABORTED
GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f)
int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, uint32_t gid)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_SETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ki, uint32_t gid)
int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
#define GWEN_LIST_FINI(t, element)
#define GWEN_INHERIT_FUNCTIONS(t)
GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETCONTEXT_FN f)
void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
const GWEN_CRYPT_TOKEN_CONTEXT *GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s)
#define GWEN_GUI_MSG_FLAGS_TYPE_WARN
void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
const GWEN_CRYPT_TOKEN_KEYINFO * GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid)
#define GWEN_ERROR_NOT_IMPLEMENTED