#ifndef __OEMDIGITALSIGN_H__
#define __OEMDIGITALSIGN_H__

//******************************************************************************
// [ PTX-804向け ]
//	Version	UIQ/TRK	OutLine
//	   0.09			PTX-804 BREW-20050401001 NJK 今坂 英樹
//						PKI OEM設計変更
//*****************************************************************************/

#include "AEE.h"
#include "AEEWeb.h"
#include "AEEDigitalSign.h"
#include "OEMPKILib.h"
#include "SEMC_KCP.h"
#ifdef KCP_MERGE
#include "OEMNATIVEPrivate.h"
#endif


#define SHA_DIGEST_LENGTH 20

typedef struct _OEMDigitalSign OEMDigitalSign;


//struct IDigitalSign
struct _OEMDigitalSign
{
	const VTBL(IDigitalSign) * pvt;
	uint32 m_nRefs;
	AEECLSID m_clsid;

	//IDigitalSign_Release関数中に開放することが必要がある
	IShell * m_pIShell;
	IWebOpts * m_pIWebOpts;
	IWebUtil * piwu;

	AEECallback * pcb;
	DigitalSignStatus *status;

	int isSuccess;								//デジタル署名成功と失敗フラグ	0:失敗; 1:成功; 2:失敗かつメモリ不足
/*** BREW105 ***///	unsigned int numRootCerts;					//ルート証明書の枚数
	unsigned long base64len;
	unsigned long msglen;
	int pkcs7bufflen;
	short certlen;								//クライアント証明書データ長さ

	WIM_TChannelNumber channelNo;				//チャネル番号を格納する
	WIM_TInputData hash;						//デジタル署名作成のパーラーメータとしてMD算出の結果を格納する
/*** PTX-804 BREW101 START ***/
//	WIM_TInputData keyID;						//署名発行者のKey ID情報を格納する
	WIM_TInputData dn;							//署名発行者のKey ID情報を格納する
/*** PTX-804 BREW101 END ***/
	WIM_TCertificate certificate;				//キャッシュから取得した証明書を格納する

	// UIで選択された証明書が設定される
	WIM_TClientCertificateInfo info;			//選択した証明書情報を格納する

	//WIMの関数の処理結果コード
//	WIM_TChannelNumberResult chn_result;		//WIMチャネルopen用

	//以下の変数ポインタは、開放することが必要ある
	char* hashData;
	char* cert;									//クライアント証明書データ
	char* pkcs7buffer;
	X509* x509;
	X509_ATTRIBUTE* attribute;
	PKCS7* pkcs7;
	X509_ALGOR* algorithm;


	ASN1_TYPE *asn1type;

	PKCS7_SIGNER_INFO* signer_info;
	WIM_TOutputDataResult result;				//デジタル署名のWIM_ComputeDigitalSign()関数を呼び出す時用
												//result.outputData.output開放することが必要ある

	char *DataMaloc;
	char *OctetData;
	char *EncDigestData;
	//以下の変数は一時用ポインタ、メモリを作りません、開放することが必要はない
	char* msg;
	unsigned char* u_pkcs7buffer;
//	unsigned char* u_cert;

	/// IWeb のルート証明書をMALLOCして保存する
/*** BREW105 ***///	WIM_TRootCertificate* Alloc_rootCerts;

	// WimDigitalSignライブラリ
	WIMParam WIMprm;
	//INATIVE
	INATIVE * m_pINative;
};



#endif /* __OEMDIGITALSIGN_H__ */
