• 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

73.58
/src/api/createHash.ts
1
import { TranscodeEncoding } from 'buffer';
2
import { _afterPluginsLoaded } from '../helpers/_afterPluginsLoaded';
2✔
3
import { _extractMeaningfulErrorMessage } from '../helpers/_extractMeaningfulErrorMessage';
2✔
4

5
/** Дополнительные настройки */
6
type Options = {
7
  /**
8
   * Алгоритм хеширования
9
   *
10
   * @defaultValue `cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256`
11
   */
12
  hashedAlgorithm?: number;
13
  /**
14
   * Кодировка сообщения для хеширования
15
   *
16
   * @defaultValue `utf8`
17
   */
18
  encoding?: TranscodeEncoding;
19
};
20

21
/**
22
 * Создает хеш сообщения по ГОСТ Р 34.11-2012 (по умолчанию 256 бит)
23
 * https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
24
 *
25
 * @param unencryptedMessage - сообщение для хеширования
26
 * @options - дополнительные настройки
27
 *
28
 * @returns хеш
29
 */
30
export const createHash = _afterPluginsLoaded(
2✔
31
  async (unencryptedMessage: string | ArrayBuffer, options?: Options): Promise<string> => {
6✔
32
    const { cadesplugin } = window;
6✔
33

34
    return cadesplugin.async_spawn(function* createHash() {
6✔
35
      const cadesHashedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.HashedData');
6✔
36
      let messageBase64;
37
      let hash;
38
      try {
6✔
39
        if (options?.encoding && typeof unencryptedMessage === 'string') {
6✔
40
          messageBase64 = Buffer.from(unencryptedMessage, options?.encoding).toString('base64');
2!
41
        } else {
42
          messageBase64 = Buffer.from(unencryptedMessage).toString('base64');
4✔
43
        }
44
      } catch (error) {
NEW
45
        console.error(error);
×
NEW
46
        throw new Error('Ошибка при преобразовании сообщения в Base64');
×
47
      }
48

49
      try {
50
        yield cadesHashedData.propset_Algorithm(
12✔
51
          options?.hashedAlgorithm ?? cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256,
12!
52
        );
53
        yield cadesHashedData.propset_DataEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
12✔
54
        yield cadesHashedData.Hash(messageBase64);
12✔
55
      } catch (error) {
NEW
56
        console.error(error);
×
NEW
57
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации хэширования');
×
58
      }
59

60
      try {
61
        hash = yield cadesHashedData.Value;
6✔
62
      } catch (error) {
NEW
63
        console.error(error);
×
NEW
64
        throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при создании хэша');
×
65
      }
66

67
      return hash;
6✔
68
    });
69
  },
70
);
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