• 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

63.04
/src/api/createSignature.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
 * Создает подпись base64 строки по отпечатку сертификата
9
 *
10
 * @param thumbprint - отпечаток сертификата
11
 * @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
12
 * @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
13
 * @returns подпись
14
 */
15
export const createSignature = _afterPluginsLoaded(
2✔
16
  async (thumbprint: string, messageHash: string, detachedSignature: boolean = true): Promise<string> => {
4!
17
    console.warn(
2✔
18
      [
19
        'cryptoPro: Метод "createSignature" является устаревшим и будет убран из будущих версий.',
20
        'Используйте "createAttachedSignature" и "createDetachedSignature".',
21
      ].join('\n'),
22
    );
23

24
    const { cadesplugin } = window;
2✔
25
    const cadesCertificate = await _getCadesCert(thumbprint);
2✔
26

27
    return cadesplugin.async_spawn(function* createSignature() {
2✔
28
      let cadesAttrs;
29
      let cadesSignedData;
30
      let cadesSigner;
31
      try {
32
        cadesAttrs = yield cadesplugin.CreateObjectAsync('CADESCOM.CPAttribute');
2✔
33
        cadesSignedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.CadesSignedData');
2✔
34
        cadesSigner = yield cadesplugin.CreateObjectAsync('CAdESCOM.CPSigner');
2✔
35
      } catch (error) {
NEW
36
        console.error(error);
×
37

NEW
38
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации подписи');
×
39
      }
40

41
      const currentTime = _getDateObj(new Date());
2✔
42
      try {
43
        yield cadesAttrs.propset_Name(CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
4✔
44
        yield cadesAttrs.propset_Value(currentTime);
4✔
45
      } catch (error) {
NEW
46
        console.error(error);
×
47

NEW
48
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при установке времени подписи');
×
49
      }
50

51
      let cadesAuthAttrs;
52
      try {
53
        yield cadesSigner.propset_Certificate(cadesCertificate);
4✔
54
        cadesAuthAttrs = yield cadesSigner.AuthenticatedAttributes2;
2✔
55
        yield cadesAuthAttrs.Add(cadesAttrs);
4✔
56
        yield cadesSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
4✔
57
        yield cadesSignedData.propset_Content(messageHash);
4✔
58
        yield cadesSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);
4✔
59
      } catch (error) {
NEW
60
        console.error(error);
×
61

NEW
62
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при указании данных для подписи');
×
63
      }
64

65
      let signature: string;
66
      try {
67
        signature = yield cadesSignedData.SignCades(cadesSigner, cadesplugin.CADESCOM_CADES_BES, detachedSignature);
2✔
68
      } catch (error) {
NEW
69
        console.error(error);
×
70

NEW
71
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при подписании данных');
×
72
      }
73

74
      return signature;
2✔
75
    });
76
  },
77
);
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