14#define DISABLE_DEBUGLOG
19#include <gwenhywfar/misc.h>
20#include <gwenhywfar/debug.h>
21#include <gwenhywfar/gui.h>
35 const
char *tokenName)
47 ct->typeName=strdup(typeName);
49 ct->tokenName=strdup(tokenName);
60 if (ct->refCount==1) {
101 return ct->tokenName;
109 assert(ct->refCount);
114 ct->tokenName=strdup(s);
122 assert(ct->refCount);
124 return ct->friendlyName;
132 assert(ct->refCount);
136 free(ct->friendlyName);
137 ct->friendlyName=strdup(s);
145 assert(ct->refCount);
155 assert(ct->refCount);
165 assert(ct->refCount);
175 assert(ct->refCount);
185 assert(ct->refCount);
195 assert(ct->refCount);
205 assert(ct->refCount);
215 assert(ct->refCount);
227 assert(ct->refCount);
235 rv=ct->openFn(ct, admin, gid);
251 assert(ct->refCount);
254 rv=ct->createFn(ct, gid);
268 assert(ct->refCount);
270 if (ct->openCount>1 && !abandon) {
278 rv=ct->closeFn(ct, abandon, gid);
294 assert(ct->refCount);
296 return (ct->openCount!=0);
307 assert(ct->refCount);
312 if (ct->getKeyIdListFn)
313 return ct->getKeyIdListFn(ct, pIdList, pCount, gid);
326 assert(ct->refCount);
328 if (ct->openCount<1) {
333 if (ct->getKeyInfoFn)
334 return ct->getKeyInfoFn(ct,
id, flags, gid);
347 assert(ct->refCount);
352 if (ct->setKeyInfoFn)
353 return ct->setKeyInfoFn(ct,
id, ki, gid);
366 assert(ct->refCount);
371 if (ct->getContextIdListFn)
372 return ct->getContextIdListFn(ct, pIdList, pCount, gid);
384 assert(ct->refCount);
386 if (ct->openCount<1) {
391 if (ct->getContextFn)
392 return ct->getContextFn(ct,
id, gid);
405 assert(ct->refCount);
410 if (ct->setContextFn)
411 return ct->setContextFn(ct,
id, ctx, gid);
421 const uint8_t *pInData,
423 uint8_t *pSignatureData,
424 uint32_t *pSignatureLen,
425 uint32_t *pSeqCounter,
429 assert(ct->refCount);
435 return ct->signFn(ct, keyId, a, pInData, inLen, pSignatureData, pSignatureLen,
446 const uint8_t *pInData,
448 const uint8_t *pSignatureData,
449 uint32_t signatureLen,
454 assert(ct->refCount);
460 return ct->verifyFn(ct, keyId, a, pInData, inLen, pSignatureData, signatureLen,
471 const uint8_t *pInData,
478 assert(ct->refCount);
484 return ct->encipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid);
494 const uint8_t *pInData,
501 assert(ct->refCount);
507 return ct->decipherFn(ct, keyId, a, pInData, inLen, pOutData, pOutLen, gid);
521 assert(ct->refCount);
526 if (ct->generateKeyFn)
527 return ct->generateKeyFn(ct, keyId, a, gid);
537 assert(ct->refCount);
543 return ct->changePinFn(ct, admin, gid);
553 assert(ct->refCount);
558 if (ct->activateKeyFn)
559 return ct->activateKeyFn(ct,
id, gid);
575 assert(ct->refCount);
590 assert(ct->refCount);
606 assert(ct->refCount);
621 assert(ct->refCount);
622 of=ct->getKeyIdListFn;
623 ct->getKeyIdListFn=f;
636 assert(ct->refCount);
651 assert(ct->refCount);
666 assert(ct->refCount);
667 of=ct->getContextIdListFn;
668 ct->getContextIdListFn=f;
681 assert(ct->refCount);
696 assert(ct->refCount);
711 assert(ct->refCount);
726 assert(ct->refCount);
741 assert(ct->refCount);
756 assert(ct->refCount);
771 assert(ct->refCount);
772 of=ct->generateKeyFn;
786 assert(ct->refCount);
801 assert(ct->refCount);
802 of=ct->activateKeyFn;
843 unsigned char *pwbuffer,
844 unsigned int minLength,
845 unsigned int maxLength,
846 unsigned int *pinLength,
852 const char *numeric_warning =
"";
857 assert(ct->refCount);
860 if (!dname || !*dname)
864 mode=
I18N(
"access password");
866 mode=
I18N(
"manager password");
868 mode=
I18N(
"password");
871 buffer[
sizeof(buffer)-1]=0;
873 numeric_warning =
I18N(
"\nYou must only enter numbers, not letters.");
877 snprintf(buffer,
sizeof(buffer)-1,
878 I18N(
"Please enter a new %s for \n"
880 "The password must be at least %d characters long.%s"
882 "Please enter a new %s for <i>%s</i>. "
883 "The password must be at least %d characters long.%s"
895 snprintf(buffer,
sizeof(buffer)-1,
896 I18N(
"Please enter the %s for \n"
899 "Please enter the %s for <i>%s</i>.%s"
913 I18N(
"Enter Password"),
926 *pinLength=strlen((
char *)pwbuffer);
949 const unsigned char *buffer,
950 unsigned int pinLength,
956 unsigned char ibuffer[256];
959 assert(ct->refCount);
962 if (pinLength>=
sizeof(ibuffer)) {
966 memset(ibuffer, 0,
sizeof(ibuffer));
967 memmove(ibuffer, buffer, pinLength);
983 (
const char *)buffer,
986 memset(ibuffer, 0,
sizeof(ibuffer));
1025 assert(ct->refCount);
1028 buffer[
sizeof(buffer)-1]=0;
1031 if (!dname || !*dname)
1035 snprintf(buffer,
sizeof(buffer)-1,
1036 I18N(
"Please insert the security disc\nfor %s"
1038 "Please insert the security disc for <i>%s</i>"
1039 "</html>"), dname, dname);
1041 snprintf(buffer,
sizeof(buffer)-1,
1042 I18N(
"Please insert the chip card\nfor %s"
1044 "Please insert the chip card for <i>%s</i>"
1045 "</html>"), dname, dname);
1050 I18N(
"Insert Medium"),
1052 I18N(
"OK"),
I18N(
"Abort"), 0, gid);
1056 I18N(
"Aborted by user."));
1064 I18N(
"An internal error occurred."),
1065 I18N(
"Dismiss"), 0, 0, gid);
1081 assert(ct->refCount);
1084 buffer[
sizeof(buffer)-1]=0;
1087 if (!dname || !*dname)
1091 snprintf(buffer,
sizeof(buffer)-1,
1092 I18N(
"Please insert the correct security disc\nfor %s"
1094 "Please insert the correct security disc for <i>%s</i>"
1095 "</html>"), dname, dname);
1097 if (dname && *dname) {
1098 snprintf(buffer,
sizeof(buffer)-1,
1099 I18N(
"The wrong chipcard has been inserted.\n"
1100 "Please insert the chipcard with the number\n"
1102 "into the card reader.\n"
1104 "<p>The wrong card has been inserted.</p>"
1105 "<p>Please insert the chipcard with the number"
1106 "<b>%s</b> into the card reader.</p>"
1112 snprintf(buffer,
sizeof(buffer)-1,
1113 I18N(
"Please insert the correct chipcard\nfor %s"
1115 "Please insert the correct chipcard for <i>%s</i>"
1116 "</html>"), dname, dname);
1122 I18N(
"Insert Medium"),
1124 I18N(
"OK"),
I18N(
"Abort"), 0, gid);
1128 I18N(
"Aborted by user."));
1136 I18N(
"An internal error occurred."),
1137 I18N(
"Dismiss"), 0, 0, gid);
1149 if (strcasecmp(s,
"none")==0)
1151 else if (strcasecmp(s,
"file")==0)
1153 else if (strcasecmp(s,
"card")==0)
1155 else if (strcasecmp(s,
"any")==0)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_CRYPT_CRYPTALGO GWEN_CRYPT_CRYPTALGO
int GWEN_Crypt_TransformPin(GWEN_CRYPT_PINENCODING peSrc, GWEN_CRYPT_PINENCODING peDst, unsigned char *buffer, unsigned int bufLength, unsigned int *pinLength)
@ GWEN_Crypt_PinEncoding_Ascii
@ GWEN_Crypt_PinType_Access
@ GWEN_Crypt_PinType_Manage
void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
const char * GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct)
void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct)
GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s)
int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct)
const char * GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d)
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)
int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
const char * GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct)
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)
int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETCONTEXT_FN f)
uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct)
GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CREATE_FN f)
GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETKEYINFO_FN f)
const GWEN_CRYPT_TOKEN_KEYINFO * GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid)
const GWEN_CRYPT_TOKEN_CONTEXT * GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f)
GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct)
const char * GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct)
uint32_t GWEN_Crypt_Token_GetModes(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)
int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
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)
GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_DECIPHER_FN f)
int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *ctx, uint32_t gid)
GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXT_FN f)
int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
int GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, 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_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GENERATEKEY_FN f)
GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f)
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)
void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f)
int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
int GWEN_Crypt_Token_EndEnterPin(GWEN_UNUSED GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, GWEN_UNUSED int ok, uint32_t gid)
GWEN_CRYPT_TOKEN * GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, const char *typeName, const char *tokenName)
int GWEN_Crypt_Token__CreatePasswordName(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_PINTYPE pt, GWEN_BUFFER *nbuf)
GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CLOSE_FN f)
GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_OPEN_FN f)
GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f)
uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_UNUSED GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED GWEN_CRYPT_PINTYPE pt, uint32_t gid)
GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SIGN_FN f)
void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
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)
void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s)
void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f)
int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CHANGEPIN_FN f)
GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYINFO_FN f)
void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s)
struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN
@ GWEN_Crypt_Token_Device_Any
@ GWEN_Crypt_Token_Device_Unknown
@ GWEN_Crypt_Token_Device_File
@ GWEN_Crypt_Token_Device_Card
@ GWEN_Crypt_Token_Device_None
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_OPEN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
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)
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_GETKEYIDLIST_FN)(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)
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 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 GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CLOSE_FN)(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CHANGEPIN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid)
const GWEN_CRYPT_TOKEN_CONTEXT *GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_GETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, 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_GENERATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
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)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_CREATE_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
struct GWEN_CRYPT_TOKEN_CONTEXT GWEN_CRYPT_TOKEN_CONTEXT
struct GWEN_CRYPT_TOKEN_KEYINFO GWEN_CRYPT_TOKEN_KEYINFO
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define GWEN_ERROR_NOT_IMPLEMENTED
#define GWEN_ERROR_NOT_OPEN
#define GWEN_ERROR_INVALID
#define GWEN_ERROR_BUFFER_OVERFLOW
#define GWEN_ERROR_USER_ABORTED
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWEN_GUI_MSG_FLAGS_TYPE_WARN
@ GWEN_Gui_PasswordMethod_Text
#define GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL
GWENHYWFAR_API 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)
#define GWEN_GUI_INPUT_FLAGS_NUMERIC
#define GWEN_GUI_MSG_FLAGS_CONFIRM_B1
GWENHYWFAR_API 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_TYPE_ERROR
#define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS
GWENHYWFAR_API int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
GWENHYWFAR_API int GWEN_Gui_SetPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid)
@ GWEN_Gui_PasswordStatus_Bad
@ GWEN_Gui_PasswordStatus_Ok
#define GWEN_GUI_INPUT_FLAGS_CONFIRM
#define GWEN_INHERIT_FUNCTIONS(t)
#define GWEN_INHERIT_INIT(t, element)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_LIST_FINI(t, element)
#define GWEN_LIST_FUNCTIONS(t, pr)
#define GWEN_LIST_INIT(t, element)
#define GWEN_LIST2_FUNCTIONS(t, pr)
@ GWEN_LoggerLevel_Warning
@ GWEN_LoggerLevel_Notice
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
struct GWEN_CRYPT_PADDALGO GWEN_CRYPT_PADDALGO