InitializerConn.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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 Index[8];
  74. char Reserved[256];
  75. };
  76. // 终端公钥及指纹信息
  77. // [MKD_REQ4]
  78. struct MKDownloadReq4
  79. {
  80. BYTE FingerPrint[16]; // 硬件指纹
  81. BYTE PublicKey[148]; // 终端公钥
  82. // 20170205: 增加PinPadID
  83. //BYTE Reserverd[64]; // 保留字段
  84. char PinPadID[32];
  85. BYTE FingerPrintSM[16]; //兼容SM3 32位
  86. BYTE Reserverd[16];
  87. };
  88. //标识是否进行过国密改造
  89. struct MKDownloadReq5 {
  90. int isSM;
  91. int isFirst;
  92. };
  93. // 主密钥下载返回
  94. // 无密码键盘硬件终端,则不返回此结构
  95. // [MKD_RET]
  96. struct MKDownloadRet
  97. {
  98. BYTE kmcData[0]; // 变长1到600,
  99. };
  100. // SM主密钥下载返回
  101. // 无密码键盘硬件终端,则不返回此结构
  102. // [MKD_SMT]
  103. struct SMMKDownloadRet
  104. {
  105. BYTE kmcData[0]; // 变长1到600,
  106. };
  107. // 公钥文件同步,多组
  108. // [KEYSYN_R]
  109. struct PubKeySyncReq
  110. {
  111. char FileName[32];
  112. BYTE FileHash[16];
  113. BYTE FileHashSM[16];
  114. BYTE Reserved[16];
  115. };
  116. // 多组返回
  117. // [KEYSYN_A]
  118. struct PubKeySyncRet
  119. {
  120. char FileName[32];
  121. BYTE FileHash[16];
  122. BYTE Content[2048];
  123. DWORD FileLen;
  124. BYTE FileHashSM[16];
  125. BYTE Reserved[48];
  126. };
  127. // 状态上报
  128. // [REPSTA_R]
  129. struct ReportStateReq
  130. {
  131. char EventType[16]; // InitMK:初始化;UpdateWK:工作密钥更新;AccessAuth:准入
  132. char TerminalNo[32];
  133. char UserID[16]; // 初始化用户
  134. DWORD ErrorCode;
  135. char ErrorMsg[512]; // 错误描述
  136. };
  137. #pragma pack()
  138. class CInitializerFSM;
  139. class CInitializerConn : public SpSecureClient
  140. {
  141. public:
  142. CInitializerConn(CEntityBase *pEntity);
  143. DWORD SendLoginPackage(const char *pUserID, const char *pPwd);
  144. DWORD SendSyncPubKeyPackage();
  145. DWORD SendGetKMCKey(string TerminalNo);
  146. DWORD SendInitMKPackage();
  147. DWORD SendReportStatePackage(const char*pszEventType, const char *pszUserID, DWORD dwErrCode, const char *pszErrMsg);
  148. DWORD SendCloseTaskPackage(const char *pUserID);
  149. ~CInitializerConn();
  150. private:
  151. void OnDisconnect();
  152. void OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg);
  153. DWORD HandleLoginRet(const CSmartPointer<IPackage> &pRecvPkg);
  154. DWORD HandleSyncPubKeyRet(const CSmartPointer<IPackage>& pRecvPkg);
  155. DWORD HandleGetKMCKey(const CSmartPointer<IPackage>& pRecvPkg);
  156. DWORD HandleInitMKRet(const CSmartPointer<IPackage> &pRecvPkg);
  157. DWORD HandleReportStateRet(const CSmartPointer<IPackage> &pRecvPkg);
  158. DWORD HandleCloseTaskRet(const CSmartPointer<IPackage> &pRecvPkg);
  159. ErrorCodeEnum GetFileHash(const BYTE *pFileContent, int iFileLen, BYTE hash[16]);
  160. ErrorCodeEnum GetFileHashOld(const char *pFilePath, BYTE hash[16]);
  161. };
  162. #endif // !__INITIALIZER_CONN_H