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