n20-common-lib 2.3.23 → 2.4.0-1replenish
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
CHANGED
|
@@ -245,7 +245,7 @@ export default {
|
|
|
245
245
|
item.options = opts || []
|
|
246
246
|
}
|
|
247
247
|
},
|
|
248
|
-
getRemote() {
|
|
248
|
+
getRemote(flag) {
|
|
249
249
|
getColumns(this.pageId, this.userNo, this.filterLT).then((list) => {
|
|
250
250
|
if (list) {
|
|
251
251
|
this.remoteList = list
|
|
@@ -253,7 +253,7 @@ export default {
|
|
|
253
253
|
let defaultList = this.filterLT.filter((col) => col.isDefault)
|
|
254
254
|
this.remoteList = defaultList.length ? defaultList : this.filterLT.slice(0, this.defaultShow)
|
|
255
255
|
}
|
|
256
|
-
this.showPop = true
|
|
256
|
+
this.showPop = flag || true
|
|
257
257
|
})
|
|
258
258
|
},
|
|
259
259
|
setRemoteChange(list) {
|
|
@@ -44,16 +44,16 @@
|
|
|
44
44
|
}}</el-button>
|
|
45
45
|
<!-- YSCW-end -->
|
|
46
46
|
<el-dropdown class="m-l-lg" @command="setLang">
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
<el-tooltip v-if="!hideLang" :content="'语言切换' | $lc">
|
|
48
|
+
<span
|
|
49
|
+
class="set-user-btn iconfont header-color"
|
|
50
|
+
:class="{
|
|
51
|
+
'icon-zhongwen': langVal === 'zh-cn',
|
|
52
|
+
'icon-fanti': langVal === 'zh-hk',
|
|
53
|
+
'icon-yuyanqiehuan': langVal === 'en'
|
|
54
|
+
}"
|
|
55
|
+
></span>
|
|
56
|
+
</el-tooltip>
|
|
57
57
|
<el-dropdown-menu slot="dropdown">
|
|
58
58
|
<el-dropdown-item command="zh-cn"
|
|
59
59
|
><i class="iconfont icon-zhongwen f-s-icon"></i>{{ '简体中文' | $lc }}</el-dropdown-item
|
|
@@ -1,520 +1,520 @@
|
|
|
1
|
-
/* eslint-disable no-useless-escape */
|
|
2
|
-
/* eslint-disable no-redeclare */
|
|
3
|
-
/* eslint-disable eqeqeq */
|
|
4
|
-
import {Message} from 'element-ui'
|
|
5
|
-
|
|
6
|
-
const chrome = window.chrome
|
|
7
|
-
|
|
8
|
-
nmCryptokit.chromeExtension = 'hdnlhmckkfofnfnjjpcbmnmfbcjjhpig'
|
|
9
|
-
nmCryptokit.edgeExtension = 'afifobadnhlfflniehieipibalnafkkj'
|
|
10
|
-
nmCryptokit.productID = 'com.cfca.cryptokit.hbjtcw'
|
|
11
|
-
|
|
12
|
-
nmCryptokit.extensionName = nmCryptokit.productID + '.extension'
|
|
13
|
-
nmCryptokit.reqEventName = nmCryptokit.productID + '.request'
|
|
14
|
-
nmCryptokit.respEventName = nmCryptokit.productID + '.response'
|
|
15
|
-
|
|
16
|
-
nmCryptokit.Browser = {
|
|
17
|
-
IE: 'Internet Explorer',
|
|
18
|
-
Edge: 'Edge',
|
|
19
|
-
Edg: 'Edge(Chromium)',
|
|
20
|
-
Chrome: 'Chrome',
|
|
21
|
-
Safari: 'Safari',
|
|
22
|
-
Firefox: 'Firefox'
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function GenerateRandomId() {
|
|
26
|
-
var charstring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
|
|
27
|
-
var maxPos = charstring.length
|
|
28
|
-
var randomId = ''
|
|
29
|
-
for (let i = 0; i < 10; i++) {
|
|
30
|
-
randomId += charstring.charAt(Math.floor(Math.random() * maxPos))
|
|
31
|
-
}
|
|
32
|
-
return randomId
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function nmCryptokit(browser) {
|
|
36
|
-
this.browser = browser
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Encapsulate Chrome sendMessage callback to Promise
|
|
40
|
-
nmCryptokit.SendMessageforChrome = function (request) {
|
|
41
|
-
return new Promise(function (resolve, reject) {
|
|
42
|
-
chrome.runtime.sendMessage(nmCryptokit.chromeExtension, request, function (response) {
|
|
43
|
-
if (response) {
|
|
44
|
-
if (response.errorcode == 0) {
|
|
45
|
-
resolve(response)
|
|
46
|
-
} else {
|
|
47
|
-
reject(response)
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
var result = {}
|
|
51
|
-
result.errorcode = 1
|
|
52
|
-
result.result = chrome.runtime.lastError.message
|
|
53
|
-
reject(result)
|
|
54
|
-
}
|
|
55
|
-
})
|
|
56
|
-
})
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Encapsulate Chrome sendMessage callback to Promise
|
|
60
|
-
nmCryptokit.SendMessageforEdge = function (request) {
|
|
61
|
-
return new Promise(function (resolve, reject) {
|
|
62
|
-
chrome.runtime.sendMessage(nmCryptokit.edgeExtension, request, function (response) {
|
|
63
|
-
if (response) {
|
|
64
|
-
if (response.errorcode == 0) {
|
|
65
|
-
resolve(response)
|
|
66
|
-
} else {
|
|
67
|
-
reject(response)
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
var result = {}
|
|
71
|
-
result.errorcode = 1
|
|
72
|
-
result.result = chrome.runtime.lastError.message
|
|
73
|
-
reject(result)
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
})
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Encapsulate Edge&Firefox event to Promise
|
|
80
|
-
nmCryptokit.SendMessagebyEvent = function (request) {
|
|
81
|
-
var event = new CustomEvent(nmCryptokit.reqEventName, {detail: request})
|
|
82
|
-
document.dispatchEvent(event)
|
|
83
|
-
|
|
84
|
-
return new Promise(function (resolve, reject) {
|
|
85
|
-
var responseEventName = nmCryptokit.respEventName
|
|
86
|
-
if (request.funcInfo != undefined && request.funcInfo.randomId != undefined)
|
|
87
|
-
responseEventName += '.' + request.funcInfo.randomId
|
|
88
|
-
|
|
89
|
-
document.addEventListener(
|
|
90
|
-
responseEventName,
|
|
91
|
-
function CallBack(e) {
|
|
92
|
-
document.removeEventListener(e.type, CallBack)
|
|
93
|
-
var eJson = JSON.parse(e.detail)
|
|
94
|
-
if (eJson != null && eJson.errorcode == 0) {
|
|
95
|
-
resolve(eJson)
|
|
96
|
-
} else {
|
|
97
|
-
reject(eJson)
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
false
|
|
101
|
-
)
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
nmCryptokit.SendMessage = function (browser, requestJSON) {
|
|
106
|
-
if (nmCryptokit.Browser.Chrome == browser) {
|
|
107
|
-
return nmCryptokit.SendMessageforChrome(requestJSON)
|
|
108
|
-
} else if (nmCryptokit.Browser.Edg == browser) {
|
|
109
|
-
return nmCryptokit.SendMessageforEdge(requestJSON)
|
|
110
|
-
} else {
|
|
111
|
-
return nmCryptokit.SendMessagebyEvent(requestJSON)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
nmCryptokit.checkExtension = function (browser) {
|
|
116
|
-
return new Promise(function (resolve, reject) {
|
|
117
|
-
var result = {}
|
|
118
|
-
if (nmCryptokit.Browser.Chrome == browser || nmCryptokit.Browser.Edg == browser) {
|
|
119
|
-
// chrome.runtime.sendMessage() could check extension existence.
|
|
120
|
-
if (chrome.runtime) {
|
|
121
|
-
resolve(browser)
|
|
122
|
-
} else {
|
|
123
|
-
result.errorcode = 2
|
|
124
|
-
result.result = 'Extension does not exist!'
|
|
125
|
-
reject(result)
|
|
126
|
-
}
|
|
127
|
-
} else if (nmCryptokit.Browser.Edge == browser || nmCryptokit.Browser.Firefox == browser) {
|
|
128
|
-
if (document.getElementById(nmCryptokit.extensionName)) {
|
|
129
|
-
resolve(browser)
|
|
130
|
-
} else {
|
|
131
|
-
result.errorcode = 2
|
|
132
|
-
result.result = 'Extension does not exist!'
|
|
133
|
-
reject(result)
|
|
134
|
-
}
|
|
135
|
-
} else {
|
|
136
|
-
result.errorcode = 3
|
|
137
|
-
result.result = 'Only support Chrome/Edge/Firefox'
|
|
138
|
-
reject(result)
|
|
139
|
-
}
|
|
140
|
-
})
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
nmCryptokit.prototype.init = function () {
|
|
144
|
-
var browser = this.browser
|
|
145
|
-
var that = this
|
|
146
|
-
|
|
147
|
-
return nmCryptokit
|
|
148
|
-
.checkExtension(browser)
|
|
149
|
-
.then(function (browser) {
|
|
150
|
-
var request = {}
|
|
151
|
-
request.action = 'connect'
|
|
152
|
-
request.host = nmCryptokit.productID
|
|
153
|
-
return nmCryptokit.SendMessage(browser, request)
|
|
154
|
-
})
|
|
155
|
-
.then(function () {
|
|
156
|
-
var request = {}
|
|
157
|
-
var funcInfo = {}
|
|
158
|
-
var randomId = GenerateRandomId()
|
|
159
|
-
|
|
160
|
-
funcInfo.function = 'GetLastErrorDesc'
|
|
161
|
-
funcInfo.params = null
|
|
162
|
-
funcInfo.randomId = randomId
|
|
163
|
-
|
|
164
|
-
request.action = 'invoke'
|
|
165
|
-
request.funcInfo = funcInfo
|
|
166
|
-
|
|
167
|
-
return nmCryptokit.SendMessage(that.browser, request)
|
|
168
|
-
})
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
nmCryptokit.prototype.uninit = function () {
|
|
172
|
-
var request = {}
|
|
173
|
-
request.action = 'disconnect'
|
|
174
|
-
request.host = nmCryptokit.productID
|
|
175
|
-
|
|
176
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
nmCryptokit.prototype.getExtensionVersion = function () {
|
|
180
|
-
var request = {}
|
|
181
|
-
var funcInfo = {}
|
|
182
|
-
|
|
183
|
-
funcInfo.function = 'getExtensionVersion'
|
|
184
|
-
funcInfo.params = null
|
|
185
|
-
request.action = 'getExtensionVersion'
|
|
186
|
-
request.funcInfo = funcInfo
|
|
187
|
-
|
|
188
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
nmCryptokit.prototype.getHostVersion = function () {
|
|
192
|
-
var request = {}
|
|
193
|
-
var funcInfo = {}
|
|
194
|
-
var randomId = GenerateRandomId()
|
|
195
|
-
|
|
196
|
-
funcInfo.function = 'GetVersion'
|
|
197
|
-
funcInfo.params = null
|
|
198
|
-
funcInfo.randomId = randomId
|
|
199
|
-
|
|
200
|
-
request.action = 'invoke'
|
|
201
|
-
request.funcInfo = funcInfo
|
|
202
|
-
|
|
203
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
nmCryptokit.prototype.SelectCertificate = function (
|
|
207
|
-
bstrSubjectDNFilter,
|
|
208
|
-
bstrIssuerDNFilter,
|
|
209
|
-
bstrSerialNumFilter,
|
|
210
|
-
bstrCSPNameList
|
|
211
|
-
) {
|
|
212
|
-
var request = {}
|
|
213
|
-
var funcInfo = {}
|
|
214
|
-
var paramArr = []
|
|
215
|
-
var randomId = GenerateRandomId()
|
|
216
|
-
|
|
217
|
-
paramArr.push(bstrSubjectDNFilter)
|
|
218
|
-
paramArr.push(bstrIssuerDNFilter)
|
|
219
|
-
paramArr.push(bstrSerialNumFilter)
|
|
220
|
-
paramArr.push(bstrCSPNameList)
|
|
221
|
-
|
|
222
|
-
funcInfo.function = 'SelectCertificate'
|
|
223
|
-
funcInfo.params = paramArr
|
|
224
|
-
funcInfo.randomId = randomId
|
|
225
|
-
|
|
226
|
-
request.action = 'invoke'
|
|
227
|
-
request.funcInfo = funcInfo
|
|
228
|
-
|
|
229
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
nmCryptokit.prototype.GetSignCertInfo = function (bstrInfoType) {
|
|
233
|
-
var request = {}
|
|
234
|
-
var funcInfo = {}
|
|
235
|
-
var paramArr = []
|
|
236
|
-
var randomId = GenerateRandomId()
|
|
237
|
-
|
|
238
|
-
paramArr.push(bstrInfoType)
|
|
239
|
-
|
|
240
|
-
funcInfo.function = 'getSignCertInfo'
|
|
241
|
-
funcInfo.params = paramArr
|
|
242
|
-
funcInfo.randomId = randomId
|
|
243
|
-
|
|
244
|
-
request.action = 'invoke'
|
|
245
|
-
request.funcInfo = funcInfo
|
|
246
|
-
|
|
247
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
nmCryptokit.prototype.SignMsgPKCS7 = function (bstrSourceData, bstrHashAlg, bWithSourceData) {
|
|
251
|
-
var request = {}
|
|
252
|
-
var funcInfo = {}
|
|
253
|
-
var paramArr = []
|
|
254
|
-
var randomId = GenerateRandomId()
|
|
255
|
-
|
|
256
|
-
paramArr.push(bstrSourceData)
|
|
257
|
-
paramArr.push(bstrHashAlg)
|
|
258
|
-
paramArr.push(bWithSourceData)
|
|
259
|
-
|
|
260
|
-
funcInfo.function = 'SignMsgPKCS7'
|
|
261
|
-
funcInfo.params = paramArr
|
|
262
|
-
funcInfo.randomId = randomId
|
|
263
|
-
|
|
264
|
-
request.action = 'invoke'
|
|
265
|
-
request.funcInfo = funcInfo
|
|
266
|
-
|
|
267
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
nmCryptokit.prototype.SignHashMsgPKCS7Detached = function (bstrSourceData, bstrHashAlg) {
|
|
271
|
-
var request = {}
|
|
272
|
-
var funcInfo = {}
|
|
273
|
-
var paramArr = []
|
|
274
|
-
var randomId = GenerateRandomId()
|
|
275
|
-
|
|
276
|
-
paramArr.push(bstrSourceData)
|
|
277
|
-
paramArr.push(bstrHashAlg)
|
|
278
|
-
|
|
279
|
-
funcInfo.function = 'SignHashMsgPKCS7Detached'
|
|
280
|
-
funcInfo.params = paramArr
|
|
281
|
-
funcInfo.randomId = randomId
|
|
282
|
-
|
|
283
|
-
request.action = 'invoke'
|
|
284
|
-
request.funcInfo = funcInfo
|
|
285
|
-
|
|
286
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
nmCryptokit.prototype.SignMsgPKCS1 = function (bstrSourceData, bstrHashAlg) {
|
|
290
|
-
var request = {}
|
|
291
|
-
var funcInfo = {}
|
|
292
|
-
var paramArr = []
|
|
293
|
-
var randomId = GenerateRandomId()
|
|
294
|
-
|
|
295
|
-
paramArr.push(bstrSourceData)
|
|
296
|
-
paramArr.push(bstrHashAlg)
|
|
297
|
-
|
|
298
|
-
funcInfo.function = 'SignMsgPKCS1'
|
|
299
|
-
funcInfo.params = paramArr
|
|
300
|
-
funcInfo.randomId = randomId
|
|
301
|
-
|
|
302
|
-
request.action = 'invoke'
|
|
303
|
-
request.funcInfo = funcInfo
|
|
304
|
-
|
|
305
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
nmCryptokit.prototype.GetVersion = function () {
|
|
309
|
-
var request = {}
|
|
310
|
-
var funcInfo = {}
|
|
311
|
-
var randomId = GenerateRandomId()
|
|
312
|
-
|
|
313
|
-
funcInfo.function = 'GetVersion'
|
|
314
|
-
funcInfo.params = null
|
|
315
|
-
funcInfo.randomId = randomId
|
|
316
|
-
|
|
317
|
-
request.action = 'invoke'
|
|
318
|
-
request.funcInfo = funcInfo
|
|
319
|
-
|
|
320
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
nmCryptokit.prototype.GetLastErrorDesc = function () {
|
|
324
|
-
var request = {}
|
|
325
|
-
var funcInfo = {}
|
|
326
|
-
var randomId = GenerateRandomId()
|
|
327
|
-
|
|
328
|
-
funcInfo.function = 'GetLastErrorDesc'
|
|
329
|
-
funcInfo.params = null
|
|
330
|
-
funcInfo.randomId = randomId
|
|
331
|
-
|
|
332
|
-
request.action = 'invoke'
|
|
333
|
-
request.funcInfo = funcInfo
|
|
334
|
-
|
|
335
|
-
return nmCryptokit.SendMessage(this.browser, request)
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
var CryptoKit
|
|
339
|
-
|
|
340
|
-
function BrowserInfo() {
|
|
341
|
-
var res = {
|
|
342
|
-
name: '',
|
|
343
|
-
version: ''
|
|
344
|
-
}
|
|
345
|
-
var reg
|
|
346
|
-
var userAgent = self.navigator.userAgent
|
|
347
|
-
|
|
348
|
-
if ((reg = /edge\/([\d\.]+)/i.exec(userAgent))) {
|
|
349
|
-
res.name = 'Edge'
|
|
350
|
-
res.version = reg[1]
|
|
351
|
-
} else if ((reg = /edg\/([\d\.]+)/i.exec(userAgent))) {
|
|
352
|
-
res.name = 'Edge(Chromium)'
|
|
353
|
-
res.version = reg[1]
|
|
354
|
-
} else if (/msie/i.test(userAgent)) {
|
|
355
|
-
res.name = 'Internet Explorer'
|
|
356
|
-
res.version = /msie ([\d\.]+)/i.exec(userAgent)[1]
|
|
357
|
-
} else if (/Trident/i.test(userAgent)) {
|
|
358
|
-
res.name = 'Internet Explorer'
|
|
359
|
-
res.version = /rv:([\d\.]+)/i.exec(userAgent)[1]
|
|
360
|
-
} else if (/chrome/i.test(userAgent)) {
|
|
361
|
-
res.name = 'Chrome'
|
|
362
|
-
res.version = /chrome\/([\d\.]+)/i.exec(userAgent)[1]
|
|
363
|
-
} else if (/safari/i.test(userAgent)) {
|
|
364
|
-
res.name = 'Safari'
|
|
365
|
-
res.version = /version\/([\d\.]+)/i.exec(userAgent)[1]
|
|
366
|
-
} else if (/firefox/i.test(userAgent)) {
|
|
367
|
-
res.name = 'Firefox'
|
|
368
|
-
res.version = /firefox\/([\d\.]+)/i.exec(userAgent)[1]
|
|
369
|
-
}
|
|
370
|
-
return res
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
function compareVersion(version1, version2) {
|
|
374
|
-
var v1Arr = version1.split('.')
|
|
375
|
-
var v2Arr = version2.split('.')
|
|
376
|
-
var len = Math.min(v1Arr.length, v2Arr.length)
|
|
377
|
-
for (var i = 0; i < len; i++) {
|
|
378
|
-
if (parseInt(v1Arr[i], 10) > parseInt(v2Arr[i], 10)) return 1
|
|
379
|
-
|
|
380
|
-
if (parseInt(v1Arr[i], 10) < parseInt(v2Arr[i], 10)) return -1
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
if (len < v1Arr.length) {
|
|
384
|
-
for (var j = len; j < v1Arr.length; j++) {
|
|
385
|
-
if (parseInt(v1Arr[j], 10) != 0) return 1
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
if (len < v2Arr.length) {
|
|
390
|
-
for (var j = len; j < v2Arr.length; j++) {
|
|
391
|
-
if (parseInt(v2Arr[j], 10) != 0) return -1
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
return 0
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
function getDN() {
|
|
399
|
-
let dn
|
|
400
|
-
let userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
|
|
401
|
-
if (userInfo && userInfo.dn) {
|
|
402
|
-
dn = userInfo.dn
|
|
403
|
-
}
|
|
404
|
-
return dn
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/* 给对象或字符串签名 */
|
|
408
|
-
export const getSign = async (plain, dn) => {
|
|
409
|
-
let errMsg
|
|
410
|
-
let plainText
|
|
411
|
-
|
|
412
|
-
if (dn === undefined) {
|
|
413
|
-
dn = getDN()
|
|
414
|
-
}
|
|
415
|
-
if (!dn) {
|
|
416
|
-
errMsg = '签名参数DN错误!'
|
|
417
|
-
Message.error(errMsg)
|
|
418
|
-
return Promise.reject(errMsg)
|
|
419
|
-
}
|
|
420
|
-
if (!window.CryptoKit) {
|
|
421
|
-
try {
|
|
422
|
-
var browser = BrowserInfo()
|
|
423
|
-
|
|
424
|
-
var hostVer
|
|
425
|
-
var extensionVer
|
|
426
|
-
var chromeExtensionVer = '3.2.0.1'
|
|
427
|
-
var edgeExtensionVer = '3.4.0.1'
|
|
428
|
-
var firefoxExtensionVer = '3.2.0.1'
|
|
429
|
-
|
|
430
|
-
if (
|
|
431
|
-
browser.name == 'Edge(Chromium)' ||
|
|
432
|
-
(browser.name == 'Chrome' && parseInt(browser.version) > 41) ||
|
|
433
|
-
(browser.name == 'Firefox' && parseInt(browser.version) > 52)
|
|
434
|
-
) {
|
|
435
|
-
// eslint-disable-next-line new-cap
|
|
436
|
-
window.CryptoKit = new nmCryptokit(browser.name)
|
|
437
|
-
await window.CryptoKit.init()
|
|
438
|
-
const vRes = await window.CryptoKit.getExtensionVersion()
|
|
439
|
-
extensionVer = vRes.result
|
|
440
|
-
const hostVerRes = await window.CryptoKit.getHostVersion()
|
|
441
|
-
hostVer = hostVerRes.result
|
|
442
|
-
if (
|
|
443
|
-
(browser.name == 'Edge(Chromium)' && compareVersion(extensionVer, edgeExtensionVer) < 0) ||
|
|
444
|
-
(browser.name == 'Chrome' && compareVersion(extensionVer, chromeExtensionVer) < 0) ||
|
|
445
|
-
(browser.name == 'Firefox' && compareVersion(extensionVer, firefoxExtensionVer) < 0)
|
|
446
|
-
) {
|
|
447
|
-
errMsg = '签名助手未正确安装!'
|
|
448
|
-
Message.error(errMsg)
|
|
449
|
-
return Promise.reject(errMsg)
|
|
450
|
-
} else if (compareVersion(hostVer, '3.4.0.1') < 0) {
|
|
451
|
-
errMsg = '签名助手未正确安装!'
|
|
452
|
-
Message.error(errMsg)
|
|
453
|
-
return Promise.reject(errMsg)
|
|
454
|
-
}
|
|
455
|
-
} else {
|
|
456
|
-
errMsg = '不支持的浏览器!'
|
|
457
|
-
Message.error(errMsg)
|
|
458
|
-
return Promise.reject(errMsg)
|
|
459
|
-
}
|
|
460
|
-
} catch (ex) {
|
|
461
|
-
console.log(ex)
|
|
462
|
-
errMsg = '签名助手初始化失败!'
|
|
463
|
-
Message.error(errMsg)
|
|
464
|
-
return Promise.reject(errMsg)
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
// var cspList = "CFCA CSP v3.0||CFCA Ulan CSP v4.0||Uyee CSP v6.0 (Enterprise)"
|
|
468
|
-
// try {
|
|
469
|
-
// await CryptoKit.setSM2CSPList(cspList)
|
|
470
|
-
// } catch (ex) {
|
|
471
|
-
// console.log(ex)
|
|
472
|
-
// errMsg = '没有检测到Ukey!'
|
|
473
|
-
// Message.error(errMsg)
|
|
474
|
-
// return Promise.reject(errMsg)
|
|
475
|
-
// }
|
|
476
|
-
|
|
477
|
-
if (typeof plain === 'object') {
|
|
478
|
-
plainText = JSON.stringify(plain)
|
|
479
|
-
} else {
|
|
480
|
-
plainText = plain
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
try {
|
|
484
|
-
var subjectDNFilter = ''
|
|
485
|
-
var issuerDNFilter = ''
|
|
486
|
-
var serialNumFilter = ''
|
|
487
|
-
var cspNameLists = 'CFCA CSP v3.0||CFCA Ulan CSP v4.0||Uyee CSP v6.0 (Enterprise)'
|
|
488
|
-
const certRes = await window.CryptoKit.SelectCertificate(subjectDNFilter, issuerDNFilter, serialNumFilter, cspNameLists)
|
|
489
|
-
if (!certRes.result) {
|
|
490
|
-
errMsg = '没有检测到证书!'
|
|
491
|
-
Message.error(errMsg)
|
|
492
|
-
return Promise.reject(errMsg)
|
|
493
|
-
}
|
|
494
|
-
} catch (ex) {
|
|
495
|
-
console.log(ex)
|
|
496
|
-
errMsg = '检测证书出错!' + ex
|
|
497
|
-
Message.error(errMsg)
|
|
498
|
-
return Promise.reject(errMsg)
|
|
499
|
-
}
|
|
500
|
-
try {
|
|
501
|
-
var certDNRes = await window.CryptoKit.GetSignCertInfo('SubjectDN')
|
|
502
|
-
var certDN = certDNRes.result
|
|
503
|
-
//比对DN
|
|
504
|
-
if (certDN != dn) {
|
|
505
|
-
errMsg = '证书不匹配!'
|
|
506
|
-
Message.error(errMsg)
|
|
507
|
-
return Promise.reject(errMsg)
|
|
508
|
-
}
|
|
509
|
-
//签名
|
|
510
|
-
var selectedAlg = 'SHA-256' //SHA-256,SHA-1
|
|
511
|
-
var IsWithSource = true //true是Attach,false是Detach
|
|
512
|
-
const signRes = await window.CryptoKit.SignMsgPKCS7(plainText, selectedAlg, IsWithSource)
|
|
513
|
-
return Promise.resolve(signRes.result)
|
|
514
|
-
} catch (ex) {
|
|
515
|
-
console.log(ex)
|
|
516
|
-
errMsg = '证书签名出错!' + ex
|
|
517
|
-
Message.error(errMsg)
|
|
518
|
-
return Promise.reject(errMsg)
|
|
519
|
-
}
|
|
520
|
-
}
|
|
1
|
+
/* eslint-disable no-useless-escape */
|
|
2
|
+
/* eslint-disable no-redeclare */
|
|
3
|
+
/* eslint-disable eqeqeq */
|
|
4
|
+
import {Message} from 'element-ui'
|
|
5
|
+
|
|
6
|
+
const chrome = window.chrome
|
|
7
|
+
|
|
8
|
+
nmCryptokit.chromeExtension = 'hdnlhmckkfofnfnjjpcbmnmfbcjjhpig'
|
|
9
|
+
nmCryptokit.edgeExtension = 'afifobadnhlfflniehieipibalnafkkj'
|
|
10
|
+
nmCryptokit.productID = 'com.cfca.cryptokit.hbjtcw'
|
|
11
|
+
|
|
12
|
+
nmCryptokit.extensionName = nmCryptokit.productID + '.extension'
|
|
13
|
+
nmCryptokit.reqEventName = nmCryptokit.productID + '.request'
|
|
14
|
+
nmCryptokit.respEventName = nmCryptokit.productID + '.response'
|
|
15
|
+
|
|
16
|
+
nmCryptokit.Browser = {
|
|
17
|
+
IE: 'Internet Explorer',
|
|
18
|
+
Edge: 'Edge',
|
|
19
|
+
Edg: 'Edge(Chromium)',
|
|
20
|
+
Chrome: 'Chrome',
|
|
21
|
+
Safari: 'Safari',
|
|
22
|
+
Firefox: 'Firefox'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function GenerateRandomId() {
|
|
26
|
+
var charstring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
|
|
27
|
+
var maxPos = charstring.length
|
|
28
|
+
var randomId = ''
|
|
29
|
+
for (let i = 0; i < 10; i++) {
|
|
30
|
+
randomId += charstring.charAt(Math.floor(Math.random() * maxPos))
|
|
31
|
+
}
|
|
32
|
+
return randomId
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function nmCryptokit(browser) {
|
|
36
|
+
this.browser = browser
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Encapsulate Chrome sendMessage callback to Promise
|
|
40
|
+
nmCryptokit.SendMessageforChrome = function (request) {
|
|
41
|
+
return new Promise(function (resolve, reject) {
|
|
42
|
+
chrome.runtime.sendMessage(nmCryptokit.chromeExtension, request, function (response) {
|
|
43
|
+
if (response) {
|
|
44
|
+
if (response.errorcode == 0) {
|
|
45
|
+
resolve(response)
|
|
46
|
+
} else {
|
|
47
|
+
reject(response)
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
var result = {}
|
|
51
|
+
result.errorcode = 1
|
|
52
|
+
result.result = chrome.runtime.lastError.message
|
|
53
|
+
reject(result)
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Encapsulate Chrome sendMessage callback to Promise
|
|
60
|
+
nmCryptokit.SendMessageforEdge = function (request) {
|
|
61
|
+
return new Promise(function (resolve, reject) {
|
|
62
|
+
chrome.runtime.sendMessage(nmCryptokit.edgeExtension, request, function (response) {
|
|
63
|
+
if (response) {
|
|
64
|
+
if (response.errorcode == 0) {
|
|
65
|
+
resolve(response)
|
|
66
|
+
} else {
|
|
67
|
+
reject(response)
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
var result = {}
|
|
71
|
+
result.errorcode = 1
|
|
72
|
+
result.result = chrome.runtime.lastError.message
|
|
73
|
+
reject(result)
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Encapsulate Edge&Firefox event to Promise
|
|
80
|
+
nmCryptokit.SendMessagebyEvent = function (request) {
|
|
81
|
+
var event = new CustomEvent(nmCryptokit.reqEventName, {detail: request})
|
|
82
|
+
document.dispatchEvent(event)
|
|
83
|
+
|
|
84
|
+
return new Promise(function (resolve, reject) {
|
|
85
|
+
var responseEventName = nmCryptokit.respEventName
|
|
86
|
+
if (request.funcInfo != undefined && request.funcInfo.randomId != undefined)
|
|
87
|
+
responseEventName += '.' + request.funcInfo.randomId
|
|
88
|
+
|
|
89
|
+
document.addEventListener(
|
|
90
|
+
responseEventName,
|
|
91
|
+
function CallBack(e) {
|
|
92
|
+
document.removeEventListener(e.type, CallBack)
|
|
93
|
+
var eJson = JSON.parse(e.detail)
|
|
94
|
+
if (eJson != null && eJson.errorcode == 0) {
|
|
95
|
+
resolve(eJson)
|
|
96
|
+
} else {
|
|
97
|
+
reject(eJson)
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
false
|
|
101
|
+
)
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
nmCryptokit.SendMessage = function (browser, requestJSON) {
|
|
106
|
+
if (nmCryptokit.Browser.Chrome == browser) {
|
|
107
|
+
return nmCryptokit.SendMessageforChrome(requestJSON)
|
|
108
|
+
} else if (nmCryptokit.Browser.Edg == browser) {
|
|
109
|
+
return nmCryptokit.SendMessageforEdge(requestJSON)
|
|
110
|
+
} else {
|
|
111
|
+
return nmCryptokit.SendMessagebyEvent(requestJSON)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
nmCryptokit.checkExtension = function (browser) {
|
|
116
|
+
return new Promise(function (resolve, reject) {
|
|
117
|
+
var result = {}
|
|
118
|
+
if (nmCryptokit.Browser.Chrome == browser || nmCryptokit.Browser.Edg == browser) {
|
|
119
|
+
// chrome.runtime.sendMessage() could check extension existence.
|
|
120
|
+
if (chrome.runtime) {
|
|
121
|
+
resolve(browser)
|
|
122
|
+
} else {
|
|
123
|
+
result.errorcode = 2
|
|
124
|
+
result.result = 'Extension does not exist!'
|
|
125
|
+
reject(result)
|
|
126
|
+
}
|
|
127
|
+
} else if (nmCryptokit.Browser.Edge == browser || nmCryptokit.Browser.Firefox == browser) {
|
|
128
|
+
if (document.getElementById(nmCryptokit.extensionName)) {
|
|
129
|
+
resolve(browser)
|
|
130
|
+
} else {
|
|
131
|
+
result.errorcode = 2
|
|
132
|
+
result.result = 'Extension does not exist!'
|
|
133
|
+
reject(result)
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
result.errorcode = 3
|
|
137
|
+
result.result = 'Only support Chrome/Edge/Firefox'
|
|
138
|
+
reject(result)
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
nmCryptokit.prototype.init = function () {
|
|
144
|
+
var browser = this.browser
|
|
145
|
+
var that = this
|
|
146
|
+
|
|
147
|
+
return nmCryptokit
|
|
148
|
+
.checkExtension(browser)
|
|
149
|
+
.then(function (browser) {
|
|
150
|
+
var request = {}
|
|
151
|
+
request.action = 'connect'
|
|
152
|
+
request.host = nmCryptokit.productID
|
|
153
|
+
return nmCryptokit.SendMessage(browser, request)
|
|
154
|
+
})
|
|
155
|
+
.then(function () {
|
|
156
|
+
var request = {}
|
|
157
|
+
var funcInfo = {}
|
|
158
|
+
var randomId = GenerateRandomId()
|
|
159
|
+
|
|
160
|
+
funcInfo.function = 'GetLastErrorDesc'
|
|
161
|
+
funcInfo.params = null
|
|
162
|
+
funcInfo.randomId = randomId
|
|
163
|
+
|
|
164
|
+
request.action = 'invoke'
|
|
165
|
+
request.funcInfo = funcInfo
|
|
166
|
+
|
|
167
|
+
return nmCryptokit.SendMessage(that.browser, request)
|
|
168
|
+
})
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
nmCryptokit.prototype.uninit = function () {
|
|
172
|
+
var request = {}
|
|
173
|
+
request.action = 'disconnect'
|
|
174
|
+
request.host = nmCryptokit.productID
|
|
175
|
+
|
|
176
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
nmCryptokit.prototype.getExtensionVersion = function () {
|
|
180
|
+
var request = {}
|
|
181
|
+
var funcInfo = {}
|
|
182
|
+
|
|
183
|
+
funcInfo.function = 'getExtensionVersion'
|
|
184
|
+
funcInfo.params = null
|
|
185
|
+
request.action = 'getExtensionVersion'
|
|
186
|
+
request.funcInfo = funcInfo
|
|
187
|
+
|
|
188
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
nmCryptokit.prototype.getHostVersion = function () {
|
|
192
|
+
var request = {}
|
|
193
|
+
var funcInfo = {}
|
|
194
|
+
var randomId = GenerateRandomId()
|
|
195
|
+
|
|
196
|
+
funcInfo.function = 'GetVersion'
|
|
197
|
+
funcInfo.params = null
|
|
198
|
+
funcInfo.randomId = randomId
|
|
199
|
+
|
|
200
|
+
request.action = 'invoke'
|
|
201
|
+
request.funcInfo = funcInfo
|
|
202
|
+
|
|
203
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
nmCryptokit.prototype.SelectCertificate = function (
|
|
207
|
+
bstrSubjectDNFilter,
|
|
208
|
+
bstrIssuerDNFilter,
|
|
209
|
+
bstrSerialNumFilter,
|
|
210
|
+
bstrCSPNameList
|
|
211
|
+
) {
|
|
212
|
+
var request = {}
|
|
213
|
+
var funcInfo = {}
|
|
214
|
+
var paramArr = []
|
|
215
|
+
var randomId = GenerateRandomId()
|
|
216
|
+
|
|
217
|
+
paramArr.push(bstrSubjectDNFilter)
|
|
218
|
+
paramArr.push(bstrIssuerDNFilter)
|
|
219
|
+
paramArr.push(bstrSerialNumFilter)
|
|
220
|
+
paramArr.push(bstrCSPNameList)
|
|
221
|
+
|
|
222
|
+
funcInfo.function = 'SelectCertificate'
|
|
223
|
+
funcInfo.params = paramArr
|
|
224
|
+
funcInfo.randomId = randomId
|
|
225
|
+
|
|
226
|
+
request.action = 'invoke'
|
|
227
|
+
request.funcInfo = funcInfo
|
|
228
|
+
|
|
229
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
nmCryptokit.prototype.GetSignCertInfo = function (bstrInfoType) {
|
|
233
|
+
var request = {}
|
|
234
|
+
var funcInfo = {}
|
|
235
|
+
var paramArr = []
|
|
236
|
+
var randomId = GenerateRandomId()
|
|
237
|
+
|
|
238
|
+
paramArr.push(bstrInfoType)
|
|
239
|
+
|
|
240
|
+
funcInfo.function = 'getSignCertInfo'
|
|
241
|
+
funcInfo.params = paramArr
|
|
242
|
+
funcInfo.randomId = randomId
|
|
243
|
+
|
|
244
|
+
request.action = 'invoke'
|
|
245
|
+
request.funcInfo = funcInfo
|
|
246
|
+
|
|
247
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
nmCryptokit.prototype.SignMsgPKCS7 = function (bstrSourceData, bstrHashAlg, bWithSourceData) {
|
|
251
|
+
var request = {}
|
|
252
|
+
var funcInfo = {}
|
|
253
|
+
var paramArr = []
|
|
254
|
+
var randomId = GenerateRandomId()
|
|
255
|
+
|
|
256
|
+
paramArr.push(bstrSourceData)
|
|
257
|
+
paramArr.push(bstrHashAlg)
|
|
258
|
+
paramArr.push(bWithSourceData)
|
|
259
|
+
|
|
260
|
+
funcInfo.function = 'SignMsgPKCS7'
|
|
261
|
+
funcInfo.params = paramArr
|
|
262
|
+
funcInfo.randomId = randomId
|
|
263
|
+
|
|
264
|
+
request.action = 'invoke'
|
|
265
|
+
request.funcInfo = funcInfo
|
|
266
|
+
|
|
267
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
nmCryptokit.prototype.SignHashMsgPKCS7Detached = function (bstrSourceData, bstrHashAlg) {
|
|
271
|
+
var request = {}
|
|
272
|
+
var funcInfo = {}
|
|
273
|
+
var paramArr = []
|
|
274
|
+
var randomId = GenerateRandomId()
|
|
275
|
+
|
|
276
|
+
paramArr.push(bstrSourceData)
|
|
277
|
+
paramArr.push(bstrHashAlg)
|
|
278
|
+
|
|
279
|
+
funcInfo.function = 'SignHashMsgPKCS7Detached'
|
|
280
|
+
funcInfo.params = paramArr
|
|
281
|
+
funcInfo.randomId = randomId
|
|
282
|
+
|
|
283
|
+
request.action = 'invoke'
|
|
284
|
+
request.funcInfo = funcInfo
|
|
285
|
+
|
|
286
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
nmCryptokit.prototype.SignMsgPKCS1 = function (bstrSourceData, bstrHashAlg) {
|
|
290
|
+
var request = {}
|
|
291
|
+
var funcInfo = {}
|
|
292
|
+
var paramArr = []
|
|
293
|
+
var randomId = GenerateRandomId()
|
|
294
|
+
|
|
295
|
+
paramArr.push(bstrSourceData)
|
|
296
|
+
paramArr.push(bstrHashAlg)
|
|
297
|
+
|
|
298
|
+
funcInfo.function = 'SignMsgPKCS1'
|
|
299
|
+
funcInfo.params = paramArr
|
|
300
|
+
funcInfo.randomId = randomId
|
|
301
|
+
|
|
302
|
+
request.action = 'invoke'
|
|
303
|
+
request.funcInfo = funcInfo
|
|
304
|
+
|
|
305
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
nmCryptokit.prototype.GetVersion = function () {
|
|
309
|
+
var request = {}
|
|
310
|
+
var funcInfo = {}
|
|
311
|
+
var randomId = GenerateRandomId()
|
|
312
|
+
|
|
313
|
+
funcInfo.function = 'GetVersion'
|
|
314
|
+
funcInfo.params = null
|
|
315
|
+
funcInfo.randomId = randomId
|
|
316
|
+
|
|
317
|
+
request.action = 'invoke'
|
|
318
|
+
request.funcInfo = funcInfo
|
|
319
|
+
|
|
320
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
nmCryptokit.prototype.GetLastErrorDesc = function () {
|
|
324
|
+
var request = {}
|
|
325
|
+
var funcInfo = {}
|
|
326
|
+
var randomId = GenerateRandomId()
|
|
327
|
+
|
|
328
|
+
funcInfo.function = 'GetLastErrorDesc'
|
|
329
|
+
funcInfo.params = null
|
|
330
|
+
funcInfo.randomId = randomId
|
|
331
|
+
|
|
332
|
+
request.action = 'invoke'
|
|
333
|
+
request.funcInfo = funcInfo
|
|
334
|
+
|
|
335
|
+
return nmCryptokit.SendMessage(this.browser, request)
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
var CryptoKit
|
|
339
|
+
|
|
340
|
+
function BrowserInfo() {
|
|
341
|
+
var res = {
|
|
342
|
+
name: '',
|
|
343
|
+
version: ''
|
|
344
|
+
}
|
|
345
|
+
var reg
|
|
346
|
+
var userAgent = self.navigator.userAgent
|
|
347
|
+
|
|
348
|
+
if ((reg = /edge\/([\d\.]+)/i.exec(userAgent))) {
|
|
349
|
+
res.name = 'Edge'
|
|
350
|
+
res.version = reg[1]
|
|
351
|
+
} else if ((reg = /edg\/([\d\.]+)/i.exec(userAgent))) {
|
|
352
|
+
res.name = 'Edge(Chromium)'
|
|
353
|
+
res.version = reg[1]
|
|
354
|
+
} else if (/msie/i.test(userAgent)) {
|
|
355
|
+
res.name = 'Internet Explorer'
|
|
356
|
+
res.version = /msie ([\d\.]+)/i.exec(userAgent)[1]
|
|
357
|
+
} else if (/Trident/i.test(userAgent)) {
|
|
358
|
+
res.name = 'Internet Explorer'
|
|
359
|
+
res.version = /rv:([\d\.]+)/i.exec(userAgent)[1]
|
|
360
|
+
} else if (/chrome/i.test(userAgent)) {
|
|
361
|
+
res.name = 'Chrome'
|
|
362
|
+
res.version = /chrome\/([\d\.]+)/i.exec(userAgent)[1]
|
|
363
|
+
} else if (/safari/i.test(userAgent)) {
|
|
364
|
+
res.name = 'Safari'
|
|
365
|
+
res.version = /version\/([\d\.]+)/i.exec(userAgent)[1]
|
|
366
|
+
} else if (/firefox/i.test(userAgent)) {
|
|
367
|
+
res.name = 'Firefox'
|
|
368
|
+
res.version = /firefox\/([\d\.]+)/i.exec(userAgent)[1]
|
|
369
|
+
}
|
|
370
|
+
return res
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function compareVersion(version1, version2) {
|
|
374
|
+
var v1Arr = version1.split('.')
|
|
375
|
+
var v2Arr = version2.split('.')
|
|
376
|
+
var len = Math.min(v1Arr.length, v2Arr.length)
|
|
377
|
+
for (var i = 0; i < len; i++) {
|
|
378
|
+
if (parseInt(v1Arr[i], 10) > parseInt(v2Arr[i], 10)) return 1
|
|
379
|
+
|
|
380
|
+
if (parseInt(v1Arr[i], 10) < parseInt(v2Arr[i], 10)) return -1
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if (len < v1Arr.length) {
|
|
384
|
+
for (var j = len; j < v1Arr.length; j++) {
|
|
385
|
+
if (parseInt(v1Arr[j], 10) != 0) return 1
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (len < v2Arr.length) {
|
|
390
|
+
for (var j = len; j < v2Arr.length; j++) {
|
|
391
|
+
if (parseInt(v2Arr[j], 10) != 0) return -1
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
return 0
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function getDN() {
|
|
399
|
+
let dn
|
|
400
|
+
let userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
|
|
401
|
+
if (userInfo && userInfo.dn) {
|
|
402
|
+
dn = userInfo.dn
|
|
403
|
+
}
|
|
404
|
+
return dn
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/* 给对象或字符串签名 */
|
|
408
|
+
export const getSign = async (plain, dn) => {
|
|
409
|
+
let errMsg
|
|
410
|
+
let plainText
|
|
411
|
+
|
|
412
|
+
if (dn === undefined) {
|
|
413
|
+
dn = getDN()
|
|
414
|
+
}
|
|
415
|
+
if (!dn) {
|
|
416
|
+
errMsg = '签名参数DN错误!'
|
|
417
|
+
Message.error(errMsg)
|
|
418
|
+
return Promise.reject(errMsg)
|
|
419
|
+
}
|
|
420
|
+
if (!window.CryptoKit) {
|
|
421
|
+
try {
|
|
422
|
+
var browser = BrowserInfo()
|
|
423
|
+
|
|
424
|
+
var hostVer
|
|
425
|
+
var extensionVer
|
|
426
|
+
var chromeExtensionVer = '3.2.0.1'
|
|
427
|
+
var edgeExtensionVer = '3.4.0.1'
|
|
428
|
+
var firefoxExtensionVer = '3.2.0.1'
|
|
429
|
+
|
|
430
|
+
if (
|
|
431
|
+
browser.name == 'Edge(Chromium)' ||
|
|
432
|
+
(browser.name == 'Chrome' && parseInt(browser.version) > 41) ||
|
|
433
|
+
(browser.name == 'Firefox' && parseInt(browser.version) > 52)
|
|
434
|
+
) {
|
|
435
|
+
// eslint-disable-next-line new-cap
|
|
436
|
+
window.CryptoKit = new nmCryptokit(browser.name)
|
|
437
|
+
await window.CryptoKit.init()
|
|
438
|
+
const vRes = await window.CryptoKit.getExtensionVersion()
|
|
439
|
+
extensionVer = vRes.result
|
|
440
|
+
const hostVerRes = await window.CryptoKit.getHostVersion()
|
|
441
|
+
hostVer = hostVerRes.result
|
|
442
|
+
if (
|
|
443
|
+
(browser.name == 'Edge(Chromium)' && compareVersion(extensionVer, edgeExtensionVer) < 0) ||
|
|
444
|
+
(browser.name == 'Chrome' && compareVersion(extensionVer, chromeExtensionVer) < 0) ||
|
|
445
|
+
(browser.name == 'Firefox' && compareVersion(extensionVer, firefoxExtensionVer) < 0)
|
|
446
|
+
) {
|
|
447
|
+
errMsg = '签名助手未正确安装!'
|
|
448
|
+
Message.error(errMsg)
|
|
449
|
+
return Promise.reject(errMsg)
|
|
450
|
+
} else if (compareVersion(hostVer, '3.4.0.1') < 0) {
|
|
451
|
+
errMsg = '签名助手未正确安装!'
|
|
452
|
+
Message.error(errMsg)
|
|
453
|
+
return Promise.reject(errMsg)
|
|
454
|
+
}
|
|
455
|
+
} else {
|
|
456
|
+
errMsg = '不支持的浏览器!'
|
|
457
|
+
Message.error(errMsg)
|
|
458
|
+
return Promise.reject(errMsg)
|
|
459
|
+
}
|
|
460
|
+
} catch (ex) {
|
|
461
|
+
console.log(ex)
|
|
462
|
+
errMsg = '签名助手初始化失败!'
|
|
463
|
+
Message.error(errMsg)
|
|
464
|
+
return Promise.reject(errMsg)
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// var cspList = "CFCA CSP v3.0||CFCA Ulan CSP v4.0||Uyee CSP v6.0 (Enterprise)"
|
|
468
|
+
// try {
|
|
469
|
+
// await CryptoKit.setSM2CSPList(cspList)
|
|
470
|
+
// } catch (ex) {
|
|
471
|
+
// console.log(ex)
|
|
472
|
+
// errMsg = '没有检测到Ukey!'
|
|
473
|
+
// Message.error(errMsg)
|
|
474
|
+
// return Promise.reject(errMsg)
|
|
475
|
+
// }
|
|
476
|
+
|
|
477
|
+
if (typeof plain === 'object') {
|
|
478
|
+
plainText = JSON.stringify(plain)
|
|
479
|
+
} else {
|
|
480
|
+
plainText = plain
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
try {
|
|
484
|
+
var subjectDNFilter = ''
|
|
485
|
+
var issuerDNFilter = ''
|
|
486
|
+
var serialNumFilter = ''
|
|
487
|
+
var cspNameLists = 'CFCA CSP v3.0||CFCA Ulan CSP v4.0||Uyee CSP v6.0 (Enterprise)'
|
|
488
|
+
const certRes = await window.CryptoKit.SelectCertificate(subjectDNFilter, issuerDNFilter, serialNumFilter, cspNameLists)
|
|
489
|
+
if (!certRes.result) {
|
|
490
|
+
errMsg = '没有检测到证书!'
|
|
491
|
+
Message.error(errMsg)
|
|
492
|
+
return Promise.reject(errMsg)
|
|
493
|
+
}
|
|
494
|
+
} catch (ex) {
|
|
495
|
+
console.log(ex)
|
|
496
|
+
errMsg = '检测证书出错!' + ex
|
|
497
|
+
Message.error(errMsg)
|
|
498
|
+
return Promise.reject(errMsg)
|
|
499
|
+
}
|
|
500
|
+
try {
|
|
501
|
+
var certDNRes = await window.CryptoKit.GetSignCertInfo('SubjectDN')
|
|
502
|
+
var certDN = certDNRes.result
|
|
503
|
+
//比对DN
|
|
504
|
+
if (certDN != dn) {
|
|
505
|
+
errMsg = '证书不匹配!'
|
|
506
|
+
Message.error(errMsg)
|
|
507
|
+
return Promise.reject(errMsg)
|
|
508
|
+
}
|
|
509
|
+
//签名
|
|
510
|
+
var selectedAlg = 'SHA-256' //SHA-256,SHA-1
|
|
511
|
+
var IsWithSource = true //true是Attach,false是Detach
|
|
512
|
+
const signRes = await window.CryptoKit.SignMsgPKCS7(plainText, selectedAlg, IsWithSource)
|
|
513
|
+
return Promise.resolve(signRes.result)
|
|
514
|
+
} catch (ex) {
|
|
515
|
+
console.log(ex)
|
|
516
|
+
errMsg = '证书签名出错!' + ex
|
|
517
|
+
Message.error(errMsg)
|
|
518
|
+
return Promise.reject(errMsg)
|
|
519
|
+
}
|
|
520
|
+
}
|