InitializerConn.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #ifndef __INITIALIZER_CONN_H
  2. #define __INITIALIZER_CONN_H
  3. #include "SpSecureClient.h"
  4. #ifdef RVC_OS_WIN
  5. #pragma pack(1)
  6. #endif // RVC_OS_WIN
  7. // 终端用户登录 [Login]
  8. // [LOGINREQ]
  9. struct UserLoginReq
  10. {
  11. char szTerminalNo[16]; // 终端号
  12. char szUser[16]; // 用户
  13. char szPassword[16]; // 密码,Hash后
  14. };
  15. // 关闭密钥初始化任务 [CloseTask]
  16. // [CLOSETASKREQ]
  17. struct CloseTaskReq
  18. {
  19. char szTerminalNo[16]; // 终端号
  20. char szUser[16]; // 用户
  21. };
  22. // [MKD_NEW1]
  23. struct MKDownloadNew1
  24. {
  25. char szTerminalNo[16]; // 终端号
  26. char szPadDeviceID[32]; // 外设ID
  27. char szMachineType[16]; // 设备类型
  28. char szSite[16]; // 部署场所
  29. char szMachineModel[32]; // 硬件型号
  30. BYTE ip[4]; // 终端IP地址 binary 4
  31. BYTE enrolGPS[8]; // 设备登记的GPS坐标点
  32. char szEnrolAddr[0]; // 变长2-256,设备登记时的地址描述
  33. };
  34. // 主密钥申请信息
  35. // 无密码键盘硬件终端,则不包含此结构
  36. // [MKD_REQ2]
  37. struct MKDownloadReq2
  38. {
  39. char szSubBankNo[16]; // 分行号
  40. char szBranchNo[16]; // 网点号
  41. BYTE kmcData[0]; // 变长1到600,
  42. };
  43. // 国密主密钥申请信息
  44. // 无密码键盘硬件终端,则不包含此结构
  45. // [MKD_SMR2]
  46. struct SMMKDownloadReq2
  47. {
  48. char szSubBankNo[16]; // 分行号
  49. char szBranchNo[16]; // 网点号
  50. BYTE kmcData[0]; // 变长1到600,
  51. };
  52. // 设备信息
  53. // [MKD_REQ3]
  54. struct MKDownloadReq3
  55. {
  56. char szType[32]; // 设备类型
  57. char szModal[32]; // 设备型号
  58. char szFactory[32]; // 厂家名称
  59. BYTE version[8]; // 硬件版本号
  60. };
  61. struct PubKeySyncReq0
  62. {
  63. int isSM;
  64. };
  65. //获取KMC密钥
  66. struct KMCKeyReq {
  67. char TerminalNo[16];
  68. };
  69. struct KMCKeyRet {
  70. char TMK[64];
  71. char TPK[64];
  72. char EDK[64];
  73. char Reserved[256];
  74. };
  75. // 终端公钥及指纹信息
  76. // [MKD_REQ4]
  77. struct MKDownloadReq4
  78. {
  79. BYTE FingerPrint[16]; // 硬件指纹
  80. BYTE PublicKey[148]; // 终端公钥
  81. // 20170205: 增加PinPadID
  82. //BYTE Reserverd[64]; // 保留字段
  83. char PinPadID[32];
  84. BYTE FingerPrintSM[16]; //兼容SM3 32位
  85. BYTE Reserverd[16];
  86. };
  87. //标识是否进行过国密改造
  88. struct MKDownloadReq5 {
  89. int isSM;
  90. int isFirst;
  91. };
  92. // 主密钥下载返回
  93. // 无密码键盘硬件终端,则不返回此结构
  94. // [MKD_RET]
  95. struct MKDownloadRet
  96. {
  97. BYTE kmcData[0]; // 变长1到600,
  98. };
  99. // SM主密钥下载返回
  100. // 无密码键盘硬件终端,则不返回此结构
  101. // [MKD_SMT]
  102. struct SMMKDownloadRet
  103. {
  104. BYTE kmcData[0]; // 变长1到600,
  105. };
  106. // 公钥文件同步,多组
  107. // [KEYSYN_R]
  108. struct PubKeySyncReq
  109. {
  110. char FileName[32];
  111. BYTE FileHash[16];
  112. BYTE FileHashSM[16];
  113. BYTE Reserved[16];
  114. };
  115. // 多组返回
  116. // [KEYSYN_A]
  117. struct PubKeySyncRet
  118. {
  119. char FileName[32];
  120. BYTE FileHash[16];
  121. BYTE Content[2048];
  122. DWORD FileLen;
  123. BYTE FileHashSM[16];
  124. BYTE Reserved[48];
  125. };
  126. // 状态上报
  127. // [REPSTA_R]
  128. struct ReportStateReq
  129. {
  130. char EventType[16]; // InitMK:初始化;UpdateWK:工作密钥更新;AccessAuth:准入
  131. char TerminalNo[32];
  132. char UserID[16]; // 初始化用户
  133. DWORD ErrorCode;
  134. char ErrorMsg[512]; // 错误描述
  135. };
  136. #pragma pack()
  137. class CInitializerFSM;
  138. class CInitializerConn : public SpSecureClient
  139. {
  140. public:
  141. CInitializerConn(CEntityBase *pEntity);
  142. DWORD SendLoginPackage(const char *pUserID, const char *pPwd);
  143. DWORD SendSyncPubKeyPackage();
  144. DWORD SendGetKMCKey(string TerminalNo);
  145. DWORD SendInitMKPackage();
  146. DWORD SendReportStatePackage(const char*pszEventType, const char *pszUserID, DWORD dwErrCode, const char *pszErrMsg);
  147. DWORD SendCloseTaskPackage(const char *pUserID);
  148. ~CInitializerConn();
  149. private:
  150. void OnDisconnect();
  151. void OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg);
  152. DWORD HandleLoginRet(const CSmartPointer<IPackage> &pRecvPkg);
  153. DWORD HandleSyncPubKeyRet(const CSmartPointer<IPackage>& pRecvPkg);
  154. DWORD HandleGetKMCKey(const CSmartPointer<IPackage>& pRecvPkg);
  155. DWORD HandleInitMKRet(const CSmartPointer<IPackage> &pRecvPkg);
  156. DWORD HandleReportStateRet(const CSmartPointer<IPackage> &pRecvPkg);
  157. DWORD HandleCloseTaskRet(const CSmartPointer<IPackage> &pRecvPkg);
  158. ErrorCodeEnum GetFileHash(const BYTE *pFileContent, int iFileLen, BYTE hash[16]);
  159. ErrorCodeEnum GetFileHashOld(const char *pFilePath, BYTE hash[16]);
  160. };
  161. #endif // !__INITIALIZER_CONN_H