14#define DISABLE_DEBUGLOG
17#include "cryptmgr_p.h"
19#include <gwenhywfar/misc.h>
20#include <gwenhywfar/debug.h>
21#include <gwenhywfar/gwentime.h>
23#include <gwenhywfar/crypthead.h>
24#include <gwenhywfar/sighead.h>
25#include <gwenhywfar/sigtail.h>
26#include <gwenhywfar/tag16.h>
27#include <gwenhywfar/cryptkeysym.h>
28#include <gwenhywfar/padd.h>
53 free(cm->localKeyName);
54 free(cm->peerKeyName);
65 return cm->localKeyName;
73 free(cm->localKeyName);
75 cm->localKeyName=strdup(s);
77 cm->localKeyName=
NULL;
85 return cm->localKeyNumber;
101 return cm->localKeyVersion;
109 cm->localKeyVersion=i;
117 return cm->peerKeyName;
125 free(cm->peerKeyName);
127 cm->peerKeyName=strdup(s);
129 cm->peerKeyName=
NULL;
137 return cm->peerKeyNumber;
153 return cm->peerKeyVersion;
161 cm->peerKeyVersion=i;
169 return cm->cryptProfile;
185 return cm->signatureProfile;
193 cm->signatureProfile=i;
204 return cm->signDataFn(cm, pData, lData, dbuf);
214 if (cm->encryptKeyFn)
215 return cm->encryptKeyFn(cm, pData, lData, dbuf);
223 const uint8_t *pData, uint32_t lData,
224 const uint8_t *pSignature, uint32_t lSignature)
227 if (cm->verifyDataFn)
228 return cm->verifyDataFn(cm, pData, lData, pSignature, lSignature);
238 if (cm->decryptKeyFn)
239 return cm->decryptKeyFn(cm, pData, lData, dbuf);
489 const uint8_t *pSignedData=
NULL;
490 uint32_t lSignedData=0;
544 if ((pSignedData+lSignedData)==p) {
578 if (!(sh && st && pSignedData && lSignedData)) {
595 if (cm->peerKeyName==
NULL) {
606 if (!(cm->peerKeyName && s && (strcasecmp(cm->peerKeyName, s)==0) &&
620 pSignedData, lSignedData,
643 const uint8_t *pEncryptedData=
NULL;
644 uint32_t lEncryptedData=0;
703 if (!(ch && pEncryptedData && lEncryptedData)) {
711 if (cm->localKeyName) {
716 if (!(cm->localKeyName && s && (strcasecmp(cm->localKeyName, s)==0) &&
758 pEncryptedData, lEncryptedData,
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf)
int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
@ GWEN_Crypt_CryptMode_Cbc
GWEN_CRYPTHEAD * GWEN_CryptHead_new(void)
void GWEN_CryptHead_SetKey(GWEN_CRYPTHEAD *ch, const uint8_t *p, uint32_t l)
int GWEN_CryptHead_toBuffer(const GWEN_CRYPTHEAD *ch, GWEN_BUFFER *buf, uint8_t tagType)
void GWEN_CryptHead_free(GWEN_CRYPTHEAD *ch)
GWEN_CRYPTHEAD * GWEN_CryptHead_fromBuffer(const uint8_t *p, uint32_t l)
int GWEN_CryptHead_GetKeyVersion(const GWEN_CRYPTHEAD *ch)
const char * GWEN_CryptHead_GetKeyName(const GWEN_CRYPTHEAD *ch)
int GWEN_CryptHead_GetKeyNumber(const GWEN_CRYPTHEAD *ch)
void GWEN_CryptHead_SetKeyVersion(GWEN_CRYPTHEAD *ch, int i)
uint32_t GWEN_CryptHead_GetKeyLen(const GWEN_CRYPTHEAD *ch)
const uint8_t * GWEN_CryptHead_GetKeyPtr(const GWEN_CRYPTHEAD *ch)
void GWEN_CryptHead_SetKeyName(GWEN_CRYPTHEAD *ch, const char *s)
void GWEN_CryptHead_SetKeyNumber(GWEN_CRYPTHEAD *ch, int i)
void GWEN_CryptHead_SetCryptProfile(GWEN_CRYPTHEAD *ch, int i)
struct GWEN_CRYPTHEAD GWEN_CRYPTHEAD
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_Key_free(GWEN_CRYPT_KEY *k)
int GWEN_Crypt_Key_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY
uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
uint8_t * GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
int GWEN_CryptMgr_GetSignatureProfile(const GWEN_CRYPTMGR *cm)
void GWEN_CryptMgr_free(GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_GetPeerKeyVersion(const GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_GetLocalKeyNumber(const GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_Sign(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_GetPeerKeyNumber(const GWEN_CRYPTMGR *cm)
void GWEN_CryptMgr_SetLocalKeyName(GWEN_CRYPTMGR *cm, const char *s)
void GWEN_CryptMgr_SetLocalKeyNumber(GWEN_CRYPTMGR *cm, int i)
GWEN_CRYPTMGR_SIGNDATA_FN GWEN_CryptMgr_SetSignDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_SIGNDATA_FN f)
GWEN_CRYPTMGR_DECRYPTKEY_FN GWEN_CryptMgr_SetDecryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_DECRYPTKEY_FN f)
GWEN_CRYPTMGR * GWEN_CryptMgr_new(void)
void GWEN_CryptMgr_SetPeerKeyVersion(GWEN_CRYPTMGR *cm, int i)
int GWEN_CryptMgr_Decrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_Verify(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_Encode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_VerifyData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature)
void GWEN_CryptMgr_SetPeerKeyName(GWEN_CRYPTMGR *cm, const char *s)
GWEN_CRYPTMGR_VERIFYDATA_FN GWEN_CryptMgr_SetVerifyDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_VERIFYDATA_FN f)
const char * GWEN_CryptMgr_GetLocalKeyName(const GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_Decode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_EncryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_DecryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_CryptMgr_GetCryptProfile(const GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_SignData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
void GWEN_CryptMgr_SetPeerKeyNumber(GWEN_CRYPTMGR *cm, int i)
int GWEN_CryptMgr_Encrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
GWEN_CRYPTMGR_ENCRYPTKEY_FN GWEN_CryptMgr_SetEncryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_ENCRYPTKEY_FN f)
const char * GWEN_CryptMgr_GetPeerKeyName(const GWEN_CRYPTMGR *cm)
void GWEN_CryptMgr_SetCryptProfile(GWEN_CRYPTMGR *cm, int i)
void GWEN_CryptMgr_SetLocalKeyVersion(GWEN_CRYPTMGR *cm, int i)
void GWEN_CryptMgr_SetSignatureProfile(GWEN_CRYPTMGR *cm, int i)
int GWEN_CryptMgr_GetLocalKeyVersion(const GWEN_CRYPTMGR *cm)
struct GWEN_CRYPTMGR GWEN_CRYPTMGR
#define GWEN_CRYPTMGR_TLV_ENCRYPTEDOBJECT
#define GWEN_CRYPTMGR_TLV_SIGNEDOBJECT
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_SIGNDATA_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_DECRYPTKEY_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_VERIFYDATA_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature)
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_ENCRYPTKEY_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define GWEN_ERROR_NOT_IMPLEMENTED
#define GWEN_ERROR_BAD_DATA
#define GWEN_ERROR_GENERIC
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
struct GWEN_TIME GWEN_TIME
GWENHYWFAR_API GWEN_TIME * GWEN_CurrentTime(void)
GWENHYWFAR_API void GWEN_Time_free(GWEN_TIME *t)
#define GWEN_INHERIT_FUNCTIONS(t)
#define GWEN_INHERIT_INIT(t, element)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_Padd_PaddWithAnsiX9_23(GWEN_BUFFER *src)
int GWEN_Padd_UnpaddWithAnsiX9_23(GWEN_BUFFER *src)
void GWEN_SigHead_SetSignatureNumber(GWEN_SIGHEAD *sh, int i)
void GWEN_SigHead_SetDateTime(GWEN_SIGHEAD *sh, const GWEN_TIME *ti)
void GWEN_SigHead_SetSignatureProfile(GWEN_SIGHEAD *sh, int i)
int GWEN_SigHead_GetKeyVersion(const GWEN_SIGHEAD *sh)
const char * GWEN_SigHead_GetKeyName(const GWEN_SIGHEAD *sh)
GWEN_SIGHEAD * GWEN_SigHead_fromBuffer(const uint8_t *p, uint32_t l)
void GWEN_SigHead_SetKeyName(GWEN_SIGHEAD *sh, const char *s)
int GWEN_SigHead_GetKeyNumber(const GWEN_SIGHEAD *sh)
void GWEN_SigHead_SetKeyNumber(GWEN_SIGHEAD *sh, int i)
void GWEN_SigHead_SetKeyVersion(GWEN_SIGHEAD *sh, int i)
void GWEN_SigHead_free(GWEN_SIGHEAD *sh)
GWEN_SIGHEAD * GWEN_SigHead_new(void)
int GWEN_SigHead_GetSignatureNumber(const GWEN_SIGHEAD *sh)
int GWEN_SigHead_toBuffer(const GWEN_SIGHEAD *sh, GWEN_BUFFER *buf, uint8_t tagType)
struct GWEN_SIGHEAD GWEN_SIGHEAD
void GWEN_SigTail_SetSignatureNumber(GWEN_SIGTAIL *st, int i)
GWEN_SIGTAIL * GWEN_SigTail_fromBuffer(const uint8_t *p, uint32_t l)
GWEN_SIGTAIL * GWEN_SigTail_new(void)
void GWEN_SigTail_SetSignature(GWEN_SIGTAIL *st, const uint8_t *p, uint32_t l)
const uint8_t * GWEN_SigTail_GetSignaturePtr(const GWEN_SIGTAIL *st)
int GWEN_SigTail_GetSignatureNumber(const GWEN_SIGTAIL *st)
void GWEN_SigTail_free(GWEN_SIGTAIL *st)
uint32_t GWEN_SigTail_GetSignatureLen(const GWEN_SIGTAIL *st)
int GWEN_SigTail_toBuffer(const GWEN_SIGTAIL *st, GWEN_BUFFER *buf, uint8_t tagType)
struct GWEN_SIGTAIL GWEN_SIGTAIL
void GWEN_Tag16_DirectlyToBuffer(unsigned int tagType, const char *p, int size, GWEN_BUFFER *buf)
unsigned int GWEN_Tag16_GetTagLength(const GWEN_TAG16 *tag)
const void * GWEN_Tag16_GetTagData(const GWEN_TAG16 *tag)
void GWEN_Tag16_free(GWEN_TAG16 *tag)
unsigned int GWEN_Tag16_GetTagType(const GWEN_TAG16 *tag)
GWEN_TAG16 * GWEN_Tag16_fromBuffer2(const uint8_t *bufferPtr, uint32_t bufferLen, int doCopy)
unsigned int GWEN_Tag16_GetTagSize(const GWEN_TAG16 *tag)
struct GWEN_TAG16 GWEN_TAG16