• 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

67.92
/src/api/createXMLSignature.ts
1
import { _afterPluginsLoaded } from '../helpers/_afterPluginsLoaded';
2✔
2
import { _extractMeaningfulErrorMessage } from '../helpers/_extractMeaningfulErrorMessage';
2✔
3
import { _getCadesCert } from '../helpers/_getCadesCert';
2✔
4

5
/** Дополнительные настройки */
6
type Options = {
7
  /**
8
   * Метод подписи
9
   *
10
   * @defaultValue `cadesplugin.XmlDsigGost3410Url2012256`
11
   */
12
  signatureMethod?: string;
13
  /**
14
   * Метод формирования дайджеста
15
   *
16
   * @defaultValue `cadesplugin.XmlDsigGost3411Url2012256`
17
   */
18
  digestMethod?: string;
19
};
20

21
/**
22
 * Создает XML подпись для документа в формате XML
23
 *
24
 * @param thumbprint - отпечаток сертификата
25
 * @param unencryptedMessage - подписываемое сообщение в формате XML
26
 * @options - дополнительные настройки
27
 *
28
 * @returns подпись
29
 */
30
export const createXMLSignature = _afterPluginsLoaded(
2✔
31
  async (thumbprint: string, unencryptedMessage: string, options?: Options): Promise<string> => {
4✔
32
    const { cadesplugin } = window;
4✔
33
    const cadesCertificate = await _getCadesCert(thumbprint);
4✔
34

35
    return cadesplugin.async_spawn(function* createXMLSignature() {
4✔
36
      let cadesSigner;
37
      let cadesSignedXML;
38
      try {
39
        cadesSigner = yield cadesplugin.CreateObjectAsync('CAdESCOM.CPSigner');
4✔
40
        cadesSignedXML = yield cadesplugin.CreateObjectAsync('CAdESCOM.SignedXML');
4✔
41
      } catch (error) {
NEW
42
        console.error(error);
×
43

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

47
      try {
48
        const signatureMethod = options?.signatureMethod ?? cadesplugin.XmlDsigGost3410Url2012256;
4!
49
        const digestMethod = options?.digestMethod ?? cadesplugin.XmlDsigGost3411Url2012256;
4!
50

51
        yield cadesSigner.propset_Certificate(cadesCertificate);
8✔
52
        yield cadesSigner.propset_CheckCertificate(true);
8✔
53
        yield cadesSignedXML.propset_Content(unencryptedMessage);
8✔
54
        yield cadesSignedXML.propset_SignatureType(cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED);
8✔
55
        yield cadesSignedXML.propset_SignatureMethod(signatureMethod);
8✔
56
        yield cadesSignedXML.propset_DigestMethod(digestMethod);
8✔
57
      } catch (error) {
NEW
58
        console.error(error);
×
59

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

63
      let signature: string;
64
      try {
65
        signature = yield cadesSignedXML.Sign(cadesSigner);
4✔
66
      } catch (error) {
NEW
67
        console.error(error);
×
68

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

72
      return signature;
4✔
73
    });
74
  },
75
);
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