yc-ui2 0.2.2-beta2 → 0.2.2-beta3

Sign up to get free protection for your applications and to get access to all the features.
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,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
- }