AccessAuthConn.h 5.7 KB

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