ZT598MGFDDef.h 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054
  1. #pragma once
  2. #include "PinpadDef.h"
  3. #pragma pack(push,1)
  4. #define READ_A980_FW_VERSION 0x62
  5. /*
  6. 硬件命令相关的数据结构和宏定义。
  7. */
  8. #define EXCHANGE_DATA_MAX_LEN (65) //The maximum length for exchanging data.
  9. #define EXCHANGE_SIGNATURE_HEAD 0x02
  10. #define EXCHANGE_SIGNATURE_END 0x03
  11. #define EXCHANGE_TRNB 0x00
  12. #define SECURE_COMM_HEAD EXCHANGE_SIGNATURE_HEAD
  13. #define SECURE_COMM_END EXCHANGE_SIGNATURE_END
  14. #define SECURE_COMM_DEVICE_NO 0x00
  15. #define SECURE_COMM_COMMAND_FEATURE 0x545A //0x5A54
  16. #define SECURE_COMM_COMMAND_TYPE 0x60
  17. #define START_MAIN_FW_UPDATE 0x20
  18. #define UPDATING_MAIN_FW 0x21
  19. #define FINISH_MAIN_FW_UPDATE 0x22
  20. #define HW_VERSION_NUMBER_SECTION_COUNT 3
  21. #define HW_VERSION_NUMBER_MAIN_VERSION_LENGTH 3
  22. #define CHECK_KEY_INPUT_TIMER_ID 10001
  23. //命令宏定义
  24. #define SET_ENTRY_MODE 0x10
  25. #define READ_ENTRY_TEXT 0x11
  26. #define VIRTUAL_KEY_PRESS 0x12
  27. #define DEL_ENTRY_BUFFER 0x13
  28. #define SET_KEYBOARD_CODE 0x14
  29. #define SET_CONTROL_MODE 0x15
  30. #define READ_EPP_INFO 0x16
  31. #define WRITE_USER_DATA 0x17
  32. #define READ_USER_DATA 0x18
  33. #define REMOVE_INSTALL_AUTH 0x19
  34. #define UPDATE_PASSWORD 0x20
  35. #define STORE_KEY 0x21
  36. #define LOAD_KEY 0x22
  37. #define EXCHANGE_KEY 0x23
  38. #define GENERATE_RANDOM_DATA 0x24
  39. #define AUTHENTICATION 0x25
  40. #define FIRMWARE_AUTH 0x26
  41. #define DELETE_KEY 0x27
  42. #define READ_KEY_ATTRIBUTES 0x28
  43. #define IMPORT_RSA_KEY 0x30
  44. #define IMPORT_EPP_SERIAL_NUMBER 0x31
  45. #define EXP_EPP_SERIAL_NUMBER 0x32
  46. #define EXP_EPP_PUBLIC_KEY 0x33
  47. #define GET_EPP_RANDOM_DATA 0x36
  48. #define IMPORT_DES_KEY 0x34
  49. #define ENCTYPT_PIN_BLOCK 0x41
  50. #define LOCAL_IBM_PIN_OFFSET 0x42
  51. #define LOCAL_VISA_PIN_OFFSET 0x43
  52. #define RAW_DES_CRYPT 0x44
  53. #define RAW_RSA_CRYPT_PKCS15 0x45
  54. #define DES_CRYPT_DATA 0x46
  55. #define RSA_CRYPT_DATA 0x47
  56. #define MAC_ENCRYPT_DATA 0x48
  57. #define RAW_RSA_SIGNATURE_PKCS15 0x49
  58. #define RAW_RSA_VERI_SIGNATURE_PKCS15 0x4A
  59. #define RAW_HASH 0x4B
  60. #define RAW_MAC_CRYPT 0x4C
  61. #define CONFIG_EPP_SENSOR 0xE0
  62. #define GET_EPP_SENSOR_DATA 0xE1
  63. #define CLEAR_EPP_SENSOR_STATE 0xE2
  64. #define WRITE_EPP_HW_VERSION 0xE3
  65. #define GET_KEYBOARD_CODE 0xE4
  66. #define SET_SYSTEM_TIME 0xE5
  67. #define GET_SYSTEM_TIME 0xE6
  68. #define CLEAR_SET_SYSTEM_FLAG 0xE7
  69. //国密
  70. #define SM4_LOAD_TEXT_KEY 0x5B
  71. #define SM4_EXCHANGE_KEY 0x5C
  72. #define SM4_CRYPT 0x5D
  73. #define SM4_MAC 0x5E
  74. #define SM4_GET_PIN_BLOCK 0x5F
  75. #define SM_DELETE_KEY 0x61
  76. #define SM_GET_VERSION 0xA2
  77. #define SM_READ_KEY_ATTRIBUTES 0x63
  78. //国密固件下载
  79. #define START_GM_FW_LOAD 0xAD
  80. #define LOADING_GM_FW_CODE 0xAE
  81. #define END_GM_FW_LOAD 0xAF
  82. //其他扩展命令
  83. #define GENERATE_RSA_KEYPAIR 0xEA
  84. #define DELETE_ALL_DES_KEY 0
  85. #define DELETE_ALL_RSA_KEY 600
  86. #define DELETE_PSW123_AND_ALL_DES 900
  87. #define DELETE_ALL 999
  88. #define DELETE_ALL_SM4_KEY 800
  89. #define ECB_ENCRYPT 0x31
  90. #define CBC_ENCRYPT 0x32
  91. #define ECB_DECRYPT 0x41
  92. #define CBC_DECRYPT 0x42
  93. #define PIN_UAK_ID 0 //用于秘钥认证
  94. #define PIN_SPECIAL_KEY_OFFSET 1 //参考厂家SDK预留16个特殊秘钥区
  95. #define PIN_SPECIAL_KEY_NUM 16
  96. #define PIN_KPK_ID (PIN_SPECIAL_KEY_OFFSET + 12) //特殊秘钥 用于加密秘钥
  97. #define PIN_USER_KEY_OFFSET (PIN_SPECIAL_KEY_OFFSET + PIN_SPECIAL_KEY_NUM)
  98. #define PIN_KBPK_ID 888 //用于MAC计算(0x378)
  99. #define PIN_INVALID_KEY_ID 0xFFFF
  100. #define PIN_INVALID_LOGIC_KEY_ID 0x00
  101. #define PIN_USER_KEY_OFFSET (PIN_SPECIAL_KEY_OFFSET + PIN_SPECIAL_KEY_NUM)
  102. #define PIN_SM_ID_OFFSET 1000
  103. #define PIN_SM_SPECIAL_KEY_OFFSET PIN_SM_ID_OFFSET //参考DES预留特殊秘钥区
  104. #define PIN_SM_SPECIAL_KEY_NUM 0 //国密暂时不考虑特殊秘钥区
  105. #define PIN_SM_KPK_ID (PIN_SM_SPECIAL_KEY_OFFSET + 12)
  106. #define PIN_SM_USER_KEY_OFFSET (PIN_SM_SPECIAL_KEY_OFFSET + PIN_SM_SPECIAL_KEY_NUM)
  107. #define PIN_RSA_ID_OFFSET 600
  108. #define PIN_RSA_SPECIAL_KEY_OFFSET 0
  109. #define PIN_RSA_SPECIAL_KEY_NUM 6
  110. #define PIN_RSA_USER_KEY_OFFSET (PIN_RSA_SPECIAL_KEY_OFFSET + PIN_RSA_SPECIAL_KEY_NUM)
  111. #define INDEX_SAVE2EPP_BEGIN 0
  112. #define MAX_DES_CRYPT_DATA_SIZE 2048
  113. #define MAX_DES_MAC_DATA_SIZE MAX_DES_CRYPT_DATA_SIZE
  114. #define MAX_SM_CRYPT_DATA_SIZE 2048
  115. #define MAX_SM_MAC_DATA_SIZE MAX_SM_CRYPT_DATA_SIZE
  116. #define PWD_DEFAULT "0000000000000000"
  117. #define PWD1_INPUT "1111111111111111"
  118. #define PWD2_INPUT "2222222222222222"
  119. #define PWD3_INPUT "3333333333333333"
  120. #define PWD1_INSTALL "4444444444444444"
  121. #define PWD2_INSTALL "5555555555555555"
  122. #define MAX_HWKEY_COUNT 600
  123. #define MAX_SM_HWKEY_COUNT 600
  124. #define MAX_RSA_HWKEY_COUNT 20
  125. #define PIN_FK_1 0x31
  126. #define PIN_FK_2 0x32
  127. #define PIN_FK_3 0x33
  128. #define PIN_FK_4 0x34
  129. #define PIN_FK_5 0x35
  130. #define PIN_FK_6 0x36
  131. #define PIN_FK_7 0x37
  132. #define PIN_FK_8 0x38
  133. #define PIN_FK_9 0x39
  134. #define PIN_FK_0 0x30
  135. #define PIN_FK_00 0x4F
  136. #define PIN_FK_CANCEL 0x1B
  137. #define PIN_FK_BACKSPACE 0x08
  138. #define PIN_FK_CLEAR 0x0C
  139. #define PIN_FK_ENTER 0x0D
  140. #define GET_INPUT_TIME 10
  141. //国密需要的宏定义
  142. #define UNION_PAY_STANDARD 0x40
  143. #define PBOC_MODE 0x43
  144. #define MAX_DES_HW_KCV_LENGTH (m_stPinpadDevConfig.byHWDESKCVMaxLen)/*3*/
  145. #define MAX_SM_HW_KCV_LENGTH 8
  146. #define KEY_VARIATION_INDEX_BYTE1(keyid) ((keyid << 1) & 0xFF);
  147. #define KEY_VARIATION_INDEX_BYTE2(keyid) (((keyid >> 7) << 1) & 0xFF)
  148. #define RSA_KEY_ID_PK_VND 600
  149. #define RSA_KEY_ID_SERIAL_NUMBER 601
  150. #define RSA_KEY_ID_SK_CEPP 602
  151. #define RSA_KEY_ID_PK_CEPP 603
  152. #define RSA_KEY_ID_SK_SEPP 604
  153. #define RSA_KEY_ID_PK_SEPP 605
  154. #define RSA_KEY_ID_PK_HOST 606
  155. #define RSA_DER_TAG_FIELD_TYPE_SEQUENCE 0x30
  156. #define RSA_DER_TAG_FIELD_TYPE_INTEGER 0x02
  157. #define RSA_DER_TAG_LENGTH_TYPE_SHORT 0x00
  158. #define RSA_DER_TAG_LENGTH_TYPE_LONG_ONE 0x81
  159. #define RSA_DER_TAG_LENGTH_TYPE_LONG_TWO 0x82
  160. #define KEY_ATTRIBUTES_TYPE_VND_PK 0x01
  161. #define KEY_ATTRIBUTES_TYPE_EPP_PK_OR_SK 0x02
  162. #define KEY_ATTRIBUTES_TYPE_HOST_PK 0x03
  163. #define KEY_ATTRIBUTES_TYPE_RSA_PK 0x00
  164. #define KEY_ATTRIBUTES_TYPE_RSA_SK 0x01
  165. #define KEY_ATTRIBUTES_LENGTH_RSA_1024 0x01
  166. #define KEY_ATTRIBUTES_LENGTH_RSA_2048 0x02
  167. #define KEY_ATTRIBUTES_LENGTH_DES_8 0x01
  168. #define KEY_ATTRIBUTES_LENGTH_DES_16 0x02
  169. #define KEY_ATTRIBUTES_LENGTH_DES_24 0x03
  170. #define RSA_KEY_DER_MAX_LEN (4 + 4 + 257 + 4 + 257)
  171. #define RSA_KEY_SIG_DER_MAX_LEN (4 + 256)
  172. #define RSA_EXPONENT_1 (3)
  173. #define RSA_EXPONENT_4 (17)
  174. #define RSA_EXPONENT_16 (65537)
  175. #define PIN_DEL_ONE (0x30)
  176. #define PIN_DEL_ALL (0x31)
  177. enum SwitchMode
  178. {
  179. CLOSE_ENTRY = 0x30,
  180. PIN_ENTRY,
  181. KEY_ENTRY,
  182. TEXT_ENTRY
  183. };
  184. enum DeleteEntryBufferMode
  185. {
  186. DELETE_LAST_ENTERED = 0x30,
  187. DELETE_ALL_ENTERED
  188. };
  189. enum KeyboardCodeMode
  190. {
  191. INPUT_TEXT = 0x31,
  192. INPUT_PIN,
  193. INPUT_KEY
  194. };
  195. enum ControlMode
  196. {
  197. CONTROL_MODE_RESET = 0x30,
  198. CONTROL_MODE_SBR,
  199. CONTROL_MODE_SDID,
  200. CONTROL_MODE_SWDT,
  201. CONTROL_MODE_SBL,
  202. CONTROL_MODE_POT,
  203. CONTROL_MODE_PKT,
  204. CONTROL_MODE_UDPC,
  205. CONTROL_MODE_KCVL,
  206. CONTROL_MODE_MACL,
  207. CONTROL_MODE_PSC,
  208. CONTROL_MODE_SBS,
  209. CONTROL_MODE_TBT,
  210. CONTROL_MODE_WTIK,
  211. CONTROL_MODE_STT,
  212. CONTROL_MODE_PIC,
  213. CONTROL_MODE_SCM,
  214. CONTROL_MODE_SCA,
  215. CONTROL_MODE_BDM,
  216. CONTROL_MODE_RKCV,
  217. CONTROL_MODE_FKSM,
  218. CONTROL_MODE_SCP,
  219. CONTROL_MODE_SCHK,
  220. CONTROL_MODE_HID_KEYBOARD,
  221. CONTROL_MODE_HID_KEYBOARD_DELAY_TIME
  222. };
  223. enum ControlCodeBeep
  224. {
  225. CLOSE_BEEP_SOUND = 0x30,
  226. OPEN_BEEP_SOUND
  227. };
  228. enum ResetModeCode
  229. {
  230. NORMAL_RESET = 0x30,
  231. SET_DEF_PARA_AND_RESET
  232. };
  233. enum CryptographicAlgorithm
  234. {
  235. DES_OR_TDES_ALGORITHM = 0x30,
  236. AES_ALGORITHM,
  237. SM4_ALGORITHM
  238. };
  239. enum BeepSound
  240. {
  241. BEEP_SOUND_CLOSE = 0x30,
  242. BEEP_SOUND_OPEN
  243. };
  244. enum InstallMode
  245. {
  246. AUTH_REMOVE = 0x31,
  247. AUTH_INSTALL
  248. };
  249. enum PWDKeyID
  250. {
  251. PWD1 = 901, //PWD1 for manual input DES-KEY
  252. PWD2, //PWD2 for manual input DES-KEY
  253. PWD3, //PWD3 for manual input DES-KEY
  254. PWD4, //Password1 for install remove auth EPP
  255. PWD5 //Password2 for install remove auth EPP
  256. };
  257. enum LoadKeyWriteMode
  258. {
  259. DIRECT_LOAD_KEY = 0x30,
  260. XOR_WITH_EXISTING_KEY
  261. };
  262. enum LoadKeyVerifyMode
  263. {
  264. DO_NOT_CHECK_KCV = 0x30,
  265. CHECK_KCV
  266. };
  267. enum KeyCheckMode
  268. {
  269. CHECK_ITSELF = 0x30,
  270. CHECK_ZERO
  271. };
  272. enum AuthenticationMode
  273. {
  274. AUTHENTICATION_FOR_LOADING_KEY = 0x31,
  275. AUTHENTICATION_FOR_USED_KEY
  276. };
  277. enum CryptCryptionMode
  278. {
  279. DES = 0x31,
  280. TDES
  281. };
  282. enum IVMode
  283. {
  284. IV_KEY_AS_IV = 0x30,
  285. IV_DATA_AS_IV,
  286. DECRYPT_IV_AS_IV
  287. };
  288. enum MACMode
  289. {
  290. MAC_99 = 0x41,
  291. MAC_919,
  292. MAC_CBC,
  293. MAC_PBOC,
  294. MAC_UNION_PAY
  295. };
  296. enum MACCryptionMode
  297. {
  298. WITHOUT_IV = 0x31,
  299. WITH_IV
  300. };
  301. enum PinBlockEnctryptionMode
  302. {
  303. SINGLE_ENCRYPT_RSA = 0x00,
  304. SINGLE_ENCRYPT_DES,
  305. DOUBLE_ENCRYPT_DES
  306. };
  307. enum PinFormat
  308. {
  309. FREE_MODE = 0x00,
  310. IBM3624,
  311. ANSI98,
  312. ISO0,
  313. ISO1,
  314. ECI2,
  315. ECI3,
  316. VISA2,
  317. DIEBOLD,
  318. DIEBOLDCO,
  319. VISA3,
  320. BANKSYS,
  321. ISO2,
  322. ISO3,
  323. ASCII
  324. };
  325. //国密SM
  326. enum WriteModeSM
  327. {
  328. SET_MODE = 0x00,
  329. XOR_MODE
  330. };
  331. enum CryptMode
  332. {
  333. SM4_ENCRYPT = 0x31,
  334. SM4_DECRYPT
  335. };
  336. enum CryptSM4Mode
  337. {
  338. ECB_MODE = 0x41,
  339. CBC_MODE,
  340. };
  341. enum EncryptionMode
  342. {
  343. SINGLE_ENCRYPT_SM2 = 0x00,
  344. SINGLE_ENCRYPT_SM4,
  345. DOUBLE_ENCRYPT_SM4
  346. };
  347. enum SM4MACMode
  348. {
  349. SM4_MAC_UNION_PAY = 0x40,
  350. SM4_MAC_PBOC = 0x43
  351. };
  352. enum SignatureAlgorithm
  353. {
  354. SIGN_NA = 0x30,
  355. SIGN_RSASSA_PKCS1_V1_5,
  356. //SIGN_RSASSA_PSS
  357. };
  358. enum RsaEncipherAlgorithm
  359. {
  360. CRYPT_RSASSA_PKCS1_V1_5 = 0x31,
  361. };
  362. enum RandomMode
  363. {
  364. DoWithoutRandom = 0x30,
  365. DoWithRandom
  366. };
  367. enum DerTagType
  368. {
  369. DER_TAG_INTEGER,
  370. DER_TAG_RSA_KEY,
  371. DER_TAG_RSA_KEY_WITH_SIG,
  372. DER_TAG_ENCRYPTED_DES_KEY,
  373. DER_TAG_EPP_SERIAL_NUMBER
  374. };
  375. enum RsaKeyCheckMode
  376. {
  377. RSA_NOT_KCV = 0x00,
  378. RSA_KCV_SHA256
  379. };
  380. enum GMFWType
  381. {
  382. A980_BOOTLOADER_FW = 0x30,
  383. A980_APPLICATION_FW
  384. };
  385. typedef enum {
  386. ATTR_SPECIAL = (0x0000) //special key(UID | UAK | KBPK | IMK)
  387. , ATTR_DK = (0x0001) //DATA KEY(WFS_PIN_USECRYPT)
  388. , ATTR_PK = (0x0002) //PIN KEY(WFS_PIN_USEFUNCTION)
  389. , ATTR_AK = (0x0004) //MAC KEY(WFS_PIN_USEMACING)
  390. , ATTR_MK = (0x0020) //MASTER KEY / MK only for MK(WFS_PIN_USEKEYENCKEY)
  391. , ATTR_IV = (0x0080) //IV KEY(WFS_PIN_USESVENCKEY)
  392. , ATTR_ANSTR31 = (0x0400) //ANSTR31 MASTER KEY(WFS_PIN_USEANSTR31MASTER)
  393. , ATTR_RESTRICTED = (0x0800) //Restricted MASTER KEY(WFS_PIN_USERESTRICTEDKEYENCKEY)
  394. , ATTR_SM4 = (0x8000) //China Secure Encryption Algorithm(SM4)
  395. , ATTR_PINLOCAL = (0x10000) //PIN local offset(WFS_PIN_USEPINLOCAL)
  396. , ATTR_RSAPUBLIC = (0x20000) //RSA public(WFS_PIN_USERSAPUBLIC)
  397. , ATTR_RSAPRIVATE = (0x40000) //RSA private(WFS_PIN_USERSAPRIVATE)
  398. , ATTR_CHIPINFO = (0x100000) //WFS_PIN_USECHIPINFO
  399. , ATTR_CHIPPIN = (0x200000) //WFS_PIN_USECHIPPIN
  400. , ATTR_CHIPPS = (0x400000) //WFS_PIN_USECHIPPS
  401. , ATTR_CHIPMAC = (0x800000) //WFS_PIN_USECHIPMAC
  402. , ATTR_CHIPLT = (0x1000000) //WFS_PIN_USECHIPLT
  403. , ATTR_CHIPMACLZ = (0x2000000) //WFS_PIN_USECHIPMACLZ
  404. , ATTR_CHIPMACAZ = (0x4000000) //WFS_PIN_USECHIPMACAZ
  405. , ATTR_RSA_VERIFY = (0x8000000) //RSA public verify(WFS_PIN_USERSAPUBLICVERIFY)
  406. , ATTR_RSA_SIGN = (0x10000000) //RSA private sign(WFS_PIN_USERSAPRIVATESIGN)
  407. , ATTR_PINREMOTE = (0x20000000) //PIN remote(WFS_PIN_USEPINREMOTE)
  408. , ATTR_SM2 = (0x80000000) //China Secure Encryption Algorithm(SM2)
  409. , ATTR_MPK = (ATTR_MK | ATTR_PK) //MASTER KEY only for PIN KEY
  410. , ATTR_MDK = (ATTR_MK | ATTR_DK) //MASTER KEY only for DATA KEY
  411. , ATTR_MAK = (ATTR_MK | ATTR_AK) //MASTER KEY only for MAC KEY
  412. , ATTR_MIV = (ATTR_MK | ATTR_IV) //MASTER KEY only for IV KEY
  413. , ATTR_WK = (ATTR_PK | ATTR_DK | ATTR_AK)
  414. , ATTR_MWK = (ATTR_MK | ATTR_PK | ATTR_DK | ATTR_AK)
  415. } EKEYATTR;
  416. typedef struct tag_KeyAttributes
  417. {
  418. BYTE bitLock : 1;
  419. BYTE bitParity : 1;
  420. BYTE bitLength : 2;
  421. BYTE bitType : 2;
  422. BYTE bitRSA : 1;
  423. BYTE bitBK : 1;
  424. BYTE bitEPK : 1;
  425. BYTE bitCPK : 1;
  426. BYTE bitIV : 1;
  427. BYTE bitTDK : 1;
  428. BYTE bitTAK : 1;
  429. BYTE bitTPK : 1;
  430. BYTE bitMK : 1;
  431. BYTE bitExist : 1;
  432. } KeyAttributes, * LPKeyAttributes;
  433. typedef struct tag_GetEPPSensorExSensor
  434. {
  435. BYTE bitLogicallyInstallStu :1; //(1 = Remove, 0 = Install)
  436. BYTE bitPhysicallySwitch :1; //(1 = Open, 0 = Close)
  437. BYTE bitSensor1Switch :1;
  438. BYTE bitSensor2Switch :1;
  439. BYTE bitSensor3Switch :1;
  440. BYTE bitSensor4Switch :1;
  441. BYTE bitSensor5Switch :1;
  442. BYTE bitReserved :1;
  443. } GetEPPSensorExSensor, *LPGetEPPSensorExSensor;
  444. typedef struct tag_GetEPPSensorInternalSensorState
  445. {
  446. BYTE bitLowTamperature :1;
  447. BYTE bitHighTamperature :1;
  448. BYTE bitLowBattery :1;
  449. BYTE bitHighBattery :1;
  450. BYTE bitReserved1 :1;
  451. BYTE bitReserved2 :1;
  452. BYTE bitReserved3 :1;
  453. BYTE bitReserved4 :1;
  454. } GetEPPSensorInternalSensorState, *LPGetEPPSensorInternalSensorState;
  455. typedef struct tag_GetEPPSensorBatteryState
  456. {
  457. BYTE bitBattery1WeakOrDead :1; //(1 = weak)
  458. BYTE bitBattery2WeakOrDead :1;
  459. BYTE bitReserved1 :1;
  460. BYTE bitReserved2 :1;
  461. BYTE bitReserved3 :1;
  462. BYTE bitReserved4 :1;
  463. BYTE bitReserved5 :1;
  464. BYTE bitReserved6 :1;
  465. } GetEPPSensorBatteryState, *LPGetEPPSensorBatteryState;
  466. typedef struct tag_EPPExchangeDataHeadSection
  467. {
  468. BYTE bySignatureHead;
  469. BYTE byTRNB;
  470. BYTE byCmd;
  471. WORD wLen;
  472. } EPPExchangeDataHeadSection, *LPEPPExchangeDataHeadSection;
  473. typedef struct tag_EPPExchangeDataTailSection
  474. {
  475. BYTE bySignatureEnd;
  476. WORD wCRC;
  477. } EPPExchangeDataTailSection, *LPEPPExchangeDataTailSection;
  478. typedef struct tag_EPPExchangeDataField
  479. {
  480. union
  481. {
  482. BYTE byCmd;
  483. BYTE byStatus;
  484. } unHead;
  485. union
  486. {
  487. LPBYTE lpbyParamInfo;
  488. LPBYTE lpbyResInfo;
  489. } unBody;
  490. } EPPExchangeDataField, *LPEPPExchangeDataField;
  491. typedef struct tag_SetEntryModeParam
  492. {
  493. SwitchMode enSwitchMode;
  494. WORD wKeybordDisCode;
  495. WORD wFuncKeybordDisCode;
  496. } SetEntryModeParam, *LPSetEntryModeParam;
  497. typedef struct tag_ReadEntryTextResponse
  498. {
  499. BYTE byBytesCount;
  500. BYTE byDataOfGTB[8];
  501. } ReadEntryTextResponse, *LPReadEntryTextResponse;
  502. typedef struct tag_VirtualKeyPressParam
  503. {
  504. WORD wKeyTableLen;
  505. BYTE byKeyTable[8];
  506. } VirtualKeyPressParam, *LPVirtualKeyPressParam;
  507. typedef struct tag_DelEntryBufferParam
  508. {
  509. WORD wContrlParemeterlen;
  510. DeleteEntryBufferMode enControlParameter;
  511. } DelEntryBufferParam, *LPDelEntryBufferParam;
  512. typedef struct tag_SetKeyboardCodeParam
  513. {
  514. KeyboardCodeMode enSetKeyboardCodeMode;
  515. BYTE byEPPTableNaturalMode[16];
  516. BYTE byEPPTableShiftMode[16];
  517. BYTE byExFunKeyNaturalMode[16];
  518. BYTE byExFunKeyShiftMode[16];
  519. } SetKeyboardCodeParam, *LPSetKeyboardCodeParam;
  520. typedef struct tag_SetControlModeParam
  521. {
  522. ControlMode enControlMode;
  523. BYTE byControlCode;
  524. } SetControlModeParam, *LPSetControlModeParam;
  525. typedef struct tag_ReadEPPInfoResponse
  526. {
  527. BYTE byEPPType;
  528. WORD wDESKeyNumber;
  529. WORD wRSAKeyNumber;
  530. WORD wCertificateNumber;
  531. WORD wCryptAlgorithms;
  532. BYTE byDerivationAlgorithms;
  533. BYTE byPresentationAlgorithms;
  534. BYTE byValidationAlgorithms;
  535. WORD wPinFormat;
  536. BYTE byKeyCheckModes;
  537. WORD wUseDESKey;
  538. BYTE byICCard;
  539. BYTE byDisPlay;
  540. BYTE byPressKeyNumber;
  541. BYTE byVersionNumber[16];
  542. BYTE byProductModel[8];//标签下面ZT598后面的8位数字
  543. BYTE byMainChipSN[8];//键盘ID号
  544. } ReadEPPInfoResponse, *LPReadEPPInfoResponse;
  545. typedef struct tag_WriteUserDataParam
  546. {
  547. BYTE byUserBlockAdress;
  548. BYTE byUserData[256];
  549. } WriteUserDataParam, *LPWriteUserDataParam;
  550. typedef BYTE ReadUserDataParam, *LPReadUserDataParam;
  551. typedef BYTE ReadUserDataResponse[256];
  552. typedef InstallMode RemoveInstallAuthParam, *LPRemoveInstallAuthParam;
  553. typedef BYTE RemoveInstallAuthResponse[4];
  554. typedef struct tag_UpdatePasswordParam
  555. {
  556. PWDKeyID enPWDKey;
  557. BYTE byUpdataMode;
  558. tag_UpdatePasswordParam() :
  559. byUpdataMode(0x30)
  560. {}
  561. } UpdatePasswordParam, *LPUpdatePasswordParam;
  562. typedef struct tag_LoadKeyParam
  563. {
  564. WORD wKeyID;
  565. LoadKeyWriteMode enLoadKeyWriteMode;
  566. KeyAttributes Attributes;
  567. LoadKeyVerifyMode enLoadKeyVerifyMode;
  568. KeyCheckMode enLoadKeyCheckMode;
  569. WORD wKeyCheckValueLen;
  570. BYTE byKeyCheckValue[DES_DATA_GROUP_LENGTH];
  571. BYTE byPlainTextKey[24];
  572. BYTE byKeyBlockMACValue[4];
  573. } LoadKeyParam, *LPLoadKeyParam;
  574. typedef struct tag_LoadKeyResponse
  575. {
  576. WORD wKeyCheckValueLen;
  577. BYTE byKeyCheckValue[DES_DATA_GROUP_LENGTH];
  578. } LoadKeyResponse, *LPLoadKeyResponse;
  579. typedef struct tag_ExChangeKeyParam
  580. {
  581. WORD wKeyID1;
  582. WORD wVariationIndex1;
  583. WORD wKeyID2;
  584. LoadKeyWriteMode enKeyWriteMode;
  585. KeyAttributes Attributes2;
  586. LoadKeyVerifyMode enKeyVerifyMode;
  587. KeyCheckMode enKCVCheckMode;
  588. WORD wKeyCheckValueLen;
  589. BYTE byKeyCheckValue[DES_DATA_GROUP_LENGTH];
  590. WORD wKeyCipherTextLen;
  591. BYTE byKeyCipherText[24];
  592. BYTE byKeyBlockMACValue[4];
  593. } ExChangeKeyParam, *LPExChangeKeyParam;
  594. typedef struct tag_ExChangeKeyResponse
  595. {
  596. WORD wKCVLen;
  597. BYTE byKCV[DES_DATA_GROUP_LENGTH];
  598. } ExChangeKeyResponse, *LPExChangeKeyResponse;
  599. typedef BYTE GenerateRandomDataParam, *LPGenerateRandomDataParam;
  600. typedef struct tag_GenerateRandomDataResponse
  601. {
  602. WORD wGeneratedDataLen;
  603. BYTE byGeneratedData[255];
  604. } GenerateRandomDataResponse, *LPGenerateRandomDataResponse;
  605. typedef struct tag_AuthenticationParam
  606. {
  607. WORD wKeyID;
  608. AuthenticationMode enAuthenticationMode;
  609. BYTE byEPPRandomData[8];
  610. BYTE byHOSTRandomData[8];
  611. BYTE byMACData[4];
  612. } AuthenticationParam, *LPAuthenticationParam;
  613. typedef struct tag_AuthenticationResponse
  614. {
  615. BYTE byHOSTRandomData[8];
  616. BYTE byEPPRandomData[8];
  617. BYTE byMACData[4];
  618. } AuthenticationResponse, *LPAuthenticationResponse;
  619. typedef WORD DeleteKeyParam, *LPDeleteKeyParam;
  620. typedef struct tag_ReadKeyAttributesParam
  621. {
  622. WORD wKeyID;
  623. KeyCheckMode enKeyCheckMode;
  624. WORD wVariationIndex;
  625. } ReadKeyAttributesParam, *LPReadKeyAttributesParam;
  626. typedef struct tag_ReadKeyAttributesResponse
  627. {
  628. KeyAttributes Attributes;
  629. WORD wKCVLen;
  630. BYTE byKCV[DES_DATA_GROUP_LENGTH];
  631. } ReadKeyAttributesResponse, *LPReadKeyAttributesResponse;
  632. typedef struct tag_EncryptPinBlockParam
  633. {
  634. WORD wKeyID;
  635. WORD wVariationIndex;
  636. PinBlockEnctryptionMode enPinBlockEnctryptionMode;
  637. PinFormat enPinFormat;
  638. WORD wKeyID2;
  639. WORD wVariationIdex2;
  640. BYTE byInitialPINPattern[8];
  641. BYTE byPINOffset;
  642. BYTE byPINLength;
  643. BYTE byXORPINBlockPattern[8];
  644. BYTE byXORPINBlockPattern2[8];
  645. } EncryptPinBlockParam, *LPEncryptPinBlockParam;
  646. typedef BYTE EncryptPinBlockResponse[8];
  647. typedef struct tag_DesCryptDataParam
  648. {
  649. WORD wKeyID;
  650. WORD wVariationIndex;
  651. WORD wKeyID2;
  652. BYTE byIV[8];
  653. IVMode enIVMode;
  654. BYTE byDesMode;
  655. CryptCryptionMode enCryptionMode;
  656. WORD wInputDataLen;
  657. LPBYTE lpInputData;
  658. } DesCryptDataParam, *LPDesCryptDataParam;
  659. typedef struct tag_DesCryptDataResponse
  660. {
  661. WORD wOutputDataLen;
  662. LPBYTE lpOutputData;
  663. } DesCryptDataResponse, *LPDesCryptDataResponse;
  664. typedef struct tag_MACEnCryptDataParam
  665. {
  666. WORD wKeyID;
  667. WORD wVariationIndex;
  668. WORD wKeyID2;
  669. BYTE byIV[8];
  670. IVMode enIVMode;
  671. MACMode enMACMode;
  672. MACCryptionMode enCryptionMode;
  673. WORD wInputDataLen;
  674. LPBYTE lpInputData;
  675. } MACEnCryptDataParam, *LPMACEnCryptDataParam;
  676. typedef struct tag_MACEnCryptDataResponse
  677. {
  678. WORD wOutputDataLen;
  679. LPBYTE lpOutputData;
  680. } MACEnCryptDataResponse, *LPMACEnCryptDataResponse;
  681. typedef struct tag_GetEPPSensorDataResponse
  682. {
  683. GetEPPSensorExSensor ExternalSensor;
  684. GetEPPSensorInternalSensorState InternalSensorState;
  685. GetEPPSensorBatteryState BatteryState;
  686. } GetEPPSensorDataResponse, *LPGetEPPSensorDataResponse;
  687. typedef KeyboardCodeMode GetKeyBoardCodeParam, *LPGetKeyBoardCodeParam;
  688. typedef struct tag_GetKeyBoardCodeResponse
  689. {
  690. BYTE byEPPTableNaturalMode[16];
  691. BYTE byEPPTableShiftMode[16];
  692. BYTE byExFunKeyNaturalMode[16];
  693. BYTE byExFunKeyShiftMode[16];
  694. } GetKeyBoardCodeResponse, *LPGetKeyBoardCodeResponse;
  695. typedef BYTE SetSystemTimeParam[4];
  696. typedef BYTE GetSystemTimeResponse[4];
  697. //国密SM
  698. typedef struct tag_SM4LoadTextKeyParam
  699. {
  700. WORD wKeyIndex;
  701. WriteModeSM enWritrMode;
  702. BYTE byKeyData[16];
  703. KeyAttributes Attributes2;
  704. } SM4LoadTextKeyParam, *LPSM4LoadTextKeyParam;
  705. typedef BYTE SM4LoadTextKeyResponse[8];
  706. typedef struct tag_SM4ExchangeKeyParam
  707. {
  708. WORD wKeyID1;
  709. WORD wKeyID2;
  710. BYTE byCiphertextKey[16];
  711. KeyAttributes Attributes2;
  712. } SM4ExchangeKeyParam, *LPSM4ExchangeKeyParam;
  713. typedef BYTE SM4ExchangeKeyResponse[8];
  714. typedef struct tag_SM4CryptParam
  715. {
  716. WORD wKeyIndex;
  717. CryptMode enCryptMode;
  718. CryptSM4Mode enCryptSM4Mode;
  719. BYTE byIVData[16];
  720. WORD wInputDataLen;
  721. LPBYTE lpInputData;
  722. } SM4CryptParam, *LPSM4CryptParam;
  723. typedef struct tag_SM4CryptResponse
  724. {
  725. WORD wEncryptDataLen;
  726. LPBYTE lpEncryptData;
  727. } SM4CryptResponse, *LPSM4CryptResponse;
  728. typedef struct tag_SM4MACParam
  729. {
  730. WORD wKeyIndex;
  731. BYTE byIVData[16];
  732. SM4MACMode enMACMode;
  733. WORD wInputDataLen;
  734. LPBYTE lpInputData;
  735. } SM4MACParam, *LPSM4MACParam;
  736. typedef BYTE SM4MACResponse[16];
  737. typedef struct tag_SM4GetPinBlockParam
  738. {
  739. WORD wKeyID;
  740. EncryptionMode enEncryptionMode;
  741. WORD wKeyID2;
  742. BYTE byPinFormat;
  743. BYTE byInitialPinPattern[16];
  744. BYTE byPinOffset;
  745. BYTE byPinLength;
  746. BYTE byXORPinBlockPattern[16];
  747. BYTE byXORPinBlockPattern2[16];
  748. } SM4GetPinBlockParam, *LPSM4GetPinBlockParam;
  749. typedef BYTE SM4GetPinBlockResponse[16];
  750. typedef WORD SMDeleteKeyParam, *LPSMDeleteKeyParam;
  751. typedef BYTE SMGetVersionResponse[14];
  752. typedef struct tag_SMReadKeyAttributeParam
  753. {
  754. WORD wKeyID;
  755. KeyCheckMode enKeyCheckMode;
  756. } SMReadKeyAttributeParam, *LPSMReadKeyAttributeParam;
  757. typedef struct tag_SMReadKeyAttributeResponse
  758. {
  759. KeyAttributes Attributes;
  760. BYTE byKeyCheckValue[MAX_SM_HW_KCV_LENGTH];
  761. } SMReadKeyAttributeResponse, *LPSMReadKeyAttributeResponse;
  762. //RSA
  763. typedef struct tag_GenerateRsaKeyPairParam
  764. {
  765. WORD wPrivateKeyId;
  766. WORD wPublicKeyId;
  767. WORD wModulusLength;
  768. DWORD dwExponentData;
  769. } GenerateRsaKeyPairParam, *LPGenerateRsaKeyPairParam;
  770. typedef struct tag_DerTagHead
  771. {
  772. BYTE byFieldType;
  773. BYTE byLengthType;
  774. USHORT usLength;
  775. } DerTagHead, *LPDerTagHead;
  776. typedef struct tag_DerIntegerTag
  777. {
  778. DerTagHead stDerTagHead;
  779. LPBYTE lpbyValues;
  780. USHORT usLength;
  781. LPBYTE lpbyBuffer;
  782. } DerIntegerTag, *LPDerIntegerTag;
  783. typedef struct tag_DerRsaKeyTag
  784. {
  785. DerTagHead stDerTagHead;
  786. DerIntegerTag stModulusTag;
  787. DerIntegerTag stExponentTag;
  788. USHORT usLength;
  789. LPBYTE lpbyBuffer;
  790. } DerRsaKeyTag, *LPDerRsaKeyTag;
  791. typedef struct tag_DerRsaKeyWithSigTag
  792. {
  793. DerTagHead stDerTagHead;
  794. DerRsaKeyTag stDerRsaKeyTag;
  795. DerIntegerTag stSigTag;
  796. USHORT usLength;
  797. LPBYTE lpbyBuffer;
  798. } DerRsaKeyWithSigTag, *LPDerRsaKeyWithSigTag;
  799. typedef struct tag_DerEncDesKeytag
  800. {
  801. DerTagHead stDerTagHead;
  802. DerIntegerTag stEncDesKeyTag;
  803. DerIntegerTag stSigTag;
  804. USHORT usLength;
  805. LPBYTE lpbyBuffer;
  806. } DerEncDesKeytag, *LPDerEncDesKeytag;
  807. typedef struct tag_DerEppSNTag
  808. {
  809. DerTagHead stDerTagHead;
  810. DerIntegerTag stSNTag;
  811. DerIntegerTag stSigTag;
  812. USHORT usLength;
  813. LPBYTE lpbyBuffer;
  814. } DerEppSNTag, *LPDerEppSNTag;
  815. typedef struct tag_ExpEppPKParam
  816. {
  817. WORD wKeyId;
  818. WORD wSignatureId;
  819. } ExpEppPKParam, *LPExpEppPKParam;
  820. typedef struct tag_ExpEppPKResponse
  821. {
  822. SignatureAlgorithm enSigAlgorithm;
  823. DerRsaKeyWithSigTag stDerRsaKeyWithSigTag;
  824. } ExpEppPKResponse, *LPExpEppPKResponse;
  825. typedef struct tag_ImportDesKeyParam
  826. {
  827. WORD wDesKeyId;
  828. KeyAttributes stKeyAttributes;
  829. WORD wEppSkDecKeyId;
  830. SignatureAlgorithm enSigAlgorithm;
  831. LoadKeyVerifyMode enVerifyMode;
  832. KeyCheckMode enDesKCM;
  833. WORD wKCVLen;
  834. BYTE byKCV[DES_DATA_GROUP_LENGTH];
  835. WORD wVerifySigPkId;
  836. RsaEncipherAlgorithm enEncipherAlgorithm;
  837. RandomMode enRandomMode;
  838. DerEncDesKeytag stDerEncDesKeytag;
  839. } ImportDesKeyParam, *LPImportDesKeyParam;
  840. typedef struct tag_ImportDesKeyResponse
  841. {
  842. WORD wKCVLen;
  843. BYTE byKCV[DES_DATA_GROUP_LENGTH];
  844. } ImportDesKeyResponse, *LPImportDesKeyResponse;
  845. typedef struct tag_ImportRsaKeyParam
  846. {
  847. WORD wKeyId;
  848. KeyAttributes stKeyAttributes;
  849. WORD wSigKeyId;
  850. SignatureAlgorithm enSigAlgorithm;
  851. DerRsaKeyWithSigTag stDerRsaKeyWithSigTag;
  852. } ImportRsaKeyParam, *LPImportRsaKeyParam;
  853. typedef struct tag_ImportRsaKeyResponse
  854. {
  855. RsaKeyCheckMode enRsaKCM;
  856. BYTE byRsaKCV[32];
  857. } ImportRsaKeyResponse, *LPImportRsaKeyResponse;
  858. typedef struct tag_ImportEppSNParam
  859. {
  860. WORD wKeyId;
  861. KeyAttributes stKeyAttributes;
  862. WORD wSigKeyId;
  863. SignatureAlgorithm enSigAlgorithm;
  864. DerEppSNTag stDerEppSNTag;
  865. } ImportEppSNParam, *LPImportEppSNParam;
  866. typedef ImportRsaKeyResponse ImportEppSNResponse, *LPImportEppSNResponse;
  867. typedef ExpEppPKParam ExpEppSNParam, *LPExpEppSNParam;
  868. typedef struct tag_ExpEppSNResponse
  869. {
  870. SignatureAlgorithm enSigAlgorithm;
  871. DerEppSNTag stDerEppSNTag;
  872. } ExpEppSNResponse, *LPExpEppSNResponse;
  873. typedef struct tag_RSACryptDataParam
  874. {
  875. WORD wKeyId;
  876. USHORT usDataLen;
  877. BYTE byData[RSA_KEY_LENGTH_256_BYTE];
  878. } RSACryptDataParam, *LPRSACryptDataParam;
  879. typedef struct tag_RSACryptDataResponse
  880. {
  881. USHORT usDataLen;
  882. BYTE byData[RSA_KEY_LENGTH_256_BYTE];
  883. } RSACryptDataResponse, *LPRSACryptDataResponse;
  884. typedef struct tag_SecureCommunicationProtocolHead
  885. {
  886. BYTE byCommandHead;
  887. BYTE byDeviceNo;
  888. WORD wCommandFeature;
  889. BYTE byCommandLength[2];
  890. BYTE bySerialNumber;
  891. BYTE byCommandType;
  892. BYTE byCommand;
  893. } SecureCommProtocolHead, *LPSecureCommProtocolHead;
  894. typedef struct tag_FWBlockWithSig
  895. {
  896. BYTE byFWData[512];
  897. BYTE bySigData[64];
  898. } FWBlockWithSig, *LPFWBlockWithSig;
  899. typedef struct tag_UpdatingMainFWParam
  900. {
  901. WORD wFWBlockIndex;
  902. FWBlockWithSig stFWBlockWithSig;
  903. } UpdatingMainFWParam, *LPUpdatingMainFWParam;
  904. typedef EPPExchangeDataTailSection SecureCommProtocolTail, *LPSecureCommProtocolTail;
  905. #pragma pack(pop)