@it-enterprise/digital-signature 1.3.0 → 1.3.2

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@it-enterprise/digital-signature",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "digital signature",
5
5
  "private": false,
6
6
  "main": "src/index.js",
package/readme.md CHANGED
@@ -504,18 +504,20 @@ await ds.removeStoredPrivateKeyInfo(
504
504
 
505
505
  Функции создания подписей поддерживают возможность выбирать формат контейнера подписи
506
506
  Формат подписи указывается в опциональном параметре signFormat
507
- По умолчанию используется формат подписи CAdES Detached
507
+ По умолчанию используется формат подписи CAdES-X-Long Detached
508
508
 
509
509
  Структура объекта, описывающего формат подписи
510
510
 
511
511
  ```javascript
512
512
  class EndUserSignContainerInfo {
513
- // Тип контейнера подписи
514
- type: EndUserSignContainerType;
515
- // Уточняющий тип подписи
516
- subType: EndUserCAdESType | EndUserXAdESType | EndUserASiCType;
517
- // Тип подписи в ASiC контейнере (только для ASiC контейнеров)
518
- asicSignType: EndUserASiCSignType;
513
+ // Тип контейнера подписи
514
+ type: EndUserSignContainerType;
515
+ // Уточняющий тип подписи
516
+ subType: EndUserCAdESType | EndUserXAdESType | EndUserASiCType;
517
+ // Тип подписи в ASiC контейнере (только для ASiC контейнеров)
518
+ asicSignType: EndUserASiCSignType;
519
+ // Уровень подписи
520
+ signLevel: EndUserSignType | EndUserXAdESSignLevel | EndUserPAdESSignLevel;
519
521
  }
520
522
  import { EUSignCP.EndUserSignContainerInfo } from "@it-enterprise/digital-signature";
521
523
  ```
@@ -526,14 +528,14 @@ const EU_SIGN_CONTAINER_TYPE_XADES = 2;
526
528
  const EU_SIGN_CONTAINER_TYPE_PADES = 3;
527
529
  const EU_SIGN_CONTAINER_TYPE_ASIC = 4;
528
530
  enum EndUserSignContainerType {
529
- // CMS подпись в двоичном формате. Используется по умолчанию
530
- CAdES,
531
- // Подпись в формате XML. Может содержать одновременно несколько наборов данных
532
- XAdES,
533
- // Подпись в PDF документе (Работает только с PDF файлами)
534
- PAdES,
535
- // Контейнер для подписей в виде ZIP-архива
536
- ASiC
531
+ // CMS подпись в двоичном формате. Используется по умолчанию
532
+ CAdES,
533
+ // Подпись в формате XML. Может содержать одновременно несколько наборов данных
534
+ XAdES,
535
+ // Подпись в PDF документе (Работает только с PDF файлами)
536
+ PAdES,
537
+ // Контейнер для подписей в виде ZIP-архива
538
+ ASiC
537
539
  }
538
540
  import { EUSignCP.EndUserConstants.EndUserSignContainerType } from "@it-enterprise/digital-signature";
539
541
  ```
@@ -542,25 +544,67 @@ import { EUSignCP.EndUserConstants.EndUserSignContainerType } from "@it-enterpri
542
544
  const EU_CADES_TYPE_DETACHED = 1;
543
545
  const EU_CADES_TYPE_ENVELOPED = 3;
544
546
  enum EndUserCAdESType {
545
- // Подпись отдельно от данных (внешняя подпись). Используется по умолчанию
546
- Detached,
547
- // Подпись в одном контейнере с данными (внутренняя подпись)
548
- Enveloped
547
+ // Подпись отдельно от данных (внешняя подпись). Используется по умолчанию
548
+ Detached,
549
+ // Подпись в одном контейнере с данными (внутренняя подпись)
550
+ Enveloped
549
551
  }
550
552
  import { EUSignCP.EndUserConstants.EndUserCAdESType } from "@it-enterprise/digital-signature";
551
553
  ```
554
+ Уровни подписей CAdES
555
+ ```javascript
556
+ export declare const EU_SIGN_TYPE_CADES_BES = 1;
557
+ export declare const EU_SIGN_TYPE_CADES_T = 4;
558
+ export declare const EU_SIGN_TYPE_CADES_X_LONG = 16;
559
+ export declare enum EndUserSignType {
560
+ // Базовая подпись
561
+ CAdES_BES,
562
+ // Подпись с меткой времени
563
+ CAdES_T,
564
+ // Подпись для длительного хранения с полными данными для проверки
565
+ CAdES_X_Long
566
+ }
567
+ import { EUSignCP.EndUserConstants.EndUserSignType } from "@it-enterprise/digital-signature";
568
+ ```
552
569
  Типы подписей XAdES
553
570
  ```javascript
554
571
  const EU_XADES_TYPE_DETACHED = 1;
555
572
  const EU_XADES_TYPE_ENVELOPED = 3;
556
573
  enum EndUserXAdESType {
557
- // Подпись отдельно от данных (внешняя подпись)
558
- Detached,
559
- // Подпись в одном контейнере с данными (внутренняя подпись) !! Данные могут быть только в формате XML !!
560
- Enveloped
574
+ // Подпись отдельно от данных (внешняя подпись)
575
+ Detached,
576
+ // Подпись в одном контейнере с данными (внутренняя подпись) !! Данные могут быть только в формате XML !!
577
+ Enveloped
561
578
  }
562
579
  import { EUSignCP.EndUserConstants.EndUserXAdESType } from "@it-enterprise/digital-signature";
563
580
  ```
581
+ Уровни подписей XAdES
582
+ ```javascript
583
+ export declare const EU_XADES_SIGN_LEVEL_B_B = 1;
584
+ export declare const EU_XADES_SIGN_LEVEL_B_T = 4;
585
+ export declare const EU_XADES_SIGN_LEVEL_B_LT = 16;
586
+ export declare enum EndUserXAdESSignLevel {
587
+ // Базовая подпись
588
+ B_B,
589
+ // Подпись с меткой времени
590
+ B_T,
591
+ // Подпись для длительного хранения с полными данными для проверки
592
+ B_LT
593
+ }
594
+ import { EUSignCP.EndUserConstants.EndUserXAdESSignLevel } from "@it-enterprise/digital-signature";
595
+ ```
596
+ Уровни подписей PAdES
597
+ ```javascript
598
+ export declare const EU_PADES_SIGN_LEVEL_B_B = 1;
599
+ export declare const EU_PADES_SIGN_LEVEL_B_T = 4;
600
+ export declare enum EndUserPAdESSignLevel {
601
+ // Базовая подпись
602
+ B_B,
603
+ // Подпись с меткой времени
604
+ B_T
605
+ }
606
+ import { EUSignCP.EndUserConstants.EndUserPAdESSignLevel } from "@it-enterprise/digital-signature";
607
+ ```
564
608
  Типы контейнеров ASiC
565
609
  ```javascript
566
610
  const EU_ASIC_TYPE_S = 1;
@@ -594,16 +638,19 @@ const file = {
594
638
  const asicsformat = {
595
639
  type: EndUserSignContainerType.ASiC,
596
640
  subType: EndUserASiCType.S,
597
- asicSignType: EndUserASiCSignType.XAdES
641
+ asicSignType: EndUserASiCSignType.XAdES,
642
+ signLevel: EndUserXAdESSignLevel.B_LT
598
643
  };
599
644
  // Формат PAdES
600
645
  const padesformat = {
601
646
  type: EndUserSignContainerType.PAdES,
647
+ signLevel: EndUserPAdESSignLevel.B_T
602
648
  };
603
649
  // Внутренняя CAdES подпись
604
650
  const cadesformat {
605
651
  type: EndUserSignContainerType.CAdES,
606
- subType: EndUserCAdESType.Enveloped
652
+ subType: EndUserCAdESType.Enveloped,
653
+ signLevel: EndUserSignType.CAdES_X_Long
607
654
  };
608
655
 
609
656
  const asics = await ds.signFile(file, asicsformat);
@@ -596,11 +596,13 @@ export default class DigitalSignature {
596
596
  signType = new EndUserSignContainerInfo();
597
597
  signType.type = EndUserConstants.EndUserSignContainerType.CAdES;
598
598
  signType.subType = EndUserConstants.EndUserCAdESType.Enveloped;
599
+ signType.signLevel = EndUserConstants.EndUserSignType.CAdES_X_Long;
599
600
  } else if (isDefaultValue(signType)) {
600
601
  // По умолчанию создаётся подпись CAdES Detached
601
602
  signType = new EndUserSignContainerInfo();
602
603
  signType.type = EndUserConstants.EndUserSignContainerType.CAdES;
603
604
  signType.subType = EndUserConstants.EndUserCAdESType.Detached;
605
+ signType.signLevel = EndUserConstants.EndUserSignType.CAdES_X_Long;
604
606
  }
605
607
  if (typeof asByteArray !== "boolean") {
606
608
  asByteArray = false;
@@ -614,7 +616,7 @@ export default class DigitalSignature {
614
616
  }
615
617
 
616
618
  if (signType.type === EndUserConstants.EndUserSignContainerType.ASiC) {
617
- const signLevel = signType.asicSignType === EndUserConstants.EndUserASiCSignType.CAdES ? EndUserConstants.EndUserSignType.CAdES_X_Long : EndUserConstants.EndUserXAdESSignLevel.B_LT;
619
+ const signLevel = signType.signLevel || signType.asicSignType === EndUserConstants.EndUserASiCSignType.CAdES ? EndUserConstants.EndUserSignType.CAdES_X_Long : EndUserConstants.EndUserXAdESSignLevel.B_LT;
618
620
  return await this._euSign.ASiCSignData(this._readedKey.getSignAlgo(), signType.subType, signType.asicSignType, signLevel, data, !asByteArray);
619
621
  } else if (signType.type === EndUserConstants.EndUserSignContainerType.XAdES) {
620
622
  let returnArray = true;
@@ -623,15 +625,21 @@ export default class DigitalSignature {
623
625
  returnArray = false;
624
626
  }
625
627
  data = data.map((e, i) => !e.name && !e.val ? { name: "data" + i, val: e } : e);
628
+ const signLevel = signType.signLevel || EndUserConstants.EndUserXAdESSignLevel.B_LT;
626
629
  const signs = [];
627
630
  for (let i = 0; i < data.length; i++) {
628
- const result = await this._euSign.XAdESSignData(this._readedKey.getSignAlgo(), signType.subType, EndUserConstants.EndUserXAdESSignLevel.B_LT, data[i], !asByteArray);
631
+ const result = await this._euSign.XAdESSignData(this._readedKey.getSignAlgo(), signType.subType, signLevel, data[i], !asByteArray);
629
632
  signs[i] = result;
630
633
  }
631
634
  return returnArray ? signs : signs[0];
632
635
  } else if (signType.type === EndUserConstants.EndUserSignContainerType.PAdES) {
633
- return await this._euSign.PDFSignData(this._readedKey.getSignAlgo(), data, EndUserConstants.EndUserPAdESSignLevel.B_T, !asByteArray);
636
+ const signLevel = signType.signLevel || EndUserConstants.EndUserPAdESSignLevel.B_T;
637
+ return await this._euSign.PDFSignData(this._readedKey.getSignAlgo(), data, signLevel, !asByteArray);
634
638
  } else if (signType.type === EndUserConstants.EndUserSignContainerType.CAdES) {
639
+ const signLevel = signType.signLevel || EndUserConstants.EndUserSignType.CAdES_X_Long;
640
+
641
+ await this._euSign.SetRuntimeParameter(EndUserConstants.EU_SIGN_TYPE_PARAMETER, signLevel);
642
+
635
643
  if (signType.subType === EndUserConstants.EndUserCAdESType.Detached) {
636
644
  const hash = await this._euSign.HashData(this._readedKey.getHashAlgo(), data, !asByteArray);
637
645
  return await this._euSign.SignHash(this._readedKey.getSignAlgo(), hash, true, !asByteArray);
@@ -11726,6 +11726,11 @@ EndUserKSP.prototype._SendKSPRequest = function(
11726
11726
  command = EndUserKSP.EU_KSP_COMMAND_GET_SIGN_HASHES_RESULT;
11727
11727
  break;
11728
11728
  case EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION:
11729
+ if (!onSign) {
11730
+ onSuccess(response.data.transactionId);
11731
+ return;
11732
+ }
11733
+
11729
11734
  command = EndUserKSP.EU_KSP_COMMAND_GET_USER_REGISTRATION_RESULT;
11730
11735
 
11731
11736
  try {
@@ -12953,11 +12958,12 @@ EndUserKSP.prototype.MakeNewCertificate = function(
12953
12958
  //-------------------------------------------------------------------------------
12954
12959
 
12955
12960
  EndUserKSP.prototype.GetClientRegistrationToken = function(
12956
- pkContext, ksp, onSuccess, onError) {
12961
+ pkContext, ksp, parameters, onSuccess, onError) {
12957
12962
  var pThis = this;
12958
12963
  var kspSettings = pThis._GetKSPSettings(ksp);
12964
+ var command = EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION;
12959
12965
 
12960
- if (!pkContext) {
12966
+ if (!pkContext && !parameters) {
12961
12967
  setTimeout(function() {
12962
12968
  var error = pThis.MakeError(
12963
12969
  EU_ERROR_BAD_CERT, null);
@@ -12975,42 +12981,55 @@ EndUserKSP.prototype.GetClientRegistrationToken = function(
12975
12981
  return;
12976
12982
  }
12977
12983
 
12978
- if (!kspSettings ||
12979
- !kspSettings.registrationURL) {
12980
- setTimeout(function() {
12981
- var error = pThis.MakeError(
12982
- EU_ERROR_BAD_PARAMETER, null);
12983
- onError(error);
12984
- }, 1);
12985
- return;
12986
- }
12987
-
12988
12984
  var params = {
12989
12985
  "ksp": kspSettings.ksp
12990
12986
  };
12991
12987
 
12988
+ if (parameters &&
12989
+ parameters['transactionId'] &&
12990
+ parameters['signature']) {
12991
+ params['transactionId'] = parameters['transactionId'];
12992
+ params['signature'] = parameters['signature'];
12993
+ command = EndUserKSP.EU_KSP_COMMAND_GET_USER_REGISTRATION_RESULT;
12994
+ }
12995
+
12992
12996
  var expireDate = pThis._MakeExpireDate(
12993
12997
  EndUserKSP.EU_KSP_COMMAND_EXPIRE_TIME);
12994
12998
  pThis.m_activeOperation = true;
12995
12999
 
13000
+ var _onSign = function(data) {
13001
+ var signAlgo = pThis._GetSignAlgoByCertificate(
13002
+ pThis.m_euSign.CtxEnumOwnCertificates(pkContext, 0));
13003
+ var external = true;
13004
+ var appendCert = true;
13005
+ var asBase64String = true;
13006
+
13007
+ return pThis.m_euSign.CtxSignData(
13008
+ pkContext, signAlgo, data,
13009
+ external, appendCert, asBase64String);
13010
+ };
13011
+
12996
13012
  pThis._SendKSPRequest(
12997
- kspSettings,
12998
- EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION,
13013
+ kspSettings, command,
12999
13014
  params, expireDate,
13000
- function(data) {
13001
- var signAlgo = pThis._GetSignAlgoByCertificate(
13002
- pThis.m_euSign.CtxEnumOwnCertificates(pkContext, 0));
13003
- var external = true;
13004
- var appendCert = true;
13005
- var asBase64String = true;
13006
-
13007
- return pThis.m_euSign.CtxSignData(
13008
- pkContext, signAlgo, data,
13009
- external, appendCert, asBase64String);
13010
- },
13015
+ !parameters ? _onSign : null,
13011
13016
  function(data) {
13012
13017
  pThis.m_activeOperation = false;
13013
13018
 
13019
+ if (parameters && command ==
13020
+ EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION) {
13021
+ if (!data) {
13022
+ var error = pThis.MakeError(
13023
+ EU_ERROR_TRANSMIT_REQUEST, null);
13024
+ onError(error);
13025
+ return;
13026
+ }
13027
+
13028
+ onSuccess(data);
13029
+
13030
+ return;
13031
+ }
13032
+
13014
13033
  if (!data || !data.token) {
13015
13034
  var error = pThis.MakeError(
13016
13035
  EU_ERROR_TRANSMIT_REQUEST, null);
@@ -14866,6 +14885,17 @@ EndUser.prototype.MakeDeviceCertificate = function(deviceName,
14866
14885
 
14867
14886
  //-------------------------------------------------------------------------------
14868
14887
 
14888
+ EndUser.prototype.SetKeyMediaUserPassword = function(
14889
+ soPassword, keyMedia, onSuccess, onError) {
14890
+ try {
14891
+ this.m_euSign.RaiseError(EU_ERROR_NOT_SUPPORTED);
14892
+ } catch (e) {
14893
+ onError(e);
14894
+ }
14895
+ };
14896
+
14897
+ //-------------------------------------------------------------------------------
14898
+
14869
14899
  EndUser.prototype.ChangePrivateKeyPassword = function(
14870
14900
  keyMedia, newPassword, onSuccess, onError) {
14871
14901
  try {
@@ -15001,11 +15031,11 @@ EndUser.prototype.GetKeyInfoBinary = function(
15001
15031
  //-------------------------------------------------------------------------------
15002
15032
 
15003
15033
  EndUser.prototype.GetClientRegistrationTokenKSP = function(
15004
- ksp, onSuccess, onError) {
15034
+ ksp, parameters, onSuccess, onError) {
15005
15035
  var pThis = this;
15006
15036
 
15007
15037
  pThis.m_euKSP.GetClientRegistrationToken(
15008
- pThis.m_pkContext, ksp, onSuccess, onError);
15038
+ pThis.m_pkContext, ksp, parameters, onSuccess, onError);
15009
15039
  };
15010
15040
 
15011
15041
  //-------------------------------------------------------------------------------
@@ -11726,6 +11726,11 @@ EndUserKSP.prototype._SendKSPRequest = function(
11726
11726
  command = EndUserKSP.EU_KSP_COMMAND_GET_SIGN_HASHES_RESULT;
11727
11727
  break;
11728
11728
  case EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION:
11729
+ if (!onSign) {
11730
+ onSuccess(response.data.transactionId);
11731
+ return;
11732
+ }
11733
+
11729
11734
  command = EndUserKSP.EU_KSP_COMMAND_GET_USER_REGISTRATION_RESULT;
11730
11735
 
11731
11736
  try {
@@ -12953,11 +12958,12 @@ EndUserKSP.prototype.MakeNewCertificate = function(
12953
12958
  //-------------------------------------------------------------------------------
12954
12959
 
12955
12960
  EndUserKSP.prototype.GetClientRegistrationToken = function(
12956
- pkContext, ksp, onSuccess, onError) {
12961
+ pkContext, ksp, parameters, onSuccess, onError) {
12957
12962
  var pThis = this;
12958
12963
  var kspSettings = pThis._GetKSPSettings(ksp);
12964
+ var command = EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION;
12959
12965
 
12960
- if (!pkContext) {
12966
+ if (!pkContext && !parameters) {
12961
12967
  setTimeout(function() {
12962
12968
  var error = pThis.MakeError(
12963
12969
  EU_ERROR_BAD_CERT, null);
@@ -12975,42 +12981,55 @@ EndUserKSP.prototype.GetClientRegistrationToken = function(
12975
12981
  return;
12976
12982
  }
12977
12983
 
12978
- if (!kspSettings ||
12979
- !kspSettings.registrationURL) {
12980
- setTimeout(function() {
12981
- var error = pThis.MakeError(
12982
- EU_ERROR_BAD_PARAMETER, null);
12983
- onError(error);
12984
- }, 1);
12985
- return;
12986
- }
12987
-
12988
12984
  var params = {
12989
12985
  "ksp": kspSettings.ksp
12990
12986
  };
12991
12987
 
12988
+ if (parameters &&
12989
+ parameters['transactionId'] &&
12990
+ parameters['signature']) {
12991
+ params['transactionId'] = parameters['transactionId'];
12992
+ params['signature'] = parameters['signature'];
12993
+ command = EndUserKSP.EU_KSP_COMMAND_GET_USER_REGISTRATION_RESULT;
12994
+ }
12995
+
12992
12996
  var expireDate = pThis._MakeExpireDate(
12993
12997
  EndUserKSP.EU_KSP_COMMAND_EXPIRE_TIME);
12994
12998
  pThis.m_activeOperation = true;
12995
12999
 
13000
+ var _onSign = function(data) {
13001
+ var signAlgo = pThis._GetSignAlgoByCertificate(
13002
+ pThis.m_euSign.CtxEnumOwnCertificates(pkContext, 0));
13003
+ var external = true;
13004
+ var appendCert = true;
13005
+ var asBase64String = true;
13006
+
13007
+ return pThis.m_euSign.CtxSignData(
13008
+ pkContext, signAlgo, data,
13009
+ external, appendCert, asBase64String);
13010
+ };
13011
+
12996
13012
  pThis._SendKSPRequest(
12997
- kspSettings,
12998
- EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION,
13013
+ kspSettings, command,
12999
13014
  params, expireDate,
13000
- function(data) {
13001
- var signAlgo = pThis._GetSignAlgoByCertificate(
13002
- pThis.m_euSign.CtxEnumOwnCertificates(pkContext, 0));
13003
- var external = true;
13004
- var appendCert = true;
13005
- var asBase64String = true;
13006
-
13007
- return pThis.m_euSign.CtxSignData(
13008
- pkContext, signAlgo, data,
13009
- external, appendCert, asBase64String);
13010
- },
13015
+ !parameters ? _onSign : null,
13011
13016
  function(data) {
13012
13017
  pThis.m_activeOperation = false;
13013
13018
 
13019
+ if (parameters && command ==
13020
+ EndUserKSP.EU_KSP_COMMAND_INITIALIZE_USER_REGISTRATION) {
13021
+ if (!data) {
13022
+ var error = pThis.MakeError(
13023
+ EU_ERROR_TRANSMIT_REQUEST, null);
13024
+ onError(error);
13025
+ return;
13026
+ }
13027
+
13028
+ onSuccess(data);
13029
+
13030
+ return;
13031
+ }
13032
+
13014
13033
  if (!data || !data.token) {
13015
13034
  var error = pThis.MakeError(
13016
13035
  EU_ERROR_TRANSMIT_REQUEST, null);
@@ -14866,6 +14885,17 @@ EndUser.prototype.MakeDeviceCertificate = function(deviceName,
14866
14885
 
14867
14886
  //-------------------------------------------------------------------------------
14868
14887
 
14888
+ EndUser.prototype.SetKeyMediaUserPassword = function(
14889
+ soPassword, keyMedia, onSuccess, onError) {
14890
+ try {
14891
+ this.m_euSign.RaiseError(EU_ERROR_NOT_SUPPORTED);
14892
+ } catch (e) {
14893
+ onError(e);
14894
+ }
14895
+ };
14896
+
14897
+ //-------------------------------------------------------------------------------
14898
+
14869
14899
  EndUser.prototype.ChangePrivateKeyPassword = function(
14870
14900
  keyMedia, newPassword, onSuccess, onError) {
14871
14901
  try {
@@ -15001,11 +15031,11 @@ EndUser.prototype.GetKeyInfoBinary = function(
15001
15031
  //-------------------------------------------------------------------------------
15002
15032
 
15003
15033
  EndUser.prototype.GetClientRegistrationTokenKSP = function(
15004
- ksp, onSuccess, onError) {
15034
+ ksp, parameters, onSuccess, onError) {
15005
15035
  var pThis = this;
15006
15036
 
15007
15037
  pThis.m_euKSP.GetClientRegistrationToken(
15008
- pThis.m_pkContext, ksp, onSuccess, onError);
15038
+ pThis.m_pkContext, ksp, parameters, onSuccess, onError);
15009
15039
  };
15010
15040
 
15011
15041
  //-------------------------------------------------------------------------------