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>
51 free(cm->localKeyName);
52 free(cm->peerKeyName);
62 return cm->localKeyName;
69 free(cm->localKeyName);
70 if (s) cm->localKeyName=strdup(s);
71 else cm->localKeyName=
NULL;
78 return cm->localKeyNumber;
92 return cm->localKeyVersion;
99 cm->localKeyVersion=i;
106 return cm->peerKeyName;
113 free(cm->peerKeyName);
114 if (s) cm->peerKeyName=strdup(s);
115 else cm->peerKeyName=
NULL;
122 return cm->peerKeyNumber;
136 return cm->peerKeyVersion;
143 cm->peerKeyVersion=i;
150 return cm->cryptProfile;
164 return cm->signatureProfile;
171 cm->signatureProfile=i;
181 return cm->signDataFn(cm, pData, lData, dbuf);
190 if (cm->encryptKeyFn)
191 return cm->encryptKeyFn(cm, pData, lData, dbuf);
199 const uint8_t *pData, uint32_t lData,
200 const uint8_t *pSignature, uint32_t lSignature) {
202 if (cm->verifyDataFn)
203 return cm->verifyDataFn(cm, pData, lData, pSignature, lSignature);
212 if (cm->decryptKeyFn)
213 return cm->decryptKeyFn(cm, pData, lData, dbuf);
456 const uint8_t *pSignedData=
NULL;
457 uint32_t lSignedData=0;
511 if ((pSignedData+lSignedData)==p) {
545 if (!(sh && st && pSignedData && lSignedData)) {
562 if (cm->peerKeyName==
NULL) {
573 if (!(cm->peerKeyName && s && (strcasecmp(cm->peerKeyName, s)==0) &&
587 pSignedData, lSignedData,
609 const uint8_t *pEncryptedData=
NULL;
610 uint32_t lEncryptedData=0;
669 if (!(ch && pEncryptedData && lEncryptedData)) {
677 if (cm->localKeyName) {
682 if (!(cm->localKeyName && s && (strcasecmp(cm->localKeyName, s)==0) &&
724 pEncryptedData, lEncryptedData,
int GWEN_CryptMgr_GetLocalKeyNumber(const GWEN_CRYPTMGR *cm)
int GWEN_SigHead_toBuffer(const GWEN_SIGHEAD *sh, GWEN_BUFFER *buf, uint8_t tagType)
struct GWEN_TIME GWEN_TIME
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
void GWEN_SigHead_SetDateTime(GWEN_SIGHEAD *sh, const GWEN_TIME *ti)
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_VERIFYDATA_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature)
int GWEN_CryptHead_GetKeyVersion(const GWEN_CRYPTHEAD *ch)
int GWEN_SigTail_GetSignatureNumber(const GWEN_SIGTAIL *st)
const char * GWEN_SigHead_GetKeyName(const GWEN_SIGHEAD *sh)
int GWEN_CryptMgr_Sign(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
#define GWEN_INHERIT_FINI(t, element)
uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
GWEN_CRYPTHEAD * GWEN_CryptHead_fromBuffer(const uint8_t *p, uint32_t l)
void GWEN_CryptHead_SetKeyName(GWEN_CRYPTHEAD *ch, const char *s)
int GWEN_CryptHead_toBuffer(const GWEN_CRYPTHEAD *ch, GWEN_BUFFER *buf, uint8_t tagType)
void GWEN_Crypt_Key_free(GWEN_CRYPT_KEY *k)
struct GWEN_CRYPTHEAD GWEN_CRYPTHEAD
int GWEN_CryptMgr_Decode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
void GWEN_CryptMgr_SetLocalKeyName(GWEN_CRYPTMGR *cm, const char *s)
void GWEN_SigTail_SetSignatureNumber(GWEN_SIGTAIL *st, int i)
#define GWEN_FREE_OBJECT(varname)
int GWEN_CryptMgr_GetPeerKeyNumber(const GWEN_CRYPTMGR *cm)
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)
void GWEN_CryptMgr_SetPeerKeyName(GWEN_CRYPTMGR *cm, const char *s)
int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
void GWEN_SigTail_SetSignature(GWEN_SIGTAIL *st, const uint8_t *p, uint32_t l)
int GWEN_Crypt_Key_Encipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
unsigned int GWEN_Tag16_GetTagSize(const GWEN_TAG16 *tlv)
void GWEN_CryptMgr_SetLocalKeyVersion(GWEN_CRYPTMGR *cm, int i)
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
struct GWEN_TAG16 GWEN_TAG16
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_CryptHead_SetKeyNumber(GWEN_CRYPTHEAD *ch, int i)
void GWEN_Tag16_DirectlyToBuffer(unsigned int tagType, const char *p, int size, GWEN_BUFFER *buf)
int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
GWEN_SIGTAIL * GWEN_SigTail_new(void)
GWEN_CRYPTMGR_VERIFYDATA_FN GWEN_CryptMgr_SetVerifyDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_VERIFYDATA_FN f)
int GWEN_SigHead_GetKeyVersion(const GWEN_SIGHEAD *sh)
int GWEN_CryptHead_GetKeyNumber(const GWEN_CRYPTHEAD *ch)
#define GWEN_ERROR_BAD_DATA
const void * GWEN_Tag16_GetTagData(const GWEN_TAG16 *tlv)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_CryptMgr_GetPeerKeyVersion(const GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_DecryptKey(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
#define GWEN_CRYPTMGR_TLV_ENCRYPTEDOBJECT
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_Generate(GWEN_CRYPT_CRYPTMODE mode, int keySize, int quality)
GWEN_CRYPTMGR_SIGNDATA_FN GWEN_CryptMgr_SetSignDataFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_SIGNDATA_FN f)
int GWEN_CryptMgr_GetSignatureProfile(const GWEN_CRYPTMGR *cm)
int GWEN_CryptMgr_Encode(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
struct GWEN_SIGTAIL GWEN_SIGTAIL
void GWEN_SigHead_SetKeyVersion(GWEN_SIGHEAD *sh, int i)
int GWEN_Padd_PaddWithAnsiX9_23(GWEN_BUFFER *src)
#define GWEN_ERROR_GENERIC
const uint8_t * GWEN_SigTail_GetSignaturePtr(const GWEN_SIGTAIL *st)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
GWEN_SIGHEAD * GWEN_SigHead_fromBuffer(const uint8_t *p, uint32_t l)
void GWEN_CryptMgr_SetCryptProfile(GWEN_CRYPTMGR *cm, int i)
uint32_t GWEN_Crypt_KeyBlowFish_GetKeyDataLen(const GWEN_CRYPT_KEY *k)
struct GWEN_CRYPT_KEY GWEN_CRYPT_KEY
int GWEN_CryptMgr_SignData(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)
#define GWEN_INHERIT_INIT(t, element)
uint8_t * GWEN_Crypt_KeyBlowFish_GetKeyDataPtr(const GWEN_CRYPT_KEY *k)
void GWEN_SigHead_SetKeyName(GWEN_SIGHEAD *sh, const char *s)
GWEN_CRYPTMGR * GWEN_CryptMgr_new(void)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWEN_CryptHead_free(GWEN_CRYPTHEAD *ch)
GWENHYWFAR_API void GWEN_Time_free(GWEN_TIME *t)
int GWEN_CryptMgr_VerifyData(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, const uint8_t *pSignature, uint32_t lSignature)
int GWEN_CryptMgr_Decrypt(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
void GWEN_CryptMgr_free(GWEN_CRYPTMGR *cm)
struct GWEN_SIGHEAD GWEN_SIGHEAD
unsigned int GWEN_Tag16_GetTagLength(const GWEN_TAG16 *tlv)
unsigned int GWEN_Tag16_GetTagType(const GWEN_TAG16 *tlv)
#define DBG_ERROR(dbg_logger, format, args...)
int GWEN_CryptMgr_GetCryptProfile(const GWEN_CRYPTMGR *cm)
void GWEN_CryptMgr_SetPeerKeyVersion(GWEN_CRYPTMGR *cm, int i)
void GWEN_CryptHead_SetKeyVersion(GWEN_CRYPTHEAD *ch, int i)
const char * GWEN_CryptHead_GetKeyName(const GWEN_CRYPTHEAD *ch)
int GWEN_SigTail_toBuffer(const GWEN_SIGTAIL *st, GWEN_BUFFER *buf, uint8_t tagType)
int GWEN_SigHead_GetSignatureNumber(const GWEN_SIGHEAD *sh)
GWEN_SIGHEAD * GWEN_SigHead_new(void)
void GWEN_CryptHead_SetCryptProfile(GWEN_CRYPTHEAD *ch, int i)
uint32_t GWEN_CryptHead_GetKeyLen(const GWEN_CRYPTHEAD *ch)
void GWEN_SigHead_SetKeyNumber(GWEN_SIGHEAD *sh, int i)
#define DBG_INFO(dbg_logger, format, args...)
GWEN_CRYPT_KEY * GWEN_Crypt_KeyBlowFish_fromData(GWEN_CRYPT_CRYPTMODE mode, int keySize, const uint8_t *kd, uint32_t kl)
GWEN_CRYPTMGR_DECRYPTKEY_FN GWEN_CryptMgr_SetDecryptKeyFn(GWEN_CRYPTMGR *cm, GWEN_CRYPTMGR_DECRYPTKEY_FN f)
uint32_t GWEN_SigTail_GetSignatureLen(const GWEN_SIGTAIL *st)
int GWEN_CryptMgr_GetLocalKeyVersion(const GWEN_CRYPTMGR *cm)
int GWEN_Crypt_Key_Decipher(GWEN_CRYPT_KEY *k, const uint8_t *pInData, uint32_t inLen, uint8_t *pOutData, uint32_t *pOutLen)
int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_SIGNDATA_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
void GWEN_CryptMgr_SetSignatureProfile(GWEN_CRYPTMGR *cm, int i)
GWEN_SIGTAIL * GWEN_SigTail_fromBuffer(const uint8_t *p, uint32_t l)
void GWEN_CryptMgr_SetLocalKeyNumber(GWEN_CRYPTMGR *cm, int i)
struct GWEN_CRYPTMGR GWEN_CRYPTMGR
int GWEN_CryptMgr_Verify(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)
void GWEN_SigHead_SetSignatureNumber(GWEN_SIGHEAD *sh, int i)
const char * GWEN_CryptMgr_GetLocalKeyName(const GWEN_CRYPTMGR *cm)
#define GWEN_CRYPTMGR_TLV_SIGNEDOBJECT
GWEN_CRYPTHEAD * GWEN_CryptHead_new(void)
void GWEN_CryptMgr_SetPeerKeyNumber(GWEN_CRYPTMGR *cm, int i)
const char * GWEN_CryptMgr_GetPeerKeyName(const GWEN_CRYPTMGR *cm)
void GWEN_SigHead_free(GWEN_SIGHEAD *sh)
void GWEN_SigTail_free(GWEN_SIGTAIL *st)
void GWEN_CryptHead_SetKey(GWEN_CRYPTHEAD *ch, const uint8_t *p, uint32_t l)
void GWEN_Tag16_free(GWEN_TAG16 *tlv)
GWENHYWFAR_API GWEN_TIME * GWEN_CurrentTime(void)
#define GWEN_INHERIT_FUNCTIONS(t)
void GWEN_SigHead_SetSignatureProfile(GWEN_SIGHEAD *sh, int i)
int GWEN_Padd_UnpaddWithAnsiX9_23(GWEN_BUFFER *src)
int GWEN_SigHead_GetKeyNumber(const GWEN_SIGHEAD *sh)
GWENHYWFAR_CB int(* GWEN_CRYPTMGR_ENCRYPTKEY_FN)(GWEN_CRYPTMGR *cm, const uint8_t *pData, uint32_t lData, GWEN_BUFFER *dbuf)
const uint8_t * GWEN_CryptHead_GetKeyPtr(const GWEN_CRYPTHEAD *ch)
GWEN_TAG16 * GWEN_Tag16_fromBuffer2(const uint8_t *p, uint32_t l, int doCopy)
#define GWEN_ERROR_NOT_IMPLEMENTED