|
/***************************************************************************
|
|
begin : Wed Mar 16 2005
|
|
copyright : (C) 2005-2010 by Martin Preuss
|
|
email : martin@libchipcard.de
|
|
|
|
***************************************************************************
|
|
* Please see toplevel file COPYING for license details *
|
|
***************************************************************************/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
#define DISABLE_DEBUGLOG
|
|
|
|
|
|
#include "ctf_context_p.h"
|
|
#include <gwenhywfar/misc.h>
|
|
#include <gwenhywfar/debug.h>
|
|
|
|
|
|
|
|
|
|
|
|
GWEN_INHERIT(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT)
|
|
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_CONTEXT *GWEN_CTF_Context_new() {
|
|
GWEN_CRYPT_TOKEN_CONTEXT *ctx;
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
ctx=GWEN_Crypt_Token_Context_new();
|
|
GWEN_NEW_OBJECT(GWEN_CTF_CONTEXT, fctx)
|
|
GWEN_INHERIT_SETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx, fctx,
|
|
GWEN_CTF_Context_freeData)
|
|
|
|
return ctx;
|
|
}
|
|
|
|
|
|
|
|
int GWEN_CTF_Context_IsOfThisType(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
assert(ctx);
|
|
return GWEN_INHERIT_ISOFTYPE(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
}
|
|
|
|
|
|
|
|
GWENHYWFAR_CB
|
|
void GWEN_CTF_Context_freeData(GWEN_UNUSED void *bp, void *p) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
fctx=(GWEN_CTF_CONTEXT*) p;
|
|
GWEN_Crypt_Key_free(fctx->localSignKey);
|
|
GWEN_Crypt_Key_free(fctx->localCryptKey);
|
|
GWEN_Crypt_Key_free(fctx->remoteSignKey);
|
|
GWEN_Crypt_Key_free(fctx->remoteCryptKey);
|
|
GWEN_Crypt_Key_free(fctx->localAuthKey);
|
|
GWEN_Crypt_Key_free(fctx->remoteAuthKey);
|
|
GWEN_Crypt_Key_free(fctx->tempLocalSignKey);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->localSignKeyInfo);
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->localCryptKeyInfo);
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->remoteSignKeyInfo);
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->remoteCryptKeyInfo);
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->localAuthKeyInfo);
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->remoteAuthKeyInfo);
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->tempLocalSignKeyInfo);
|
|
|
|
GWEN_FREE_OBJECT(fctx);
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->localSignKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->localSignKey);
|
|
fctx->localSignKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO*GWEN_CTF_Context_GetLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->localSignKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->localSignKeyInfo);
|
|
fctx->localSignKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->localCryptKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetLocalCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->localCryptKey);
|
|
fctx->localCryptKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->localCryptKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetLocalCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->localCryptKeyInfo);
|
|
fctx->localCryptKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->remoteSignKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetRemoteSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->remoteSignKey);
|
|
fctx->remoteSignKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->remoteSignKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetRemoteSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->remoteSignKeyInfo);
|
|
fctx->remoteSignKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteCryptKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->remoteCryptKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetRemoteCryptKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->remoteCryptKey);
|
|
fctx->remoteCryptKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteCryptKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->remoteCryptKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetRemoteCryptKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->remoteCryptKeyInfo);
|
|
fctx->remoteCryptKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetLocalAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->localAuthKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetLocalAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->localAuthKey);
|
|
fctx->localAuthKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetLocalAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->localAuthKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetLocalAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->localAuthKeyInfo);
|
|
fctx->localAuthKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetRemoteAuthKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->remoteAuthKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetRemoteAuthKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->remoteAuthKey);
|
|
fctx->remoteAuthKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO *GWEN_CTF_Context_GetRemoteAuthKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->remoteAuthKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetRemoteAuthKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->remoteAuthKeyInfo);
|
|
fctx->remoteAuthKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_KEY *GWEN_CTF_Context_GetTempLocalSignKey(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->tempLocalSignKey;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetTempLocalSignKey(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_KEY *k) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Key_free(fctx->tempLocalSignKey);
|
|
fctx->tempLocalSignKey=k;
|
|
}
|
|
|
|
|
|
|
|
GWEN_CRYPT_TOKEN_KEYINFO*GWEN_CTF_Context_GetTempLocalSignKeyInfo(const GWEN_CRYPT_TOKEN_CONTEXT *ctx) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
return fctx->tempLocalSignKeyInfo;
|
|
}
|
|
|
|
|
|
|
|
void GWEN_CTF_Context_SetTempLocalSignKeyInfo(GWEN_CRYPT_TOKEN_CONTEXT *ctx, GWEN_CRYPT_TOKEN_KEYINFO *ki) {
|
|
GWEN_CTF_CONTEXT *fctx;
|
|
|
|
assert(ctx);
|
|
fctx=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN_CONTEXT, GWEN_CTF_CONTEXT, ctx);
|
|
assert(fctx);
|
|
|
|
GWEN_Crypt_Token_KeyInfo_free(fctx->tempLocalSignKeyInfo);
|
|
fctx->tempLocalSignKeyInfo=ki;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|