AccessAuthConn.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #ifndef __ACCESSAUTHCONN_H
  2. #define __ACCESSAUTHCONN_H
  3. #pragma once
  4. #include "SpSecureClient.h"
  5. #include "AccessAuthorization_def_g.h"
  6. #include "IHttpFunc.h"
  7. #include "publicFunExport.h"
  8. using namespace AccessAuthorization;
  9. #pragma pack(1)
  10. // 工作密钥更新请求
  11. // [StructName("WKU_REQ")]
  12. struct WKUpdateReq
  13. {
  14. char szTerminalNo[16]; // 终端号
  15. BYTE kmcData[0]; // 变长1到300
  16. };
  17. // 工作密钥更新返回
  18. // [StructName("WKU_RET")]
  19. struct WKUpdateRet
  20. {
  21. BYTE kmcData[0]; // 变长1到300
  22. };
  23. // 国密密钥更新请求
  24. // [StructName("SMWKU_RQ")]
  25. struct SMWKUpdateReq
  26. {
  27. char szTerminalNo[16]; // 终端号
  28. BYTE kmcData[0]; // 变长1到300
  29. };
  30. // 国密密钥更新返回
  31. // [StructName("SMWKU_RT")]
  32. struct SMWKUpdateRet
  33. {
  34. BYTE kmcData[0]; // 变长1到300
  35. };
  36. // 请求TOKEN时附带设备信息(未加密) 102 byte
  37. struct RequestTokenInfo
  38. {
  39. char szTerminalNo[16]; // 终端号 字符数字 16
  40. char szPadDeviceID[32]; // 外设ID 字符数字 32
  41. char szMachineType[16]; // 设备型号 字符 16
  42. BYTE machineVersion[4]; // 设备版本,低两位为小版本号,高两位为大版本号 Binary 4
  43. BYTE installVersion[8]; // 安装版本,其中包含软件框架版本 binary 8
  44. BYTE ip[4]; // 终端IP地址 binary 4
  45. char szSites[16]; // 设备部署场所代码 字符 16
  46. BYTE currentGPS[8]; // 当前终端的GPS坐标点 binary 8
  47. char chTerminalState; // 终端生命阶段状态 char 1
  48. char chRunState; // 系统状态 char 1
  49. };
  50. //判断是否进行了国密改造
  51. struct RequestTokenReq0
  52. {
  53. int isSM;
  54. int isFirst;//是否国密改造之后的第一次准入
  55. BYTE FingerPrintSM[16];
  56. };
  57. // 请求Token设备信息加密后结构(使用密码键盘加密)
  58. // [StructName("TOKEN_R1")]
  59. struct RequestTokenReq1
  60. {
  61. char szTerminalNo[16]; // 终端号
  62. BYTE tpk[140]; // 临时公钥 binary 140
  63. BYTE encTerminalInfo[112]; // 加密设备信息,包括头部4字节ASCII长度及右补0
  64. };
  65. // 请求Token附带实体信息
  66. // [StructName("TOKEN_R2")]
  67. struct RequestTokenReq2
  68. {
  69. char szType[32]; // 设备类型
  70. char szModal[32]; // 设备型号
  71. char szFactory[32]; // 厂家名称
  72. BYTE version[8]; // 硬件版本号
  73. };
  74. // 请求Token时,附带需要验证信息
  75. // [StructName("TOKEN_R3")]
  76. struct RequestTokenReq3
  77. {
  78. char szSignCertHash[40]; // 签名证书SHA1 Hash
  79. char szUKeyRootHash[40]; // UKEY证书SHA1 Hash
  80. BYTE nAuthVersion; // 准入请求版本: 1 借助KMC密钥验证;2 借助终端密钥动态生成会话密钥验证
  81. BYTE FingerPrint[16]; // 硬件指纹, @AuthVersion为1时有效, 上报指纹信息,解决生产中已初始化终端指纹收集问题
  82. BYTE PublicKey[148]; // 终端公钥, @AuthVersion为1时有效, 上报公钥信息,解决生产中已初始化终端公钥收集问题
  83. BYTE Reserved[11]; // 保留字段
  84. };
  85. // 请求TOKEN附加信息: PinPadID
  86. // [StructName("TOKEN_R4")]
  87. struct RequestTokenReq4
  88. {
  89. char szPinPadID[32]; // PinPadID
  90. char terminalNo[16];
  91. BYTE Reserved[240];
  92. };
  93. // 请求TOKEN附加信息: 密码键盘是否存在
  94. // [StructName("TOKEN_R5")]
  95. struct RequestTokenReq5
  96. {
  97. char chExistPinPad; // 是否有链接密码键盘,0:没有;1:有 char 1
  98. };
  99. // 令牌定义见RvcCommEntityBase中 TokenInfo
  100. // [StructName("TOKEN_RT")]
  101. struct RequestTokenRet
  102. {
  103. BYTE enToken[256]; // 使用准入服务签名后的TOKEN
  104. BYTE sharedSK[16]; // 共享会话密钥
  105. BYTE retHash[4]; // 返回结构Hash
  106. };
  107. //国密
  108. struct RequestTokenRet2
  109. {
  110. BYTE enToken[256]; // 使用准入服务签名后的TOKEN
  111. BYTE retHash[32]; // 返回结构Hash
  112. };
  113. // 退出准入上报
  114. // [StructName("EXIT_REQ")]
  115. struct TerminalExitReq
  116. {
  117. char szTerminalNo[16]; // 终端号 字符数字 16
  118. BYTE nTriggerReason; // 触发原因 Byte 1: 1) 准入到期; 2) IP改变; 3) 远程指令重新准入; 4) 本地控制退出准入; 5) 本地控制重新准入
  119. BYTE nRebootWay; // 将要重启方式,框架/操作系统/电源 byte 1
  120. char chTerminalStage; // 终端生命阶段状态 char 1
  121. };
  122. // 生命阶段改变上报
  123. // [StructName("STAGEREP")]
  124. struct TerminalStageReport
  125. {
  126. char szTerminalNo[16]; // 终端号
  127. BYTE IP[4]; // 终端IP地址
  128. char szSites[16]; // 设备部署场所代码
  129. BYTE LifeID[4]; // 生命标识
  130. BYTE CurrentGPS[8]; // 当前终端的GPS坐标点
  131. char cRunState; // 系统状态
  132. char cNewStage; // 当前终端生命阶段
  133. DWORD dwNewStageTime; //当前生命阶段设置时间
  134. char cLastStage; // 上一个终端生命阶段
  135. DWORD dwLastStageTime; //上一个终端生命阶段设置时间
  136. };
  137. // 时间同步请求
  138. // [StructName("SYNC_R1")]
  139. struct SyncTimeReq
  140. {
  141. char szTerminalNo[16]; // 终端号
  142. DWORD dwCurTime; // 终端当前时间
  143. BYTE byReserved[64]; // 保留字段
  144. };
  145. //是否进行国密改造
  146. struct SyncTimeReq2
  147. {
  148. int isSm;
  149. };
  150. // [StructName("SYNC_A1")]
  151. struct SyncTimeAns
  152. {
  153. int nTimeDiff; // 服务器与终端时间差
  154. BYTE nAuthVersion; // 准入请求版本: 1 借助KMC密钥验证;2 借助终端密钥动态生成会话密钥验证
  155. BYTE SessionKey[140]; // @nAuthVersion为1时有效,交换会话密钥,用于加密准入信息
  156. BYTE byReserved[64]; // 保留字段
  157. };
  158. struct InitDeviceReq0
  159. {
  160. int isSM;
  161. };
  162. // 外设加密握手包
  163. //[StructName("InitDevR")]
  164. struct InitDeviceReq
  165. {
  166. char CR1[256];
  167. char CR3[256];
  168. char R2[64];
  169. char CDevPubKey[360];
  170. char Verdor[64]; // @20170124: 厂商名称:nantian(南天); yotap(skyui)
  171. };
  172. //[StructName("InitDevA")]
  173. struct InitDeviceAns
  174. {
  175. char R1[64];
  176. char R3[64];
  177. char CR2[256];
  178. };
  179. // 状态上报
  180. // [REPSTA_R]
  181. struct ReportStateReq
  182. {
  183. char EventType[16]; // InitMK:初始化;UpdateWK:工作密钥更新;AccessAuth:准入
  184. char TerminalNo[32];
  185. char UserID[16]; // 初始化用户
  186. DWORD ErrorCode;
  187. char ErrorMsg[512]; // 错误描述
  188. };
  189. // 获取锁定状态
  190. // [StructName("LockStateReq")]
  191. struct LockStateReq
  192. {
  193. char TerminalNo[32]; // 终端号
  194. };
  195. //[StructName("LockStateAns")]
  196. struct LockStateAns
  197. {
  198. BYTE LockState;
  199. };
  200. // 获取MD5校验请求
  201. // [StructName("MD5REQ")]
  202. struct CheckMD5Req
  203. {
  204. char TerminalNo[32]; // 终端号
  205. char MD5Value[16]; // MD5值
  206. };
  207. #pragma pack()
  208. #ifdef RVC_OS_LINUX
  209. class CAccessAuthFSM;
  210. class CAccessAuthGetTokenReq;
  211. #endif // RVC_OS_LINUX
  212. #endif // !__ACCESSAUTHCONN_H