AccessAuthConn.h 6.5 KB

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