yc-ui2 0.2.2-beta2 → 0.2.2-beta4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/.env +0 -7
- package/babel.config.js +0 -5
- package/jsconfig.json +0 -19
- package/public/favicon.ico +0 -0
- package/public/index.html +0 -20
- package/src/App.vue +0 -70
- package/src/api/customerService.js +0 -56
- package/src/assets/ca/ca-bg.png +0 -0
- package/src/assets/ca/caBg.png +0 -0
- package/src/assets/customerService/admin.jpg +0 -0
- package/src/assets/customerService/chatTop.png +0 -0
- package/src/assets/customerService/ellipticalWenh.png +0 -0
- package/src/assets/customerService/enlarge.png +0 -0
- package/src/assets/customerService/personal.jpg +0 -0
- package/src/assets/customerService/personal1.jpg +0 -0
- package/src/assets/customerService/personal2.jpg +0 -0
- package/src/assets/slideVerify/1.jpg +0 -0
- package/src/assets/slideVerify/2.jpg +0 -0
- package/src/assets/slideVerify/3.jpg +0 -0
- package/src/assets/slideVerify/4.jpg +0 -0
- package/src/assets/slideVerify/5.jpg +0 -0
- package/src/assets/slideVerify/6.jpg +0 -0
- package/src/assets/slideVerify/7.jpg +0 -0
- package/src/assets/slideVerify/8.jpg +0 -0
- package/src/components/YcCA/index.vue +0 -536
- package/src/components/YcCustomerService/chat.vue +0 -337
- package/src/components/YcCustomerService/chatMixin.js +0 -128
- package/src/components/YcCustomerService/index.vue +0 -272
- package/src/components/YcQuestion/index.vue +0 -535
- package/src/components/YcSlideVerify/index.vue +0 -104
- package/src/main.js +0 -19
- package/src/packages/index.js +0 -29
- package/src/router/index.js +0 -20
- package/src/utils/auth.js +0 -6
- package/src/utils/mTokenPlugin/base64.js +0 -148
- package/src/utils/mTokenPlugin/base64_backups.js +0 -146
- package/src/utils/mTokenPlugin/hunca_mToken_core.js +0 -1447
- package/src/utils/mTokenPlugin/hunca_mToken_core2.js +0 -1455
- package/src/utils/mTokenPlugin/hunca_mToken_core_backups.js +0 -1425
- package/src/utils/mTokenPlugin/mToken.js +0 -3211
- package/src/utils/mTokenPlugin/mToken_backups.js +0 -3202
- package/src/utils/mTokenPluginBeijin/formateTime.js +0 -10
- package/src/utils/mTokenPluginBeijin/xtxasyn.js +0 -1156
- package/src/utils/request.js +0 -50
- package/src/views/question.vue +0 -32
- package/vue.config.js +0 -41
@@ -1,1447 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @name mTokenPlugin集成代码
|
3
|
-
* @author Akay
|
4
|
-
* @version 0.7.12
|
5
|
-
* @date 2020.07.21
|
6
|
-
*
|
7
|
-
* @description
|
8
|
-
*ver 0.7.12 2020.12.21
|
9
|
-
* 1. 新增操作系统判断,根据不同的系统加载不同的配置
|
10
|
-
*
|
11
|
-
*ver 0.7.11 2020.07.21
|
12
|
-
* 1. 解决Https的问题
|
13
|
-
*
|
14
|
-
* ver 0.7.10 2020.04.04
|
15
|
-
* 1. 新增获取设备序号
|
16
|
-
* 2. 支持多Key
|
17
|
-
*
|
18
|
-
* ver 0.7.9 2020.01.08
|
19
|
-
* 1. 支持SJK1137型号
|
20
|
-
*
|
21
|
-
* ver 0.7.8 2019.10.23
|
22
|
-
* 1. 新增UKey适配
|
23
|
-
*
|
24
|
-
* ver 0.7.4 2019.09.18
|
25
|
-
* 1. 新增证书生效,失效时间
|
26
|
-
*
|
27
|
-
* ver 0.7.3 2019.08.19
|
28
|
-
* 1. 获取证书使用者信息
|
29
|
-
*
|
30
|
-
* ver 0.7.2 2019.08.08
|
31
|
-
* 1. 新增远程解锁接口
|
32
|
-
*
|
33
|
-
* ver 0.7.1 2019.07.17
|
34
|
-
* TODO: 未安装组件时,判断组件是否安装(暂定,未解决)
|
35
|
-
*
|
36
|
-
* ver 0.7.0 2019.07.04
|
37
|
-
* 1. 更新核心文件,解决多Key插入问题
|
38
|
-
* 2. Ukey目前仅支持国密证书
|
39
|
-
*
|
40
|
-
* ver 0.6.3 2019.06.24
|
41
|
-
* 1. 修复部分Bug
|
42
|
-
*
|
43
|
-
* ver 0.6.1 2019.06.24
|
44
|
-
* 1. 支持数字信封数据解密接口
|
45
|
-
* 2. 修复加密接口错误部分。
|
46
|
-
*
|
47
|
-
* ver 0.6.0 2019.06.20
|
48
|
-
* 1. 支持数字信封数据加密接口
|
49
|
-
* 2. 暂不支持多Ukey
|
50
|
-
*
|
51
|
-
* ver 0.5.1 2019.06.19
|
52
|
-
* 1. 修正新Ukey引入导致的Bug
|
53
|
-
*
|
54
|
-
* ver 0.5 2019.06.18
|
55
|
-
* 1. 适配SJK1137型号Ukey
|
56
|
-
*
|
57
|
-
* ver 0.4 2019.03.16
|
58
|
-
* 1. 新增方法 枚举Ukey获取证书“G项信息”列表
|
59
|
-
* 2. 新增方法 将“证书G项信息”转化为“证书名称”方法
|
60
|
-
*
|
61
|
-
* ver 0.3 2018.12.10
|
62
|
-
* 1. 新增修改Ukey密码的方法
|
63
|
-
*
|
64
|
-
* ver 0.2 2018.09.26
|
65
|
-
* 1. 新增获取签名证书SN号的方法
|
66
|
-
* 2. 修正部分Bug
|
67
|
-
*
|
68
|
-
* ver 0.1 2018.09.21
|
69
|
-
* 1. 搭建初步框架
|
70
|
-
* 2. 完成签名功能
|
71
|
-
*
|
72
|
-
*/
|
73
|
-
function hunca_mToken_core() {
|
74
|
-
|
75
|
-
// eslint-disable-next-line no-undef
|
76
|
-
var token = new mToken("mTokenPlugin");
|
77
|
-
var certInfoList = null;
|
78
|
-
var singleKey = 0;
|
79
|
-
var libraryNameList = null;
|
80
|
-
|
81
|
-
if((navigator.platform == "Win32") || (navigator.platform == "Windows")){
|
82
|
-
libraryNameList = Array("GM3000","HT","SJK1137");
|
83
|
-
}else {
|
84
|
-
libraryNameList = Array("GM3000"); //国产操作系统支持GM3000型号
|
85
|
-
//libraryNameList = Array("HT"); //国产操作系统支持海泰型号
|
86
|
-
}
|
87
|
-
/**
|
88
|
-
* 错误信息
|
89
|
-
*/
|
90
|
-
var LAST_ERRORSTRING = "";
|
91
|
-
|
92
|
-
/**
|
93
|
-
* 证书用途
|
94
|
-
*/
|
95
|
-
var KEY_SPEC_TYPE_ENCRYPT = 0;
|
96
|
-
var KEY_SPEC_TYPE_SIGN = 1;
|
97
|
-
|
98
|
-
/**
|
99
|
-
* 摘要算法
|
100
|
-
*/
|
101
|
-
var SGD_SM3 = 1;
|
102
|
-
var SGD_SHA1 = 2;
|
103
|
-
|
104
|
-
/**
|
105
|
-
* 加密算法
|
106
|
-
*/
|
107
|
-
//分组加密算法标识
|
108
|
-
var SGD_SM1_ECB = 0x00000101;
|
109
|
-
var SGD_SM1_CBC = 0x00000102;
|
110
|
-
var SGD_SM1_CFB = 0x00000104;
|
111
|
-
var SGD_SM1_OFB = 0x00000108;
|
112
|
-
var SGD_SM1_MAC = 0x00000110;
|
113
|
-
var SGD_SM4_ECB = 0x00000401;
|
114
|
-
var SGD_SM4_CBC = 0x00000402;
|
115
|
-
var SGD_SM4_CFB = 0x00000404;
|
116
|
-
var SGD_SM4_OFB = 0x00000408;
|
117
|
-
var SGD_SM4_MAC = 0x00000410;
|
118
|
-
|
119
|
-
|
120
|
-
/**
|
121
|
-
* 用户ID(固定)
|
122
|
-
*/
|
123
|
-
var USER_ID = "1234567812345678";
|
124
|
-
|
125
|
-
|
126
|
-
/**
|
127
|
-
* 错误信息提示列表
|
128
|
-
*/
|
129
|
-
var ERROR_MESSAGE_NOT_LOADLIBRARY = "控件加载失败,错误码:";
|
130
|
-
var ERROR_MESSAGE_NOT_FIND_UKEY = "未找到UKey!\n1.请确认是否安装最新驱动!\n2.计算机是否插入湖南CA UKey!";
|
131
|
-
var ERROR_MSSSAGE_FIND_MORE_UKEY = "计算机插入多个UKey,请拔除多余“湖南CA UKey”!";
|
132
|
-
var ERROR_MESSAGE_NOT_INSTANCE_DEVICE = "USBKey实例化失败,请确认此UKey是否插入计算机!\n点击‘刷新’按钮,更新设备列表。\n错误码:";
|
133
|
-
var ERROR_MESSAGE_USERPIN_LENGTH = "Ukey密码必须为4~16位!";
|
134
|
-
var ERROR_MESSAGE_USERPIN_IS_ERROR = "UKey密码错误";
|
135
|
-
var ERROR_MESSAGE_USERPIN_CHANGE_ERROR = "UKey密码修改失败";
|
136
|
-
var ERROR_MESSAGE_KEY_NOT_EXIT = "UKey不存在,请确认此UKey是否插入计算机,并点击'刷新'按钮,更新设备列表!";
|
137
|
-
var ERROR_MESSAGE_USERNAME_IS_NULL = "请点击‘刷新’按钮,更新设备列表并选择相应设备!";
|
138
|
-
var ERROR_MESSAGE_KEY_EXPORT_CERT = "证书获取失败,请加检测Key中是否存在证书!";
|
139
|
-
var ERROR_MESSAGE_SET_DIGEST_METHOD_ERROR = "设置摘要算法失败,请重新刷新浏览器!";
|
140
|
-
var ERROR_MESSAGE_SET_USERID_ERROR = "设置用户ID失败,请重新刷新浏览器";
|
141
|
-
var ERROR_MESSAGE_SIGN_ORIGINALDATA_IS_NULL = "签名失败,待签名原文不能为空";
|
142
|
-
var ERROR_MESSAGE_SIGN_ERROR = "签名失败,返回错误码:";
|
143
|
-
var ERROR_MESSAGE_USERNAMEGN_IS_NULL = "请点击‘刷新’按钮,更新设备列表并选择相应设备!";
|
144
|
-
var ERROR_MESSAGE_USERNAMEGN_TO_USERNAME_ERROR = "证书G项信息转化证书名称失败,请点击“刷新”按钮!";
|
145
|
-
var ERROR_MESSAGE_KEY_LIBRAY = "加载国密库失败!";
|
146
|
-
var ERROR_MESSAGE_ENCRYPT_DATA_IS_NULL = "加密失败:待加密原文不能为空!";
|
147
|
-
var ERROR_MESSAGE_DECRYPT_DATA_IS_NULL = "解密失败:待解密密文不能为空!";
|
148
|
-
var ERROR_MESSAGE_DECRYPT_DATA_IS_ERROR = "解密失败:请确认密文是否完整!\n解密所采用的Ukey是否为加密时的Ukey!";
|
149
|
-
var ERROR_MESSAGE_GET_REMOTEUNLOCKREQUEST_FAIL = "申请解锁请求失败!";
|
150
|
-
var ERROR_MESSAGE_GET_REMOTEUNLOCKREQUEST_NOT_SUPPORT = "此型号Ukey不支持解锁!";
|
151
|
-
var ERROR_MESSAGE_REMOTE_UNLOCK_FAIL = "Ukey解锁失败!";
|
152
|
-
|
153
|
-
/**
|
154
|
-
* 私有变量
|
155
|
-
*/
|
156
|
-
var tokenInfoList = null;
|
157
|
-
|
158
|
-
/**
|
159
|
-
* 私有变量
|
160
|
-
*/
|
161
|
-
var signResultSignData = null;
|
162
|
-
var signResultCert = null;
|
163
|
-
|
164
|
-
/**
|
165
|
-
* 证书信息
|
166
|
-
*/
|
167
|
-
var certSn = null; //证书Sn
|
168
|
-
var cert_subject_GN = null; //证书Gn
|
169
|
-
var cert_subject = null; //证书使用者
|
170
|
-
var cert_validTime = null; //证书失效时间
|
171
|
-
var cert_notbeforetime = null; //证书生效时间
|
172
|
-
|
173
|
-
/**
|
174
|
-
* 返回错误信息
|
175
|
-
*/
|
176
|
-
this.Hunca_GetLastError = function () {
|
177
|
-
return LAST_ERRORSTRING;
|
178
|
-
}
|
179
|
-
|
180
|
-
/**
|
181
|
-
* 获取证书列表
|
182
|
-
*/
|
183
|
-
this.Hunca_GetUserList = function () {
|
184
|
-
var deviceArray = null;
|
185
|
-
var containerName = null;
|
186
|
-
var userName = null;
|
187
|
-
var tmpInfo = null;
|
188
|
-
|
189
|
-
signResultCert = null;
|
190
|
-
signResultSignData = null;
|
191
|
-
tokenInfoList = new Array(); //清空信息
|
192
|
-
|
193
|
-
for (var index = 0; index < libraryNameList.length; index++) {
|
194
|
-
// eslint-disable-next-line no-undef
|
195
|
-
libraryName = libraryNameList[index];
|
196
|
-
// eslint-disable-next-line no-undef
|
197
|
-
if (!SOF_LoadLibrary(libraryName)) {
|
198
|
-
continue;
|
199
|
-
}
|
200
|
-
|
201
|
-
deviceArray = SOF_EnumDevice();
|
202
|
-
if (null == deviceArray) {
|
203
|
-
continue;
|
204
|
-
}
|
205
|
-
|
206
|
-
for (var i = 0; i < deviceArray.length; i++) {
|
207
|
-
var tokenInfo = new Object();
|
208
|
-
//实例化设备失败
|
209
|
-
if (!SOF_GetDeviceInstance(deviceArray[i])) {
|
210
|
-
break;
|
211
|
-
}
|
212
|
-
|
213
|
-
//获取设备信息
|
214
|
-
tmpInfo = SOF_GetUserList();
|
215
|
-
if (null != tmpInfo || tmpInfo.length != 0) {
|
216
|
-
containerName = tmpInfo[0][1];
|
217
|
-
userName = tmpInfo[0][0];
|
218
|
-
|
219
|
-
// eslint-disable-next-line no-undef
|
220
|
-
tokenInfo.libraryName = libraryName; //Ukey型号
|
221
|
-
tokenInfo.serial = deviceArray[i]; //设备序列号
|
222
|
-
tokenInfo.userName = userName; //证书名称
|
223
|
-
tokenInfo.containerName = containerName; //应用名称
|
224
|
-
|
225
|
-
tokenInfoList.push(tokenInfo);
|
226
|
-
} else {
|
227
|
-
continue;
|
228
|
-
}
|
229
|
-
SOF_LogOut();
|
230
|
-
}
|
231
|
-
}
|
232
|
-
|
233
|
-
//返回证书信息
|
234
|
-
var userNameList = new Array();
|
235
|
-
// eslint-disable-next-line no-redeclare
|
236
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
237
|
-
userNameList[i] = tokenInfoList[i].userName;
|
238
|
-
}
|
239
|
-
|
240
|
-
if (userNameList.length == 0) {
|
241
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
242
|
-
return "";
|
243
|
-
}
|
244
|
-
|
245
|
-
return userNameList;
|
246
|
-
}
|
247
|
-
|
248
|
-
/**
|
249
|
-
* 获取证书G项信息列表
|
250
|
-
*/
|
251
|
-
this.Hunca_GetUserListGN = function () {
|
252
|
-
var deviceArray = null;
|
253
|
-
var containerName = null;
|
254
|
-
var userName = null;
|
255
|
-
var tmpInfo = null;
|
256
|
-
var certB64 = null;
|
257
|
-
var deviceSerial = "";
|
258
|
-
|
259
|
-
signResultCert = null;
|
260
|
-
signResultSignData = null;
|
261
|
-
tokenInfoList = new Array(); //清空信息
|
262
|
-
LAST_ERRORSTRING = "";
|
263
|
-
|
264
|
-
for (var index = 0; index < libraryNameList.length; index++) {
|
265
|
-
// eslint-disable-next-line no-undef
|
266
|
-
libraryName = libraryNameList[index];
|
267
|
-
//加载控件
|
268
|
-
// eslint-disable-next-line no-undef
|
269
|
-
if (!SOF_LoadLibrary(libraryName)) {
|
270
|
-
continue;
|
271
|
-
}
|
272
|
-
|
273
|
-
deviceArray = SOF_EnumDevice();
|
274
|
-
if (null == deviceArray) {
|
275
|
-
continue;
|
276
|
-
}
|
277
|
-
|
278
|
-
for (var i = 0; i < deviceArray.length; i++) {
|
279
|
-
cert_subject_GN = null;
|
280
|
-
certSn = null;
|
281
|
-
deviceSerial = deviceArray[i];
|
282
|
-
|
283
|
-
var tokenInfo = new Object();
|
284
|
-
|
285
|
-
//实例化设备失败
|
286
|
-
if (!SOF_GetDeviceInstance(deviceSerial)) {
|
287
|
-
break;
|
288
|
-
}
|
289
|
-
|
290
|
-
//获取设备信息
|
291
|
-
tmpInfo = SOF_GetUserList();
|
292
|
-
if (null != tmpInfo || tmpInfo.length != 0) {
|
293
|
-
containerName = tmpInfo[0][1];
|
294
|
-
userName = tmpInfo[0][0];
|
295
|
-
|
296
|
-
// eslint-disable-next-line no-undef
|
297
|
-
tokenInfo.libraryName = libraryName;
|
298
|
-
tokenInfo.serial = deviceArray[i]; //设备序列号
|
299
|
-
tokenInfo.userName = userName; //证书名称
|
300
|
-
tokenInfo.containerName = containerName;
|
301
|
-
} else {
|
302
|
-
continue;
|
303
|
-
}
|
304
|
-
|
305
|
-
//获取证书G项信息
|
306
|
-
certB64 = SOF_ExportUserCert(tokenInfo.containerName, KEY_SPEC_TYPE_SIGN);
|
307
|
-
if (SOF_GetCertInfo(certB64)) {
|
308
|
-
tokenInfo.subjectGN = cert_subject_GN; //设备证书G项目;
|
309
|
-
} else {
|
310
|
-
continue;
|
311
|
-
}
|
312
|
-
|
313
|
-
tokenInfoList.push(tokenInfo);
|
314
|
-
SOF_LogOut();
|
315
|
-
}
|
316
|
-
}
|
317
|
-
|
318
|
-
//返回证书G项信息
|
319
|
-
var userNameGNList = new Array();
|
320
|
-
// eslint-disable-next-line no-redeclare
|
321
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
322
|
-
userNameGNList[i] = tokenInfoList[i].subjectGN;
|
323
|
-
}
|
324
|
-
|
325
|
-
if (userNameGNList.length == 0) {
|
326
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
327
|
-
return "";
|
328
|
-
}
|
329
|
-
|
330
|
-
/*****
|
331
|
-
if (userNameGNList.length > 1){
|
332
|
-
LAST_ERRORSTRING = ERROR_MSSSAGE_FIND_MORE_UKEY;
|
333
|
-
return "";
|
334
|
-
}
|
335
|
-
****/
|
336
|
-
return userNameGNList;
|
337
|
-
}
|
338
|
-
|
339
|
-
/**
|
340
|
-
* 将证书G项信息转化为证书名称
|
341
|
-
*/
|
342
|
-
this.Hunca_userNameGNToUserName = function (userNameGN) {
|
343
|
-
var userName = null;
|
344
|
-
LAST_ERRORSTRING = "";
|
345
|
-
if (null == userNameGN || userNameGN.length == 0) {
|
346
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAMEGN_IS_NULL;
|
347
|
-
}
|
348
|
-
|
349
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
350
|
-
if (userNameGN == tokenInfoList[i].subjectGN) {
|
351
|
-
userName = tokenInfoList[i].userName;
|
352
|
-
break;
|
353
|
-
}
|
354
|
-
}
|
355
|
-
|
356
|
-
if (null == userName || userName.length == 0) {
|
357
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAMEGN_TO_USERNAME_ERROR;
|
358
|
-
return null;
|
359
|
-
}
|
360
|
-
return userName;
|
361
|
-
}
|
362
|
-
|
363
|
-
this.Hunca_GenRemoteUnblockRequest = function (userName) {
|
364
|
-
var tokenInfo = null; //Ukey设备信息
|
365
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
366
|
-
var request = "";
|
367
|
-
|
368
|
-
LAST_ERRORSTRING = "";
|
369
|
-
|
370
|
-
//设备名称为空
|
371
|
-
if (null == userName || userName.length == null) {
|
372
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
373
|
-
return false;
|
374
|
-
}
|
375
|
-
|
376
|
-
//查找匹配的设备序列号
|
377
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
378
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
379
|
-
return false;
|
380
|
-
}
|
381
|
-
|
382
|
-
//索引设备编号
|
383
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
384
|
-
tempTokenInfo = tokenInfoList[i];
|
385
|
-
if (tempTokenInfo.userName == userName) {
|
386
|
-
tokenInfo = tempTokenInfo;
|
387
|
-
break;
|
388
|
-
}
|
389
|
-
}
|
390
|
-
|
391
|
-
//如果所选择的设备不存在
|
392
|
-
if (null == tokenInfo) {
|
393
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
394
|
-
return false;
|
395
|
-
}
|
396
|
-
|
397
|
-
//判断设备是否支持远程解锁
|
398
|
-
if (tokenInfo.libraryName != "GM3000") {
|
399
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_GET_REMOTEUNLOCKREQUEST_NOT_SUPPORT;
|
400
|
-
return false;
|
401
|
-
}
|
402
|
-
|
403
|
-
//加载库文件
|
404
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
405
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
406
|
-
return false;
|
407
|
-
}
|
408
|
-
|
409
|
-
//实例化设备
|
410
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
411
|
-
return false;
|
412
|
-
}
|
413
|
-
|
414
|
-
//枚举容器,并选择第一个容器
|
415
|
-
if (SOF_GetUserList() == null) {
|
416
|
-
return false;
|
417
|
-
}
|
418
|
-
|
419
|
-
//远程解锁
|
420
|
-
request = SOF_GenRemoteUnblockRequest()
|
421
|
-
|
422
|
-
return request;
|
423
|
-
}
|
424
|
-
|
425
|
-
this.HUnca_GetDeviceNumber = function(userName){
|
426
|
-
var m_devNumber = null;
|
427
|
-
|
428
|
-
//设备名称为空
|
429
|
-
if (null == userName || userName.length == null) {
|
430
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
431
|
-
return false;
|
432
|
-
}
|
433
|
-
|
434
|
-
//查找匹配的设备序列号
|
435
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
436
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
437
|
-
return false;
|
438
|
-
}
|
439
|
-
|
440
|
-
//索引设备编号
|
441
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
442
|
-
// eslint-disable-next-line no-undef
|
443
|
-
tempTokenInfo = tokenInfoList[i];
|
444
|
-
// eslint-disable-next-line no-undef
|
445
|
-
if (tempTokenInfo.userName == userName) {
|
446
|
-
// eslint-disable-next-line no-undef
|
447
|
-
tokenInfo = tempTokenInfo;
|
448
|
-
break;
|
449
|
-
}
|
450
|
-
}
|
451
|
-
|
452
|
-
//如果所选择的设备不存在
|
453
|
-
// eslint-disable-next-line no-undef
|
454
|
-
if (null == tokenInfo) {
|
455
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
456
|
-
return false;
|
457
|
-
}
|
458
|
-
|
459
|
-
//加载库文件
|
460
|
-
// eslint-disable-next-line no-undef
|
461
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
462
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
463
|
-
return false;
|
464
|
-
}
|
465
|
-
|
466
|
-
//实例化设备
|
467
|
-
// eslint-disable-next-line no-undef
|
468
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
469
|
-
return false;
|
470
|
-
}
|
471
|
-
m_devNumber =SOF_GetDeviceNumber();
|
472
|
-
|
473
|
-
return m_devNumber + "";
|
474
|
-
}
|
475
|
-
|
476
|
-
this.Hunca_RemoteUnlockPIN = function (userName, response) {
|
477
|
-
var tokenInfo = null; //Ukey设备信息
|
478
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
479
|
-
var result = false;
|
480
|
-
|
481
|
-
LAST_ERRORSTRING = "";
|
482
|
-
|
483
|
-
//设备名称为空
|
484
|
-
if (null == userName || userName.length == null) {
|
485
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
486
|
-
return false;
|
487
|
-
}
|
488
|
-
|
489
|
-
//查找匹配的设备序列号
|
490
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
491
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
492
|
-
return false;
|
493
|
-
}
|
494
|
-
|
495
|
-
//索引设备编号
|
496
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
497
|
-
tempTokenInfo = tokenInfoList[i];
|
498
|
-
if (tempTokenInfo.userName == userName) {
|
499
|
-
tokenInfo = tempTokenInfo;
|
500
|
-
break;
|
501
|
-
}
|
502
|
-
}
|
503
|
-
|
504
|
-
//如果所选择的设备不存在
|
505
|
-
if (null == tokenInfo) {
|
506
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
507
|
-
return false;
|
508
|
-
}
|
509
|
-
|
510
|
-
//判断设备是否支持远程解锁
|
511
|
-
if (tokenInfo.libraryName != "GM3000") {
|
512
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_GET_REMOTEUNLOCKREQUEST_NOT_SUPPORT;
|
513
|
-
return false;
|
514
|
-
}
|
515
|
-
|
516
|
-
//加载库文件
|
517
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
518
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
519
|
-
return false;
|
520
|
-
}
|
521
|
-
|
522
|
-
//实例化设备
|
523
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
524
|
-
return false;
|
525
|
-
}
|
526
|
-
|
527
|
-
//枚举容器,并选择第一个容器
|
528
|
-
if (SOF_GetUserList() == null) {
|
529
|
-
return false;
|
530
|
-
}
|
531
|
-
|
532
|
-
//远程解锁
|
533
|
-
result = SOF_RemoteUnlockPIN(response)
|
534
|
-
return result;
|
535
|
-
}
|
536
|
-
|
537
|
-
/**
|
538
|
-
* 修改Ukey密码
|
539
|
-
*/
|
540
|
-
this.Hunca_ChangeUserPin = function (userName, oldUserPin, newUserPin) {
|
541
|
-
var tokenInfo = null; //Ukey设备信息
|
542
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
543
|
-
LAST_ERRORSTRING = "";
|
544
|
-
|
545
|
-
//设备名称为空
|
546
|
-
if (null == userName || userName.length == null) {
|
547
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
548
|
-
return false;
|
549
|
-
}
|
550
|
-
|
551
|
-
//查找匹配的设备序列号
|
552
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
553
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
554
|
-
return false;
|
555
|
-
}
|
556
|
-
|
557
|
-
//索引设备编号
|
558
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
559
|
-
tempTokenInfo = tokenInfoList[i];
|
560
|
-
if (tempTokenInfo.userName == userName) {
|
561
|
-
tokenInfo = tempTokenInfo;
|
562
|
-
break;
|
563
|
-
}
|
564
|
-
}
|
565
|
-
|
566
|
-
//如果所选择的设备不存在
|
567
|
-
if (null == tokenInfo) {
|
568
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
569
|
-
return false;
|
570
|
-
}
|
571
|
-
|
572
|
-
//加载库文件
|
573
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
574
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
575
|
-
}
|
576
|
-
|
577
|
-
//实例化设备
|
578
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
579
|
-
return false;
|
580
|
-
}
|
581
|
-
|
582
|
-
//修改密码
|
583
|
-
if (!SOF_ChangeUserPin(oldUserPin, newUserPin)) {
|
584
|
-
return false;
|
585
|
-
}
|
586
|
-
|
587
|
-
SOF_LogOut();
|
588
|
-
return true;
|
589
|
-
}
|
590
|
-
|
591
|
-
/**
|
592
|
-
* 对数据进行签名,并返回签名是否成功
|
593
|
-
* @param {string} originalData 待签名原文
|
594
|
-
* @param {string} userName Ukey用户名称
|
595
|
-
* @param {string} userPin Ukey密码
|
596
|
-
*/
|
597
|
-
this.Hunca_PKCS1 = function (originalData, userName, userPin) {
|
598
|
-
var libraryName = null;
|
599
|
-
var tokenInfo = null; //Ukey设备信息
|
600
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
601
|
-
var certBase64 = null; //签名证书值
|
602
|
-
|
603
|
-
LAST_ERRORSTRING = "";
|
604
|
-
// eslint-disable-next-line no-undef
|
605
|
-
signResultInfo = null;
|
606
|
-
// eslint-disable-next-line no-undef
|
607
|
-
certInfo = new Object();
|
608
|
-
//设备名称为空
|
609
|
-
if (null == userName || userName.length == null) {
|
610
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
611
|
-
return false;
|
612
|
-
}
|
613
|
-
|
614
|
-
//查找匹配的设备序列号
|
615
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
616
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
617
|
-
return false;
|
618
|
-
}
|
619
|
-
|
620
|
-
//索引设备编号
|
621
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
622
|
-
tempTokenInfo = tokenInfoList[i];
|
623
|
-
if (tempTokenInfo.userName == userName) {
|
624
|
-
tokenInfo = tempTokenInfo;
|
625
|
-
break;
|
626
|
-
}
|
627
|
-
}
|
628
|
-
|
629
|
-
//如果所选择的设备不存在
|
630
|
-
if (null == tokenInfo) {
|
631
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
632
|
-
return false;
|
633
|
-
}
|
634
|
-
|
635
|
-
//加载库文件
|
636
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
637
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
638
|
-
}
|
639
|
-
|
640
|
-
//实例化设备
|
641
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
642
|
-
return false;
|
643
|
-
}
|
644
|
-
|
645
|
-
//登陆应用
|
646
|
-
if (!SOF_Login(userPin)) {
|
647
|
-
return false;
|
648
|
-
}
|
649
|
-
|
650
|
-
//获取签名证书Base64
|
651
|
-
certBase64 = SOF_ExportUserCert(tokenInfo.containerName, KEY_SPEC_TYPE_SIGN);
|
652
|
-
if (null == certBase64) {
|
653
|
-
return false;
|
654
|
-
}
|
655
|
-
|
656
|
-
//设置摘要算法
|
657
|
-
if (!SOF_SetDigestMethod(SGD_SM3)) {
|
658
|
-
return false;
|
659
|
-
}
|
660
|
-
|
661
|
-
if (!SOF_SetUserID()) {
|
662
|
-
return false;
|
663
|
-
}
|
664
|
-
|
665
|
-
//进行签名
|
666
|
-
if (!SOF_SignData(tokenInfo.containerName, SGD_SM3, originalData, certBase64)) {
|
667
|
-
return false;
|
668
|
-
}
|
669
|
-
|
670
|
-
//获取证书信息
|
671
|
-
if (!SOF_GetCertInfo(certBase64)) {
|
672
|
-
return false;
|
673
|
-
}
|
674
|
-
|
675
|
-
SOF_LogOut();
|
676
|
-
return true;
|
677
|
-
}
|
678
|
-
|
679
|
-
/**
|
680
|
-
* 获取签名结果
|
681
|
-
*/
|
682
|
-
this.Hunca_GetSignData = function () {
|
683
|
-
return signResultSignData;
|
684
|
-
}
|
685
|
-
|
686
|
-
/**
|
687
|
-
* 获取签名证书
|
688
|
-
*/
|
689
|
-
this.Hunca_GetSignCert = function () {
|
690
|
-
return signResultCert;
|
691
|
-
}
|
692
|
-
|
693
|
-
this.Hunca_GetSignCertSn = function () {
|
694
|
-
return certSn
|
695
|
-
}
|
696
|
-
|
697
|
-
this.Hunca_GetSignCertSubject = function (){
|
698
|
-
return cert_subject;
|
699
|
-
}
|
700
|
-
|
701
|
-
this.Hunca_GetValidTime = function(){
|
702
|
-
return cert_validTime;
|
703
|
-
}
|
704
|
-
|
705
|
-
this.HUnca_GetNotBeforeTime = function(){
|
706
|
-
return cert_notbeforetime;
|
707
|
-
}
|
708
|
-
/**
|
709
|
-
* 处理设备中签名证书信息
|
710
|
-
* @param {*} userName
|
711
|
-
*/
|
712
|
-
this.Hunca_DealCertInfo = function (userName) {
|
713
|
-
var tokenInfo = null; //Ukey设备信息
|
714
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
715
|
-
var certBase64 = null; //签名证书值
|
716
|
-
|
717
|
-
LAST_ERRORSTRING = "";
|
718
|
-
// eslint-disable-next-line no-undef
|
719
|
-
signResultInfo = null;
|
720
|
-
// eslint-disable-next-line no-undef
|
721
|
-
certInfo = new Object();
|
722
|
-
//设备名称为空
|
723
|
-
if (null == userName || userName.length == null) {
|
724
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
725
|
-
return false;
|
726
|
-
}
|
727
|
-
|
728
|
-
//查找匹配的设备序列号
|
729
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
730
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
731
|
-
return false;
|
732
|
-
}
|
733
|
-
|
734
|
-
//索引设备编号
|
735
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
736
|
-
tempTokenInfo = tokenInfoList[i];
|
737
|
-
if (tempTokenInfo.userName == userName) {
|
738
|
-
tokenInfo = tempTokenInfo;
|
739
|
-
break;
|
740
|
-
}
|
741
|
-
}
|
742
|
-
|
743
|
-
//如果所选择的设备不存在
|
744
|
-
if (null == tokenInfo) {
|
745
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
746
|
-
return false;
|
747
|
-
}
|
748
|
-
|
749
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
750
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
751
|
-
return false;
|
752
|
-
}
|
753
|
-
|
754
|
-
//实例化设备
|
755
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
756
|
-
return false;
|
757
|
-
}
|
758
|
-
|
759
|
-
//导出证书
|
760
|
-
certBase64 = SOF_ExportUserCert(tokenInfo.containerName, KEY_SPEC_TYPE_SIGN);
|
761
|
-
if (null == certBase64 || certBase64.length == 0) {
|
762
|
-
return false;
|
763
|
-
}
|
764
|
-
|
765
|
-
SOF_GetCertInfo(certBase64);
|
766
|
-
SOF_LogOut();
|
767
|
-
return true;
|
768
|
-
}
|
769
|
-
|
770
|
-
/**
|
771
|
-
* 对数据进行数字信封加密
|
772
|
-
* @param {string} inData 待加密原文
|
773
|
-
* @param {string} userName Ukey用户名称
|
774
|
-
* @param {string} EncryptMethod 对称加密方式
|
775
|
-
* @param {string} EncryptIV 加密IV值
|
776
|
-
* @returns {string} "",加密失败;非空,加密成功
|
777
|
-
*/
|
778
|
-
this.Hunca_EncryptDataPKCS7 = function (inData, userName, EncryptMethod, EncryptIV) {
|
779
|
-
var tokenInfo = null; //Ukey设备信息
|
780
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
781
|
-
var certBase64 = null; //签名证书值
|
782
|
-
var m_EncryptMethod = "",
|
783
|
-
m_EncryptIV = "";
|
784
|
-
|
785
|
-
LAST_ERRORSTRING = "";
|
786
|
-
// eslint-disable-next-line no-undef
|
787
|
-
signResultInfo = null;
|
788
|
-
// eslint-disable-next-line no-undef
|
789
|
-
certInfo = new Object();
|
790
|
-
|
791
|
-
|
792
|
-
//设备名称为空
|
793
|
-
if (null == userName || userName.length == null) {
|
794
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
795
|
-
return "";
|
796
|
-
}
|
797
|
-
|
798
|
-
//查找匹配的设备序列号
|
799
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
800
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
801
|
-
return "";
|
802
|
-
}
|
803
|
-
|
804
|
-
//索引设备编号
|
805
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
806
|
-
tempTokenInfo = tokenInfoList[i];
|
807
|
-
if (tempTokenInfo.userName == userName) {
|
808
|
-
tokenInfo = tempTokenInfo;
|
809
|
-
break;
|
810
|
-
}
|
811
|
-
}
|
812
|
-
|
813
|
-
//如果所选择的设备不存在
|
814
|
-
if (null == tokenInfo) {
|
815
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
816
|
-
return "";
|
817
|
-
}
|
818
|
-
|
819
|
-
//加载链接库
|
820
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
821
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
822
|
-
return "";
|
823
|
-
}
|
824
|
-
|
825
|
-
//实例化设备
|
826
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
827
|
-
return "";
|
828
|
-
}
|
829
|
-
|
830
|
-
//导出加密证书
|
831
|
-
certBase64 = SOF_ExportUserCert(tokenInfo.containerName, KEY_SPEC_TYPE_ENCRYPT);
|
832
|
-
if (null == certBase64 || certBase64.length == 0) {
|
833
|
-
return "";
|
834
|
-
}
|
835
|
-
|
836
|
-
//设置加密方式
|
837
|
-
|
838
|
-
m_EncryptMethod = EncryptMethod + "";
|
839
|
-
m_EncryptIV = EncryptIV + "";
|
840
|
-
|
841
|
-
if (m_EncryptMethod == null || m_EncryptMethod.length == 0) {
|
842
|
-
m_EncryptMethod = SGD_SM4_ECB;
|
843
|
-
m_EncryptIV = "";
|
844
|
-
}
|
845
|
-
|
846
|
-
if (!SOF_SetEncryptMethodAndIV(m_EncryptMethod, m_EncryptIV)) {
|
847
|
-
return "";
|
848
|
-
}
|
849
|
-
|
850
|
-
//对数据进行加密
|
851
|
-
// eslint-disable-next-line no-undef
|
852
|
-
encryptData = SOF_EncryptDataPKCS7(certBase64, inData);
|
853
|
-
|
854
|
-
SOF_LogOut();
|
855
|
-
|
856
|
-
// eslint-disable-next-line no-undef
|
857
|
-
return encryptData;
|
858
|
-
}
|
859
|
-
|
860
|
-
/**
|
861
|
-
* 对密文进行数字信封解密操作
|
862
|
-
* @param {string} encryptData 待解密密文
|
863
|
-
* @param {string} userName Ukey用户名称
|
864
|
-
* @param {string} userPin Ukey用户PIN码
|
865
|
-
* @param {string} EncryptMethod 对称加密方式
|
866
|
-
* @param {string} EncryptIV 加密IV值
|
867
|
-
* @returns {string} "",加密失败;非空,加密成功
|
868
|
-
*/
|
869
|
-
this.Hunca_DecryptDataPKCS7 = function (encryptData, userName, userPin, EncryptMethod, EncryptIV) {
|
870
|
-
var tokenInfo = null; //Ukey设备信息
|
871
|
-
var tempTokenInfo = null; //临时设备信息,循环遍历用
|
872
|
-
var m_EncryptMethod = "",
|
873
|
-
m_EncryptIV = "";
|
874
|
-
var m_EncryptData = "";
|
875
|
-
var m_DecryptData = "";
|
876
|
-
var resData = "";
|
877
|
-
|
878
|
-
LAST_ERRORSTRING = "";
|
879
|
-
// eslint-disable-next-line no-undef
|
880
|
-
signResultInfo = null;
|
881
|
-
// eslint-disable-next-line no-undef
|
882
|
-
certInfo = new Object();
|
883
|
-
|
884
|
-
|
885
|
-
m_EncryptData = "" + encryptData;
|
886
|
-
//设备名称为空
|
887
|
-
if (null == userName || userName.length == null) {
|
888
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERNAME_IS_NULL;
|
889
|
-
return "";
|
890
|
-
}
|
891
|
-
|
892
|
-
//查找匹配的设备序列号
|
893
|
-
if (null == tokenInfoList || tokenInfoList.length == 0) {
|
894
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
895
|
-
return "";
|
896
|
-
}
|
897
|
-
|
898
|
-
//索引设备编号
|
899
|
-
for (var i = 0; i < tokenInfoList.length; i++) {
|
900
|
-
tempTokenInfo = tokenInfoList[i];
|
901
|
-
if (tempTokenInfo.userName == userName) {
|
902
|
-
tokenInfo = tempTokenInfo;
|
903
|
-
break;
|
904
|
-
}
|
905
|
-
}
|
906
|
-
|
907
|
-
//如果所选择的设备不存在
|
908
|
-
if (null == tokenInfo) {
|
909
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_NOT_EXIT;
|
910
|
-
return "";
|
911
|
-
}
|
912
|
-
|
913
|
-
//加载链接库
|
914
|
-
if (!SOF_LoadLibrary(tokenInfo.libraryName)) {
|
915
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_LIBRAY;
|
916
|
-
return "";
|
917
|
-
}
|
918
|
-
|
919
|
-
//实例化设备
|
920
|
-
if (!SOF_GetDeviceInstance(tokenInfo.serial)) {
|
921
|
-
return "";
|
922
|
-
}
|
923
|
-
|
924
|
-
//登陆应用
|
925
|
-
if (!SOF_Login(userPin)) {
|
926
|
-
return "";
|
927
|
-
}
|
928
|
-
|
929
|
-
//设置加密方式
|
930
|
-
m_EncryptMethod = EncryptMethod + "";
|
931
|
-
m_EncryptIV = EncryptIV + "";
|
932
|
-
if (m_EncryptMethod == null || m_EncryptMethod.length == 0) {
|
933
|
-
m_EncryptMethod = SGD_SM4_ECB;
|
934
|
-
m_EncryptIV = "";
|
935
|
-
}
|
936
|
-
|
937
|
-
if (!SOF_SetEncryptMethodAndIV(m_EncryptMethod, m_EncryptIV)) {
|
938
|
-
return "";
|
939
|
-
}
|
940
|
-
|
941
|
-
m_DecryptData = SOF_DecryptDataPKCS7(tokenInfo.containerName, KEY_SPEC_TYPE_ENCRYPT, m_EncryptData);
|
942
|
-
if (m_DecryptData.length == 0) {
|
943
|
-
return "";
|
944
|
-
}
|
945
|
-
|
946
|
-
try {
|
947
|
-
// eslint-disable-next-line no-undef
|
948
|
-
resData = _Base64decode(m_DecryptData);
|
949
|
-
} catch (e) {
|
950
|
-
resData = m_DecryptData;
|
951
|
-
LAST_ERRORSTRING = "解密失败:Base64解码失败";
|
952
|
-
}
|
953
|
-
|
954
|
-
return resData;
|
955
|
-
}
|
956
|
-
|
957
|
-
/**
|
958
|
-
* 加载底层文件
|
959
|
-
* @returns {boolean} true,加载成功;false加载失败;
|
960
|
-
*/
|
961
|
-
function SOF_LoadLibrary(libraryName) {
|
962
|
-
var resultCode = 0;
|
963
|
-
if (libraryName == "GM3000") {
|
964
|
-
resultCode = token.SOF_LoadLibrary(token.GM3000);
|
965
|
-
}
|
966
|
-
else if (libraryName == "HT"){
|
967
|
-
resultCode = token.SOF_LoadLibrary(token.HT);
|
968
|
-
}
|
969
|
-
else if (libraryName == "SJK1137") {
|
970
|
-
resultCode = token.SOF_LoadLibrary(token.SJK1137);
|
971
|
-
}
|
972
|
-
|
973
|
-
if (resultCode != 0) {
|
974
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_LOADLIBRARY + token.SOF_GetLastError();
|
975
|
-
return false;
|
976
|
-
}
|
977
|
-
return true;
|
978
|
-
}
|
979
|
-
|
980
|
-
/**
|
981
|
-
* 枚举设备
|
982
|
-
*/
|
983
|
-
function SOF_EnumDevice() {
|
984
|
-
var deviceNameList = "";
|
985
|
-
|
986
|
-
deviceNameList = token.SOF_EnumDevice();
|
987
|
-
|
988
|
-
//检测是否插入USBKey
|
989
|
-
if (null == deviceNameList || deviceNameList.length == 0) {
|
990
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_FIND_UKEY;
|
991
|
-
return null;
|
992
|
-
}
|
993
|
-
|
994
|
-
return deviceNameList;
|
995
|
-
}
|
996
|
-
|
997
|
-
/**
|
998
|
-
* 实例化设备,为后续一系列操作准备
|
999
|
-
* @param {string} deviceName 设备名称
|
1000
|
-
*/
|
1001
|
-
function SOF_GetDeviceInstance(deviceName) {
|
1002
|
-
var resultCode = 0;
|
1003
|
-
|
1004
|
-
resultCode = token.SOF_GetDeviceInstance(deviceName, "");
|
1005
|
-
//设备未正常实例化
|
1006
|
-
if (resultCode != 0) {
|
1007
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_NOT_INSTANCE_DEVICE + token.SOF_GetLastError();
|
1008
|
-
return false;
|
1009
|
-
}
|
1010
|
-
return true;
|
1011
|
-
}
|
1012
|
-
|
1013
|
-
/**
|
1014
|
-
* 枚举应用中的容器
|
1015
|
-
*/
|
1016
|
-
function SOF_GetUserList() {
|
1017
|
-
var userList = "";
|
1018
|
-
|
1019
|
-
userList = token.SOF_GetUserList();
|
1020
|
-
if (null == userList || userList.length == 0) {
|
1021
|
-
LAST_ERRORSTRING = "USBkey中未找到证书!";
|
1022
|
-
return null;
|
1023
|
-
}
|
1024
|
-
|
1025
|
-
return userList;
|
1026
|
-
}
|
1027
|
-
|
1028
|
-
/**
|
1029
|
-
* 登陆应用,验证密码是否正确
|
1030
|
-
* @param {string} userPin
|
1031
|
-
*/
|
1032
|
-
function SOF_Login(userPin) {
|
1033
|
-
var resultCode = 0;
|
1034
|
-
var m_userPin = "" + userPin;
|
1035
|
-
var RetryCount = 0;
|
1036
|
-
|
1037
|
-
if (null == m_userPin || m_userPin.length == 0) {
|
1038
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_LENGTH;
|
1039
|
-
return false;
|
1040
|
-
}
|
1041
|
-
|
1042
|
-
if (m_userPin.length < 4 || m_userPin.length > 16) {
|
1043
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_LENGTH;
|
1044
|
-
return false;
|
1045
|
-
}
|
1046
|
-
|
1047
|
-
resultCode = token.SOF_Login(m_userPin);
|
1048
|
-
if (resultCode != 0) {
|
1049
|
-
RetryCount = SOF_GetPinRetryCount();
|
1050
|
-
if (RetryCount > 0) {
|
1051
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_IS_ERROR + ",还剩 " + RetryCount + " 次重试机会!";
|
1052
|
-
} else {
|
1053
|
-
LAST_ERRORSTRING = "UKey已经锁死,请联系管理员进行解锁!"
|
1054
|
-
}
|
1055
|
-
return false;
|
1056
|
-
}
|
1057
|
-
return true
|
1058
|
-
}
|
1059
|
-
|
1060
|
-
/**
|
1061
|
-
* 修改UKey密码
|
1062
|
-
* @param {*} oldUserPin
|
1063
|
-
* @param {*} newUserPin
|
1064
|
-
*/
|
1065
|
-
function SOF_ChangeUserPin(oldUserPin, newUserPin) {
|
1066
|
-
var resultCode = 0;
|
1067
|
-
var m_oldUserPin = "" + oldUserPin;
|
1068
|
-
var m_newUserPin = "" + newUserPin;
|
1069
|
-
var RetryCount = 0;
|
1070
|
-
|
1071
|
-
if (null == m_oldUserPin || m_oldUserPin.length == 0) {
|
1072
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_LENGTH;
|
1073
|
-
return false;
|
1074
|
-
}
|
1075
|
-
|
1076
|
-
if (null == m_newUserPin || m_newUserPin.length == 0) {
|
1077
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_LENGTH;
|
1078
|
-
return false;
|
1079
|
-
}
|
1080
|
-
|
1081
|
-
if (m_oldUserPin.length < 4 || m_oldUserPin.length > 16) {
|
1082
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_LENGTH;
|
1083
|
-
return false;
|
1084
|
-
}
|
1085
|
-
|
1086
|
-
if (m_newUserPin.length < 4 || m_newUserPin.length > 16) {
|
1087
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_LENGTH;
|
1088
|
-
return false;
|
1089
|
-
}
|
1090
|
-
|
1091
|
-
resultCode = token.SOF_ChangePassWd(m_oldUserPin, m_newUserPin);
|
1092
|
-
if (resultCode != 0) {
|
1093
|
-
RetryCount = SOF_GetPinRetryCount();
|
1094
|
-
if (RetryCount > 0) {
|
1095
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_USERPIN_CHANGE_ERROR + ",还剩 " + RetryCount + " 次重试机会!";
|
1096
|
-
} else {
|
1097
|
-
LAST_ERRORSTRING = "UKey已经锁死,请联系管理员进行解锁!"
|
1098
|
-
}
|
1099
|
-
return false;
|
1100
|
-
}
|
1101
|
-
return true;
|
1102
|
-
}
|
1103
|
-
|
1104
|
-
/**
|
1105
|
-
* 返回重试次数
|
1106
|
-
*/
|
1107
|
-
function SOF_GetPinRetryCount() {
|
1108
|
-
var retryCount = 0;
|
1109
|
-
retryCount = token.SOF_GetPinRetryCount();
|
1110
|
-
return retryCount;
|
1111
|
-
}
|
1112
|
-
|
1113
|
-
function SOF_GetDeviceNumber(){
|
1114
|
-
var deviceNumber = null;
|
1115
|
-
deviceNumber = token.SOF_GetDeviceInfo(token.SGD_DEVICE_SERIAL_NUMBER);
|
1116
|
-
return deviceNumber;
|
1117
|
-
}
|
1118
|
-
|
1119
|
-
/**
|
1120
|
-
* 导出证书值
|
1121
|
-
* @param {string} containerName 容器名称
|
1122
|
-
* @param {int} keySec 证书用途
|
1123
|
-
*/
|
1124
|
-
function SOF_ExportUserCert(containerName, keySec) {
|
1125
|
-
var certBase64;
|
1126
|
-
certBase64 = token.SOF_ExportUserCert(containerName, keySec);
|
1127
|
-
if (null == certBase64 || certBase64.length == 0) {
|
1128
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_KEY_EXPORT_CERT;
|
1129
|
-
return null;
|
1130
|
-
}
|
1131
|
-
return certBase64;
|
1132
|
-
}
|
1133
|
-
|
1134
|
-
/**
|
1135
|
-
* 设置加密算法
|
1136
|
-
* @param {*} EncryptMethod 设置加密算法
|
1137
|
-
* @param {*} EncryptIV 设置IV值
|
1138
|
-
*/
|
1139
|
-
function SOF_SetEncryptMethodAndIV(EncryptMethod, EncryptIV) {
|
1140
|
-
var resCode = 1;
|
1141
|
-
|
1142
|
-
if (EncryptMethod == undefined || EncryptMethod == null) {
|
1143
|
-
LAST_ERRORSTRING = "请设置加密方式!";
|
1144
|
-
return false;
|
1145
|
-
}
|
1146
|
-
|
1147
|
-
// eslint-disable-next-line no-undef
|
1148
|
-
resCode = token.SOF_SetEncryptMethodAndIV(EncryptMethod, _Base64encode(EncryptIV));
|
1149
|
-
if (resCode != 0) {
|
1150
|
-
LAST_ERRORSTRING = token.SOF_GetLastError();
|
1151
|
-
return false;
|
1152
|
-
}
|
1153
|
-
return true;
|
1154
|
-
}
|
1155
|
-
|
1156
|
-
/**
|
1157
|
-
* 设置签名算法
|
1158
|
-
* @param {}} digestMethod
|
1159
|
-
*/
|
1160
|
-
function SOF_SetDigestMethod(digestMethod) {
|
1161
|
-
var resultCode = 0;
|
1162
|
-
resultCode = token.SOF_SetDigestMethod(digestMethod);
|
1163
|
-
if (resultCode != 0) {
|
1164
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_SET_DIGEST_METHOD_ERROR;
|
1165
|
-
return false;
|
1166
|
-
}
|
1167
|
-
|
1168
|
-
return true;
|
1169
|
-
}
|
1170
|
-
|
1171
|
-
/**
|
1172
|
-
* 设置默认USERID
|
1173
|
-
*/
|
1174
|
-
function SOF_SetUserID() {
|
1175
|
-
var resultCode = 0;
|
1176
|
-
resultCode = token.SOF_SetUserID(USER_ID);
|
1177
|
-
if (resultCode != 0) {
|
1178
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_SET_USERID_ERROR;
|
1179
|
-
return false;
|
1180
|
-
}
|
1181
|
-
return true;
|
1182
|
-
}
|
1183
|
-
|
1184
|
-
/**
|
1185
|
-
* 数字信封加密
|
1186
|
-
* @param {String} Base64EncodeCert 加密证书值
|
1187
|
-
* @param {String} inData 待加密原文
|
1188
|
-
* @returns {*} "",表示加密失败;非空,加密成功
|
1189
|
-
*/
|
1190
|
-
function SOF_EncryptDataPKCS7(Base64EncodeCert, inData) {
|
1191
|
-
var encryptData = "";
|
1192
|
-
var inDataBase64 = "";
|
1193
|
-
var m_inData = "";
|
1194
|
-
|
1195
|
-
m_inData = "" + inData;
|
1196
|
-
if (m_inData.length == 0) {
|
1197
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_ENCRYPT_DATA_IS_NULL;
|
1198
|
-
return "";
|
1199
|
-
}
|
1200
|
-
|
1201
|
-
// eslint-disable-next-line no-undef
|
1202
|
-
inDataBase64 = _Base64encode(m_inData)
|
1203
|
-
encryptData = token.SOF_EncryptDataPKCS7(Base64EncodeCert, inDataBase64, inData.length);
|
1204
|
-
|
1205
|
-
if (encryptData == null || encryptData.length == 0) {
|
1206
|
-
LAST_ERRORSTRING = "加密失败," + token.SOF_GetLastError();
|
1207
|
-
return "";
|
1208
|
-
}
|
1209
|
-
return encryptData;
|
1210
|
-
}
|
1211
|
-
|
1212
|
-
/**
|
1213
|
-
* 数字信封解密
|
1214
|
-
* @param {*} containerName 应用名称
|
1215
|
-
* @param {int} cerType
|
1216
|
-
* @param {*} encrypedData
|
1217
|
-
*/
|
1218
|
-
function SOF_DecryptDataPKCS7(containerName, cerType, encrypedData) {
|
1219
|
-
var m_EncrypedData = "",
|
1220
|
-
m_DecryptData = "";
|
1221
|
-
|
1222
|
-
m_EncrypedData = "" + encrypedData;
|
1223
|
-
if (containerName == null || containerName.length == 0) {
|
1224
|
-
LAST_ERRORSTRING = "应用名称不能为空!";
|
1225
|
-
return "";
|
1226
|
-
}
|
1227
|
-
|
1228
|
-
if (m_EncrypedData.length == 0) {
|
1229
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_DECRYPT_DATA_IS_NULL;
|
1230
|
-
return "";
|
1231
|
-
}
|
1232
|
-
|
1233
|
-
try {
|
1234
|
-
m_DecryptData = token.SOF_DecryptDataPKCS7(containerName, cerType, m_EncrypedData);
|
1235
|
-
} catch (e) {
|
1236
|
-
m_DecryptData = "";
|
1237
|
-
}
|
1238
|
-
if (undefined == m_DecryptData || m_DecryptData == null || m_DecryptData == "") {
|
1239
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_DECRYPT_DATA_IS_ERROR;
|
1240
|
-
return "";
|
1241
|
-
}
|
1242
|
-
|
1243
|
-
return m_DecryptData;
|
1244
|
-
}
|
1245
|
-
|
1246
|
-
/**
|
1247
|
-
* 数据签名
|
1248
|
-
* @param {*} containerName
|
1249
|
-
* @param {*} ulKeySpec
|
1250
|
-
* @param {*} data
|
1251
|
-
* @param {*} certBase64
|
1252
|
-
*/
|
1253
|
-
function SOF_SignData(containerName, ulKeySpec, data, certBase64) {
|
1254
|
-
var signData = null;
|
1255
|
-
var b64Data = null;
|
1256
|
-
var m_data = "" + data;
|
1257
|
-
|
1258
|
-
|
1259
|
-
if (null == m_data || m_data.length == 0) {
|
1260
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_SIGN_ORIGINALDATA_IS_NULL;
|
1261
|
-
return false;
|
1262
|
-
}
|
1263
|
-
|
1264
|
-
// eslint-disable-next-line no-undef
|
1265
|
-
b64Data = _Base64encode(m_data);
|
1266
|
-
// eslint-disable-next-line no-undef
|
1267
|
-
signData = token.SOF_SignData(containerName, ulKeySpec, _Base64encode(b64Data), b64Data.length)
|
1268
|
-
if (null == signData || signData.length == 0) {
|
1269
|
-
// eslint-disable-next-line no-undef
|
1270
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_SIGN_ERROR + SOF_GetLastError();
|
1271
|
-
return false;
|
1272
|
-
}
|
1273
|
-
|
1274
|
-
signResultCert = certBase64;
|
1275
|
-
signResultSignData = signData;
|
1276
|
-
|
1277
|
-
return true;
|
1278
|
-
}
|
1279
|
-
|
1280
|
-
/**
|
1281
|
-
* 导出证书
|
1282
|
-
* @param {*} certBase64
|
1283
|
-
*/
|
1284
|
-
function SOF_GetCertInfo(certBase64) {
|
1285
|
-
var str = null;
|
1286
|
-
var subject = null;
|
1287
|
-
var tmpList = null;
|
1288
|
-
var validTime = null;
|
1289
|
-
var notBeforetime = null;
|
1290
|
-
var key, value;
|
1291
|
-
|
1292
|
-
if (null == certBase64 || certBase64.length == 0) {
|
1293
|
-
return false;
|
1294
|
-
}
|
1295
|
-
|
1296
|
-
cert_subject_GN = "";
|
1297
|
-
certSn = "";
|
1298
|
-
cert_subject = "";
|
1299
|
-
|
1300
|
-
str = token.SOF_GetCertInfo(certBase64, token.SGD_CERT_SERIAL);
|
1301
|
-
certSn = hexToDec(str);
|
1302
|
-
|
1303
|
-
subject = token.SOF_GetCertInfo(certBase64, token.SGD_CERT_SUBJECT);
|
1304
|
-
cert_subject = subject;
|
1305
|
-
|
1306
|
-
validTime = token.SOF_GetCertInfo(certBase64,token.SGD_CERT_VALID_TIME);
|
1307
|
-
cert_validTime = validTime;
|
1308
|
-
|
1309
|
-
notBeforetime = token.SOF_GetCertInfo(certBase64,token.SGD_CERT_NOT_BEFORE);
|
1310
|
-
cert_notbeforetime = notBeforetime;
|
1311
|
-
|
1312
|
-
tmpList = subject.split(',');
|
1313
|
-
for (var i = 0; i < tmpList.length; i++) {
|
1314
|
-
if (tmpList[i].indexOf("=") == -1) {
|
1315
|
-
continue;
|
1316
|
-
}
|
1317
|
-
|
1318
|
-
key = tmpList[i].split('=')[0];
|
1319
|
-
value = tmpList[i].split('=')[1];
|
1320
|
-
|
1321
|
-
if (key == 'GN') {
|
1322
|
-
cert_subject_GN = value;
|
1323
|
-
break;
|
1324
|
-
}
|
1325
|
-
}
|
1326
|
-
return true;
|
1327
|
-
}
|
1328
|
-
|
1329
|
-
|
1330
|
-
|
1331
|
-
/**
|
1332
|
-
* 登出UKey
|
1333
|
-
*/
|
1334
|
-
function SOF_LogOut() {
|
1335
|
-
token.SOF_LogOut();
|
1336
|
-
}
|
1337
|
-
|
1338
|
-
/**
|
1339
|
-
* 生成解锁请求
|
1340
|
-
*/
|
1341
|
-
function SOF_GenRemoteUnblockRequest() {
|
1342
|
-
var request = token.SOF_GenRemoteUnblockRequest();
|
1343
|
-
if (request == null || request == "") {
|
1344
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_GET_REMOTEUNLOCKREQUEST_FAIL;
|
1345
|
-
return "";
|
1346
|
-
}
|
1347
|
-
|
1348
|
-
return request;
|
1349
|
-
}
|
1350
|
-
|
1351
|
-
function SOF_RemoteUnlockPIN(response) {
|
1352
|
-
var result = false;
|
1353
|
-
|
1354
|
-
if (null == response || response.length == 0) {
|
1355
|
-
LAST_ERRORSTRING = "解锁失败解:响应不能为空!";
|
1356
|
-
return false;
|
1357
|
-
}
|
1358
|
-
|
1359
|
-
result = token.SOF_RemoteUnblockPIN(response);
|
1360
|
-
if (result != 0) {
|
1361
|
-
LAST_ERRORSTRING = ERROR_MESSAGE_REMOTE_UNLOCK_FAIL;
|
1362
|
-
return false;
|
1363
|
-
} else {
|
1364
|
-
return true;
|
1365
|
-
}
|
1366
|
-
}
|
1367
|
-
|
1368
|
-
function add(x, y, base) {
|
1369
|
-
var z = [];
|
1370
|
-
var n = Math.max(x.length, y.length);
|
1371
|
-
var carry = 0;
|
1372
|
-
var i = 0;
|
1373
|
-
while (i < n || carry) {
|
1374
|
-
var xi = i < x.length ? x[i] : 0;
|
1375
|
-
var yi = i < y.length ? y[i] : 0;
|
1376
|
-
var zi = carry + xi + yi;
|
1377
|
-
z.push(zi % base);
|
1378
|
-
carry = Math.floor(zi / base);
|
1379
|
-
i++;
|
1380
|
-
}
|
1381
|
-
return z;
|
1382
|
-
}
|
1383
|
-
|
1384
|
-
function multiplyByNumber(num, x, base) {
|
1385
|
-
if (num < 0) return null;
|
1386
|
-
if (num == 0) return [];
|
1387
|
-
|
1388
|
-
var result = [];
|
1389
|
-
var power = x;
|
1390
|
-
// eslint-disable-next-line no-constant-condition
|
1391
|
-
while (true) {
|
1392
|
-
if (num & 1) {
|
1393
|
-
result = add(result, power, base);
|
1394
|
-
}
|
1395
|
-
num = num >> 1;
|
1396
|
-
if (num === 0) break;
|
1397
|
-
power = add(power, power, base);
|
1398
|
-
}
|
1399
|
-
|
1400
|
-
return result;
|
1401
|
-
}
|
1402
|
-
|
1403
|
-
function parseToDigitsArray(str, base) {
|
1404
|
-
var digits = str.split('');
|
1405
|
-
var ary = [];
|
1406
|
-
for (var i = digits.length - 1; i >= 0; i--) {
|
1407
|
-
var n = parseInt(digits[i], base);
|
1408
|
-
if (isNaN(n)) return null;
|
1409
|
-
ary.push(n);
|
1410
|
-
}
|
1411
|
-
return ary;
|
1412
|
-
}
|
1413
|
-
|
1414
|
-
|
1415
|
-
function convertBase(str, fromBase, toBase) {
|
1416
|
-
var digits = parseToDigitsArray(str, fromBase);
|
1417
|
-
if (digits === null) return null;
|
1418
|
-
|
1419
|
-
var outArray = [];
|
1420
|
-
var power = [1];
|
1421
|
-
for (var i = 0; i < digits.length; i++) {
|
1422
|
-
// invariant: at this point, fromBase^i = power
|
1423
|
-
if (digits[i]) {
|
1424
|
-
outArray = add(outArray, multiplyByNumber(digits[i], power, toBase), toBase);
|
1425
|
-
}
|
1426
|
-
power = multiplyByNumber(fromBase, power, toBase);
|
1427
|
-
}
|
1428
|
-
|
1429
|
-
var out = '';
|
1430
|
-
for (let i = outArray.length - 1; i >= 0; i--) {
|
1431
|
-
out += outArray[i].toString(toBase);
|
1432
|
-
}
|
1433
|
-
return out;
|
1434
|
-
}
|
1435
|
-
|
1436
|
-
function decToHex(decStr) {
|
1437
|
-
var hex = convertBase(decStr, 10, 16);
|
1438
|
-
return hex ? '0x' + hex : null;
|
1439
|
-
}
|
1440
|
-
|
1441
|
-
|
1442
|
-
function hexToDec(hexStr) {
|
1443
|
-
if (hexStr.substring(0, 2) === '0x') hexStr = hexStr.substring(2);
|
1444
|
-
hexStr = hexStr.toLowerCase();
|
1445
|
-
return convertBase(hexStr, 16, 10);
|
1446
|
-
}
|
1447
|
-
}
|