14 #define DISABLE_DEBUGLOG
19 #include <gwenhywfar/ctf_context_be.h>
20 #include <gwenhywfar/misc.h>
21 #include <gwenhywfar/debug.h>
22 #include <gwenhywfar/padd.h>
23 #include <gwenhywfar/cryptkeyrsa.h>
24 #include <gwenhywfar/text.h>
26 #include <sys/types.h>
44 GWEN_CRYPT_TOKEN_FILE *lct;
54 DBG_ERROR(
GWEN_LOGDOMAIN,
"No name of the crypt token set - maybe you need to set the key file as token name? Cannot lock token.");
72 "Keyfile [%s] locked.",
84 S_IRUSR|S_IWUSR | lct->keyfile_mode);
88 struct stat statbuffer;
93 statbuffer.st_mode & (S_IRWXU
109 "Keyfile [%s] unlocked.",
132 "Keyfile [%s] unlocked.",
145 GWEN_CRYPT_TOKEN_FILE *lct;
159 if (close(lct->fd)) {
167 "Keyfile [%s] unlocked.",
181 "Keyfile [%s] unlocked.",
194 if (st.st_mode & 0007) {
196 "WARNING: Your keyfile \"%s\" is accessible by every user on your computer!\n"
197 "Nobody but you should have access to the file. You \n"
198 "should probably change this with \"chmod 600 %s\"",
202 "WARNING: Your keyfile is accessible ny every user on your computer!\n"
203 "Nobody but you should have access to the file.");
206 lct->mtime=st.st_mtime;
207 lct->ctime=st.st_ctime;
215 GWEN_CRYPT_TOKEN_FILE *lct;
222 if (lseek(lct->fd, 0, SEEK_SET)==-1) {
228 return lct->readFn(ct, lct->fd, gid);
234 GWEN_CRYPT_TOKEN_FILE *lct;
240 if (lct->writeFn==0) {
242 "No write function in crypt token type \"%s\"",
247 if (lseek(lct->fd, 0, SEEK_SET)==-1) {
253 return lct->writeFn(ct, lct->fd, cr, gid);
259 GWEN_CRYPT_TOKEN_FILE *lct;
273 "Could not open keyfile for reading (%d)", rv);
298 GWEN_CRYPT_TOKEN_FILE *lct;
309 "Could not open keyfile for writing (%d)", rv);
334 GWEN_CRYPT_TOKEN_FILE *lct;
348 if (lct->mtime!=st.st_mtime ||
349 lct->ctime!=st.st_ctime) {
354 "Keyfile changed externally, reloading it");
371 GWEN_CRYPT_TOKEN_FILE *lct;
385 GWEN_CRYPT_TOKEN_FILE *lct;
407 GWEN_CRYPT_TOKEN_FILE *lct;
424 GWEN_CRYPT_TOKEN_FILE *lct;
440 GWEN_CRYPT_TOKEN_FILE *lct;
457 "Error trying to access key file \"%s\": %s",
465 "Keyfile \"%s\" already exists, will not create it",
473 O_RDWR | O_CREAT | O_EXCL
503 GWEN_CRYPT_TOKEN_FILE *lct;
522 GWEN_CRYPT_TOKEN_FILE *lct;
549 GWEN_CRYPT_TOKEN_FILE *lct;
591 *(pIdList++)=(i<<16)+j;
607 GWEN_CRYPT_TOKEN_FILE *lct;
638 switch(
id & 0xffff) {
681 GWEN_CRYPT_TOKEN_FILE *lct;
718 switch(
id & 0xffff) {
770 switch(
id & 0xffff) {
782 "Can't set modulus and exponent for private key");
787 I18N(
"Public key replaced"));
791 if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER)
793 if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION)
802 I18N(
"Unable to write key file"));
807 I18N(
"Key file saved"));
819 GWEN_CRYPT_TOKEN_FILE *lct;
855 switch(
id & 0xffff) {
901 if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION) {
917 if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER) {
927 if ((flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS) &&
928 (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT) &&
951 if (nflags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER)
953 if (nflags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION)
957 switch(
id & 0xffff) {
969 "Can't set modulus and exponent for private key");
974 I18N(
"Public key replaced"));
978 if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER)
980 if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION)
991 I18N(
"Unable to write key file"));
996 I18N(
"Key file saved"));
1005 GWEN_CRYPT_TOKEN_FILE *lct;
1057 I18N(
"Invalid key id %02x"),
id);
1063 I18N(
"No key info found"));
1103 GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS |
1104 GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT |
1105 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER |
1106 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION |
1114 else if (keyNum==6) {
1121 GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS |
1122 GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT |
1123 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER |
1124 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION |
1137 I18N(
"Unable to write key file"));
1142 I18N(
"Key file saved"));
1154 GWEN_CRYPT_TOKEN_FILE *lct;
1207 GWEN_CRYPT_TOKEN_FILE *lct;
1249 GWEN_CRYPT_TOKEN_FILE *lct;
1303 GWEN_CRYPT_TOKEN_FILE *lct;
1333 switch(
id & 0xffff) {
1358 const uint8_t *pInData,
1360 uint8_t *pSignatureData,
1361 uint32_t *pSignatureLen,
1362 uint32_t *pSeqCounter,
1364 GWEN_CRYPT_TOKEN_FILE *lct;
1409 keyNum=keyId & 0xffff;
1410 if (keyNum!=1 && keyNum!=5) {
1425 if (aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) {
1428 const uint8_t *modPtr;
1432 switch(keyId & 0xffff) {
1453 while(modLen && *modPtr==0) {
1463 for (i=0; i<8; i++) {
1524 switch(keyId & 0xffff) {
1563 const uint8_t *pInData,
1565 const uint8_t *pSignatureData,
1566 uint32_t signatureLen,
1567 uint32_t seqCounter,
1569 GWEN_CRYPT_TOKEN_FILE *lct;
1608 keyNum=keyId & 0xffff;
1609 if (keyNum!=1 && keyNum!=3 && keyNum!=6) {
1621 if (aid==GWEN_Crypt_PaddAlgoId_Iso9796_2 ||
1622 aid==GWEN_Crypt_PaddAlgoId_Pkcs1_2 ||
1623 aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) {
1632 pSignatureData, signatureLen,
1643 if (aid==GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256) {
1646 const uint8_t *modPtr;
1664 while(modLen && *modPtr==0) {
1674 for (i=0; i<8; i++) {
1766 if (seq>=seqCounter) {
1794 const uint8_t *pInData,
1799 GWEN_CRYPT_TOKEN_FILE *lct;
1836 keyNum=keyId & 0xffff;
1837 if (keyNum!=2 && keyNum!=4) {
1883 const uint8_t *pInData,
1888 GWEN_CRYPT_TOKEN_FILE *lct;
1926 keyNum=keyId & 0xffff;
1927 if (keyNum!=2 && keyNum!=4) {
1982 GWEN_CRYPT_TOKEN_FILE *lct;
2005 keyNum=keyId & 0xffff;
2008 if (keyNum!=1 && keyNum!=2 && keyNum!=5 && keyNum!=7) {
2011 I18N(
"Can only generate local keys."));
2019 I18N(
"Only RSA keys supported."));
2043 I18N(
"Could not generate key"));
2048 I18N(
"Key generated"));
2064 I18N(
"No key info found"));
2103 GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS |
2104 GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT |
2105 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER |
2106 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION |
2114 else if (keyNum==2) {
2117 GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS |
2118 GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT |
2119 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER |
2120 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION |
2127 else if (keyNum==5) {
2134 GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS |
2135 GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT |
2136 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER |
2137 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION |
2145 else if (keyNum==7) {
2152 GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS |
2153 GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT |
2154 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER |
2155 GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION |
2171 I18N(
"Unable to write key file"));
2176 I18N(
"Key generated and set"));
2188 GWEN_CRYPT_TOKEN_FILE *lct;
2190 lct=(GWEN_CRYPT_TOKEN_FILE*) p;
2199 const char *tokenName) {
2201 GWEN_CRYPT_TOKEN_FILE *lct;
int GWEN_Crypt_TokenFile__ReadFile(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetRemoteSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
const char * GWEN_Crypt_Token_Context_GetServiceId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
int GWEN_Crypt_TokenFile__Read(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
void GWEN_Crypt_TokenFile_AddContext(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CONTEXT *ctx)
void GWEN_Crypt_Token_Context_SetServiceId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src)
void GWEN_CTF_Context_SetLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
GWENHYWFAR_API void GWEN_FSLock_free(GWEN_FSLOCK *fl)
void GWEN_Crypt_Token_Context_List_Add(GWEN_CRYPT_TOKEN_CONTEXT *element, GWEN_CRYPT_TOKEN_CONTEXT_LIST *list)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_Crypt_CryptAlgo_GetChunkSize(const GWEN_CRYPT_CRYPTALGO *a)
GWEN_CRYPT_TOKEN * GWEN_Crypt_TokenFile_new(const char *typeName, const char *tokenName)
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
void GWEN_MDigest_free(GWEN_MDIGEST *md)
int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size)
uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf)
const uint8_t * GWEN_Crypt_Token_KeyInfo_GetModulusData(const GWEN_CRYPT_TOKEN_KEYINFO *st)
void GWEN_Crypt_Token_KeyInfo_free(GWEN_CRYPT_TOKEN_KEYINFO *p_struct)
#define GWEN_ERROR_INVALID
void GWEN_CTF_Context_SetLocalCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetLocalAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
const char * GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct)
uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
void GWEN_CTF_Context_SetLocalAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
#define GWEN_CRYPT_TOKEN_MODE_EXP_65537
void GWEN_CTF_Context_SetRemoteSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
const char * GWEN_Crypt_Token_Context_GetUserId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
GWENHYWFAR_CB void GWEN_Crypt_TokenFile_freeData(GWEN_UNUSED void *bp, void *p)
const char * GWEN_Crypt_Token_Context_GetUserName(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid)
#define DBG_NOTICE(dbg_logger, format, args...)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS
void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k)
int GWEN_Crypt_KeyRsa_GeneratePair(unsigned int nbytes, int use65537e, GWEN_CRYPT_KEY **pPubKey, GWEN_CRYPT_KEY **pSecretKey)
void GWEN_CTF_Context_SetLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f)
#define GWEN_FREE_OBJECT(varname)
const char * GWEN_Crypt_Token_Context_GetAddress(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
void GWEN_Crypt_Token_Context_SetSystemId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src)
void GWEN_Crypt_Token_KeyInfo_SetModulus(GWEN_CRYPT_TOKEN_KEYINFO *st, const uint8_t *p, uint32_t len)
GWEN_CRYPT_KEY * GWEN_Crypt_TokenFile__GetKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyRsa_fromModExp(unsigned int nbytes, const uint8_t *pModulus, uint32_t lModulus, const uint8_t *pExponent, uint32_t lExponent)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetLocalCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
int GWEN_Crypt_Token_Context_GetPort(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetLocalCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
void GWEN_CTF_Context_SetRemoteCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETCONTEXT_FN f)
int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
#define DBG_WARN(dbg_logger, format, args...)
const char * GWEN_Crypt_Token_Context_GetSystemId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
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_Context_SetUserName(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src)
int GWEN_Crypt_Key_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
int GWEN_Crypt_TokenFile__OpenFile(GWEN_CRYPT_TOKEN *ct, int wr, uint32_t gid)
int GWEN_Crypt_TokenFile__CloseFile(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
int GWEN_Crypt_Key_GetKeyNumber(const GWEN_CRYPT_KEY *k)
uint32_t GWEN_Crypt_Token_KeyInfo_GetSignCounter(const GWEN_CRYPT_TOKEN_KEYINFO *p_struct)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__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_Padd_UnapplyPaddAlgo(const GWEN_CRYPT_PADDALGO *a, GWEN_BUFFER *buf)
GWEN_CRYPT_TOKEN_CONTEXT * GWEN_Crypt_TokenFile_GetContext(GWEN_CRYPT_TOKEN *ct, int idx)
void GWEN_CTF_Context_SetRemoteCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
uint32_t GWEN_Crypt_Token_Context_GetId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
void GWEN_CTF_Context_SetRemoteAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
#define GWEN_ERROR_BUFFER_OVERFLOW
#define GWEN_ERROR_NO_KEY
GWEN_CRYPT_TOKEN_CONTEXT * GWEN_Crypt_Token_Context_List_Next(const GWEN_CRYPT_TOKEN_CONTEXT *element)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetRemoteCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
int GWEN_CTF_Context_IsOfThisType(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
#define GWEN_CRYPT_TOKEN_CONTEXT_KEYS
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_CONTEXT *nctx, uint32_t gid)
int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GenerateKey(GWEN_CRYPT_TOKEN *ct, uint32_t keyId, const GWEN_CRYPT_CRYPTALGO *a, uint32_t gid)
void GWEN_Crypt_KeyRsa_AddFlags(GWEN_CRYPT_KEY *k, uint32_t fl)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_Crypt_Token_KeyInfo_dup(const GWEN_CRYPT_TOKEN_KEYINFO *p_src)
uint32_t GWEN_Crypt_Token_KeyInfo_GetModulusLen(const GWEN_CRYPT_TOKEN_KEYINFO *st)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetTempLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
void GWEN_Crypt_Token_Context_List_Clear(GWEN_CRYPT_TOKEN_CONTEXT_LIST *l)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER
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)
uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyVersion(const GWEN_CRYPT_TOKEN_KEYINFO *p_struct)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__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)
GWENHYWFAR_API GWEN_FSLOCK * GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t)
#define DBG_DEBUG(dbg_logger, format, args...)
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_FILE_READ_FN)(GWEN_CRYPT_TOKEN *ct, int fd, uint32_t gid)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetContextIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *fmt,...)
GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GENERATEKEY_FN f)
int GWEN_Crypt_Token_KeyInfo_GetKeySize(const GWEN_CRYPT_TOKEN_KEYINFO *p_struct)
const uint8_t * GWEN_Crypt_Token_KeyInfo_GetExponentData(const GWEN_CRYPT_TOKEN_KEYINFO *st)
void GWEN_Crypt_Token_KeyInfo_SetKeyVersion(GWEN_CRYPT_TOKEN_KEYINFO *p_struct, uint32_t p_src)
void GWEN_Crypt_Token_Context_List_free(GWEN_CRYPT_TOKEN_CONTEXT_LIST *l)
#define GWEN_ERROR_GENERIC
void GWEN_CTF_Context_SetRemoteSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
void GWEN_CTF_Context_SetRemoteAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
int GWEN_Padd_ApplyPaddAlgo(const GWEN_CRYPT_PADDALGO *a, GWEN_BUFFER *buf)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY
struct GWEN_MDIGEST GWEN_MDIGEST
int GWENHYWFAR_CB(* GWEN_CRYPT_TOKEN_FILE_WRITE_FN)(GWEN_CRYPT_TOKEN *ct, int fd, int cre, uint32_t gid)
GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgo_GetId(const GWEN_CRYPT_PADDALGO *a)
GWEN_CRYPT_TOKEN_FILE_WRITE_FN GWEN_Crypt_TokenFile_SetWriteFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_FILE_WRITE_FN f)
struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY
uint32_t GWEN_Crypt_Token_KeyInfo_GetFlags(const GWEN_CRYPT_TOKEN_KEYINFO *p_struct)
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Lock(GWEN_FSLOCK *fl, int timeout, uint32_t gid)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Crypt_TokenFile__ReloadIfNeeded(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * GWEN_Crypt_Token_Context_GetPeerId(const GWEN_CRYPT_TOKEN_CONTEXT *p_struct)
const GWEN_CRYPT_TOKEN_KEYINFO *GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t flags, uint32_t gid)
struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetRemoteCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION
struct GWEN_CRYPT_TOKEN_KEYINFO GWEN_CRYPT_TOKEN_KEYINFO
void GWEN_CTF_Context_SetTempLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetTempLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_OPEN_FN f)
#define GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN
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
#define GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER
void GWEN_CTF_Context_SetLocalCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
int GWEN_Crypt_TokenFile__WriteFile(GWEN_CRYPT_TOKEN *ct, int cr, uint32_t gid)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_ACTIONMASK
GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_CREATE_FN f)
void GWEN_Crypt_Token_Context_SetAddress(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src)
GWEN_CRYPT_TOKEN * GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev, const char *typeName, const char *tokenName)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetKeyIdList(GWEN_CRYPT_TOKEN *ct, uint32_t *pIdList, uint32_t *pCount, uint32_t gid)
#define GWEN_ERROR_NOT_SUPPORTED
int GWEN_Crypt_Key_Sign(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pSignatureData, uint32_t *pSignatureLen)
int GWEN_Padd_AddPkcs1Pss(uint8_t *pDestBuffer, uint32_t lDestBuffer, uint32_t nbits, const uint8_t *pHash, uint32_t lHash, uint32_t lSalt, GWEN_MDIGEST *md)
GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgo_GetId(const GWEN_CRYPT_CRYPTALGO *a)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Open(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED int admin, 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)
void GWEN_Crypt_Token_KeyInfo_SetExponent(GWEN_CRYPT_TOKEN_KEYINFO *st, const uint8_t *p, uint32_t len)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__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)
#define GWEN_CRYPT_TOKEN_KEYFLAGS_HASSTATUS
#define GWEN_ERROR_NOT_FOUND
GWEN_CRYPT_TOKEN_CONTEXT * GWEN_Crypt_Token_Context_List_First(const GWEN_CRYPT_TOKEN_CONTEXT_LIST *l)
void GWEN_Crypt_Token_Context_SetUserId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src)
GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_DECIPHER_FN f)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetRemoteAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
void GWEN_CTF_Context_SetTempLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
#define DBG_INFO(dbg_logger, format, args...)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetRemoteSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
int GWEN_Crypt_Key_GetKeyVersion(const GWEN_CRYPT_KEY *k)
GWENHYWFAR_API GWEN_MDIGEST * GWEN_MDigest_Sha256_new(void)
void GWEN_Crypt_Key_SetKeyVersion(GWEN_CRYPT_KEY *k, int i)
void GWEN_Crypt_Token_KeyInfo_SetFlags(GWEN_CRYPT_TOKEN_KEYINFO *p_struct, uint32_t p_src)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid)
GWEN_CRYPT_KEY * GWEN_CTF_Context_GetRemoteAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
int GWEN_Padd_VerifyPkcs1Pss(const uint8_t *pSrcBuffer, uint32_t lSrcBuffer, uint32_t nbits, const uint8_t *pHash, uint32_t lHash, uint32_t lSalt, GWEN_MDIGEST *md)
GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_ENCIPHER_FN f)
uint32_t GWEN_Crypt_Token_KeyInfo_GetExponentLen(const GWEN_CRYPT_TOKEN_KEYINFO *st)
void GWEN_Crypt_Token_KeyInfo_SetKeyNumber(GWEN_CRYPT_TOKEN_KEYINFO *p_struct, uint32_t p_src)
int GWEN_Crypt_Key_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
void GWEN_Crypt_Token_KeyInfo_SetSignCounter(GWEN_CRYPT_TOKEN_KEYINFO *p_struct, uint32_t p_src)
int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
#define GWEN_ERROR_VERIFY
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)
void GWEN_Buffer_Rewind(GWEN_BUFFER *bf)
#define GWEN_INHERIT(bt, t)
int GWEN_Crypt_TokenFile__Write(GWEN_CRYPT_TOKEN *ct, int cr, uint32_t gid)
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__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_KeyInfo_SetKeySize(GWEN_CRYPT_TOKEN_KEYINFO *p_struct, int p_src)
#define GWEN_ERROR_INTERNAL
#define GWEN_ERROR_USER_ABORTED
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl)
#define GWEN_ERROR_NO_DATA
GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f)
int GWEN_Crypt_Key_Verify(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, const uint8_t *pSignatureData, uint32_t signatureLen)
GWEN_CRYPT_TOKEN_CONTEXT_LIST * GWEN_Crypt_Token_Context_List_new()
int GWENHYWFAR_CB GWEN_Crypt_TokenFile__SetKeyInfo(GWEN_CRYPT_TOKEN *ct, uint32_t id, const GWEN_CRYPT_TOKEN_KEYINFO *ski, uint32_t gid)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyRsa_dup(const GWEN_CRYPT_KEY *k)
#define GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH
void GWEN_Crypt_Token_Context_SetPeerId(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, const char *p_src)
int GWEN_Crypt_KeyRsa_GetExponent(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen)
GWEN_CRYPT_TOKEN_KEYINFO * GWEN_CTF_Context_GetLocalAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx)
void GWEN_Crypt_Key_SetKeyNumber(GWEN_CRYPT_KEY *k, int i)
const GWEN_CRYPT_TOKEN_CONTEXT *GWENHYWFAR_CB GWEN_Crypt_TokenFile__GetContext(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid)
uint32_t GWEN_Crypt_Token_KeyInfo_GetKeyNumber(const GWEN_CRYPT_TOKEN_KEYINFO *p_struct)
GWEN_CRYPT_TOKEN_FILE_READ_FN GWEN_Crypt_TokenFile_SetReadFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_FILE_READ_FN f)
void GWEN_Crypt_Token_KeyInfo_AddFlags(GWEN_CRYPT_TOKEN_KEYINFO *p_struct, uint32_t p_src)
GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct, GWEN_CRYPT_TOKEN_SETCONTEXT_FN f)
int GWEN_Crypt_KeyRsa_GetModulus(const GWEN_CRYPT_KEY *k, uint8_t *buffer, uint32_t *pBufLen)
#define GWEN_INHERIT_GETDATA(bt, t, element)
void GWEN_CTF_Context_SetLocalAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki)
void GWEN_Crypt_Token_Context_SetPort(GWEN_CRYPT_TOKEN_CONTEXT *p_struct, int p_src)
#define GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN