@it-enterprise/digital-signature 1.2.2 → 1.2.4
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/euscp/EndUserConstants.d.ts +2 -0
- package/euscp/euscp.js +2 -2
- package/package.json +2 -2
- package/readme.md +60 -6
- package/src/DigitalSignature.js +18 -92
- package/src/GlSign.js +21 -0
- package/src/Models.js +91 -3
- package/src/Utils.js +4 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@it-enterprise/digital-signature",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "digital signature",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -18,4 +18,4 @@
|
|
|
18
18
|
"@babel/eslint-parser": "^7.18.9",
|
|
19
19
|
"eslint": "^7.18.0"
|
|
20
20
|
}
|
|
21
|
-
}
|
|
21
|
+
}
|
package/readme.md
CHANGED
|
@@ -68,6 +68,11 @@ import {
|
|
|
68
68
|
|
|
69
69
|
Инициализация библиотеки
|
|
70
70
|
```javascript
|
|
71
|
+
import {
|
|
72
|
+
DigitalSignature,
|
|
73
|
+
Models
|
|
74
|
+
} from "@it-enterprise/digital-signature";
|
|
75
|
+
|
|
71
76
|
const ds = new DigitalSignature(
|
|
72
77
|
new Models.DefaultSettingProvider(
|
|
73
78
|
"uk", // Язык ошибок (строка, или функция, возвращающая строку)
|
|
@@ -80,20 +85,22 @@ const currentKeyType = await ds.initialise();
|
|
|
80
85
|
Сменить тип библиотеки
|
|
81
86
|
```javascript
|
|
82
87
|
/** Подпись файловыми ключами, через облачные сервисы */
|
|
83
|
-
|
|
88
|
+
const DigitalSignatureLibraryTypeJS = 0;
|
|
84
89
|
/** Подпись аппартными ключами */
|
|
85
|
-
|
|
90
|
+
const DigitalSignatureLibraryTypeSW = 1;
|
|
86
91
|
/**
|
|
87
92
|
* Типы библиотеки
|
|
88
93
|
*/
|
|
89
|
-
|
|
94
|
+
enum DigitalSignatureLibraryType = {
|
|
90
95
|
/** Подпись файловыми ключами и через облачные сервисы */
|
|
91
96
|
JS: DigitalSignatureLibraryTypeJS,
|
|
92
97
|
/** Подпись аппартными ключами */
|
|
93
98
|
SW: DigitalSignatureLibraryTypeSW
|
|
94
99
|
};
|
|
95
100
|
|
|
96
|
-
|
|
101
|
+
import { Models } from "@it-enterprise/digital-signature";
|
|
102
|
+
|
|
103
|
+
await ds.setLibraryType(Models.DigitalSignatureLibraryType.JS);
|
|
97
104
|
```
|
|
98
105
|
|
|
99
106
|
# Центры сертификации ключей
|
|
@@ -116,6 +123,8 @@ const needCerts = ds.needPrivateKeyCertificates();
|
|
|
116
123
|
```
|
|
117
124
|
Структура объекта CASettings
|
|
118
125
|
```javascript
|
|
126
|
+
import { EUSignCP.CASettings } from "@it-enterprise/digital-signature";
|
|
127
|
+
|
|
119
128
|
class CASettings {
|
|
120
129
|
// Названия ЦСК (обычно используется первое из списка)
|
|
121
130
|
issuerCNs: Array<string>;
|
|
@@ -212,12 +221,15 @@ const ksps = ds.KSPs;
|
|
|
212
221
|
|
|
213
222
|
```javascript
|
|
214
223
|
class KSPSettings {
|
|
224
|
+
// Идентификатор
|
|
225
|
+
id: string;
|
|
215
226
|
// Название провайдера
|
|
216
227
|
name: string;
|
|
217
228
|
// Провайдер работает через QR код или через ID пользователя
|
|
218
229
|
needQRCode: boolean;
|
|
219
230
|
// Тип ID пользователя (имя пользователя/телефон/email)
|
|
220
231
|
clientIdType?: EndUserKSPClientIdType;
|
|
232
|
+
// Тип провайдера
|
|
221
233
|
ksp: EndUserKSP;
|
|
222
234
|
address?: string;
|
|
223
235
|
port?: string;
|
|
@@ -228,6 +240,36 @@ class KSPSettings {
|
|
|
228
240
|
pollingInterval?: number;
|
|
229
241
|
systemId?: string;
|
|
230
242
|
}
|
|
243
|
+
import { EUSignCP.KSPSettings } from "@it-enterprise/digital-signature";
|
|
244
|
+
|
|
245
|
+
// Тип провайдера облачных ключей
|
|
246
|
+
enum EndUserKSP = {
|
|
247
|
+
// DepositSign, ESign, Вчасно
|
|
248
|
+
IIT
|
|
249
|
+
// SmartID, CloudKey
|
|
250
|
+
PB
|
|
251
|
+
// Дія.Підпис
|
|
252
|
+
DIIA
|
|
253
|
+
// Подписание ключами с Гряды через сервис подписи
|
|
254
|
+
GRYADA
|
|
255
|
+
}
|
|
256
|
+
import { Models.EndUserKSP } from "@it-enterprise/digital-signature";
|
|
257
|
+
|
|
258
|
+
// Тип ID пользователя
|
|
259
|
+
enum EndUserKSPClientIdType = {
|
|
260
|
+
// По умолчанию
|
|
261
|
+
Default,
|
|
262
|
+
// Имя пользователя
|
|
263
|
+
Name,
|
|
264
|
+
// Номер телефона
|
|
265
|
+
Phone,
|
|
266
|
+
// Email
|
|
267
|
+
Email,
|
|
268
|
+
// Имя пользователя и пароль (2 поля)
|
|
269
|
+
NamePassword
|
|
270
|
+
}
|
|
271
|
+
import { Models.EndUserKSPClientIdType } from "@it-enterprise/digital-signature";
|
|
272
|
+
|
|
231
273
|
```
|
|
232
274
|
|
|
233
275
|
Для ключей, работающих через QR код, после инициализации библиотеки нужно подписаться на событие подтверждения операции
|
|
@@ -245,6 +287,7 @@ ds.addConfirmKSPOperationEventListener(eventArgs => { ... });
|
|
|
245
287
|
|
|
246
288
|
Структура объекта, приходящего в коллбек события
|
|
247
289
|
```javascript
|
|
290
|
+
// Аргументы события
|
|
248
291
|
class EndUserConfirmKSPOperationEvent {
|
|
249
292
|
// Ссылка на подтверждение операции
|
|
250
293
|
url: string;
|
|
@@ -255,6 +298,8 @@ class EndUserConfirmKSPOperationEvent {
|
|
|
255
298
|
// Время, до которого действует ссылка
|
|
256
299
|
expireDate: Date;
|
|
257
300
|
}
|
|
301
|
+
import { EUSignCP.EndUserEvents.EndUserConfirmKSPOperationEvent } from "@it-enterprise/digital-signature";
|
|
302
|
+
|
|
258
303
|
```
|
|
259
304
|
QR код нужно отобразить пользовтелю, что бы он мог отсканировать его в приложении и подтвердить подписание
|
|
260
305
|
Для отображения QR кода можно использовать содержимое поля qrCode, либо сгенерировать его на основе ссылки из поля url
|
|
@@ -276,7 +321,9 @@ const keyInfo = await ds.readPrivateKeyKSP(
|
|
|
276
321
|
// Получать информацию о сертификатах пользователя
|
|
277
322
|
// true - поля ownerInfo и certificates в keyInfo будут заполены, но пользователю нужно будет подтвердить дополнительную операцию подписания
|
|
278
323
|
// false - поля ownerInfo и certificates в keyInfo будут пустыми, но пользователь не получит дополнительный запрос на подписание
|
|
279
|
-
getCerts = false
|
|
324
|
+
getCerts = false,
|
|
325
|
+
// Пароль пользователя, если clientIdType == NamePassword
|
|
326
|
+
keyID = null);
|
|
280
327
|
```
|
|
281
328
|
|
|
282
329
|
|
|
@@ -327,6 +374,7 @@ class EndUserSignContainerInfo {
|
|
|
327
374
|
// Тип подписи в ASiC контейнере (только для ASiC контейнеров)
|
|
328
375
|
asicSignType: EndUserASiCSignType;
|
|
329
376
|
}
|
|
377
|
+
import { EUSignCP.EndUserSignContainerInfo } from "@it-enterprise/digital-signature";
|
|
330
378
|
```
|
|
331
379
|
Типы контейнеров подписи
|
|
332
380
|
```javascript
|
|
@@ -344,6 +392,7 @@ enum EndUserSignContainerType {
|
|
|
344
392
|
// Контейнер для подписей в виде ZIP-архива
|
|
345
393
|
ASiC
|
|
346
394
|
}
|
|
395
|
+
import { EUSignCP.EndUserConstants.EndUserSignContainerType } from "@it-enterprise/digital-signature";
|
|
347
396
|
```
|
|
348
397
|
Типы подписей CAdES
|
|
349
398
|
```javascript
|
|
@@ -355,6 +404,7 @@ enum EndUserCAdESType {
|
|
|
355
404
|
// Подпись в одном контейнере с данными (внутренняя подпись)
|
|
356
405
|
Enveloped
|
|
357
406
|
}
|
|
407
|
+
import { EUSignCP.EndUserConstants.EndUserCAdESType } from "@it-enterprise/digital-signature";
|
|
358
408
|
```
|
|
359
409
|
Типы подписей XAdES
|
|
360
410
|
```javascript
|
|
@@ -363,9 +413,10 @@ const EU_XADES_TYPE_ENVELOPED = 3;
|
|
|
363
413
|
enum EndUserXAdESType {
|
|
364
414
|
// Подпись отдельно от данных (внешняя подпись)
|
|
365
415
|
Detached,
|
|
366
|
-
// Подпись в одном контейнере с данными (внутренняя подпись)
|
|
416
|
+
// Подпись в одном контейнере с данными (внутренняя подпись) !! Данные могут быть только в формате XML !!
|
|
367
417
|
Enveloped
|
|
368
418
|
}
|
|
419
|
+
import { EUSignCP.EndUserConstants.EndUserXAdESType } from "@it-enterprise/digital-signature";
|
|
369
420
|
```
|
|
370
421
|
Типы контейнеров ASiC
|
|
371
422
|
```javascript
|
|
@@ -377,6 +428,7 @@ enum EndUserASiCType {
|
|
|
377
428
|
// Расширенный контейнер, может содержать несколько файлов с данными и несколько подписей
|
|
378
429
|
E
|
|
379
430
|
}
|
|
431
|
+
import { EUSignCP.EndUserConstants.EndUserASiCType } from "@it-enterprise/digital-signature";
|
|
380
432
|
```
|
|
381
433
|
Типы подписей, которые могут содержаться в ASiC контейнере
|
|
382
434
|
```javascript
|
|
@@ -386,6 +438,7 @@ enum EndUserASiCSignType {
|
|
|
386
438
|
CAdES,
|
|
387
439
|
XAdES
|
|
388
440
|
}
|
|
441
|
+
import { EUSignCP.EndUserConstants.EndUserASiCSignType } from "@it-enterprise/digital-signature";
|
|
389
442
|
```
|
|
390
443
|
|
|
391
444
|
Пример использования формата подписи:
|
|
@@ -435,6 +488,7 @@ declare type NamedData = {
|
|
|
435
488
|
// В качестве возвращаемого результата: контейнер с подписью
|
|
436
489
|
val: string | Uint8Array;
|
|
437
490
|
};
|
|
491
|
+
import { EUSignCP.NamedData } from "@it-enterprise/digital-signature";
|
|
438
492
|
```
|
|
439
493
|
Пример использования формата именованных данных
|
|
440
494
|
```javascript
|
package/src/DigitalSignature.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EndUser, EndUserConstants, EndUserProxySettings, EndUserError, KSPSettings, EndUserCertificate, EndUserKeyMedia, EndUserSignContainerInfo } from "../euscp/euscp";
|
|
2
|
-
import { DigitalSignatureKeyType, PrivateKeyInfo, FilePrivateKeyInfo, HardwarePrivateKeyInfo, KspPrivateKeyInfo } from "./Models";
|
|
3
|
-
import { downloadAndSignFiles, downloadData, format, readFile, signAlgoToHashAlgo } from "./Utils";
|
|
2
|
+
import { DigitalSignatureKeyType, PrivateKeyInfo, FilePrivateKeyInfo, HardwarePrivateKeyInfo, KspPrivateKeyInfo, EndUserKSP } from "./Models";
|
|
3
|
+
import { downloadAndSignFiles, downloadData, format, isDefaultValue, readFile, signAlgoToHashAlgo } from "./Utils";
|
|
4
4
|
import Resourses from "./Resourses.json";
|
|
5
5
|
import GlSign from "./GlSign";
|
|
6
6
|
|
|
@@ -31,85 +31,8 @@ export default class DigitalSignature {
|
|
|
31
31
|
/** @type {CASettings} */
|
|
32
32
|
this._selectedCA = null;
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
depositsign.ksp = EndUserConstants.EU_KSP_IIT;
|
|
37
|
-
depositsign.address = "https://depositsign.com/api/v1/it-enterprise/sign-server";
|
|
38
|
-
depositsign.directAccess = true;
|
|
39
|
-
depositsign.needQRCode = false;
|
|
40
|
-
|
|
41
|
-
const diia = new KSPSettings();
|
|
42
|
-
diia.name = "Дія.Підпис";
|
|
43
|
-
diia.ksp = EndUserConstants.EU_KSP_DIIA;
|
|
44
|
-
diia.directAccess = true;
|
|
45
|
-
diia.mobileAppName = "Дія";
|
|
46
|
-
diia.address = "https://diia-sign.it.ua/KSPSign";
|
|
47
|
-
diia.systemId = "diia-sign-it-ent";
|
|
48
|
-
diia.needQRCode = true;
|
|
49
|
-
|
|
50
|
-
const smartId = new KSPSettings();
|
|
51
|
-
smartId.name = "Приватбанк - хмарний підпис \"SmartID\"";
|
|
52
|
-
smartId.ksp = EndUserConstants.EU_KSP_PB;
|
|
53
|
-
smartId.directAccess = true;
|
|
54
|
-
smartId.mobileAppName = "Приват24";
|
|
55
|
-
smartId.address = "https://acsk.privatbank.ua/cloud/api/back/";
|
|
56
|
-
smartId.clientIdPrefix = "IEIS_";
|
|
57
|
-
smartId.confirmationURL = "https://www.privat24.ua/rd/kep";
|
|
58
|
-
smartId.needQRCode = true;
|
|
59
|
-
|
|
60
|
-
const vchasno = new KSPSettings();
|
|
61
|
-
vchasno.name = "Вчасно - хмарний підпис";
|
|
62
|
-
vchasno.ksp = EndUserConstants.EU_KSP_IIT;
|
|
63
|
-
vchasno.address = "https://cs.vchasno.ua/ss/";
|
|
64
|
-
vchasno.directAccess = true;
|
|
65
|
-
vchasno.needQRCode = false;
|
|
66
|
-
|
|
67
|
-
const cloudKey = new KSPSettings();
|
|
68
|
-
cloudKey.name = "ТОВ «ЦСК «Україна» - хмарний підпис CloudKey";
|
|
69
|
-
cloudKey.ksp = EndUserConstants.EU_KSP_PB;
|
|
70
|
-
cloudKey.directAccess = true;
|
|
71
|
-
cloudKey.mobileAppName = "CloudKey";
|
|
72
|
-
cloudKey.address = "https://sid.uakey.com.ua/smartid/iit/";
|
|
73
|
-
cloudKey.clientIdPrefix = "DIIA_2";
|
|
74
|
-
cloudKey.confirmationURL = "https://sid.uakey.com.ua/kep?hash=rd/kep";
|
|
75
|
-
cloudKey.needQRCode = true;
|
|
76
|
-
|
|
77
|
-
const esign = new KSPSettings();
|
|
78
|
-
esign.name = "ESign - хмарний підпис";
|
|
79
|
-
esign.ksp = EndUserConstants.EU_KSP_IIT;
|
|
80
|
-
esign.address = "https://cabinet.e-life.com.ua/api/EDG/Sign";
|
|
81
|
-
esign.directAccess = true;
|
|
82
|
-
esign.needQRCode = false;
|
|
83
|
-
|
|
84
|
-
const idd = new KSPSettings();
|
|
85
|
-
idd.name = "ІДД ДПС - хмарний підпис";
|
|
86
|
-
idd.ksp = EndUserConstants.EU_KSP_IIT;
|
|
87
|
-
idd.address = "https://smart-sign.tax.gov.ua/";
|
|
88
|
-
idd.port = "443";
|
|
89
|
-
idd.directAccess = true;
|
|
90
|
-
idd.clientIdType = 1;
|
|
91
|
-
idd.needQRCode = false;
|
|
92
|
-
|
|
93
|
-
this._KSPs = {
|
|
94
|
-
depositsign,
|
|
95
|
-
diia,
|
|
96
|
-
smartId,
|
|
97
|
-
vchasno,
|
|
98
|
-
cloudKey,
|
|
99
|
-
esign,
|
|
100
|
-
idd,
|
|
101
|
-
asArray: function() {
|
|
102
|
-
return [
|
|
103
|
-
depositsign,
|
|
104
|
-
diia,
|
|
105
|
-
smartId,
|
|
106
|
-
vchasno,
|
|
107
|
-
cloudKey,
|
|
108
|
-
esign,
|
|
109
|
-
idd
|
|
110
|
-
];
|
|
111
|
-
}
|
|
112
|
-
};
|
|
34
|
+
/** @type {KSPSettings} */
|
|
35
|
+
this._KSPs = [];
|
|
113
36
|
|
|
114
37
|
/** @type {PrivateKeyInfo} */
|
|
115
38
|
this._readedKey = null;
|
|
@@ -508,7 +431,8 @@ export default class DigitalSignature {
|
|
|
508
431
|
* @param {boolean?} getCerts - Получать информацию о ключе пользователя. Это приведёт к дополнительному запросу на подписание
|
|
509
432
|
*/
|
|
510
433
|
async readPrivateKeyDepositsign(userId, getCerts = false) {
|
|
511
|
-
|
|
434
|
+
var deposit = this.KSPs.find(ksp => ksp.id === "depositsign");
|
|
435
|
+
return await this.readPrivateKeyKSP(userId, deposit, getCerts);
|
|
512
436
|
}
|
|
513
437
|
|
|
514
438
|
/**
|
|
@@ -516,7 +440,8 @@ export default class DigitalSignature {
|
|
|
516
440
|
* @param {boolean?} getCerts - Получать информацию о ключе пользователя. Это приведёт к дополнительному запросу на подписание
|
|
517
441
|
*/
|
|
518
442
|
async readPrivateKeyDiia(getCerts = false) {
|
|
519
|
-
|
|
443
|
+
var diia = this.KSPs.find(ksp => ksp.id === "diia-sign");
|
|
444
|
+
return await this.readPrivateKeyKSP(null, diia, getCerts);
|
|
520
445
|
}
|
|
521
446
|
|
|
522
447
|
/**
|
|
@@ -525,14 +450,14 @@ export default class DigitalSignature {
|
|
|
525
450
|
* @param {string?} userId - Идентификатор пользователя
|
|
526
451
|
* @param {boolean?} getCerts - Получать информацию о ключе пользователя. Это приведёт к дополнительному запросу на подписание
|
|
527
452
|
*/
|
|
528
|
-
async readPrivateKeyKSP(ksp, userId, getCerts = false) {
|
|
453
|
+
async readPrivateKeyKSP(ksp, userId, getCerts = false, keyId) {
|
|
529
454
|
await this.setLibraryType(DigitalSignatureKeyType.KSP);
|
|
530
455
|
|
|
531
456
|
if (ksp.ksp === EndUserConstants.EU_KSP_DIIA) {
|
|
532
|
-
await this._diiaCheckAccess();
|
|
457
|
+
await this._diiaCheckAccess(ksp);
|
|
533
458
|
}
|
|
534
459
|
|
|
535
|
-
const ownerInfo = await this._euSign.ReadPrivateKeyKSP(userId, ksp.name, getCerts);
|
|
460
|
+
const ownerInfo = await this._euSign.ReadPrivateKeyKSP(userId, ksp.name, getCerts, keyId);
|
|
536
461
|
if (getCerts && !ownerInfo) {
|
|
537
462
|
throw {
|
|
538
463
|
code: EndUserError.EU_ERROR_KEY_MEDIAS_READ_FAILED,
|
|
@@ -544,7 +469,8 @@ export default class DigitalSignature {
|
|
|
544
469
|
ownerInfo,
|
|
545
470
|
getCerts ? await this._euSign.GetOwnCertificates() : [],
|
|
546
471
|
userId,
|
|
547
|
-
ksp
|
|
472
|
+
ksp,
|
|
473
|
+
keyId
|
|
548
474
|
);
|
|
549
475
|
return this._readedKey;
|
|
550
476
|
}
|
|
@@ -570,7 +496,7 @@ export default class DigitalSignature {
|
|
|
570
496
|
* @returns {KSPSettings[]} Список поддержирживаемых облачных провайдеров
|
|
571
497
|
*/
|
|
572
498
|
get KSPs() {
|
|
573
|
-
return this.
|
|
499
|
+
return this._glSign.KSPs;
|
|
574
500
|
}
|
|
575
501
|
|
|
576
502
|
/**
|
|
@@ -632,7 +558,7 @@ export default class DigitalSignature {
|
|
|
632
558
|
signType = new EndUserSignContainerInfo();
|
|
633
559
|
signType.type = EndUserConstants.EndUserSignContainerType.CAdES;
|
|
634
560
|
signType.subType = EndUserConstants.EndUserCAdESType.Enveloped;
|
|
635
|
-
} else if (
|
|
561
|
+
} else if (isDefaultValue(signType)) {
|
|
636
562
|
// По умолчанию создаётся подпись CAdES Detached
|
|
637
563
|
signType = new EndUserSignContainerInfo();
|
|
638
564
|
signType.type = EndUserConstants.EndUserSignContainerType.CAdES;
|
|
@@ -1033,7 +959,7 @@ export default class DigitalSignature {
|
|
|
1033
959
|
key = new HardwarePrivateKeyInfo(key.keyType, key.ownerInfo, key.certificates, key.keyMedia);
|
|
1034
960
|
}
|
|
1035
961
|
else if (key.keyType == DigitalSignatureKeyType.KSP) {
|
|
1036
|
-
key = new KspPrivateKeyInfo(key.keyType, key.ownerInfo, key.certificates, key.userId, key.ksp);
|
|
962
|
+
key = new KspPrivateKeyInfo(key.keyType, key.ownerInfo, key.certificates, key.userId, key.ksp, key.keyId);
|
|
1037
963
|
}
|
|
1038
964
|
const certs = [];
|
|
1039
965
|
key.certificates.forEach(cert => {
|
|
@@ -1110,11 +1036,11 @@ export default class DigitalSignature {
|
|
|
1110
1036
|
/**
|
|
1111
1037
|
* Проверка доступности Дiя
|
|
1112
1038
|
*/
|
|
1113
|
-
async _diiaCheckAccess() {
|
|
1039
|
+
async _diiaCheckAccess(ksp) {
|
|
1114
1040
|
const diia = "DIIA";
|
|
1115
1041
|
if (sessionStorage[diia] != "+") {
|
|
1116
1042
|
try {
|
|
1117
|
-
sessionStorage[diia] = await downloadData(new URL(
|
|
1043
|
+
sessionStorage[diia] = await downloadData(new URL(ksp.address).origin + "/diia");
|
|
1118
1044
|
} catch {
|
|
1119
1045
|
throw {
|
|
1120
1046
|
code: EndUserError.EU_ERROR_TRANSMIT_REQUEST,
|
package/src/GlSign.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
/* eslint-disable no-magic-numbers */
|
|
2
|
+
|
|
3
|
+
import { getDefaultKSPs } from "./Models";
|
|
4
|
+
|
|
2
5
|
/**
|
|
3
6
|
* ПГУ GlSign
|
|
4
7
|
*/
|
|
@@ -68,6 +71,24 @@ export default class GlSign {
|
|
|
68
71
|
this.AgentSignWeb = this._getZoneValue(settingArray, 21) === "+";
|
|
69
72
|
this.TestCAConnection = this._getZoneValue(settingArray, 22) === "+";
|
|
70
73
|
this.DontSaveToRegistry = this._getZoneValue(settingArray, 23) === "+";
|
|
74
|
+
|
|
75
|
+
var ksps = this._getZoneValue(settingArray, 24);
|
|
76
|
+
if (!ksps) {
|
|
77
|
+
this.KSPs = getDefaultKSPs();
|
|
78
|
+
} else {
|
|
79
|
+
try {
|
|
80
|
+
ksps = Buffer.from(ksps, "base64").toString();
|
|
81
|
+
this.KSPs = JSON.parse(ksps);
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error("error parsing KSPs from GlSign");
|
|
84
|
+
console.error(error);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (!this.KSPs || this.KSPs.length === 0)
|
|
88
|
+
{
|
|
89
|
+
this.KSPs = getDefaultKSPs();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
71
92
|
}
|
|
72
93
|
_getZoneValue(zones, zone) {
|
|
73
94
|
if (zones.length >= zone) {
|
package/src/Models.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { EndUserCertificate, EndUserError, EndUserOwnerInfo, EndUserConstants } from "../euscp/euscp";
|
|
1
|
+
import { EndUserCertificate, EndUserError, EndUserOwnerInfo, EndUserConstants, KSPSettings } from "../euscp/euscp";
|
|
2
2
|
import GlSign from "./GlSign";
|
|
3
3
|
import { downloadData, byteArrayToBase64, base64ToByteArray, signAlgoToHashAlgo, getSupportedSignAlgos } from "./Utils";
|
|
4
4
|
|
|
5
|
-
const LIBRARY_VERSION = "1.3.
|
|
5
|
+
const LIBRARY_VERSION = "1.3.54";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Параметры библиотеки электронной подписи
|
|
@@ -279,6 +279,26 @@ export const DigitalSignatureKeyType = {
|
|
|
279
279
|
KSP: DigitalSignatureKeyTypeKSP,
|
|
280
280
|
};
|
|
281
281
|
|
|
282
|
+
export const EU_KSP_GRYADA = -1;
|
|
283
|
+
export const EU_KSP_IIT = 4;
|
|
284
|
+
export const EU_KSP_PB = 6;
|
|
285
|
+
export const EU_KSP_DIIA = 7;
|
|
286
|
+
|
|
287
|
+
export const EndUserKSP = {
|
|
288
|
+
IIT: EU_KSP_IIT,
|
|
289
|
+
PB: EU_KSP_PB,
|
|
290
|
+
DIIA: EU_KSP_DIIA,
|
|
291
|
+
GRYADA: EU_KSP_GRYADA
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export const EndUserKSPClientIdType = {
|
|
295
|
+
Default: 0,
|
|
296
|
+
Name: 1,
|
|
297
|
+
Phone: 2,
|
|
298
|
+
Email: 3,
|
|
299
|
+
NamePassword: -1
|
|
300
|
+
}
|
|
301
|
+
|
|
282
302
|
export class PrivateKeyInfo {
|
|
283
303
|
/**
|
|
284
304
|
* @param {number} keyType - Тип ключа
|
|
@@ -403,9 +423,77 @@ export class KspPrivateKeyInfo extends PrivateKeyInfo {
|
|
|
403
423
|
* @param {string} userId - Идентификатор пользователя
|
|
404
424
|
* @param {EndUserKSP} ksp - Объект KSP
|
|
405
425
|
*/
|
|
406
|
-
constructor(keyType, ownerInfo, certificates, userId, ksp) {
|
|
426
|
+
constructor(keyType, ownerInfo, certificates, userId, ksp, keyId) {
|
|
407
427
|
super(keyType, ownerInfo, certificates, userId, userId);
|
|
408
428
|
this.userId = userId;
|
|
409
429
|
this.ksp = ksp;
|
|
430
|
+
this.keyId = keyId;
|
|
410
431
|
}
|
|
411
432
|
}
|
|
433
|
+
|
|
434
|
+
export function getDefaultKSPs() {
|
|
435
|
+
const depositsign = new KSPSettings();
|
|
436
|
+
depositsign.id = "depositsign";
|
|
437
|
+
depositsign.name = "DepositSign";
|
|
438
|
+
depositsign.ksp = EndUserConstants.EU_KSP_IIT;
|
|
439
|
+
depositsign.address = "https://depositsign.com/api/v1/it-enterprise/sign-server";
|
|
440
|
+
depositsign.directAccess = true;
|
|
441
|
+
depositsign.needQRCode = false;
|
|
442
|
+
|
|
443
|
+
const diia = new KSPSettings();
|
|
444
|
+
diia.id = "diia-sign";
|
|
445
|
+
diia.name = "Дія.Підпис";
|
|
446
|
+
diia.ksp = EndUserConstants.EU_KSP_DIIA;
|
|
447
|
+
diia.directAccess = true;
|
|
448
|
+
diia.mobileAppName = "Дія";
|
|
449
|
+
diia.address = "https://diia-sign.it.ua/KSPSign";
|
|
450
|
+
diia.systemId = "diia-sign-it-ent";
|
|
451
|
+
diia.needQRCode = true;
|
|
452
|
+
|
|
453
|
+
const smartId = new KSPSettings();
|
|
454
|
+
smartId.id = "pb-smartid";
|
|
455
|
+
smartId.name = "Приватбанк - хмарний підпис \"SmartID\"";
|
|
456
|
+
smartId.ksp = EndUserConstants.EU_KSP_PB;
|
|
457
|
+
smartId.directAccess = true;
|
|
458
|
+
smartId.mobileAppName = "Приват24";
|
|
459
|
+
smartId.address = "https://acsk.privatbank.ua/cloud/api/back/";
|
|
460
|
+
smartId.clientIdPrefix = "IEIS_";
|
|
461
|
+
smartId.confirmationURL = "https://www.privat24.ua/rd/kep";
|
|
462
|
+
smartId.needQRCode = true;
|
|
463
|
+
|
|
464
|
+
const vchasno = new KSPSettings();
|
|
465
|
+
vchasno.id = "vchasno";
|
|
466
|
+
vchasno.name = "Вчасно - хмарний підпис";
|
|
467
|
+
vchasno.ksp = EndUserConstants.EU_KSP_IIT;
|
|
468
|
+
vchasno.address = "https://cs.vchasno.ua/ss/";
|
|
469
|
+
vchasno.directAccess = true;
|
|
470
|
+
vchasno.needQRCode = false;
|
|
471
|
+
|
|
472
|
+
const cloudKey = new KSPSettings();
|
|
473
|
+
cloudKey.id = "cloudkey";
|
|
474
|
+
cloudKey.name = "ТОВ «ЦСК «Україна» - хмарний підпис CloudKey";
|
|
475
|
+
cloudKey.ksp = EndUserConstants.EU_KSP_PB;
|
|
476
|
+
cloudKey.directAccess = true;
|
|
477
|
+
cloudKey.mobileAppName = "CloudKey";
|
|
478
|
+
cloudKey.address = "https://sid.uakey.com.ua/smartid/iit/";
|
|
479
|
+
cloudKey.clientIdPrefix = "DIIA_2";
|
|
480
|
+
cloudKey.confirmationURL = "https://sid.uakey.com.ua/kep?hash=rd/kep";
|
|
481
|
+
cloudKey.needQRCode = true;
|
|
482
|
+
|
|
483
|
+
const esign = new KSPSettings();
|
|
484
|
+
esign.id = "esign";
|
|
485
|
+
esign.name = "ESign - хмарний підпис";
|
|
486
|
+
esign.ksp = EndUserConstants.EU_KSP_IIT;
|
|
487
|
+
esign.address = "https://cabinet.e-life.com.ua/api/EDG/Sign";
|
|
488
|
+
esign.directAccess = true;
|
|
489
|
+
esign.needQRCode = false;
|
|
490
|
+
|
|
491
|
+
return [
|
|
492
|
+
depositsign,
|
|
493
|
+
diia,
|
|
494
|
+
smartId,
|
|
495
|
+
vchasno,
|
|
496
|
+
cloudKey,
|
|
497
|
+
esign
|
|
498
|
+
];
|
|
499
|
+
}
|
package/src/Utils.js
CHANGED
|
@@ -232,3 +232,7 @@ export async function downloadAndSignFiles(fileUrl, signFunc) {
|
|
|
232
232
|
return returnNamedData ? sign : (sign.val || sign);
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
|
+
|
|
236
|
+
export function isDefaultValue(value) {
|
|
237
|
+
return value === false || value === null || typeof value === "undefined";
|
|
238
|
+
}
|