DLCardManager.h
4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// 作者:刘野
// 卡片硬件操作库导出接口。
// 包含dll导出接口和so库导出接口
#ifndef DL_CARD_MANAGER_H
#define DL_CARD_MANAGER_H
#define DL_DLL_API extern "C" __declspec(dllexport)
/* 连接读卡器 */
DL_DLL_API int __stdcall DLCConnectDevice();
/* 关闭读卡器 */
DL_DLL_API int __stdcall DLCDisconnectDevice();
/* 寻卡 */
DL_DLL_API int __stdcall DLCFindCard();
/*
* 验证秘钥
* 输入16字节秘钥key_。
* 返回值返回结果
* */
DL_DLL_API int __stdcall DLCAuthenticationKey(const unsigned char* dir, const unsigned char key_id, const unsigned char* key);
/*
* 读取数据
* 输入dir2字节目录标识、file_id1字节文件标识、read_offset2字节、
* data_len2字节、read_key16字节读秘钥(没有置空)和read_data(长度依据读取长度而定)。
* 输出结果填入read_data。
* */
DL_DLL_API int __stdcall DLCReadCardData(const unsigned char* dir, const unsigned char file_id, const unsigned int data_offset, const unsigned int data_len, const unsigned char* read_key, unsigned char* read_data);
/*
* 写入数据
* 输入dir2字节目录标识、file_id2字节文件标识、read_offset2字节、
* data_len2字节、read_key16字节读秘钥(没有置空)和read_data(长度依据读取长度而定)。
* 输出结果填入read_data。
* */
DL_DLL_API int __stdcall DLCWriteCardData(const unsigned char* dir, const unsigned char file_id, const unsigned int data_offset, const unsigned int data_len, const unsigned char* write_key, const unsigned char* write_data);
/*
* 安装/更新秘钥
* 输入dir2字节目录标识、key_id1字节文件标识、key_type32位秘钥类型、
* main_key16字节主控秘钥(没有置空)、new_key16字节新秘钥。
**/
DL_DLL_API int __stdcall DLCInstallKey(const unsigned char* dir, const unsigned char key_id, const int key_type, const unsigned char* main_key, const unsigned char* new_key);
/*
* 建立文件
* 输入parent_dir2字节父目录、parent_key2字节父目录主控秘钥、file_name2字节文件标识、
* file_size2字节文件大小、safe_type4字节安全类型和file_type4字节文件类型
**/
DL_DLL_API int __stdcall DLCCreateFile(const unsigned char* parent_dir, const unsigned char* parent_key, const unsigned char* file_name, const unsigned char* file_size, const int file_type);
DL_DLL_API int __stdcall DLCSelectFile(const unsigned char* dir);
//SO库API
//
/*
* 该函数用以获取8字节随机数
* 输入5字节的无符号字符型数组指针,函数将更改数组内容,输出5字节指令。
* 返回值返回错误码。
*/
int __stdcall DLCSOGetRandom(unsigned char* get_randam_cmd);
/*
* 该函数用于验证秘钥。
* 输入key_id1字节秘钥标识、key16字节16进制秘钥值和random8字节16进制随机数,返回cmd13字节16进制指令。
* 返回值返回结果。
*/
int __stdcall DLCSOAuthenticationKey(const unsigned char key_id, const unsigned char* key, const unsigned char* random, unsigned char* cmd);
/*
* 该函数用于读取数据。
* 输入data_offfset数据初始偏移,data_offfset最大为ffff,data_len数据长度,data_len最大为ff,返回16进制cmd指令,cmd数组长度 = data_len + 5。
* 读出的数据将存在data_中。
* 返回值返回错误码。
*/
int __stdcall DLCSOReadData(const unsigned int data_offfset, const unsigned int data_len, unsigned char* cmd);
/*
* 该函数用于写入数据。
* 输入write_key字节16进制读秘钥(没有置空)、random8字节16进制随机数(没有置空)、data_offfset2字节数据初始偏移、data_len2字节数据长度和data16进制数据,cmd数组长度 = data_len + 9。
* 返回值返回错误码。
*/
int __stdcall DLCSOWriteData(const unsigned char* write_key, const unsigned char* random, const unsigned int data_offfset, const unsigned int data_len, const unsigned char* data, unsigned char* cmd);
/*该函数用于选择目录
*输入dir两字节16进制目录标识,返回cmd7字节16进制指令
**/
int __stdcall DLCSOSelectDir(const unsigned char* dir, unsigned char* cmd);
//m1卡api
/*输入section扇区编号,长度为12的16进制秘钥key
**/
DL_DLL_API int __stdcall DLCM1AuthenticationKey(const unsigned short section, unsigned char* key);
/*读取m1卡
*输入block_num数据块编号,返回16字节数据块
*/
DL_DLL_API int __stdcall DLCM1ReadCard(const unsigned short block_num, const unsigned char* data);
/*写入m1卡
*输入block_num数据块编号,返回16字节数据块
**/
DL_DLL_API int __stdcall DLCM1WriteCard(const unsigned short block_num, const unsigned char* data);
/*m1卡寻卡
**/
DL_DLL_API int __stdcall DLCM1FindCard();
#endif //end DL_CARD_MANAGER_H