#ifndef __ACCESSAUTHCONN_H #define __ACCESSAUTHCONN_H #pragma once #include "SpSecureClient.h" #include "AccessAuthorization_def_g.h" #include "IHttpFunc.h" #include "publicFunExport.h" using namespace AccessAuthorization; #pragma pack(1) // 请求TOKEN时附带设备信息(未加密) 102 byte struct RequestTokenInfo { char szTerminalNo[16]; // 终端号 字符数字 16 char szPadDeviceID[32]; // 外设ID 字符数字 32 char szMachineType[16]; // 设备型号 字符 16 BYTE machineVersion[4]; // 设备版本,低两位为小版本号,高两位为大版本号 Binary 4 BYTE installVersion[8]; // 安装版本,其中包含软件框架版本 binary 8 BYTE ip[4]; // 终端IP地址 binary 4 char szSites[16]; // 设备部署场所代码 字符 16 BYTE currentGPS[8]; // 当前终端的GPS坐标点 binary 8 char chTerminalState; // 终端生命阶段状态 char 1 char chRunState; // 系统状态 char 1 }; //判断是否进行了国密改造 struct RequestTokenReq0 { int isSM; int isFirst;//是否国密改造之后的第一次准入 BYTE FingerPrintSM[16]; }; // 请求Token设备信息加密后结构(使用密码键盘加密) // [StructName("TOKEN_R1")] struct RequestTokenReq1 { char szTerminalNo[16]; // 终端号 BYTE tpk[140]; // 临时公钥 binary 140 BYTE encTerminalInfo[112]; // 加密设备信息,包括头部4字节ASCII长度及右补0 }; // 请求Token附带实体信息 // [StructName("TOKEN_R2")] struct RequestTokenReq2 { char szType[32]; // 设备类型 char szModal[32]; // 设备型号 char szFactory[32]; // 厂家名称 BYTE version[8]; // 硬件版本号 }; // 请求Token时,附带需要验证信息 // [StructName("TOKEN_R3")] struct RequestTokenReq3 { char szSignCertHash[40]; // 签名证书SHA1 Hash char szUKeyRootHash[40]; // UKEY证书SHA1 Hash BYTE nAuthVersion; // 准入请求版本: 1 借助KMC密钥验证;2 借助终端密钥动态生成会话密钥验证 BYTE FingerPrint[16]; // 硬件指纹, @AuthVersion为1时有效, 上报指纹信息,解决生产中已初始化终端指纹收集问题 BYTE PublicKey[148]; // 终端公钥, @AuthVersion为1时有效, 上报公钥信息,解决生产中已初始化终端公钥收集问题 BYTE Reserved[11]; // 保留字段 }; // 请求TOKEN附加信息: PinPadID // [StructName("TOKEN_R4")] struct RequestTokenReq4 { char szPinPadID[32]; // PinPadID char terminalNo[16]; BYTE Reserved[240]; }; // 请求TOKEN附加信息: 密码键盘是否存在 // [StructName("TOKEN_R5")] struct RequestTokenReq5 { char chExistPinPad; // 是否有链接密码键盘,0:没有;1:有 char 1 }; // 令牌定义见RvcCommEntityBase中 TokenInfo // [StructName("TOKEN_RT")] struct RequestTokenRet { BYTE enToken[256]; // 使用准入服务签名后的TOKEN BYTE sharedSK[16]; // 共享会话密钥 BYTE retHash[4]; // 返回结构Hash }; //国密 struct RequestTokenRet2 { BYTE enToken[256]; // 使用准入服务签名后的TOKEN BYTE retHash[32]; // 返回结构Hash }; // 退出准入上报 // [StructName("EXIT_REQ")] struct TerminalExitReq { char szTerminalNo[16]; // 终端号 字符数字 16 BYTE nTriggerReason; // 触发原因 Byte 1: 1) 准入到期; 2) IP改变; 3) 远程指令重新准入; 4) 本地控制退出准入; 5) 本地控制重新准入 BYTE nRebootWay; // 将要重启方式,框架/操作系统/电源 byte 1 char chTerminalStage; // 终端生命阶段状态 char 1 }; // 生命阶段改变上报 // [StructName("STAGEREP")] struct TerminalStageReport { char szTerminalNo[16]; // 终端号 BYTE IP[4]; // 终端IP地址 char szSites[16]; // 设备部署场所代码 BYTE LifeID[4]; // 生命标识 BYTE CurrentGPS[8]; // 当前终端的GPS坐标点 char cRunState; // 系统状态 char cNewStage; // 当前终端生命阶段 DWORD dwNewStageTime; //当前生命阶段设置时间 char cLastStage; // 上一个终端生命阶段 DWORD dwLastStageTime; //上一个终端生命阶段设置时间 }; // 时间同步请求 // [StructName("SYNC_R1")] struct SyncTimeReq { char szTerminalNo[16]; // 终端号 DWORD dwCurTime; // 终端当前时间 BYTE byReserved[64]; // 保留字段 }; //是否进行国密改造 struct SyncTimeReq2 { int isSm; }; // [StructName("SYNC_A1")] struct SyncTimeAns { int nTimeDiff; // 服务器与终端时间差 BYTE nAuthVersion; // 准入请求版本: 1 借助KMC密钥验证;2 借助终端密钥动态生成会话密钥验证 BYTE SessionKey[140]; // @nAuthVersion为1时有效,交换会话密钥,用于加密准入信息 BYTE byReserved[64]; // 保留字段 }; struct InitDeviceReq0 { int isSM; }; // 外设加密握手包 //[StructName("InitDevR")] struct InitDeviceReq { char CR1[256]; char CR3[256]; char R2[64]; char CDevPubKey[360]; char Verdor[64]; // @20170124: 厂商名称:nantian(南天); yotap(skyui) }; //[StructName("InitDevA")] struct InitDeviceAns { char R1[64]; char R3[64]; char CR2[256]; }; // 状态上报 // [REPSTA_R] struct ReportStateReq { char EventType[16]; // InitMK:初始化;UpdateWK:工作密钥更新;AccessAuth:准入 char TerminalNo[32]; char UserID[16]; // 初始化用户 DWORD ErrorCode; char ErrorMsg[512]; // 错误描述 }; // 获取锁定状态 // [StructName("LockStateReq")] struct LockStateReq { char TerminalNo[32]; // 终端号 }; //[StructName("LockStateAns")] struct LockStateAns { BYTE LockState; }; // 获取MD5校验请求 // [StructName("MD5REQ")] struct CheckMD5Req { char TerminalNo[32]; // 终端号 char MD5Value[16]; // MD5值 }; #pragma pack() #ifdef RVC_OS_LINUX class CAccessAuthFSM; class CAccessAuthGetTokenReq; #endif // RVC_OS_LINUX #endif // !__ACCESSAUTHCONN_H