• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pustart / crypto-pro-csp / 17460684880

04 Sep 2025 10:16AM UTC coverage: 79.504%. First build
17460684880

Pull #3

github

web-flow
Merge 29283e818 into 0348d8315
Pull Request #3: refactor: заменяет функции eval на генераторы

200 of 308 branches covered (64.94%)

Branch coverage included in aggregate %.

157 of 229 new or added lines in 13 files covered. (68.56%)

537 of 619 relevant lines covered (86.75%)

10.63 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

58.62
/src/api/createDetachedSignature.ts
1
import { CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME } from '../constants';
2✔
2
import { _afterPluginsLoaded } from '../helpers/_afterPluginsLoaded';
2✔
3
import { _extractMeaningfulErrorMessage } from '../helpers/_extractMeaningfulErrorMessage';
2✔
4
import { _getCadesCert } from '../helpers/_getCadesCert';
2✔
5
import { _getDateObj } from '../helpers/_getDateObj';
2✔
6

7
/** Дополнительные настройки */
8
type Options = {
9
  /**
10
   * Алгоритм хеширования
11
   *
12
   * @defaultValue `cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256`
13
   */
14
  hashedAlgorithm?: number;
15
};
16

17
/**
18
 * Создает отсоединенную подпись хеша по отпечатку сертификата
19
 *
20
 * @param thumbprint - отпечаток сертификата
21
 * @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 или 512 бит в зависимости от алгоритма открытого ключа
22
 * @param options - дополнительные настройки
23
 * @returns подпись в формате PKCS#7
24
 */
25
export const createDetachedSignature = _afterPluginsLoaded(
2✔
26
  async (thumbprint: string, messageHash: string, options?: Options): Promise<string> => {
4✔
27
    const { cadesplugin } = window;
4✔
28
    const cadesCertificate = await _getCadesCert(thumbprint);
4✔
29

30
    return cadesplugin.async_spawn(function* createDetachedSignature() {
4✔
31
      let cadesAttrs;
32
      let cadesHashedData;
33
      let cadesSignedData;
34
      let cadesSigner;
35
      try {
36
        cadesAttrs = yield cadesplugin.CreateObjectAsync('CADESCOM.CPAttribute');
4✔
37
        cadesHashedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.HashedData');
4✔
38
        cadesSignedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.CadesSignedData');
4✔
39
        cadesSigner = yield cadesplugin.CreateObjectAsync('CAdESCOM.CPSigner');
4✔
40
      } catch (error) {
NEW
41
        console.error(error);
×
NEW
42
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации подписи');
×
43
      }
44

45
      const currentTime = _getDateObj(new Date());
4✔
46
      try {
47
        yield cadesAttrs.propset_Name(CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
8✔
48
        yield cadesAttrs.propset_Value(currentTime);
8✔
49
      } catch (error) {
NEW
50
        console.error(error);
×
NEW
51
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при установке времени подписи');
×
52
      }
53

54
      let cadesAuthAttrs;
55
      try {
56
        yield cadesSigner.propset_Certificate(cadesCertificate);
8✔
57
        cadesAuthAttrs = yield cadesSigner.AuthenticatedAttributes2;
4✔
58
        yield cadesAuthAttrs.Add(cadesAttrs);
8✔
59
        yield cadesSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);
8✔
60
      } catch (error) {
NEW
61
        console.error(error);
×
NEW
62
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при установке сертификата');
×
63
      }
64

65
      try {
66
        yield cadesHashedData.propset_Algorithm(
8✔
67
          options?.hashedAlgorithm ?? cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256,
8!
68
        );
69
        yield cadesHashedData.SetHashValue(messageHash);
8✔
70
      } catch (error) {
NEW
71
        console.error(error);
×
NEW
72
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при установке хеша');
×
73
      }
74

75
      let signature;
76
      try {
77
        signature = yield cadesSignedData.SignHash(cadesHashedData, cadesSigner, cadesplugin.CADESCOM_PKCS7_TYPE);
4✔
78
      } catch (error) {
NEW
79
        console.error(error);
×
NEW
80
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при подписании данных');
×
81
      }
82

83
      return signature;
4✔
84
    });
85
  },
86
);
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc