123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- #ifndef __INITIALIZER_CONN_H
- #define __INITIALIZER_CONN_H
- #include "SpSecureClient.h"
- #ifdef RVC_OS_WIN
- #pragma pack(1)
- #endif // RVC_OS_WIN
- // 终端用户登录 [Login]
- // [LOGINREQ]
- struct UserLoginReq
- {
- char szTerminalNo[16]; // 终端号
- char szUser[16]; // 用户
- char szPassword[16]; // 密码,Hash后
- };
- // 关闭密钥初始化任务 [CloseTask]
- // [CLOSETASKREQ]
- struct CloseTaskReq
- {
- char szTerminalNo[16]; // 终端号
- char szUser[16]; // 用户
- };
- // [MKD_NEW1]
- struct MKDownloadNew1
- {
- char szTerminalNo[16]; // 终端号
- char szPadDeviceID[32]; // 外设ID
- char szMachineType[16]; // 设备类型
- char szSite[16]; // 部署场所
- char szMachineModel[32]; // 硬件型号
- BYTE ip[4]; // 终端IP地址 binary 4
- BYTE enrolGPS[8]; // 设备登记的GPS坐标点
- char szEnrolAddr[0]; // 变长2-256,设备登记时的地址描述
- };
- // 主密钥申请信息
- // 无密码键盘硬件终端,则不包含此结构
- // [MKD_REQ2]
- struct MKDownloadReq2
- {
- char szSubBankNo[16]; // 分行号
- char szBranchNo[16]; // 网点号
- BYTE kmcData[0]; // 变长1到600,
- };
- // 国密主密钥申请信息
- // 无密码键盘硬件终端,则不包含此结构
- // [MKD_SMR2]
- struct SMMKDownloadReq2
- {
- char szSubBankNo[16]; // 分行号
- char szBranchNo[16]; // 网点号
- BYTE kmcData[0]; // 变长1到600,
- };
- // 设备信息
- // [MKD_REQ3]
- struct MKDownloadReq3
- {
- char szType[32]; // 设备类型
- char szModal[32]; // 设备型号
- char szFactory[32]; // 厂家名称
- BYTE version[8]; // 硬件版本号
- };
- struct PubKeySyncReq0
- {
- int isSM;
- };
- //获取KMC密钥
- struct KMCKeyReq {
- char TerminalNo[16];
- };
- struct KMCKeyRet {
- char TMK[64];
- char TPK[64];
- char EDK[64];
- char Index[8];
- char Reserved[256];
- };
- // 终端公钥及指纹信息
- // [MKD_REQ4]
- struct MKDownloadReq4
- {
- BYTE FingerPrint[16]; // 硬件指纹
- BYTE PublicKey[148]; // 终端公钥
-
- // 20170205: 增加PinPadID
- //BYTE Reserverd[64]; // 保留字段
- char PinPadID[32];
- BYTE FingerPrintSM[16]; //兼容SM3 32位
- BYTE Reserverd[16];
- };
- //标识是否进行过国密改造
- struct MKDownloadReq5 {
- int isSM;
- int isFirst;
- };
- // 主密钥下载返回
- // 无密码键盘硬件终端,则不返回此结构
- // [MKD_RET]
- struct MKDownloadRet
- {
- BYTE kmcData[0]; // 变长1到600,
- };
- // SM主密钥下载返回
- // 无密码键盘硬件终端,则不返回此结构
- // [MKD_SMT]
- struct SMMKDownloadRet
- {
- BYTE kmcData[0]; // 变长1到600,
- };
- // 公钥文件同步,多组
- // [KEYSYN_R]
- struct PubKeySyncReq
- {
- char FileName[32];
- BYTE FileHash[16];
-
- BYTE FileHashSM[16];
- BYTE Reserved[16];
- };
- // 多组返回
- // [KEYSYN_A]
- struct PubKeySyncRet
- {
- char FileName[32];
- BYTE FileHash[16];
- BYTE Content[2048];
- DWORD FileLen;
- BYTE FileHashSM[16];
- BYTE Reserved[48];
- };
- // 状态上报
- // [REPSTA_R]
- struct ReportStateReq
- {
- char EventType[16]; // InitMK:初始化;UpdateWK:工作密钥更新;AccessAuth:准入
- char TerminalNo[32];
- char UserID[16]; // 初始化用户
- DWORD ErrorCode;
- char ErrorMsg[512]; // 错误描述
- };
- #pragma pack()
- class CInitializerFSM;
- class CInitializerConn : public SpSecureClient
- {
- public:
-
- CInitializerConn(CEntityBase *pEntity);
- DWORD SendLoginPackage(const char *pUserID, const char *pPwd);
- DWORD SendSyncPubKeyPackage();
- DWORD SendGetKMCKey(string TerminalNo);
- DWORD SendInitMKPackage();
- DWORD SendReportStatePackage(const char*pszEventType, const char *pszUserID, DWORD dwErrCode, const char *pszErrMsg);
- DWORD SendCloseTaskPackage(const char *pUserID);
- ~CInitializerConn();
- private:
- void OnDisconnect();
- void OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg);
- DWORD HandleLoginRet(const CSmartPointer<IPackage> &pRecvPkg);
- DWORD HandleSyncPubKeyRet(const CSmartPointer<IPackage>& pRecvPkg);
- DWORD HandleGetKMCKey(const CSmartPointer<IPackage>& pRecvPkg);
- DWORD HandleInitMKRet(const CSmartPointer<IPackage> &pRecvPkg);
- DWORD HandleReportStateRet(const CSmartPointer<IPackage> &pRecvPkg);
- DWORD HandleCloseTaskRet(const CSmartPointer<IPackage> &pRecvPkg);
- ErrorCodeEnum GetFileHash(const BYTE *pFileContent, int iFileLen, BYTE hash[16]);
- ErrorCodeEnum GetFileHashOld(const char *pFilePath, BYTE hash[16]);
- };
- #endif // !__INITIALIZER_CONN_H
|