@it-enterprise/digital-signature 1.1.6 → 1.2.1
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/.eslintrc.js +1 -4
- package/euscp/EndUserConstants.d.ts +44 -22
- package/euscp/EndUserSettings.d.ts +3 -1
- package/euscp/EndUserSignContainerInfo.d.ts +10 -0
- package/euscp/EndUserSignInfo.d.ts +2 -0
- package/euscp/euscp.d.ts +29 -4
- package/euscp/euscp.js +8 -8
- package/package.json +2 -1
- package/readme.md +300 -110
- package/src/DigitalSignature.js +444 -235
- package/src/Models.js +89 -118
- package/src/Resourses.json +30 -3
- package/src/Utils.js +57 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@it-enterprise/digital-signature",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "digital signature",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"homepage": "https://gitlab.com/it-enterprise/npm-packages/digital-signature#readme",
|
|
17
17
|
"devDependencies": {
|
|
18
|
+
"@babel/eslint-parser": "^7.18.9",
|
|
18
19
|
"eslint": "^7.18.0"
|
|
19
20
|
}
|
|
20
21
|
}
|
package/readme.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
Install-Package ItEnterprise.DigitalSignature.Web
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
Подключение
|
|
10
|
+
Подключение
|
|
11
11
|
|
|
12
12
|
```c#
|
|
13
13
|
using ItEnterprise.DigitalSignature.Web;
|
|
@@ -20,9 +20,12 @@ namespace TestApp.Web.NetCore
|
|
|
20
20
|
public void ConfigureServices(IServiceCollection services)
|
|
21
21
|
{
|
|
22
22
|
services.AddDigitalSignature(builder => builder
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
.AddCertiticateUpdatesService(
|
|
24
|
+
// Ссылка на веб-сервисы. Необходимо для обновления коревых сертификатов и списка ЦСК
|
|
25
|
+
"https://m.it.ua/ws",
|
|
26
|
+
// Получать значение параметра GlSign через веб-расчёт
|
|
27
|
+
false
|
|
28
|
+
).SetConfig(new DigitalSignatureConfiguration
|
|
26
29
|
{
|
|
27
30
|
// Использовать нативные библиотеки. true, если будет использоваться C# API ЕЦП. Нативные библиотеки необходимо устанавливать отдельными nuget пакетами
|
|
28
31
|
UseNativeLibraries = false,
|
|
@@ -41,37 +44,6 @@ namespace TestApp.Web.NetCore
|
|
|
41
44
|
}
|
|
42
45
|
```
|
|
43
46
|
|
|
44
|
-
Подключение .net framework
|
|
45
|
-
|
|
46
|
-
```c#
|
|
47
|
-
using ItEnterprise.DigitalSignature.Web;
|
|
48
|
-
using ItEnterprise.DigitalSignature.Models;
|
|
49
|
-
|
|
50
|
-
namespace TestApp.Web.NetFramework
|
|
51
|
-
{
|
|
52
|
-
public class Global : System.Web.HttpApplication
|
|
53
|
-
{
|
|
54
|
-
protected void Application_Start(object sender, EventArgs e)
|
|
55
|
-
{
|
|
56
|
-
this.UseDigitalSignature(ds => ds
|
|
57
|
-
// Путь, по которому будет доступно API ЕЦП
|
|
58
|
-
.MapRoute("api/ds/")
|
|
59
|
-
// Ссылка на веб-сервисы. Необходимо для обновления коревых сертификатов и списка ЦСК
|
|
60
|
-
.SetWsUri("https://m.it.ua/ws")
|
|
61
|
-
.SetConfig(new DigitalSignatureConfiguration
|
|
62
|
-
{
|
|
63
|
-
// Использовать нативные библиотеки. true, если будет использоваться C# API ЕЦП. Нативные библиотеки необходимо устанавливать отдельными nuget пакетами
|
|
64
|
-
UseNativeLibraries = false,
|
|
65
|
-
GlSign = new GlSignInfo {
|
|
66
|
-
// Разрешать использовать тестовые ключи
|
|
67
|
-
AllowTestKeys = true
|
|
68
|
-
}
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
47
|
# Установка
|
|
76
48
|
|
|
77
49
|
[@it-enterprise/digital-signature](https://www.npmjs.com/package/@it-enterprise/digital-signature)
|
|
@@ -94,34 +66,71 @@ import {
|
|
|
94
66
|
|
|
95
67
|
# Инициализация
|
|
96
68
|
|
|
97
|
-
|
|
98
|
-
|
|
69
|
+
Смена типа библиотеки
|
|
99
70
|
```javascript
|
|
100
|
-
import auth from '@it-enterprise/jwtauthentication';
|
|
101
|
-
|
|
102
71
|
const ds = new DigitalSignature(
|
|
103
|
-
new Models.
|
|
104
|
-
"uk", // Язык ошибок
|
|
105
|
-
userId, // id пользователя (для сохранения ключей и предпочитаемого типа ключа)
|
|
106
|
-
"
|
|
107
|
-
"https://m.it.ua/ws/", // Адрес веб-сервисов
|
|
108
|
-
auth) // Библиотека @it-enterprise/jwtauthentication
|
|
72
|
+
new Models.DefaultSettingProvider(
|
|
73
|
+
"uk", // Язык ошибок (строка, или функция, возвращающая строку)
|
|
74
|
+
userId, // id пользователя (для сохранения ключей и предпочитаемого типа ключа) (строка, или функция, возвращающая строку)
|
|
75
|
+
location.pathname + "api/ds/") // Путь к API ЕЦП
|
|
109
76
|
);
|
|
110
|
-
|
|
77
|
+
Возвращает текущий тип ключа (файловый, аппаратный, облачный)
|
|
78
|
+
const currentKeyType = await ds.initialise();
|
|
79
|
+
```
|
|
80
|
+
Сменить тип библиотеки
|
|
81
|
+
```javascript
|
|
82
|
+
/** Подпись файловыми ключами, через облачные сервисы */
|
|
83
|
+
export const DigitalSignatureLibraryTypeJS = 0;
|
|
84
|
+
/** Подпись аппартными ключами */
|
|
85
|
+
export const DigitalSignatureLibraryTypeSW = 1;
|
|
86
|
+
/**
|
|
87
|
+
* Типы библиотеки
|
|
88
|
+
*/
|
|
89
|
+
export const DigitalSignatureLibraryType = {
|
|
90
|
+
/** Подпись файловыми ключами и через облачные сервисы */
|
|
91
|
+
JS: DigitalSignatureLibraryTypeJS,
|
|
92
|
+
/** Подпись аппартными ключами */
|
|
93
|
+
SW: DigitalSignatureLibraryTypeSW
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
await ds.setLibraryType(type);
|
|
111
97
|
```
|
|
112
98
|
|
|
113
|
-
|
|
99
|
+
# Центры сертификации ключей
|
|
114
100
|
|
|
101
|
+
Получение списка сертификации ключей
|
|
115
102
|
```javascript
|
|
116
|
-
const
|
|
117
|
-
new Models.DefaultSettingProvider(
|
|
118
|
-
"uk", // Язык ошибок
|
|
119
|
-
userId, // id пользователя (для сохранения ключей и предпочитаемого типа ключа)
|
|
120
|
-
location.pathname + "api/ds/", // Путь к API ЕЦП
|
|
121
|
-
glSign) // Значение глобального параметра GlSign в виде строки или обьекта Models.GlSign
|
|
122
|
-
);
|
|
123
|
-
await ds.initialise();
|
|
103
|
+
const cas = await ds.getCAs();
|
|
124
104
|
```
|
|
105
|
+
Установить центр сертификации ключей
|
|
106
|
+
```javascript
|
|
107
|
+
// Предоставить возможность пользователю выбирать ЦСК. Для автоматического определения ЦСК установить значение null
|
|
108
|
+
const ca = cas[0];
|
|
109
|
+
await ds.setCA(ca);
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Проверить, поддерживает ли ЦСК автоматическую загрузку сертификатов
|
|
113
|
+
Если ЦСК не поддерживает автоматическую загрузку сертификатов, нужно предоставить возможность пользователю вручную указать сертификаты
|
|
114
|
+
```javascript
|
|
115
|
+
const needCerts = ds.needPrivateKeyCertificates();
|
|
116
|
+
```
|
|
117
|
+
Структура объекта CASettings
|
|
118
|
+
```javascript
|
|
119
|
+
class CASettings {
|
|
120
|
+
// Названия ЦСК (обычно используется первое из списка)
|
|
121
|
+
issuerCNs: Array<string>;
|
|
122
|
+
address: string;
|
|
123
|
+
ocspAccessPointAddress: string;
|
|
124
|
+
ocspAccessPointPort: string;
|
|
125
|
+
cmpAddress: string;
|
|
126
|
+
tspAddress: string;
|
|
127
|
+
tspAddressPort: string;
|
|
128
|
+
directAccess: boolean;
|
|
129
|
+
certsInKey: boolean;
|
|
130
|
+
cmpCompatibility: number;
|
|
131
|
+
qscdSNInCert: boolean;
|
|
132
|
+
}
|
|
133
|
+
```
|
|
125
134
|
|
|
126
135
|
# Файловые ключи
|
|
127
136
|
|
|
@@ -190,50 +199,87 @@ const keyInfo = await ds.readHardwareKey(
|
|
|
190
199
|
);
|
|
191
200
|
```
|
|
192
201
|
|
|
193
|
-
#
|
|
202
|
+
# Облачные ключи
|
|
194
203
|
|
|
195
|
-
|
|
204
|
+
Провайдеры облачныч ключей есть 2х видов: работающие через QR код (Дія.Підпис, SmartID, CloudKey) и через ID пользователя (DepositSign, ESign, Вчасно)
|
|
205
|
+
Получение списока провайдеров облачных ключей
|
|
196
206
|
|
|
197
207
|
```javascript
|
|
198
|
-
const
|
|
199
|
-
// Номер телефона пользователя
|
|
200
|
-
phone,
|
|
201
|
-
// Оператор. Kyivstar - 1, Vodafone - 2, Lifecell - 3
|
|
202
|
-
operatorId,
|
|
203
|
-
// Номер ключа. Для Kyivstar всегда 0, для Vodafone и Lifecell: физ. лицо - 1, юр. лицо - 2
|
|
204
|
-
keyId,
|
|
205
|
-
// Получать информацию о сертификатах пользователя.
|
|
206
|
-
// true - поля ownerInfo и certificates будут заполены, но пользователь получит дополнительный запрос на подписание
|
|
207
|
-
// false - поля ownerInfo и certificates будут пустыми, но пользователь не получит дополнительный запрос на подписание
|
|
208
|
-
false);
|
|
208
|
+
const ksps = ds.KSPs;
|
|
209
209
|
```
|
|
210
210
|
|
|
211
|
-
|
|
211
|
+
Содержимое обьекта KSP
|
|
212
212
|
|
|
213
|
-
|
|
213
|
+
```javascript
|
|
214
|
+
class KSPSettings {
|
|
215
|
+
// Название провайдера
|
|
216
|
+
name: string;
|
|
217
|
+
// Провайдер работает через QR код или через ID пользователя
|
|
218
|
+
needQRCode: boolean;
|
|
219
|
+
// Тип ID пользователя (имя пользователя/телефон/email)
|
|
220
|
+
clientIdType?: EndUserKSPClientIdType;
|
|
221
|
+
ksp: EndUserKSP;
|
|
222
|
+
address?: string;
|
|
223
|
+
port?: string;
|
|
224
|
+
directAccess?: boolean;
|
|
225
|
+
clientIdPrefix?: string;
|
|
226
|
+
confirmationURL?: string;
|
|
227
|
+
mobileAppName?: string;
|
|
228
|
+
pollingInterval?: number;
|
|
229
|
+
systemId?: string;
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Для ключей, работающих через QR код, после инициализации библиотеки нужно подписаться на событие подтверждения операции
|
|
214
234
|
|
|
215
235
|
```javascript
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
236
|
+
ds.addConfirmKSPOperationEventListener(eventArgs => { ... });
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Событие будет вызываться при:
|
|
240
|
+
1. Считывании ключа с getCerts = true
|
|
241
|
+
2. Подписании данных
|
|
242
|
+
|
|
243
|
+
**Важно!** При необходимости подписать несколько файлов, нужно передавать их в функцию подписания все за раз в массиве. Иначе пользователю придётся подтверждать подписание каждого файла отдельно
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
Структура объекта, приходящего в коллбек события
|
|
247
|
+
```javascript
|
|
248
|
+
class EndUserConfirmKSPOperationEvent {
|
|
249
|
+
// Ссылка на подтверждение операции
|
|
250
|
+
url: string;
|
|
251
|
+
// QR код в формате data:image/bmp для подстановки в <img scr='...' />
|
|
252
|
+
qrCode: string;
|
|
253
|
+
// Название мобильного приложения, в котором нужно подтвердить выполнение операции
|
|
254
|
+
mobileAppName: string;
|
|
255
|
+
// Время, до которого действует ссылка
|
|
256
|
+
expireDate: Date;
|
|
257
|
+
}
|
|
223
258
|
```
|
|
259
|
+
QR код нужно отобразить пользовтелю, что бы он мог отсканировать его в приложении и подтвердить подписание
|
|
260
|
+
Для отображения QR кода можно использовать содержимое поля qrCode, либо сгенерировать его на основе ссылки из поля url
|
|
261
|
+
Для мобильных устройств должна быть возможность переходя по ссылке из поля url, для возможности сразу запустить соответствующее приложение
|
|
224
262
|
|
|
225
|
-
# Дiя
|
|
226
263
|
|
|
227
264
|
Считывание ключа
|
|
228
265
|
|
|
229
266
|
```javascript
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
267
|
+
// Предоставить пользователю возможность выбрать провайдера ключей
|
|
268
|
+
const ksp = ds.KSPs[0];
|
|
269
|
+
|
|
270
|
+
const keyInfo = await ds.readPrivateKeyKSP(
|
|
271
|
+
// Объект KSP из списка ds.KSPs
|
|
272
|
+
ksp
|
|
273
|
+
// Идентификатор пользователя - для провайдеров ключей, работающих через ID пользователя
|
|
274
|
+
// Для провайдеров ключей, работающих через QR код - null
|
|
275
|
+
userID,
|
|
276
|
+
// Получать информацию о сертификатах пользователя
|
|
277
|
+
// true - поля ownerInfo и certificates в keyInfo будут заполены, но пользователю нужно будет подтвердить дополнительную операцию подписания
|
|
278
|
+
// false - поля ownerInfo и certificates в keyInfo будут пустыми, но пользователь не получит дополнительный запрос на подписание
|
|
279
|
+
getCerts = false);
|
|
235
280
|
```
|
|
236
281
|
|
|
282
|
+
|
|
237
283
|
# Сохранение ключей
|
|
238
284
|
|
|
239
285
|
Сохранить ключ
|
|
@@ -262,16 +308,166 @@ await ds.removeStoredPrivateKeyInfo(
|
|
|
262
308
|
keyId
|
|
263
309
|
```
|
|
264
310
|
|
|
265
|
-
#
|
|
311
|
+
# Создание подписей
|
|
312
|
+
|
|
313
|
+
## Формат подписи
|
|
314
|
+
|
|
315
|
+
Функции создания подписей поддерживают возможность выбирать формат контейнера подписи
|
|
316
|
+
Формат подписи указывается в опциональном параметре signFormat
|
|
317
|
+
По умолчанию используется формат подписи CAdES Detached
|
|
318
|
+
|
|
319
|
+
Структура объекта, описывающего формат подписи
|
|
320
|
+
|
|
321
|
+
```javascript
|
|
322
|
+
class EndUserSignContainerInfo {
|
|
323
|
+
// Тип контейнера подписи
|
|
324
|
+
type: EndUserSignContainerType;
|
|
325
|
+
// Уточняющий тип подписи
|
|
326
|
+
subType: EndUserCAdESType | EndUserXAdESType | EndUserASiCType;
|
|
327
|
+
// Тип подписи в ASiC контейнере (только для ASiC контейнеров)
|
|
328
|
+
asicSignType: EndUserASiCSignType;
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
Типы контейнеров подписи
|
|
332
|
+
```javascript
|
|
333
|
+
const EU_SIGN_CONTAINER_TYPE_CADES = 1;
|
|
334
|
+
const EU_SIGN_CONTAINER_TYPE_XADES = 2;
|
|
335
|
+
const EU_SIGN_CONTAINER_TYPE_PADES = 3;
|
|
336
|
+
const EU_SIGN_CONTAINER_TYPE_ASIC = 4;
|
|
337
|
+
enum EndUserSignContainerType {
|
|
338
|
+
// CMS подпись в двоичном формате. Используется по умолчанию
|
|
339
|
+
CAdES,
|
|
340
|
+
// Подпись в формате XML. Может содержать одновременно несколько наборов данных
|
|
341
|
+
XAdES,
|
|
342
|
+
// Подпись в PDF документе (Работает только с PDF файлами)
|
|
343
|
+
PAdES,
|
|
344
|
+
// Контейнер для подписей в виде ZIP-архива
|
|
345
|
+
ASiC
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
Типы подписей CAdES
|
|
349
|
+
```javascript
|
|
350
|
+
const EU_CADES_TYPE_DETACHED = 1;
|
|
351
|
+
const EU_CADES_TYPE_ENVELOPED = 3;
|
|
352
|
+
enum EndUserCAdESType {
|
|
353
|
+
// Подпись отдельно от данных (внешняя подпись). Используется по умолчанию
|
|
354
|
+
Detached,
|
|
355
|
+
// Подпись в одном контейнере с данными (внутренняя подпись)
|
|
356
|
+
Enveloped
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
Типы подписей XAdES
|
|
360
|
+
```javascript
|
|
361
|
+
const EU_XADES_TYPE_DETACHED = 1;
|
|
362
|
+
const EU_XADES_TYPE_ENVELOPED = 3;
|
|
363
|
+
enum EndUserXAdESType {
|
|
364
|
+
// Подпись отдельно от данных (внешняя подпись)
|
|
365
|
+
Detached,
|
|
366
|
+
// Подпись в одном контейнере с данными (внутренняя подпись)
|
|
367
|
+
Enveloped
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
Типы контейнеров ASiC
|
|
371
|
+
```javascript
|
|
372
|
+
const EU_ASIC_TYPE_S = 1;
|
|
373
|
+
const EU_ASIC_TYPE_E = 2;
|
|
374
|
+
enum EndUserASiCType {
|
|
375
|
+
// Простой контейнер, содержащий 1 файл с данными и 1 подпись
|
|
376
|
+
S,
|
|
377
|
+
// Расширенный контейнер, может содержать несколько файлов с данными и несколько подписей
|
|
378
|
+
E
|
|
379
|
+
}
|
|
380
|
+
```
|
|
381
|
+
Типы подписей, которые могут содержаться в ASiC контейнере
|
|
382
|
+
```javascript
|
|
383
|
+
const EU_ASIC_SIGN_TYPE_CADES = 1;
|
|
384
|
+
const EU_ASIC_SIGN_TYPE_XADES = 2;
|
|
385
|
+
enum EndUserASiCSignType {
|
|
386
|
+
CAdES,
|
|
387
|
+
XAdES
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Пример использования формата подписи:
|
|
392
|
+
```javascript
|
|
393
|
+
const file = {
|
|
394
|
+
name: "file.pdf",
|
|
395
|
+
val: "ссылка на загрузку файла"
|
|
396
|
+
};
|
|
397
|
+
// Формат ASiC-S с подписью XAdES
|
|
398
|
+
const asicsformat = {
|
|
399
|
+
type: EndUserSignContainerType.ASiC,
|
|
400
|
+
subType: EndUserASiCType.S,
|
|
401
|
+
asicSignType: EndUserASiCSignType.XAdES
|
|
402
|
+
};
|
|
403
|
+
// Формат PAdES
|
|
404
|
+
const padesformat = {
|
|
405
|
+
type: EndUserSignContainerType.PAdES,
|
|
406
|
+
};
|
|
407
|
+
// Внутренняя CAdES подпись
|
|
408
|
+
const cadesformat {
|
|
409
|
+
type: EndUserSignContainerType.CAdES,
|
|
410
|
+
subType: EndUserCAdESType.Enveloped
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
const asics = await ds.signFile(file, asicsformat);
|
|
414
|
+
const pades = await ds.signFile(file, padesformat);
|
|
415
|
+
const cades = await ds.signFile(file, cadesformat);
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
const signatures = await ds.signFile(files);
|
|
419
|
+
|
|
420
|
+
## Формат передачи данных
|
|
421
|
+
|
|
422
|
+
Все функции создания подписей поддерживают следующие форматы передачи данных:
|
|
423
|
+
1. Одиночный набор данных (в зависимости от функции - ссылка на загрузку файла, данные в base64 или Uint8Array и т.д.)
|
|
424
|
+
2. Данные в массиве (данные как в п.1, только в массиве). Подписи так же будут возвращены в массиве
|
|
425
|
+
3. Именованные данные (данные в объекте NamedData, содержащем имя набора данных и сами данные). Подпись так же будет возвращена в объекте NamedData
|
|
426
|
+
4. Именованные данные в массиве (данные как в п.3, только в массиве). Результатом выполения функций будет являться массив обьектов NamedData с подписями
|
|
427
|
+
**Для лучшей поддержки всех форматов подписей и типов ключей, рекомендуется использовать формат из п.4**
|
|
428
|
+
|
|
429
|
+
Структура объекта NamedData
|
|
430
|
+
```javascript
|
|
431
|
+
declare type NamedData = {
|
|
432
|
+
// Имя набора данных
|
|
433
|
+
name: string;
|
|
434
|
+
// В качестве параметра при создании подписи: в зависимости от функции - ссылка на загрузку файла, данные в base64 или Uint8Array и т.д.
|
|
435
|
+
// В качестве возвращаемого результата: контейнер с подписью
|
|
436
|
+
val: string | Uint8Array;
|
|
437
|
+
};
|
|
438
|
+
```
|
|
439
|
+
Пример использования формата именованных данных
|
|
440
|
+
```javascript
|
|
441
|
+
const files = [{
|
|
442
|
+
name: "file1.docx",
|
|
443
|
+
val: "ссылка на загрузку первого файла"
|
|
444
|
+
}, {
|
|
445
|
+
name: "file2.pdf",
|
|
446
|
+
val: "ссылка на загрузку второго файла"
|
|
447
|
+
}];
|
|
448
|
+
|
|
449
|
+
const signatures = await ds.signFile(files);
|
|
450
|
+
console.log(signatures);
|
|
451
|
+
// Результат
|
|
452
|
+
[{
|
|
453
|
+
name: "file1.docx",
|
|
454
|
+
val: "подпись первого файла"
|
|
455
|
+
}, {
|
|
456
|
+
name: "file2.pdf",
|
|
457
|
+
val: "подпись второго файла"
|
|
458
|
+
}]
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
## Функции для создания подписей
|
|
266
462
|
|
|
267
463
|
Подписание данных
|
|
268
464
|
|
|
269
465
|
```javascript
|
|
270
466
|
const sign = await ds.signData(
|
|
271
|
-
// Данные в виде Uint8Array или строки base64
|
|
467
|
+
// Данные в виде Uint8Array или строки base64
|
|
272
468
|
data,
|
|
273
|
-
//
|
|
274
|
-
|
|
469
|
+
// Формат подписи
|
|
470
|
+
signFormat,
|
|
275
471
|
// true - вернуть результат в виде массива байт,false - в виде строки base64. по умолчанию false
|
|
276
472
|
false);
|
|
277
473
|
```
|
|
@@ -280,34 +476,30 @@ const sign = await ds.signData(
|
|
|
280
476
|
|
|
281
477
|
```javascript
|
|
282
478
|
const sign = await ds.signFile(
|
|
283
|
-
// Ссылка на загрузку файла (например, с веб-сервисов)
|
|
479
|
+
// Ссылка на загрузку файла (например, с веб-сервисов)
|
|
284
480
|
data,
|
|
285
|
-
//
|
|
286
|
-
|
|
481
|
+
// Формат подписи. [Формат подписи]
|
|
482
|
+
signFormat,
|
|
287
483
|
// true - вернуть результат в виде массива байт,false - в виде строки base64. по умолчанию false
|
|
288
484
|
false);
|
|
289
485
|
```
|
|
290
486
|
|
|
291
|
-
Подписание хеша
|
|
487
|
+
Подписание хеша в формате CAdES Detached
|
|
292
488
|
|
|
293
489
|
```javascript
|
|
294
490
|
const sign = await ds.signHash(
|
|
295
|
-
// Хеш в виде Uint8Array или строки base64
|
|
296
|
-
|
|
297
|
-
// true - внутренняя подпись, false - внешняя. по умолчанию false
|
|
298
|
-
false,
|
|
491
|
+
// Хеш в виде Uint8Array или строки base64
|
|
492
|
+
hash,
|
|
299
493
|
// true - вернуть результат в виде массива байт,false - в виде строки base64. по умолчанию false
|
|
300
494
|
false);
|
|
301
495
|
```
|
|
302
496
|
|
|
303
|
-
Подписание хеша из файла
|
|
497
|
+
Подписание хеша из файла в формате CAdES Detached
|
|
304
498
|
|
|
305
499
|
```javascript
|
|
306
500
|
const sign = await ds.signFileHash(
|
|
307
|
-
// Ссылка на загрузку файла с
|
|
501
|
+
// Ссылка на загрузку файла с хешем
|
|
308
502
|
data,
|
|
309
|
-
// true - внутренняя подпись, false - внешняя. по умолчанию false
|
|
310
|
-
false,
|
|
311
503
|
// true - вернуть результат в виде массива байт,false - в виде строки base64. по умолчанию false
|
|
312
504
|
false);
|
|
313
505
|
```
|
|
@@ -316,28 +508,26 @@ const sign = await ds.signFileHash(
|
|
|
316
508
|
|
|
317
509
|
```javascript
|
|
318
510
|
const sign = await ds.signDataEx(
|
|
319
|
-
// Данные в виде Uint8Array или строки base64
|
|
511
|
+
// Данные в виде Uint8Array или строки base64
|
|
320
512
|
data,
|
|
321
|
-
//
|
|
322
|
-
|
|
513
|
+
// Формат подписи
|
|
514
|
+
signFormat);
|
|
323
515
|
```
|
|
324
516
|
|
|
325
517
|
Подписание файла с получением информации о подписи
|
|
326
518
|
|
|
327
519
|
```javascript
|
|
328
520
|
const sign = await ds.signFileEx(
|
|
329
|
-
// Ссылка на загрузку файла (например, с веб-сервисов)
|
|
521
|
+
// Ссылка на загрузку файла (например, с веб-сервисов)
|
|
330
522
|
data,
|
|
331
|
-
//
|
|
332
|
-
|
|
523
|
+
// Формат подписи
|
|
524
|
+
signFormat);
|
|
333
525
|
```
|
|
334
526
|
|
|
335
|
-
Подписание хеша с получением информации о подписи
|
|
527
|
+
Подписание хеша в формате CAdES Detached с получением информации о подписи
|
|
336
528
|
|
|
337
529
|
```javascript
|
|
338
530
|
const sign = await ds.signHashEx(
|
|
339
|
-
// Хеш в виде Uint8Array или строки base64
|
|
340
|
-
data
|
|
341
|
-
// true - внутренняя подпись, false - внешняя. по умолчанию false
|
|
342
|
-
false);
|
|
531
|
+
// Хеш в виде Uint8Array или строки base64
|
|
532
|
+
data);
|
|
343
533
|
```
|