diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..3671eed
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,10 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+
+[*.{js, ts}]
+charset = utf-8
+indent_style = space
+indent_size = 2
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..d131069
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,51 @@
+module.exports = {
+ env: {
+ browser: true,
+ es6: true
+ },
+ parser: '@typescript-eslint/parser',
+ extends: [
+ 'plugin:@typescript-eslint/recommended',
+ 'prettier/@typescript-eslint',
+ 'plugin:prettier/recommended'
+ ],
+ globals: {
+ Atomics: 'readonly',
+ SharedArrayBuffer: 'readonly'
+ },
+ parserOptions: {
+ ecmaVersion: 2018,
+ sourceType: 'module'
+ },
+ plugins: [
+ '@typescript-eslint'
+ ],
+ rules: {
+ '@typescript-eslint/no-inferrable-types': 'off',
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/ban-ts-ignore': 'off',
+ '@typescript-eslint/camelcase': 'off',
+ '@typescript-eslint/no-unused-vars': 'off'
+ },
+ overrides: [
+ {
+ files: ['*.test.ts'],
+ rules: {
+ '@typescript-eslint/explicit-function-return-type': 'off'
+ }
+ },
+ {
+ files: ['./types/**/*'],
+ rules: {
+ 'no-var': 'off'
+ }
+ }
+ ],
+ ignorePatterns: [
+ '*.js',
+ 'lib/**/*',
+ 'dist/**/*',
+ 'coverage/**/*',
+ 'examples/**/*'
+ ]
+};
diff --git a/.gitignore b/.gitignore
index c564040..b17d3e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,6 @@
.idea
-node_modules/
\ No newline at end of file
+node_modules/
+lib/
+dist/
+package/
+coverage/
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..900a0a6
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,11 @@
+# see what'll be included with `npm pack --dry-run`
+
+/examples
+/src
+/types
+/package
+
+/tsconfig*
+/*.js
+/*.gif
+/.*
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 0000000..844dd0f
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,8 @@
+module.exports = {
+ semi: true,
+ trailingComma: 'all',
+ singleQuote: true,
+ printWidth: 120,
+ tabWidth: 2,
+ arrowParens: 'always',
+};
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e94e571..82b1375 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+2.0.0 / 2020-03-28
+==================
+
+ * Улучшение: Проект переписан с использованием Typescript
+ * Улучшение: В Readme обновлены примеры, документация и добавлен [список изменений](README.md#Миграция-с-версии-1-на-2) для миграции с 1 на 2 версию
+
1.1.2 / 2019-12-07
==================
@@ -37,7 +43,7 @@
1.0.7 / 2017-01-30
==================
- * Улучшение: Указание хэша сертификата при ошибке доступа к нему
+ * Улучшение: Указание отпечатка сертификата при ошибке доступа к нему
1.0.6 / 2017-01-30
==================
@@ -62,4 +68,4 @@
1.0.2 / 2017-01-16
==================
- * Улучшение: Добавлена возможность подключать модуль напрямую из папки src/ для приложений, собираемых webpack'ом
\ No newline at end of file
+ * Улучшение: Добавлена возможность подключать модуль напрямую из папки src/ для приложений, собираемых webpack'ом
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
index a5231be..5452760
--- a/README.md
+++ b/README.md
@@ -1,40 +1,304 @@
-# CryptoPro
-Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In (IE8+)
+[![NPM version][npm-version-image]][npm-url]
+[![NPM downloads][npm-downloads-image]][downloads-url]
-## Поддерживаемые браузеры
-- [Google Chrome](https://www.google.ru/chrome/browser/desktop/) (v45+) с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://chrome.google.com/webstore/detail/cryptopro-extension-for-c/iifchhfnnmpdbibifmljnfjhpififfog?utm_source=chrome-app-launcher-info-dialog)
-- [Opera](https://www.google.ru/chrome/browser/desktop/) (v40+) с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://addons.opera.com/en/extensions/details/cryptopro-extension-for-cades-browser-plug-in/)
-- [Mozilla Firefox](https://www.mozilla.org/ru/firefox/new/) (v43+). Начиная с версии 52, с [расширением](https://www.cryptopro.ru/sites/default/files/products/cades/extensions/cryptopro_extension_for_cades_browser_plug_in-1.1.1-an+fx-windows.xpi).
-- [Internet Explorer](http://windows.microsoft.com/ru-ru/internet-explorer/download-ie) (v8+).
+- [cryptoPro](#cryptopro)
+ - [Зачем мне этот пакет?](#Зачем-мне-этот-пакет?)
+ - [Установка](#Установка)
+ - [API](#API)
+ - [Методы объекта cryptoPro](#Методы-объекта-cryptoPro)
+ - [Методы объекта сертификата](#Методы-объекта-сертификата)
+ - [Поддерживаемые браузеры](#Поддерживаемые-браузеры)
+ - [Поддерживаемые СКЗИ](#Поддерживаемые-СКЗИ)
+ - [Примеры](#Примеры)
+ - [Тэг script (UMD)](#Тэг-script-(UMD))
+ - [Angular (ES Modules + Typescript)](#Angular-(ES-Modules-+-Typescript))
+ - [React (ES Modules + JavaScript)](#React-(ES-Modules-+-JavaScript))
+ - [Миграция с версии 1 на 2](#Миграция-с-версии-1-на-2)
+- [Тем, кто хочет помочь](#Тем,-кто-хочет-помочь)
+ - [Запуск режима разработки](#Запуск-режима-разработки)
+ - [Запуск тестов](#Запуск-тестов)
+ - [Проверка работы примеров с React и Angular](#Проверка-работы-примеров-с-React-и-Angular)
+ - [Проверка пакета перед публикацией в NPM](#Проверка-пакета-перед-публикацией-в-NPM)
+- [Полезная информация](#Полезная-информация)
+ - [Установка КриптоПРО CSP в Linux / OSX](#Установка-КриптоПРО-CSP-в-Linux-/-OSX)
+ - [Установка КриптоПРО ЭЦП browser plug-in в Linux](#Установка-КриптоПРО-ЭЦП-browser-plugin-в-Linux)
+ - [Настройка плагина для Firefox (до версии 52)](#Настройка-плагина-для-Firefox-(до-версии-52))
+ - [Установка сертификатов в Linux](#Установка-сертификатов-в-Linux)
+- [Лицензия](#Лицензия)
-Список необходимых полифиллов (подключаются самостоятельно):
-- Promise
-- EventTarget.addEventListener
-- Array.prototype.forEach
-- Array.prototype.map
+# cryptoPro
+Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In с поддержкой IE9+
-## Установка и настройка
-### NPM
+## Зачем мне этот пакет?
+КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях.
+Асинхронной (в современных браузерах) и синхронной (в браузерах постарше).
+С помощью этого пакета можно не писать реализацию под каждую версию плагина дважды.
+И вместо [этого](http://cpdn.cryptopro.ru/content/cades/plugin-samples-sign.html)
+и [этого](http://cpdn.cryptopro.ru/content/cades/plugin-samples-sign-cades-bes-async.html)
+написать это (UMD):
+
+![crypto-pro-umd.gif](crypto-pro-umd.gif)
+
+или это (ES Modules):
+
+![crypto-pro-esm.gif](crypto-pro-esm.gif)
+
+## Установка
+Для NPM:
```bash
npm install crypto-pro
```
-### Bower
+Для yarn:
+```bash
+yarn add crypto-pro
+```
+
+Для Bower:
```bash
bower install crypto-pro
```
-Для корректной работы используйте:
-1. [КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v3.6+) *рекомендуется использование только сертифицированных версий*. Инструкция по установке:
+## API
+При использовании пакета как UMD модуля из папки `dist/`:
+```javascript
+window.cryptoPro.getUserCertificates()
+ .then(function (certificates) {
+ //...
+ })
+ .catch(function (error) {
+ //...
+ });
+```
+
+При использовании пакета в режиме ES модулей с typescript или javascript из папки `lib/`:
+```typescript
+import { getUserCertificates, Certificate } from 'crypto-pro';
+
+(async () => {
+ let certificates: Certificate[];
+
+ try {
+ certificates = await getUserCertificates();
+ } catch(error) {
+ // ...
+ }
+})();
+```
+
+### Методы объекта cryptoPro
+- [getUserCertificates](src/api/getUserCertificates.ts) - возвращает список [сертификатов](#методы-объекта-сертификата), доступных пользователю в системе
+- [getCertificate](src/api/getCertificate.ts) - возвращает [сертификат](#методы-объекта-сертификата) по отпечатку
+- [createSignature](src/api/createSignature.ts) - создает подпись данных
+- [getSystemInfo](src/api/getSystemInfo.ts) - возвращает информацию о CSP и плагине
+- [isValidSystemSetup](src/api/isValidSystemSetup.ts) - возвращает флаг корректности настроек ЭП на машине
+
+### Методы объекта сертификата
+[Сертификат](src/api/certificate/certificate.ts) предоставляет следущее API:
+- [isValid](src/api/certificate/isValid.ts) - возвращает флаг действительности сертификата
+- [getCadesProp](src/api/certificate/getCadesProp.ts) - возвращает указанное внутренее свойство у сертификата в формате Cades
+- [exportBase64](src/api/certificate/exportBase64.ts) - возвращает сертификат в формате base64
+- [getAlgorithm](src/api/certificate/getAlgorithm.ts) - возвращает информацию об алгоритме сертификата
+- [getOwnerInfo](src/api/certificate/getInfo.ts) - возвращает расшифрованную информацию о владельце сертификата
+- [getIssuerInfo](src/api/certificate/getInfo.ts) - возвращает расшифрованную информацию об издателе сертификата
+- [getExtendedKeyUsage](src/api/certificate/getExtendedKeyUsage.ts) - возвращает ОИД'ы сертификата
+- [getDecodedExtendedKeyUsage](src/api/certificate/getDecodedExtendedKeyUsage.ts) - возвращает расшифрованные ОИД'ы
+- [hasExtendedKeyUsage](src/api/certificate/hasExtendedKeyUsage.ts) - проверяет наличие ОИД'а (ОИД'ов) у сертификата
+
+## Поддерживаемые браузеры
+- [Google Chrome](https://www.chromium.org/getting-involved/download-chromium#TOC-Downloading-old-builds-of-Chrome-Chromium) (v45+) с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://chrome.google.com/webstore/detail/cryptopro-extension-for-c/iifchhfnnmpdbibifmljnfjhpififfog?utm_source=chrome-app-launcher-info-dialog)
+- [Opera](http://get.opera.com/ftp/pub/opera/desktop/) (v40+) с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://addons.opera.com/en/extensions/details/cryptopro-extension-for-cades-browser-plug-in/)
+- [Mozilla Firefox](https://ftp.mozilla.org/pub/firefox/releases/) (v43+). Начиная с версии 52, с [расширением](https://www.cryptopro.ru/sites/default/files/products/cades/extensions/cryptopro_extension_for_cades_browser_plug_in-1.1.1-an+fx-windows.xpi).
+- [Internet Explorer](https://www.microsoft.com/ru-ru/download/details.aspx?id=43374) (v9+).
+
+Список требуемых полифиллов для старых браузеров (если необходимы, подключаются самостоятельно):
+- Promise
+- Array.prototype.find
+
+## Поддерживаемые СКЗИ
+[КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v4.0+) *рекомендуется использование только сертифицированных версий*. Инструкция по установке:
- [Linux / OSX](#install_csp_linux)
- (в Windows следуйте указаниям программы-установщика)
-1. [КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) (v1.5+). Инструкция по установке:
- - [Linux](#install_plugin_linux)
- - (в Windows и OSX следуйте указаниям программы-установщика)
-Затем установите необходимые сертификаты в систему. [Инструкция](#install_cert_linux) для Linux / OSX.
+[КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) (v2.0.12438+).
-### Установка КриптоПРО CSP в Linux / OSX
+[Инструкция](#install_plugin_linux) по установке плагина в Linux. В Windows и OSX следуйте указаниям программы-установщика.
+
+[Инструкция](#install_cert_linux) по установке сертификатов в систему для Linux / OSX.
+
+## Примеры
+Для их запуска необходим NodeJS LTS.
+
+### Тэг script (UMD)
+```bash
+cd examples/script-tag
+npm i
+npm start
+```
+
+### Angular (ES Modules + Typescript)
+```bash
+cd examples/angular
+npm i
+```
+
+Запуск в режиме разработки:
+```bash
+npm start
+```
+
+Запуск в продакшн режиме:
+```bash
+npm run build
+npm run serve
+```
+
+### React (ES Modules + JavaScript)
+```bash
+cd examples/react
+npm i
+```
+
+Запуск в режиме разработки:
+```bash
+npm start
+```
+
+Запуск в продакшн режиме:
+```bash
+npm run build
+npm run serve
+```
+
+## Миграция с версии 1 на 2
+Внесены следующие изменения:
+- Пакет собран в форматах:
+ - UMD, в папке `dist/`, для подключения через тэг script. Объект `window.cryptoPro` доступен глобально.
+ - ES Modules, в папке `lib/`, для использования с разными системами сборки.
+ Методы API импортируются напрямую из npm пакета.
+- В UMD версии переименован глобальный объект с `window.CryptoPro` на `window.cryptoPro`
+- Переименованы общие методы:
+ - `getCertsList` -> `getUserCertificates`
+ - `getCert` -> `getCertificate`
+ - `signData` -> `createSignature`
+ - `isValidEDSSettings`, `isValidCSPVersion`, `isValidCadesVersion` -> `isValidSystemSetup`
+- Убран метод `signDataXML`
+- Переименованы методы сертификата:
+ - `getProp` -> `getCadesProp`
+- Результат методов сертификата `getOwnerInfo` и `getIssuerInfo`
+изменился с `{ descr, title, translated }` на `{ description, title, isTranslated }`
+- Принципиальная реализация методов, обращающихся к Крипто ПРО не изменилась.
+Получение сертификатов, создание подписи, проверка корректности настроек работают по-прежнему.
+- Убрана поддержка IE8 (Крипто ПРО его больше не поддерживает)
+- Убрана поддержка КриптоПРО CSP версий ниже 4.0
+- Убрана поддержка КриптоПРО ЭЦП browser plug-in версий ниже 2.0
+- Доработана обработка ошибок, выбрасываемых из Крипто ПРО
+- При написании кода будут работать автодополнения и подсказки
+- Исправлена [проблема](https://github.com/vgoma/crypto-pro/issues/11) работы библиотеки с UglifyJs
+- Методы API доступны напрямую:
+
+В версии 1:
+```javascript
+window.CryptoPro.call('getSystemInfo');
+```
+
+В версии 2 (UMD):
+```javascript
+window.cryptoPro.getSystemInfo();
+```
+
+В версии 2 (ES Modules):
+```javascript
+import { getSystemInfo } from 'crypto-pro';
+
+getSystemInfo();
+```
+
+# Тем, кто хочет помочь
+Буду благодарен за расширение/улучшение/доработку API.
+Вам будут полезны [примеры](http://cpdn.cryptopro.ru/?url=/content/cades/plugin-samples-sign.html),
+предоставляемые Крипто ПРО.
+
+## Запуск режима разработки
+Устанавливаем зависимости:
+```bash
+npm i
+```
+
+Во время работы с кодом необходим запущенный сборщик:
+```bash
+npm start
+```
+
+И пример, на котором можно тестировать изменения.
+Удобнее всего тестировать на примере с тэгом script, тк он отвязан от фреймворков
+и использует сборку в формате UMD из папки `dist/`, постоянно обновляемую пока работает
+сборщик. Запускаем его таким образом:
+```bash
+cd examples/script-tag
+npm i
+npm link ../../
+npm start
+```
+> После выполнения `npm link ../../` в директории `examples/script-tag/node_modules` папка `crypto-pro` станет ярлыком,
+> указывающим на папку содержащую локально собранный пакет.
+
+## Запуск тестов
+Тесты написаны с использованием [Jest](https://jestjs.io/docs/en/configuration#testpathignorepatterns-arraystring):
+```bash
+npm test
+```
+
+## Проверка работы примеров с React и Angular
+React и Angular используют версию сборки пакета в формате ES модулей из директории `lib/`.
+Для их запуска необходимо сначала собрать пакет выполнив:
+```bash
+npm run build
+```
+
+После этого из папки `examples/angular` или `examples/react` залинковать пакет:
+```bash
+cd examples/angular
+npm i
+npm link ../../
+```
+
+И запустить пример в одном из двух режимов. В режиме разработки:
+```bash
+npm start
+```
+
+или в режиме продакшн:
+```bash
+npm run build
+npm run serve
+```
+
+## Проверка пакета перед публикацией в NPM
+Необходимо протестировать работу в заявленных браузерах, сделав это на локально запакованной версии пакета.
+Для этого собираем пакет:
+```bash
+npm run package
+mv package ..
+```
+> Важно переместить папку `package` куда-нибудь выше для избежания конфликтов при линковке с текущим `package.json`.
+
+Переходим в любую директорию с примером и создаем там ссылку на только что собранный пакет:
+```bash
+cd examples/script-tag
+npm link ../../../package
+```
+
+Проверяем работу примеров в режимах разработки и продакшн.
+
+После завершения экспериментов можно удалить глобальную ссылку из директории `../../../package` таким образом:
+```bash
+cd ../../../package
+npm unlink
+```
+
+# Полезная информация
+## Установка КриптоПРО CSP в Linux / OSX
> Процесс установки в OSX незначительно отличается от Linux, поэтому описание приведено на примере дистрибутива семейства Debian (x64).
Некоторые команды могут потребовать запуска с `sudo`.
@@ -63,7 +327,7 @@ dpkg -i linux-amd64_deb/cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb
[Дополнительная информация по установке](https://www.cryptopro.ru/faq/gde-vzyat-dokumentatsiyu-po-ustanovke-kakie-pakety-stavit)
-### Установка КриптоПРО ЭЦП browser plug-in в Linux
+## Установка КриптоПРО ЭЦП browser plugin в Linux
Загрузите [КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) и распакуйте его:
```bash
mkdir cades_linux_amd64
@@ -92,7 +356,7 @@ ls -la /opt/cprocsp/lib/amd64 | grep libnpcades
-rwxr-xr-x 1 root root 2727236 Июн 8 14:33 libnpcades.so.2.0.0
```
-#### Настройка плагина для Firefox (до версии 52):
+### Настройка плагина для Firefox (до версии 52)
> После настройки плагина на страницах, запрашивающих работу с ЭП в панели навигации, рядом с url будет кнопка,
позволяющая "разрешить и запомнить" использование установленного плагина.
@@ -107,7 +371,7 @@ ldd libnpcades.so
```
Перезапустите Firefox, и убедитесь в наличии CryptoPRO Cades plugin (см. Menu -> Addons).
-### Установка сертификатов в Linux
+## Установка сертификатов в Linux
> В OSX процесс схож с Linux.
Подключите USB носитель с ключевыми контейнерами и проверьте результат команды:
@@ -170,17 +434,10 @@ ldd libnpcades.so
/opt/cprocsp/bin/amd64/certmgr -list -store uMy
```
-## API
-Пример работы с API лежит в папке `example`.
+# Лицензия
+MIT
-``` js
-window.CryptoPro.call('getCertsList').then(function (certList) {
- console.log(certList);
-});
-```
-
-### Доступные методы
-Список доступных методов можно посмотреть в файле `src/api.js`.
-
-### License
-Licensed as MIT. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.
+[npm-url]: https://npmjs.org/package/crypto-pro
+[npm-version-image]: http://img.shields.io/npm/v/crypto-pro.svg?style=flat
+[npm-downloads-image]: http://img.shields.io/npm/dm/crypto-pro.svg?style=flat
+[downloads-url]: https://npmcharts.com/compare/crypto-pro?minimal=true
diff --git a/bower.json b/bower.json
index d3e9b35..b8252cb 100644
--- a/bower.json
+++ b/bower.json
@@ -1,24 +1,30 @@
{
"name": "crypto-pro",
"description": "API для взаимодействия с КриптоПро",
- "main": "dist/crypto-pro.js",
+ "main": "./lib/crypto-pro.js",
"authors": [
"vgoma "
],
- "license": "ISC",
+ "license": "MIT",
"keywords": [
"crypto",
"cryptopro",
"crypto-pro",
"cades",
- "КриптоПро"
+ "КриптоПро",
+ "Крипто ПРО"
],
"homepage": "https://github.com/vgoma/crypto-pro",
"ignore": [
"**/.*",
+ "/*.js",
+ "/*.gif",
+ "/tsconfig*",
"node_modules",
"bower_components",
- "test",
- "tests"
+ "examples",
+ "src",
+ "types",
+ "package"
]
}
diff --git a/crypto-pro-esm.gif b/crypto-pro-esm.gif
new file mode 100644
index 0000000..c49f453
Binary files /dev/null and b/crypto-pro-esm.gif differ
diff --git a/crypto-pro-umd.gif b/crypto-pro-umd.gif
new file mode 100644
index 0000000..a797dc9
Binary files /dev/null and b/crypto-pro-umd.gif differ
diff --git a/definition-header.js b/definition-header.js
new file mode 100644
index 0000000..11f4381
--- /dev/null
+++ b/definition-header.js
@@ -0,0 +1,18 @@
+const path = require('path');
+const fs = require('fs');
+const tsConfig = require(`./${process.env.TS_CONFIG}`);
+const packageJson = require('./package.json');
+const typingsPath = path.resolve(__dirname, tsConfig.compilerOptions.outDir, `${packageJson.name}.d.ts`);
+const typings = fs.readFileSync(typingsPath, 'utf8');
+
+let header = [
+ `// Type definitions for ${packageJson.name} ${packageJson.version}`,
+ `// Project: ${packageJson.name}`,
+ `// Definitions by: ${packageJson.author.name} ${packageJson.author.url}`
+].join('\n');
+
+if (tsConfig.compilerOptions.target === 'es5') {
+ header += '\n\nexport as namespace cryptoPro;';
+}
+
+fs.writeFileSync(typingsPath, `${header}\n\n${typings}`);
diff --git a/dist/1.crypto-pro.js b/dist/1.crypto-pro.js
deleted file mode 100644
index 9f1f21b..0000000
--- a/dist/1.crypto-pro.js
+++ /dev/null
@@ -1,1071 +0,0 @@
-webpackJsonpCryptoPro([1],[
-/* 0 */,
-/* 1 */,
-/* 2 */,
-/* 3 */,
-/* 4 */
-/***/ function(module, exports, __webpack_require__) {
-
- var cryptoCommon = __webpack_require__(5),
- cryptoConstants = __webpack_require__(7),
- _certListCache;
-
- function Certificate(item) {
- this._cert = item._cert;
- this.thumbprint = item.thumbprint;
- this.subjectName = item.subjectName;
- this.issuerName = item.issuerName;
- this.validFrom = item.validFrom;
- this.validTo = item.validTo;
- }
-
- /**
- * Проверяет, валиден ли сертификат
- * */
- Certificate.prototype.isValid = function isValid() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var result;
-
- try {
- result = 'yield' + cert.IsValid();
- result = 'yield' + result.Result;
- } catch (err) {
- reject('Ошибка при проверке сертификата: ', err.message);
- return;
- }
-
- resolve(result);
- }));
- });
- };
-
- /**
- * Достает указанное свойство у сертификата
- * */
- Certificate.prototype.getProp = function (propName) {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var result;
-
- try {
- result = 'yield' + cert[propName];
- } catch (err) {
- reject('Ошибка при обращении к свойству сертификата: ', err.message);
- return;
- }
-
- resolve(result);
- }));
- });
- };
-
- /**
- * Экспорт base64 представления сертификата пользователя
- * */
- Certificate.prototype.exportBase64 = function exportBase64() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var base64;
-
- try {
- base64 = 'yield' + cert.Export(0);
- } catch (err) {
- reject('Ошибка при экспорте сертификата: ', err.message);
- return;
- }
-
- resolve(base64);
- }));
- });
- };
-
- /**
- * Возвращает информацию об алгоритме
- * */
- Certificate.prototype.getAlgorithm = function getAlgorithm() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var result = {},
- algorithm;
-
- try {
- algorithm = 'yield' + cert.PublicKey();
- algorithm = 'yield' + algorithm.Algorithm;
-
- result.algorithm = 'yield' + algorithm.FriendlyName;
- result.oid = 'yield' + algorithm.Value;
- } catch (err) {
- reject('Ошибка при получении алгоритма: ', err.message);
- return;
- }
-
- resolve(result);
- }));
- });
- };
-
- /**
- * Разбирает SubjectName сертификата по тэгам
- * */
- Certificate.prototype.getOwnerInfo = function getOwnerInfo() {
- return getCertInfo.call(this, cryptoCommon.subjectNameTagsTranslations, 'SubjectName');
- };
-
- /**
- * Разбирает IssuerName сертификата по тэгам
- * */
- Certificate.prototype.getIssuerInfo = function getIssuerInfo() {
- return getCertInfo.call(this, cryptoCommon.issuerNameTagsTranslations, 'IssuerName');
- };
-
- /**
- * Получение OID сертификата
- *
- * @returns {Array} Возвращает массив OID (улучшенного ключа)
- * */
- Certificate.prototype.getExtendedKeyUsage = function getExtendedKeyUsage() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var OIDS = [],
- count,
- item;
-
- try {
- count = 'yield' + cert.ExtendedKeyUsage();
- count = 'yield' + count.EKUs;
- count = 'yield' + count.Count;
-
- if (count > 0) {
- while (count > 0) {
- item = 'yield' + cert.ExtendedKeyUsage();
- item = 'yield' + item.EKUs;
- item = 'yield' + item.Item(count);
- item = 'yield' + item.OID;
-
- OIDS.push(item);
-
- count--;
- }
- }
- } catch (err) {
- reject('Ошибка при получении ОИД\'ов: ', err.message);
- return;
- }
-
- resolve(OIDS);
- }));
- });
- };
-
- Certificate.prototype.getDecodedExtendedKeyUsage = cryptoCommon.getDecodedExtendedKeyUsage;
-
- Certificate.prototype.hasExtendedKeyUsage = cryptoCommon.hasExtendedKeyUsage;
-
- /**
- * Проверяет корректность настроек ЭП на машине
- * */
- function isValidEDSSettings() {
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var result;
-
- try {
- result = 'yield' + cryptoCommon.createObj('CAdESCOM.About');
- } catch (error) {
- reject('Настройки ЭП на данной машине не верны');
- }
-
- resolve();
- }));
- });
- }
-
- /**
- * Получить сертификат в формате cades по хэшу
- * */
- function getCadesCert(hash) {
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var oStore = 'yield' + cryptoCommon.createObj('CAdESCOM.Store'),
- certs,
- certCnt,
- cert;
-
- if (!oStore) {
- reject('Не удалось получить доступ к хранилищу сертификатов');
- return;
- }
-
- // Открываем хранилище
- try {
- 'yield' + oStore.Open(
- cadesplugin.CAPICOM_CURRENT_USER_STORE,
- cadesplugin.CAPICOM_MY_STORE,
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
- );
- } catch (err) {
- reject('Ошибка при открытии хранилища: ' + err.message);
- return;
- }
-
- // Получаем доступ к сертификатам
- try {
- certs = 'yield' + oStore.Certificates;
- certCnt = 'yield' + certs.Count;
- } catch (err) {
- reject('Ошибка получения списка сертификатов: ' + err.message);
- return;
- }
-
- if (!certCnt) {
- reject('Нет доступных сертификатов');
- return;
- }
-
- // Получаем сертификат по хэшу
- try {
- certs = 'yield' + certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, hash);
-
- if (certs.Count) {
- cert = 'yield' + certs.Item(1);
- } else {
- throw new Error(hash);
- }
- } catch (err) {
- reject('Не удалось получить сертификат по хэшу: ' + err.message);
- return;
- }
-
- oStore.Close();
-
- resolve(cert);
- }));
- });
- }
-
- /**
- * Разбирает информацию сертификата по тэгам
- * */
- function getCertInfo(tags, propName) {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var propInfo;
-
- try {
- propInfo = 'yield' + cert[propName];
- } catch (err) {
- reject('Ошибка при извлечении данных из сертификата: ', err.message);
- return;
- }
-
- resolve(cryptoCommon.parseCertInfo(tags, propInfo));
- }));
- });
- }
-
- /**
- * Возвращает список сертификатов, доступных в системе
- *
- * @param {Boolean} [resetCache=false] -- нужно ли сбросить кэш списка сертификатов
- * @returns {Promise} -- со списком сертификатов {Array}
- * */
- function getCertsList(resetCache) {
- return new Promise(function (resolve, reject) {
- if (!resetCache && _certListCache) {
- resolve(_certListCache);
- return;
- }
-
- eval(cryptoCommon.execute(function () {
- var oStore = 'yield' + cryptoCommon.createObj('CAdESCOM.Store'),
- result = [],
- certs,
- count,
- item;
-
- // Открываем хранилище
- try {
- 'yield' + oStore.Open(
- cadesplugin.CAPICOM_CURRENT_USER_STORE,
- cadesplugin.CAPICOM_MY_STORE,
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
- );
- } catch (err) {
- reject('Ошибка при открытии хранилища: ' + err.message);
- return;
- }
-
- // Получаем доступ к сертификатам
- try {
- certs = 'yield' + oStore.Certificates;
-
- if (certs) {
- certs = 'yield' + certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID);
- /**
- * Не рассматриваются сертификаты, в которых отсутствует закрытый ключ
- * или не действительны на данный момент
- * */
- certs = 'yield' + certs.Find(
- cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,
- cryptoConstants.PropId.CAPICOM_PROPID_KEY_PROV_INFO
- );
-
- count = 'yield' + certs.Count;
- }
- } catch (err) {
- reject('Ошибка получения списка сертификатов: ' + err.message);
- return;
- }
-
- if (!count) {
- reject('Нет доступных сертификатов');
- return;
- }
-
- try {
- while (count) {
- item = 'yield' + certs.Item(count);
-
- result.push(new Certificate({
- _cert: 'yield' + item,
- thumbprint: 'yield' + item.Thumbprint,
- subjectName: 'yield' + item.SubjectName,
- issuerName: 'yield' + item.IssuerName,
- validFrom: 'yield' + item.ValidFromDate,
- validTo: 'yield' + item.ValidToDate
- }));
-
- count--;
- }
- } catch (err) {
- reject('Ошибка обработки сертификатов: ' + err.message);
- return;
- }
-
- oStore.Close();
-
- _certListCache = cryptoCommon.prepareCertsInfo(result);
-
- resolve(_certListCache);
- }));
- });
- }
-
- /**
- * Получить сертификат по хэшу
- * */
- function getCert(hash) {
- return new Promise(function (resolve, reject) {
- if (!hash) {
- reject('Хэш не указан');
- return;
- }
-
- getCertsList().then(function (list) {
- var foundCert;
-
- list.some(function (cert) {
- if (hash === cert.thumbprint) {
- foundCert = cert;
- return true;
- }
- });
-
- if (foundCert) {
- resolve(foundCert);
- } else {
- reject('Сертификат с хэшем: "' + hash + '" не найден');
- }
- }, reject);
- });
- }
-
- /**
- * Создает подпись base64 строки по hash'у сертификата
- *
- * @param {String} hash -- fingerprint (thumbprint) сертификата
- * @param {String} dataBase64 -- строковые данные в формате base64
- * @param {Boolean} signType -- тип подписи открепленная (true) / присоединенная (false) (default: true)
- * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}
- * */
- function signData(hash, dataBase64, signType) {
- signType = typeof signType === 'undefined' ? true : Boolean(signType);
-
- return new Promise(function (resolve, reject) {
- getCadesCert(hash).then(function (cert) {
- eval(cryptoCommon.execute(function () {
- var clientTime = new Date(),
- oAttrs = 'yield' + cryptoCommon.createObj('CADESCOM.CPAttribute'),
- oSignedData = 'yield' + cryptoCommon.createObj('CAdESCOM.CadesSignedData'),
- oSigner = 'yield' + cryptoCommon.createObj('CAdESCOM.CPSigner'),
- attrs,
- signature;
-
- clientTime = cryptoCommon.getDateObj(clientTime);
-
- try {
- 'yield' + oAttrs.propset_Name(cryptoConstants.Time.AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
- 'yield' + oAttrs.propset_Value(clientTime);
- } catch (err) {
- reject('Ошибка при установке данных подписи: ' + err.message);
- return;
- }
-
- // Задаем настройки для подписи
- try {
- 'yield' + oSigner.propset_Certificate(cert);
- attrs = 'yield' + oSigner.AuthenticatedAttributes2;
- 'yield' + attrs.Add(oAttrs);
- 'yield' + oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
- 'yield' + oSignedData.propset_Content(dataBase64);
- 'yield' + oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);
- } catch (err) {
- reject('Не удалось установить настройки для подписи: ' + err.message);
- return;
- }
-
- try {
- signature = 'yield' + oSignedData.SignCades(
- oSigner,
- cadesplugin.CADESCOM_CADES_BES,
- signType
- );
- } catch (err) {
- reject('Не удалось создать подпись: ' + err.message);
- return;
- }
-
- resolve(signature);
- }));
- }, reject);
- });
- }
-
- /**
- * Создает подпись XML строки по hash'у сертификата
- *
- * @param {String} hash -- fingerprint (thumbprint) сертификата
- * @param {String} dataXML -- данные в формате XML
- * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}
- * */
- function signDataXML(hash, dataXML) {
- return new Promise(function (resolve, reject) {
- getCadesCert(hash).then(function (cert) {
- eval(cryptoCommon.execute(function () {
- var oSigner = 'yield' + cryptoCommon.createObj('CAdESCOM.CPSigner'),
- signerXML = 'yield' + cryptoCommon.createObj('CAdESCOM.SignedXML'),
- cnts = cryptoConstants,
- signature;
-
- // Задаем настройки для подписи
- try {
- 'yield' + oSigner.propset_Certificate(cert);
- // Добавляем данные для подписи
- 'yield' + signerXML.propset_Content(dataXML);
- // Устанавливаем тип подписи
- 'yield' + signerXML.propset_SignatureType(cnts.SignatureType.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED);
- // Устанавливаем алгоритм подписи
- 'yield' + signerXML.propset_SignatureMethod(cnts.GostXmlDSigUrls.XmlDsigGost3410Url);
- // Устанавливаем алгоритм хэширования
- 'yield' + signerXML.propset_DigestMethod(cnts.GostXmlDSigUrls.XmlDsigGost3411Url);
- } catch (err) {
- reject('Не удалось установить настройки для подписи: ' + err.message);
- return;
- }
-
- try {
- signature = 'yield' + signerXML.Sign(oSigner);
- } catch (err) {
- reject('Не удалось создать подпись: ' + err.message);
- return;
- }
-
- resolve(signature);
- }));
- }, reject);
- });
- }
-
- /**
- * Возвращает информацию о версии CSP и плагина
- * */
- function getSystemInfo() {
- var sysInfo = cryptoCommon.getEnvInfo();
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.execute(function () {
- var e;
-
- try {
- e = 'yield' + cryptoCommon.createObj('CAdESCOM.About');
-
- sysInfo.cadesVersion = 'yield' + e.PluginVersion;
- // Возможен вызов в ранних версиях в виде sysInfo.cspVersion = 'yield' + e.CSPVersion('', 75);
- sysInfo.cspVersion = 'yield' + e.CSPVersion();
-
- if (!sysInfo.cadesVersion) {
- sysInfo.cadesVersion = 'yield' + e.Version;
- }
-
- sysInfo.cadesVersion = 'yield' + sysInfo.cadesVersion.toString();
- sysInfo.cspVersion = 'yield' + sysInfo.cspVersion.toString();
-
- resolve(sysInfo);
- } catch (err) {
- reject('Ошибка при получении информации о системе: ', err.message);
- }
- }));
- });
- }
-
- /**
- * Promise обертка для синхронного вызова проверки версии CSP
- * */
- function isValidCSPVersion(version) {
- return new Promise(function (resolve) {
- resolve(cryptoCommon.isValidCSPVersion(version));
- });
- }
-
- /**
- * Promise обертка для синхронного вызова проверки версии плагина
- * */
- function isValidCadesVersion(version) {
- return new Promise(function (resolve) {
- resolve(cryptoCommon.isValidCadesVersion(version));
- });
- }
-
- module.exports = {
- isValidEDSSettings: isValidEDSSettings,
- getCertsList: getCertsList,
- getCert: getCert,
- signData: signData,
- signDataXML: signDataXML,
- getSystemInfo: getSystemInfo,
- isValidCSPVersion: isValidCSPVersion,
- isValidCadesVersion: isValidCadesVersion
- };
-
-/***/ },
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
- var bowser = __webpack_require__(1);
- var oids = __webpack_require__(6);
-
- var subjectNameTagsTranslations = [
- {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},
- {possibleNames: ['CN'], translation: 'Владелец'},
- {possibleNames: ['SN'], translation: 'Фамилия'},
- {possibleNames: ['G'], translation: 'Имя Отчество'},
- {possibleNames: ['C'], translation: 'Страна'},
- {possibleNames: ['S'], translation: 'Регион'},
- {possibleNames: ['STREET'], translation: 'Адрес'},
- {possibleNames: ['O'], translation: 'Компания'},
- {possibleNames: ['OU'], translation: 'Отдел/подразделение'},
- {possibleNames: ['T'], translation: 'Должность'},
- {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},
- {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},
- {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},
- {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},
- {possibleNames: ['E'], translation: 'Email'},
- {possibleNames: ['L'], translation: 'Город'}
- ],
-
- issuerNameTagsTranslations = [
- {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},
- {possibleNames: ['CN'], translation: 'Удостоверяющий центр'},
- {possibleNames: ['S'], translation: 'Регион'},
- {possibleNames: ['C'], translation: 'Страна'},
- {possibleNames: ['STREET'], translation: 'Адрес'},
- {possibleNames: ['O'], translation: 'Компания'},
- {possibleNames: ['OU'], translation: 'Тип'},
- {possibleNames: ['T'], translation: 'Должность'},
- {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},
- {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},
- {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},
- {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},
- {possibleNames: ['E'], translation: 'Email'},
- {possibleNames: ['L'], translation: 'Город'}
- ];
-
- function execute(cb) {
- var canAsync = cadesplugin.CreateObjectAsync;
-
- cb = String(cb);
-
- var args = cb.match(/^function\s*?\((.*?)\)/);
-
- args = (args && args[1]) || '';
-
- cb = cb.replace(/^.*?{([\s\S]*?)}$/, '$1');
-
- function GeneratorFunction() {
- return (new Function('', 'return Object.getPrototypeOf(function*(){}).constructor'))();
- }
-
- cb = String(new (canAsync ? GeneratorFunction() : Function)(args, cb));
-
- cb = cb.replace(/cryptoCommon\.createObj(\([\s\S]*?\))/gm, 'cadesplugin.CreateObject' + (canAsync ? 'Async' : '') + '$1');
- cb = cb.replace(/("|')(yield)(\1)\s*?\+\s*?\b/gm, canAsync ? '$2 ' : '');
-
- if (!canAsync) {
- cb = cb.replace(/propset_(.*?)\((.*?)\)/gm, '.$1 = $2');
- }
-
- return canAsync ?
- 'cadesplugin.async_spawn(' + cb + ');'
- : '(' + cb + ')();';
- }
-
- /**
- * Парсит информацию из строки с информацией о сертификате
- * */
- function parseCertInfo(tags, infoString) {
- /**
- * Пример входной строки:
- *
-
- T=Генеральный директор, UnstructuredName="INN=7811514257/KPP=781101001/OGRN=1127847087884",
- STREET="Крыленко, д.3, лит.Б", CN=Король Анатолий Евгеньевич, G=Анатолий Евгеньевич, SN=Король,
- OU=Администрация, O="ООО ""Аксиома""", L=Санкт-Петербург, S=78 г. Санкт-Петербург, C=RU, E=korol@sferasro.ru,
- INN=007811514257, OGRN=1127847087884, SNILS=11617693460
-
- * */
- var result = infoString.match(/([а-яА-Яa-zA-Z0-9\.]+)=(?:("[^"]+?")|(.+?))(?:,|$)/g);
-
- if (result) {
- result = result.map(function (group) {
- /**
- * Пример входной строки:
- *
-
- UnstructuredName="INN=7811514257/KPP=781101001/OGRN=1127847087884",
-
- * */
- var parts = group.match(/^([а-яА-Яa-zA-Z0-9\.]+)=(.+?),?$/),
- title = parts && parts[1],
- descr = parts && parts[2],
- translated = false,
- oidTitle;
-
- // Если тайтл содержит ОИД, пытаемся расшифровать
- if (/^OID./.test(title)) {
- oidTitle = title.match(/^OID\.(.*)/);
-
- if (oidTitle && oidTitle[1]) {
- oidTitle = oids[oidTitle[1]];
-
- if (oidTitle) {
- title = oidTitle;
- }
- }
- }
-
- // Вырезаем лишние кавычки
- descr = descr.replace(/^"(.*)"/, '$1');
- descr = descr.replace(/"{2}/g, '"');
-
- tags.some(function (tag) {
- return tag.possibleNames.some(function (possible) {
- var match = possible === title;
-
- if (match) {
- title = tag.translation;
- translated = true;
- }
-
- return match;
- });
- });
-
- return {
- title: title,
- descr: descr,
- translated: translated
- };
- });
- }
-
- return result;
- }
-
- /**
- * Возвращает дату в формате (dd.mm.yyyy hh:mm:ss) из строки, формата, используемого плагином cryptoPro
- * */
- function getReadableDate(date) {
- date = new Date(date);
-
- return ([
- date.getDate(),
- date.getMonth() + 1,
- date.getFullYear()
- ].join('.') + ' ' + [
- date.getHours(),
- date.getMinutes(),
- date.getSeconds()
- ].join(':')).replace(/\b(\d)\b/g, '0$1');
- }
-
- /**
- * Преобразует дату для IE
- * */
- function getDateObj(dateObj) {
- return bowser.msie ? dateObj.getVarDate() : dateObj;
- }
-
- /**
- * Подготавливает информацию о сертификатах
- * */
- function prepareCertsInfo(items) {
- return items.map(function (c) {
- c.name = c.subjectName.match(/CN=(.+?)(?:,|$)/);
-
- // Удалось ли вытащить Common Name
- if (c.name && c.name[1]) {
- c.name = c.name[1];
- }
-
- c.validFrom = getReadableDate(c.validFrom);
- c.validTo = getReadableDate(c.validTo);
-
- c.label = c.name + ' (до ' + c.validTo + ')';
-
- return c;
- });
- }
-
- /**
- * Возвращает расшифрованные ОИД'ы
- * */
- function getDecodedExtendedKeyUsage() {
- var that = this;
-
- return new Promise(function (resolve) {
- that.getExtendedKeyUsage().then(function (certOids) {
- resolve(certOids.reduce(function (oidsLst, oid) {
- oid = {
- id: oid,
- descr: oids[oid] || null
- };
-
- if (oid.descr) {
- oidsLst.unshift(oid);
- } else {
- oidsLst.push(oid);
- }
-
- return oidsLst;
- }, []));
- });
- });
- }
-
- /**
- * Проверка наличия ОИД'а(ОИД'ов) у сертификата
- *
- * @param {String|Array} oids - ОИД'ы для проверки
- * @returns {Promise} с отложенным результатом типа {Boolean}
- * */
- function hasExtendedKeyUsage(oids) {
- var that = this;
-
- return new Promise(function (resolve) {
- that.getExtendedKeyUsage().then(function (certOids) {
- var result;
-
- if (Array.isArray(oids)) {
- result = oids.every(function (oidToCheck) {
- return certOids.some(function (certOid) {
- return certOid === oidToCheck;
- });
- });
- } else {
- result = certOids.some(function (certOid) {
- return certOid === oids;
- });
- }
-
- resolve(result);
- });
- });
- }
-
- /**
- * Выводит информацию о системе пользователя
- * */
- function getEnvInfo() {
- var parsed = bowser._detect(navigator.userAgent),
- info = {
- browserName: parsed.name,
- browserVersion: parsed.version
- };
-
- if (parsed.mac) {
- info.os = 'Mac';
- } else if (parsed.windows) {
- info.os = 'Windows';
- } else if (parsed.linux) {
- info.os = 'Linux';
- }
-
- return info;
- }
-
- /**
- * Подходящая ли версия CSP
- * */
- function isValidCSPVersion(version) {
- version = version.match(/\d+?\b(?:\.\d+)?/);
-
- return version >= 3.6;
- }
-
- /**
- * Подходящая ли версия cades плагина
- * */
- function isValidCadesVersion(version) {
- version = version.split('.').reduce(function (verInfo, number, i) {
- if (i === 0) {
- verInfo.major = number;
- } else if (i === 1) {
- verInfo.minor = number;
- } else if (i === 2) {
- verInfo.patch = number;
- }
-
- return verInfo;
- }, {});
-
- if (version.major < 2) {
- return false;
- }
-
- return version.patch >= 12438;
- }
-
- module.exports = {
- execute: execute,
- subjectNameTagsTranslations: subjectNameTagsTranslations,
- issuerNameTagsTranslations: issuerNameTagsTranslations,
- parseCertInfo: parseCertInfo,
- getReadableDate: getReadableDate,
- getDateObj: getDateObj,
- prepareCertsInfo: prepareCertsInfo,
- getDecodedExtendedKeyUsage: getDecodedExtendedKeyUsage,
- hasExtendedKeyUsage: hasExtendedKeyUsage,
- getEnvInfo: getEnvInfo,
- isValidCSPVersion: isValidCSPVersion,
- isValidCadesVersion: isValidCadesVersion
- };
-
-/***/ },
-/* 6 */
-/***/ function(module, exports) {
-
- module.exports = {
- '1.2.840.113549.1.9.2': 'Неструктурированное имя',
- '1.2.643.3.141.1.1': 'РНС ФСС',
- '1.2.643.3.141.1.2': 'КП ФСС',
- '1.2.643.3.131.1.1': 'ИНН',
- '1.3.6.1.5.5.7.3.2': 'Проверка подлинности клиента',
- '1.3.6.1.5.5.7.3.4': 'Защищенная электронная почта',
- '1.2.643.3.8.100.1': 'Сертификат типа "ekey-ГОСТ"',
- '1.2.643.3.8.100.1.1': 'Общее использование в системах ИОК без права заверения финансовых документов',
- '1.2.643.3.8.100.1.2': 'Передача отчетности по ТКС',
- '1.2.643.3.8.100.1.3': 'Оформление взаимных обязательств, соглашений, договоров, актов и т.п.',
- '1.2.643.3.8.100.1.4': 'Внутрикорпоративный документооборот',
- '1.2.643.3.8.100.1.5': 'Использование в системах электронной торговли',
- '1.2.643.3.8.100.1.6': 'Использование в торгово-закупочной системе "ЭЛЕКТРА"',
- '1.2.643.6.2.1.7.2': 'Использование физическим лицом в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских прав и обязанностей в отношении инвестиционных паев паевых инвестиционных фондов, в том числе отношения, связанные с учетом и/или фиксацией прав на инвестиционные паи паевых инвестиционных фондов',
- '1.2.643.6.2.1.7.1': 'Использование единоличным исполнительным органом юридического лица или уполномоченными представителями юридического лица в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских и иных прав и обязанностей в сфере негосударственного пенсионного обеспечения, негосударственного пенсионного страхования, в сфере деятельности паевых инвестиционных фондов, акционерных инвестиционных фондов, профессиональных участников рынка ценных бумаг, а также связанной с обслуживанием указанной деятельности услуг кредитных и иных организаций',
- '1.3.6.1.4.1.29919.21': 'Использование в системе Портал государственных закупок Ростовской области "Рефери".',
- '1.2.643.3.2.100.65.13.11': 'Использование в системе АИС "Госзакупки" Сахалинской области.',
- '1.2.643.3.8.100.1.7': 'Использование в системе Портал государственных закупок Ставропольского края.',
- '1.2.643.3.8.100.1.8': 'Использование в Единой системе электронной торговли B2B-Center и B2G.',
- '1.2.643.3.8.100.1.9': 'Для участия в электронных торгах и подписания государственного контракта в электронной площадке ОАО «ЕЭТП» уполномоченными лицами участников размещения государственного или муниципального заказа',
- '1.2.643.3.8.100.1.10': 'Для участия в электронных торгах и подписания государственного контракта в информационных системах Тендерного комитета города Москвы уполномоченными лицами участников размещения государственного заказа города Москвы',
- '1.2.643.3.8.100.1.11': 'Подписание электронных документов в автоматизированной информационной системе размещения государственного и муниципального заказа Саратовской области',
- '1.2.643.3.8.100.1.12': 'Использование в системе государственного заказа Иркутской области',
- '1.2.643.3.8.100.1.13': 'Использование в электронной торговой площадке агентства государственного заказа Красноярского края',
- '1.3.6.1.4.1.24138.1.1.8.1': 'Обеспечение юридической значимости в Системе "Электронная Торговая Площадка"',
- '1.2.643.3.8.100.1.14': 'Использование в электронной торговой площадке "Тендер"',
- '1.2.643.6.3': 'Использование в электронных торговых системах и в программном обеспечении, связанным с обменом электронных сообщений',
- '1.2.643.2.2.34.6': 'Пользователь Центра Регистрации',
- '1.2.643.2.39.1.1': 'Использование в программных продуктах системы "1С:Предприятие 8"',
- '1.2.643.5.1.24.2.1.3': 'Формирование документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',
- '1.2.643.5.1.24.2.1.3.1': 'Формирование кадастровым инженером документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',
- '1.2.643.5.1.24.2.2.2': 'Формирование документов как результата оказания услуги со стороны органов регистрации прав',
- '1.2.643.5.1.24.2.2.3': 'Формирование документов для получения государственных услуг в сфере государственной регистрации прав на недвижимое имущество и сделок с ним со стороны заявителя',
- '1.2.643.6.3.1.1': 'Использование на электронных площадок отобранных для проведения аукционах в электронной форме',
- '1.2.643.6.3.1.2.1': 'Тип участника - Юридическое лицо',
- '1.2.643.6.3.1.2.2': 'Тип участника - Физическое лицо',
- '1.2.643.6.3.1.2.3': 'Тип участника - Индивидуальный предприниматель',
- '1.2.643.6.3.1.3.1': 'Участник размещения заказа',
- '1.2.643.6.3.1.4.1': 'Администратор организации',
- '1.2.643.6.3.1.4.2': 'Уполномоченный специалист',
- '1.2.643.6.3.1.4.3': 'Специалист с правом подписи контракта',
- '1.3.643.3.8.100.15': 'Использование в ЭТП "uTender"'
- };
-
-/***/ },
-/* 7 */
-/***/ function(module, exports) {
-
- module.exports = {
- // CAPICOM_STORE_LOCATION enumeration
- StoreLocation: {
- CAPICOM_MEMORY_STORE: 0,
- CAPICOM_LOCAL_MACHINE_STORE: 1,
- CAPICOM_CURRENT_USER_STORE: 2,
- CAPICOM_ACTIVE_DIRECTORY_USER_STORE: 3,
- CAPICOM_SMART_CARD_USER_STORE: 4
- },
- // CAPICOM_STORE_OPEN_MODE enumeration
- StoreOpenMode: {
- CAPICOM_STORE_OPEN_READ_ONLY: 0,
- CAPICOM_STORE_OPEN_READ_WRITE: 1,
- CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED: 2,
- CAPICOM_STORE_OPEN_EXISTING_ONLY: 128,
- CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED: 256
- },
- // CAPICOM_CERTIFICATE_FIND_TYPE enumeration
- CertFindType: {
- CAPICOM_CERTIFICATE_FIND_SHA1_HASH: 0,
- CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME: 1,
- CAPICOM_CERTIFICATE_FIND_ISSUER_NAME: 2,
- CAPICOM_CERTIFICATE_FIND_ROOT_NAME: 3,
- CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME: 4,
- CAPICOM_CERTIFICATE_FIND_EXTENSION: 5,
- CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY: 6,
- CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY: 7,
- CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY: 8,
- CAPICOM_CERTIFICATE_FIND_TIME_VALID: 9,
- CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID: 10,
- CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED: 11,
- CAPICOM_CERTIFICATE_FIND_KEY_USAGE: 12
- },
- Time: {
- AUTHENTICATED_ATTRIBUTE_SIGNING_TIME: 0
- },
- Check: {
- CHECK_NONE: 0,
- CHECK_TRUSTED_ROOT: 1,
- CHECK_TIME_VALIDITY: 2,
- CHECK_SIGNATURE_VALIDITY: 4,
- CHECK_ONLINE_REVOCATION_STATUS: 8,
- CHECK_OFFLINE_REVOCATION_STATUS: 16,
- TRUST_IS_NOT_TIME_VALID: 1,
- TRUST_IS_NOT_TIME_NESTED: 2,
- TRUST_IS_REVOKED: 4,
- TRUST_IS_NOT_SIGNATURE_VALID: 8,
- TRUST_IS_NOT_VALID_FOR_USAGE: 16,
- TRUST_IS_UNTRUSTED_ROOT: 32,
- TRUST_REVOCATION_STATUS_UNKNOWN: 64,
- TRUST_IS_CYCLIC: 128,
- TRUST_IS_PARTIAL_CHAIN: 65536,
- TRUST_CTL_IS_NOT_TIME_VALID: 131072,
- TRUST_CTL_IS_NOT_SIGNATURE_VALID: 262144,
- TRUST_CTL_IS_NOT_VALID_FOR_USAGE: 524288,
- },
- // CAPICOM_PROPID enumeration
- PropId: {
- CAPICOM_PROPID_UNKNOWN: 0,
- CAPICOM_PROPID_KEY_PROV_HANDLE: 1,
- CAPICOM_PROPID_KEY_PROV_INFO: 2,
- CAPICOM_PROPID_SHA1_HASH: 3,
- CAPICOM_PROPID_HASH_PROP: 3,
- CAPICOM_PROPID_MD5_HASH: 4,
- CAPICOM_PROPID_KEY_CONTEXT: 5,
- CAPICOM_PROPID_KEY_SPEC: 6,
- CAPICOM_PROPID_IE30_RESERVED: 7,
- CAPICOM_PROPID_PUBKEY_HASH_RESERVED: 8,
- CAPICOM_PROPID_ENHKEY_USAGE: 9,
- CAPICOM_PROPID_CTL_USAGE: 9,
- CAPICOM_PROPID_NEXT_UPDATE_LOCATION: 10,
- CAPICOM_PROPID_FRIENDLY_NAME: 11,
- CAPICOM_PROPID_PVK_FILE: 12,
- CAPICOM_PROPID_DESCRIPTION: 13,
- CAPICOM_PROPID_ACCESS_STATE: 14,
- CAPICOM_PROPID_SIGNATURE_HASH: 15,
- CAPICOM_PROPID_SMART_CARD_DATA: 16,
- CAPICOM_PROPID_EFS: 17,
- CAPICOM_PROPID_FORTEZZA_DATA: 18,
- CAPICOM_PROPID_ARCHIVED: 19,
- CAPICOM_PROPID_KEY_IDENTIFIER: 20,
- CAPICOM_PROPID_AUTO_ENROLL: 21,
- CAPICOM_PROPID_PUBKEY_ALG_PARA: 22,
- CAPICOM_PROPID_CROSS_CERT_DIST_POINTS: 23,
- CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH: 24,
- CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH: 25,
- CAPICOM_PROPID_ENROLLMENT: 26,
- CAPICOM_PROPID_DATE_STAMP: 27,
- CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH: 28,
- CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH: 29,
- CAPICOM_PROPID_EXTENDED_ERROR_INFO: 30,
- CAPICOM_PROPID_RENEWAL: 64,
- CAPICOM_PROPID_ARCHIVED_KEY_HASH: 65,
- CAPICOM_PROPID_FIRST_RESERVED: 66,
- CAPICOM_PROPID_LAST_RESERVED: 0x00007FFF,
- CAPICOM_PROPID_FIRST_USER: 0x00008000,
- CAPICOM_PROPID_LAST_USER: 0x0000FFFF
- },
- // CADESCOM_XML_SIGNATURE_TYPE enumeration
- SignatureType: {
- CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED: 0,
- CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING: 1,
- CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE: 2
- },
- // CADESCOM_HASH_ALGORITHM enumeration
- HashAlgorithm: {
- CADESCOM_HASH_ALGORITHM_CP_GOST_3411: 100,
- CADESCOM_HASH_ALGORITHM_MD2: 1,
- CADESCOM_HASH_ALGORITHM_MD4: 2,
- CADESCOM_HASH_ALGORITHM_MD5: 3,
- CADESCOM_HASH_ALGORITHM_SHA_256: 4,
- CADESCOM_HASH_ALGORITHM_SHA_384: 5,
- CADESCOM_HASH_ALGORITHM_SHA_512: 6,
- CADESCOM_HASH_ALGORITHM_SHA1: 0
- },
- CadesType: {
- CADESCOM_CADES_DEFAULT: 0,
- CADESCOM_CADES_BES: 1,
- CADESCOM_CADES_X_LONG_TYPE_1: 0x5d
- },
- ContentEncoding: {
- CADESCOM_BASE64_TO_BINARY: 0x01,
- CADESCOM_STRING_TO_UCS2LE: 0x00
- },
- StoreNames: {
- CAPICOM_MY_STORE: 'My'
- },
- Chain: {
- CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT: 0,
- CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN: 1,
- CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY: 2
- },
- GostXmlDSigUrls: {
- XmlDsigGost3410Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411',
- XmlDsigGost3411Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411',
- XmlDsigGost3410UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411',
- XmlDsigGost3411UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr3411'
- }
- };
-
-/***/ }
-]);
-//# sourceMappingURL=1.crypto-pro.js.map
\ No newline at end of file
diff --git a/dist/1.crypto-pro.js.map b/dist/1.crypto-pro.js.map
deleted file mode 100644
index ea198ff..0000000
--- a/dist/1.crypto-pro.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./apiAsync.js","webpack:///./common.js","webpack:///./oids.js","webpack:///./constants.js"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B;AAC3B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,cAAa,QAAQ,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;;AAErB;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,QAAQ,wDAAwD;AAC7E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,QAAQ,wDAAwD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACxiBA;AACA;;AAEA;AACA,UAAS,4EAA4E;AACrF,UAAS,+CAA+C;AACxD,UAAS,8CAA8C;AACvD,UAAS,kDAAkD;AAC3D,UAAS,4CAA4C;AACrD,UAAS,4CAA4C;AACrD,UAAS,gDAAgD;AACzD,UAAS,8CAA8C;AACvD,UAAS,0DAA0D;AACnE,UAAS,+CAA+C;AACxD,UAAS,qDAAqD;AAC9D,UAAS,2DAA2D;AACpE,UAAS,wDAAwD;AACjE,UAAS,kDAAkD;AAC3D,UAAS,2CAA2C;AACpD,UAAS;AACT;;AAEA;AACA,UAAS,4EAA4E;AACrF,UAAS,2DAA2D;AACpE,UAAS,4CAA4C;AACrD,UAAS,4CAA4C;AACrD,UAAS,gDAAgD;AACzD,UAAS,8CAA8C;AACvD,UAAS,0CAA0C;AACnD,UAAS,+CAA+C;AACxD,UAAS,qDAAqD;AAC9D,UAAS,2DAA2D;AACpE,UAAS,wDAAwD;AACjE,UAAS,kDAAkD;AAC3D,UAAS,2CAA2C;AACpD,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC,EAAE;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,cAAa,QAAQ,gCAAgC;AACrD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB;AACrB,kBAAiB;AACjB,cAAa;AACb;AACA;AACA,kBAAiB;AACjB;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA,MAAK,IAAI;;AAET;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,G","file":"1.crypto-pro.js","sourcesContent":["var cryptoCommon = require('./common'),\n cryptoConstants = require('./constants'),\n _certListCache;\n\nfunction Certificate(item) {\n this._cert = item._cert;\n this.thumbprint = item.thumbprint;\n this.subjectName = item.subjectName;\n this.issuerName = item.issuerName;\n this.validFrom = item.validFrom;\n this.validTo = item.validTo;\n}\n\n/**\n * Проверяет, валиден ли сертификат\n * */\nCertificate.prototype.isValid = function isValid() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var result;\n\n try {\n result = yield cert.IsValid();\n result = yield result.Result;\n } catch (err) {\n reject('Ошибка при проверке сертификата: ', err.message);\n return;\n }\n\n resolve(result);\n });\n });\n};\n\n/**\n * Достает указанное свойство у сертификата\n * */\nCertificate.prototype.getProp = function (propName) {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var result;\n\n try {\n result = yield cert[propName];\n } catch (err) {\n reject('Ошибка при обращении к свойству сертификата: ', err.message);\n return;\n }\n\n resolve(result);\n });\n });\n};\n\n/**\n * Экспорт base64 представления сертификата пользователя\n * */\nCertificate.prototype.exportBase64 = function exportBase64() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var base64;\n\n try {\n base64 = yield cert.Export(0);\n } catch (err) {\n reject('Ошибка при экспорте сертификата: ', err.message);\n return;\n }\n\n resolve(base64);\n });\n });\n};\n\n/**\n * Возвращает информацию об алгоритме\n * */\nCertificate.prototype.getAlgorithm = function getAlgorithm() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var result = {},\n algorithm;\n\n try {\n algorithm = yield cert.PublicKey();\n algorithm = yield algorithm.Algorithm;\n\n result.algorithm = yield algorithm.FriendlyName;\n result.oid = yield algorithm.Value;\n } catch (err) {\n reject('Ошибка при получении алгоритма: ', err.message);\n return;\n }\n\n resolve(result);\n });\n });\n};\n\n/**\n * Разбирает SubjectName сертификата по тэгам\n * */\nCertificate.prototype.getOwnerInfo = function getOwnerInfo() {\n return getCertInfo.call(this, cryptoCommon.subjectNameTagsTranslations, 'SubjectName');\n};\n\n/**\n * Разбирает IssuerName сертификата по тэгам\n * */\nCertificate.prototype.getIssuerInfo = function getIssuerInfo() {\n return getCertInfo.call(this, cryptoCommon.issuerNameTagsTranslations, 'IssuerName');\n};\n\n/**\n * Получение OID сертификата\n *\n * @returns {Array} Возвращает массив OID (улучшенного ключа)\n * */\nCertificate.prototype.getExtendedKeyUsage = function getExtendedKeyUsage() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var OIDS = [],\n count,\n item;\n\n try {\n count = yield cert.ExtendedKeyUsage();\n count = yield count.EKUs;\n count = yield count.Count;\n\n if (count > 0) {\n while (count > 0) {\n item = yield cert.ExtendedKeyUsage();\n item = yield item.EKUs;\n item = yield item.Item(count);\n item = yield item.OID;\n\n OIDS.push(item);\n\n count--;\n }\n }\n } catch (err) {\n reject('Ошибка при получении ОИД\\'ов: ', err.message);\n return;\n }\n\n resolve(OIDS);\n });\n });\n};\n\nCertificate.prototype.getDecodedExtendedKeyUsage = cryptoCommon.getDecodedExtendedKeyUsage;\n\nCertificate.prototype.hasExtendedKeyUsage = cryptoCommon.hasExtendedKeyUsage;\n\n/**\n * Проверяет корректность настроек ЭП на машине\n * */\nfunction isValidEDSSettings() {\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var result;\n\n try {\n result = yield cadesplugin.CreateObjectAsync('CAdESCOM.About');\n } catch (error) {\n reject('Настройки ЭП на данной машине не верны');\n }\n\n resolve();\n });\n });\n}\n\n/**\n * Получить сертификат в формате cades по хэшу\n * */\nfunction getCadesCert(hash) {\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var oStore = yield cadesplugin.CreateObjectAsync('CAdESCOM.Store'),\n certs,\n certCnt,\n cert;\n\n if (!oStore) {\n reject('Не удалось получить доступ к хранилищу сертификатов');\n return;\n }\n\n // Открываем хранилище\n try {\n yield oStore.Open(\n cadesplugin.CAPICOM_CURRENT_USER_STORE,\n cadesplugin.CAPICOM_MY_STORE,\n cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED\n );\n } catch (err) {\n reject('Ошибка при открытии хранилища: ' + err.message);\n return;\n }\n\n // Получаем доступ к сертификатам\n try {\n certs = yield oStore.Certificates;\n certCnt = yield certs.Count;\n } catch (err) {\n reject('Ошибка получения списка сертификатов: ' + err.message);\n return;\n }\n\n if (!certCnt) {\n reject('Нет доступных сертификатов');\n return;\n }\n\n // Получаем сертификат по хэшу\n try {\n certs = yield certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, hash);\n\n if (certs.Count) {\n cert = yield certs.Item(1);\n } else {\n throw new Error(hash);\n }\n } catch (err) {\n reject('Не удалось получить сертификат по хэшу: ' + err.message);\n return;\n }\n\n oStore.Close();\n\n resolve(cert);\n });\n });\n}\n\n/**\n * Разбирает информацию сертификата по тэгам\n * */\nfunction getCertInfo(tags, propName) {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var propInfo;\n\n try {\n propInfo = yield cert[propName];\n } catch (err) {\n reject('Ошибка при извлечении данных из сертификата: ', err.message);\n return;\n }\n\n resolve(cryptoCommon.parseCertInfo(tags, propInfo));\n });\n });\n}\n\n/**\n * Возвращает список сертификатов, доступных в системе\n *\n * @param {Boolean} [resetCache=false] -- нужно ли сбросить кэш списка сертификатов\n * @returns {Promise} -- со списком сертификатов {Array}\n * */\nfunction getCertsList(resetCache) {\n return new Promise(function (resolve, reject) {\n if (!resetCache && _certListCache) {\n resolve(_certListCache);\n return;\n }\n\n cadesplugin.async_spawn(function* () {\n var oStore = yield cadesplugin.CreateObjectAsync('CAdESCOM.Store'),\n result = [],\n certs,\n count,\n item;\n\n // Открываем хранилище\n try {\n yield oStore.Open(\n cadesplugin.CAPICOM_CURRENT_USER_STORE,\n cadesplugin.CAPICOM_MY_STORE,\n cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED\n );\n } catch (err) {\n reject('Ошибка при открытии хранилища: ' + err.message);\n return;\n }\n\n // Получаем доступ к сертификатам\n try {\n certs = yield oStore.Certificates;\n\n if (certs) {\n certs = yield certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID);\n /**\n * Не рассматриваются сертификаты, в которых отсутствует закрытый ключ\n * или не действительны на данный момент\n * */\n certs = yield certs.Find(\n cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,\n cryptoConstants.PropId.CAPICOM_PROPID_KEY_PROV_INFO\n );\n\n count = yield certs.Count;\n }\n } catch (err) {\n reject('Ошибка получения списка сертификатов: ' + err.message);\n return;\n }\n\n if (!count) {\n reject('Нет доступных сертификатов');\n return;\n }\n\n try {\n while (count) {\n item = yield certs.Item(count);\n\n result.push(new Certificate({\n _cert: yield item,\n thumbprint: yield item.Thumbprint,\n subjectName: yield item.SubjectName,\n issuerName: yield item.IssuerName,\n validFrom: yield item.ValidFromDate,\n validTo: yield item.ValidToDate\n }));\n\n count--;\n }\n } catch (err) {\n reject('Ошибка обработки сертификатов: ' + err.message);\n return;\n }\n\n oStore.Close();\n\n _certListCache = cryptoCommon.prepareCertsInfo(result);\n\n resolve(_certListCache);\n });\n });\n}\n\n/**\n * Получить сертификат по хэшу\n * */\nfunction getCert(hash) {\n return new Promise(function (resolve, reject) {\n if (!hash) {\n reject('Хэш не указан');\n return;\n }\n\n getCertsList().then(function (list) {\n var foundCert;\n\n list.some(function (cert) {\n if (hash === cert.thumbprint) {\n foundCert = cert;\n return true;\n }\n });\n\n if (foundCert) {\n resolve(foundCert);\n } else {\n reject('Сертификат с хэшем: \"' + hash + '\" не найден');\n }\n }, reject);\n });\n}\n\n/**\n * Создает подпись base64 строки по hash'у сертификата\n *\n * @param {String} hash -- fingerprint (thumbprint) сертификата\n * @param {String} dataBase64 -- строковые данные в формате base64\n * @param {Boolean} signType -- тип подписи открепленная (true) / присоединенная (false) (default: true)\n * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}\n * */\nfunction signData(hash, dataBase64, signType) {\n signType = typeof signType === 'undefined' ? true : Boolean(signType);\n\n return new Promise(function (resolve, reject) {\n getCadesCert(hash).then(function (cert) {\n cadesplugin.async_spawn(function* () {\n var clientTime = new Date(),\n oAttrs = yield cadesplugin.CreateObjectAsync('CADESCOM.CPAttribute'),\n oSignedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.CadesSignedData'),\n oSigner = yield cadesplugin.CreateObjectAsync('CAdESCOM.CPSigner'),\n attrs,\n signature;\n\n clientTime = cryptoCommon.getDateObj(clientTime);\n\n try {\n yield oAttrs.propset_Name(cryptoConstants.Time.AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);\n yield oAttrs.propset_Value(clientTime);\n } catch (err) {\n reject('Ошибка при установке данных подписи: ' + err.message);\n return;\n }\n\n // Задаем настройки для подписи\n try {\n yield oSigner.propset_Certificate(cert);\n attrs = yield oSigner.AuthenticatedAttributes2;\n yield attrs.Add(oAttrs);\n yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);\n yield oSignedData.propset_Content(dataBase64);\n yield oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);\n } catch (err) {\n reject('Не удалось установить настройки для подписи: ' + err.message);\n return;\n }\n\n try {\n signature = yield oSignedData.SignCades(\n oSigner,\n cadesplugin.CADESCOM_CADES_BES,\n signType\n );\n } catch (err) {\n reject('Не удалось создать подпись: ' + err.message);\n return;\n }\n\n resolve(signature);\n });\n }, reject);\n });\n}\n\n/**\n * Создает подпись XML строки по hash'у сертификата\n *\n * @param {String} hash -- fingerprint (thumbprint) сертификата\n * @param {String} dataXML -- данные в формате XML\n * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}\n * */\nfunction signDataXML(hash, dataXML) {\n return new Promise(function (resolve, reject) {\n getCadesCert(hash).then(function (cert) {\n cadesplugin.async_spawn(function* () {\n var oSigner = yield cadesplugin.CreateObjectAsync('CAdESCOM.CPSigner'),\n signerXML = yield cadesplugin.CreateObjectAsync('CAdESCOM.SignedXML'),\n cnts = cryptoConstants,\n signature;\n\n // Задаем настройки для подписи\n try {\n yield oSigner.propset_Certificate(cert);\n // Добавляем данные для подписи\n yield signerXML.propset_Content(dataXML);\n // Устанавливаем тип подписи\n yield signerXML.propset_SignatureType(cnts.SignatureType.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED);\n // Устанавливаем алгоритм подписи\n yield signerXML.propset_SignatureMethod(cnts.GostXmlDSigUrls.XmlDsigGost3410Url);\n // Устанавливаем алгоритм хэширования\n yield signerXML.propset_DigestMethod(cnts.GostXmlDSigUrls.XmlDsigGost3411Url);\n } catch (err) {\n reject('Не удалось установить настройки для подписи: ' + err.message);\n return;\n }\n\n try {\n signature = yield signerXML.Sign(oSigner);\n } catch (err) {\n reject('Не удалось создать подпись: ' + err.message);\n return;\n }\n\n resolve(signature);\n });\n }, reject);\n });\n}\n\n/**\n * Возвращает информацию о версии CSP и плагина\n * */\nfunction getSystemInfo() {\n var sysInfo = cryptoCommon.getEnvInfo();\n\n return new Promise(function (resolve, reject) {\n cadesplugin.async_spawn(function* () {\n var e;\n\n try {\n e = yield cadesplugin.CreateObjectAsync('CAdESCOM.About');\n\n sysInfo.cadesVersion = yield e.PluginVersion;\n // Возможен вызов в ранних версиях в виде sysInfo.cspVersion = yield e.CSPVersion('', 75);\n sysInfo.cspVersion = yield e.CSPVersion();\n\n if (!sysInfo.cadesVersion) {\n sysInfo.cadesVersion = yield e.Version;\n }\n\n sysInfo.cadesVersion = yield sysInfo.cadesVersion.toString();\n sysInfo.cspVersion = yield sysInfo.cspVersion.toString();\n\n resolve(sysInfo);\n } catch (err) {\n reject('Ошибка при получении информации о системе: ', err.message);\n }\n });\n });\n}\n\n/**\n * Promise обертка для синхронного вызова проверки версии CSP\n * */\nfunction isValidCSPVersion(version) {\n return new Promise(function (resolve) {\n resolve(cryptoCommon.isValidCSPVersion(version));\n });\n}\n\n/**\n * Promise обертка для синхронного вызова проверки версии плагина\n * */\nfunction isValidCadesVersion(version) {\n return new Promise(function (resolve) {\n resolve(cryptoCommon.isValidCadesVersion(version));\n });\n}\n\nmodule.exports = {\n isValidEDSSettings: isValidEDSSettings,\n getCertsList: getCertsList,\n getCert: getCert,\n signData: signData,\n signDataXML: signDataXML,\n getSystemInfo: getSystemInfo,\n isValidCSPVersion: isValidCSPVersion,\n isValidCadesVersion: isValidCadesVersion\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./apiAsync.js\n ** module id = 4\n ** module chunks = 1\n **/","var bowser = require('bowser/bowser');\nvar oids = require('./oids');\n\nvar subjectNameTagsTranslations = [\n {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},\n {possibleNames: ['CN'], translation: 'Владелец'},\n {possibleNames: ['SN'], translation: 'Фамилия'},\n {possibleNames: ['G'], translation: 'Имя Отчество'},\n {possibleNames: ['C'], translation: 'Страна'},\n {possibleNames: ['S'], translation: 'Регион'},\n {possibleNames: ['STREET'], translation: 'Адрес'},\n {possibleNames: ['O'], translation: 'Компания'},\n {possibleNames: ['OU'], translation: 'Отдел/подразделение'},\n {possibleNames: ['T'], translation: 'Должность'},\n {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},\n {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},\n {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},\n {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},\n {possibleNames: ['E'], translation: 'Email'},\n {possibleNames: ['L'], translation: 'Город'}\n ],\n\n issuerNameTagsTranslations = [\n {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},\n {possibleNames: ['CN'], translation: 'Удостоверяющий центр'},\n {possibleNames: ['S'], translation: 'Регион'},\n {possibleNames: ['C'], translation: 'Страна'},\n {possibleNames: ['STREET'], translation: 'Адрес'},\n {possibleNames: ['O'], translation: 'Компания'},\n {possibleNames: ['OU'], translation: 'Тип'},\n {possibleNames: ['T'], translation: 'Должность'},\n {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},\n {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},\n {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},\n {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},\n {possibleNames: ['E'], translation: 'Email'},\n {possibleNames: ['L'], translation: 'Город'}\n ];\n\n/**\n * Парсит информацию из строки с информацией о сертификате\n * */\nfunction parseCertInfo(tags, infoString) {\n /**\n * Пример входной строки:\n *\n\n T=Генеральный директор, UnstructuredName=\"INN=7811514257/KPP=781101001/OGRN=1127847087884\",\n STREET=\"Крыленко, д.3, лит.Б\", CN=Король Анатолий Евгеньевич, G=Анатолий Евгеньевич, SN=Король,\n OU=Администрация, O=\"ООО \"\"Аксиома\"\"\", L=Санкт-Петербург, S=78 г. Санкт-Петербург, C=RU, E=korol@sferasro.ru,\n INN=007811514257, OGRN=1127847087884, SNILS=11617693460\n\n * */\n var result = infoString.match(/([а-яА-Яa-zA-Z0-9\\.]+)=(?:(\"[^\"]+?\")|(.+?))(?:,|$)/g);\n\n if (result) {\n result = result.map(function (group) {\n /**\n * Пример входной строки:\n *\n\n UnstructuredName=\"INN=7811514257/KPP=781101001/OGRN=1127847087884\",\n\n * */\n var parts = group.match(/^([а-яА-Яa-zA-Z0-9\\.]+)=(.+?),?$/),\n title = parts && parts[1],\n descr = parts && parts[2],\n translated = false,\n oidTitle;\n\n // Если тайтл содержит ОИД, пытаемся расшифровать\n if (/^OID./.test(title)) {\n oidTitle = title.match(/^OID\\.(.*)/);\n\n if (oidTitle && oidTitle[1]) {\n oidTitle = oids[oidTitle[1]];\n\n if (oidTitle) {\n title = oidTitle;\n }\n }\n }\n\n // Вырезаем лишние кавычки\n descr = descr.replace(/^\"(.*)\"/, '$1');\n descr = descr.replace(/\"{2}/g, '\"');\n\n tags.some(function (tag) {\n return tag.possibleNames.some(function (possible) {\n var match = possible === title;\n\n if (match) {\n title = tag.translation;\n translated = true;\n }\n\n return match;\n });\n });\n\n return {\n title: title,\n descr: descr,\n translated: translated\n };\n });\n }\n\n return result;\n}\n\n/**\n * Возвращает дату в формате (dd.mm.yyyy hh:mm:ss) из строки, формата, используемого плагином cryptoPro\n * */\nfunction getReadableDate(date) {\n date = new Date(date);\n\n return ([\n date.getDate(),\n date.getMonth() + 1,\n date.getFullYear()\n ].join('.') + ' ' + [\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n ].join(':')).replace(/\\b(\\d)\\b/g, '0$1');\n}\n\n/**\n * Преобразует дату для IE\n * */\nfunction getDateObj(dateObj) {\n return bowser.msie ? dateObj.getVarDate() : dateObj;\n}\n\n/**\n * Подготавливает информацию о сертификатах\n * */\nfunction prepareCertsInfo(items) {\n return items.map(function (c) {\n c.name = c.subjectName.match(/CN=(.+?)(?:,|$)/);\n\n // Удалось ли вытащить Common Name\n if (c.name && c.name[1]) {\n c.name = c.name[1];\n }\n\n c.validFrom = getReadableDate(c.validFrom);\n c.validTo = getReadableDate(c.validTo);\n\n c.label = c.name + ' (до ' + c.validTo + ')';\n\n return c;\n });\n}\n\n/**\n * Возвращает расшифрованные ОИД'ы\n * */\nfunction getDecodedExtendedKeyUsage() {\n var that = this;\n\n return new Promise(function (resolve) {\n that.getExtendedKeyUsage().then(function (certOids) {\n resolve(certOids.reduce(function (oidsLst, oid) {\n oid = {\n id: oid,\n descr: oids[oid] || null\n };\n\n if (oid.descr) {\n oidsLst.unshift(oid);\n } else {\n oidsLst.push(oid);\n }\n\n return oidsLst;\n }, []));\n });\n });\n}\n\n/**\n * Проверка наличия ОИД'а(ОИД'ов) у сертификата\n *\n * @param {String|Array} oids - ОИД'ы для проверки\n * @returns {Promise} с отложенным результатом типа {Boolean}\n * */\nfunction hasExtendedKeyUsage(oids) {\n var that = this;\n\n return new Promise(function (resolve) {\n that.getExtendedKeyUsage().then(function (certOids) {\n var result;\n\n if (Array.isArray(oids)) {\n result = oids.every(function (oidToCheck) {\n return certOids.some(function (certOid) {\n return certOid === oidToCheck;\n });\n });\n } else {\n result = certOids.some(function (certOid) {\n return certOid === oids;\n });\n }\n\n resolve(result);\n });\n });\n}\n\n/**\n * Выводит информацию о системе пользователя\n * */\nfunction getEnvInfo() {\n var parsed = bowser._detect(navigator.userAgent),\n info = {\n browserName: parsed.name,\n browserVersion: parsed.version\n };\n\n if (parsed.mac) {\n info.os = 'Mac';\n } else if (parsed.windows) {\n info.os = 'Windows';\n } else if (parsed.linux) {\n info.os = 'Linux';\n }\n\n return info;\n}\n\n/**\n * Подходящая ли версия CSP\n * */\nfunction isValidCSPVersion(version) {\n version = version.match(/\\d+?\\b(?:\\.\\d+)?/);\n\n return version >= 3.6;\n}\n\n/**\n * Подходящая ли версия cades плагина\n * */\nfunction isValidCadesVersion(version) {\n version = version.split('.').reduce(function (verInfo, number, i) {\n if (i === 0) {\n verInfo.major = number;\n } else if (i === 1) {\n verInfo.minor = number;\n } else if (i === 2) {\n verInfo.patch = number;\n }\n\n return verInfo;\n }, {});\n\n if (version.major < 2) {\n return false;\n }\n\n return version.patch >= 12438;\n}\n\nmodule.exports = {\n subjectNameTagsTranslations: subjectNameTagsTranslations,\n issuerNameTagsTranslations: issuerNameTagsTranslations,\n parseCertInfo: parseCertInfo,\n getReadableDate: getReadableDate,\n getDateObj: getDateObj,\n prepareCertsInfo: prepareCertsInfo,\n getDecodedExtendedKeyUsage: getDecodedExtendedKeyUsage,\n hasExtendedKeyUsage: hasExtendedKeyUsage,\n getEnvInfo: getEnvInfo,\n isValidCSPVersion: isValidCSPVersion,\n isValidCadesVersion: isValidCadesVersion\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./common.js\n ** module id = 5\n ** module chunks = 1 2\n **/","module.exports = {\n '1.2.840.113549.1.9.2': 'Неструктурированное имя',\n '1.2.643.3.141.1.1': 'РНС ФСС',\n '1.2.643.3.141.1.2': 'КП ФСС',\n '1.2.643.3.131.1.1': 'ИНН',\n '1.3.6.1.5.5.7.3.2': 'Проверка подлинности клиента',\n '1.3.6.1.5.5.7.3.4': 'Защищенная электронная почта',\n '1.2.643.3.8.100.1': 'Сертификат типа \"ekey-ГОСТ\"',\n '1.2.643.3.8.100.1.1': 'Общее использование в системах ИОК без права заверения финансовых документов',\n '1.2.643.3.8.100.1.2': 'Передача отчетности по ТКС',\n '1.2.643.3.8.100.1.3': 'Оформление взаимных обязательств, соглашений, договоров, актов и т.п.',\n '1.2.643.3.8.100.1.4': 'Внутрикорпоративный документооборот',\n '1.2.643.3.8.100.1.5': 'Использование в системах электронной торговли',\n '1.2.643.3.8.100.1.6': 'Использование в торгово-закупочной системе \"ЭЛЕКТРА\"',\n '1.2.643.6.2.1.7.2': 'Использование физическим лицом в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских прав и обязанностей в отношении инвестиционных паев паевых инвестиционных фондов, в том числе отношения, связанные с учетом и/или фиксацией прав на инвестиционные паи паевых инвестиционных фондов',\n '1.2.643.6.2.1.7.1': 'Использование единоличным исполнительным органом юридического лица или уполномоченными представителями юридического лица в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских и иных прав и обязанностей в сфере негосударственного пенсионного обеспечения, негосударственного пенсионного страхования, в сфере деятельности паевых инвестиционных фондов, акционерных инвестиционных фондов, профессиональных участников рынка ценных бумаг, а также связанной с обслуживанием указанной деятельности услуг кредитных и иных организаций',\n '1.3.6.1.4.1.29919.21': 'Использование в системе Портал государственных закупок Ростовской области \"Рефери\".',\n '1.2.643.3.2.100.65.13.11': 'Использование в системе АИС \"Госзакупки\" Сахалинской области.',\n '1.2.643.3.8.100.1.7': 'Использование в системе Портал государственных закупок Ставропольского края.',\n '1.2.643.3.8.100.1.8': 'Использование в Единой системе электронной торговли B2B-Center и B2G.',\n '1.2.643.3.8.100.1.9': 'Для участия в электронных торгах и подписания государственного контракта в электронной площадке ОАО «ЕЭТП» уполномоченными лицами участников размещения государственного или муниципального заказа',\n '1.2.643.3.8.100.1.10': 'Для участия в электронных торгах и подписания государственного контракта в информационных системах Тендерного комитета города Москвы уполномоченными лицами участников размещения государственного заказа города Москвы',\n '1.2.643.3.8.100.1.11': 'Подписание электронных документов в автоматизированной информационной системе размещения государственного и муниципального заказа Саратовской области',\n '1.2.643.3.8.100.1.12': 'Использование в системе государственного заказа Иркутской области',\n '1.2.643.3.8.100.1.13': 'Использование в электронной торговой площадке агентства государственного заказа Красноярского края',\n '1.3.6.1.4.1.24138.1.1.8.1': 'Обеспечение юридической значимости в Системе \"Электронная Торговая Площадка\"',\n '1.2.643.3.8.100.1.14': 'Использование в электронной торговой площадке \"Тендер\"',\n '1.2.643.6.3': 'Использование в электронных торговых системах и в программном обеспечении, связанным с обменом электронных сообщений',\n '1.2.643.2.2.34.6': 'Пользователь Центра Регистрации',\n '1.2.643.2.39.1.1': 'Использование в программных продуктах системы \"1С:Предприятие 8\"',\n '1.2.643.5.1.24.2.1.3': 'Формирование документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',\n '1.2.643.5.1.24.2.1.3.1': 'Формирование кадастровым инженером документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',\n '1.2.643.5.1.24.2.2.2': 'Формирование документов как результата оказания услуги со стороны органов регистрации прав',\n '1.2.643.5.1.24.2.2.3': 'Формирование документов для получения государственных услуг в сфере государственной регистрации прав на недвижимое имущество и сделок с ним со стороны заявителя',\n '1.2.643.6.3.1.1': 'Использование на электронных площадок отобранных для проведения аукционах в электронной форме',\n '1.2.643.6.3.1.2.1': 'Тип участника - Юридическое лицо',\n '1.2.643.6.3.1.2.2': 'Тип участника - Физическое лицо',\n '1.2.643.6.3.1.2.3': 'Тип участника - Индивидуальный предприниматель',\n '1.2.643.6.3.1.3.1': 'Участник размещения заказа',\n '1.2.643.6.3.1.4.1': 'Администратор организации',\n '1.2.643.6.3.1.4.2': 'Уполномоченный специалист',\n '1.2.643.6.3.1.4.3': 'Специалист с правом подписи контракта',\n '1.3.643.3.8.100.15': 'Использование в ЭТП \"uTender\"'\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./oids.js\n ** module id = 6\n ** module chunks = 1 2\n **/","module.exports = {\n // CAPICOM_STORE_LOCATION enumeration\n StoreLocation: {\n CAPICOM_MEMORY_STORE: 0,\n CAPICOM_LOCAL_MACHINE_STORE: 1,\n CAPICOM_CURRENT_USER_STORE: 2,\n CAPICOM_ACTIVE_DIRECTORY_USER_STORE: 3,\n CAPICOM_SMART_CARD_USER_STORE: 4\n },\n // CAPICOM_STORE_OPEN_MODE enumeration\n StoreOpenMode: {\n CAPICOM_STORE_OPEN_READ_ONLY: 0,\n CAPICOM_STORE_OPEN_READ_WRITE: 1,\n CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED: 2,\n CAPICOM_STORE_OPEN_EXISTING_ONLY: 128,\n CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED: 256\n },\n // CAPICOM_CERTIFICATE_FIND_TYPE enumeration\n CertFindType: {\n CAPICOM_CERTIFICATE_FIND_SHA1_HASH: 0,\n CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME: 1,\n CAPICOM_CERTIFICATE_FIND_ISSUER_NAME: 2,\n CAPICOM_CERTIFICATE_FIND_ROOT_NAME: 3,\n CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME: 4,\n CAPICOM_CERTIFICATE_FIND_EXTENSION: 5,\n CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY: 6,\n CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY: 7,\n CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY: 8,\n CAPICOM_CERTIFICATE_FIND_TIME_VALID: 9,\n CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID: 10,\n CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED: 11,\n CAPICOM_CERTIFICATE_FIND_KEY_USAGE: 12\n },\n Time: {\n AUTHENTICATED_ATTRIBUTE_SIGNING_TIME: 0\n },\n Check: {\n CHECK_NONE: 0,\n CHECK_TRUSTED_ROOT: 1,\n CHECK_TIME_VALIDITY: 2,\n CHECK_SIGNATURE_VALIDITY: 4,\n CHECK_ONLINE_REVOCATION_STATUS: 8,\n CHECK_OFFLINE_REVOCATION_STATUS: 16,\n TRUST_IS_NOT_TIME_VALID: 1,\n TRUST_IS_NOT_TIME_NESTED: 2,\n TRUST_IS_REVOKED: 4,\n TRUST_IS_NOT_SIGNATURE_VALID: 8,\n TRUST_IS_NOT_VALID_FOR_USAGE: 16,\n TRUST_IS_UNTRUSTED_ROOT: 32,\n TRUST_REVOCATION_STATUS_UNKNOWN: 64,\n TRUST_IS_CYCLIC: 128,\n TRUST_IS_PARTIAL_CHAIN: 65536,\n TRUST_CTL_IS_NOT_TIME_VALID: 131072,\n TRUST_CTL_IS_NOT_SIGNATURE_VALID: 262144,\n TRUST_CTL_IS_NOT_VALID_FOR_USAGE: 524288,\n },\n // CAPICOM_PROPID enumeration\n PropId: {\n CAPICOM_PROPID_UNKNOWN: 0,\n CAPICOM_PROPID_KEY_PROV_HANDLE: 1,\n CAPICOM_PROPID_KEY_PROV_INFO: 2,\n CAPICOM_PROPID_SHA1_HASH: 3,\n CAPICOM_PROPID_HASH_PROP: 3,\n CAPICOM_PROPID_MD5_HASH: 4,\n CAPICOM_PROPID_KEY_CONTEXT: 5,\n CAPICOM_PROPID_KEY_SPEC: 6,\n CAPICOM_PROPID_IE30_RESERVED: 7,\n CAPICOM_PROPID_PUBKEY_HASH_RESERVED: 8,\n CAPICOM_PROPID_ENHKEY_USAGE: 9,\n CAPICOM_PROPID_CTL_USAGE: 9,\n CAPICOM_PROPID_NEXT_UPDATE_LOCATION: 10,\n CAPICOM_PROPID_FRIENDLY_NAME: 11,\n CAPICOM_PROPID_PVK_FILE: 12,\n CAPICOM_PROPID_DESCRIPTION: 13,\n CAPICOM_PROPID_ACCESS_STATE: 14,\n CAPICOM_PROPID_SIGNATURE_HASH: 15,\n CAPICOM_PROPID_SMART_CARD_DATA: 16,\n CAPICOM_PROPID_EFS: 17,\n CAPICOM_PROPID_FORTEZZA_DATA: 18,\n CAPICOM_PROPID_ARCHIVED: 19,\n CAPICOM_PROPID_KEY_IDENTIFIER: 20,\n CAPICOM_PROPID_AUTO_ENROLL: 21,\n CAPICOM_PROPID_PUBKEY_ALG_PARA: 22,\n CAPICOM_PROPID_CROSS_CERT_DIST_POINTS: 23,\n CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH: 24,\n CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH: 25,\n CAPICOM_PROPID_ENROLLMENT: 26,\n CAPICOM_PROPID_DATE_STAMP: 27,\n CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH: 28,\n CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH: 29,\n CAPICOM_PROPID_EXTENDED_ERROR_INFO: 30,\n CAPICOM_PROPID_RENEWAL: 64,\n CAPICOM_PROPID_ARCHIVED_KEY_HASH: 65,\n CAPICOM_PROPID_FIRST_RESERVED: 66,\n CAPICOM_PROPID_LAST_RESERVED: 0x00007FFF,\n CAPICOM_PROPID_FIRST_USER: 0x00008000,\n CAPICOM_PROPID_LAST_USER: 0x0000FFFF\n },\n // CADESCOM_XML_SIGNATURE_TYPE enumeration\n SignatureType: {\n CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED: 0,\n CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING: 1,\n CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE: 2\n },\n // CADESCOM_HASH_ALGORITHM enumeration\n HashAlgorithm: {\n CADESCOM_HASH_ALGORITHM_CP_GOST_3411: 100,\n CADESCOM_HASH_ALGORITHM_MD2: 1,\n CADESCOM_HASH_ALGORITHM_MD4: 2,\n CADESCOM_HASH_ALGORITHM_MD5: 3,\n CADESCOM_HASH_ALGORITHM_SHA_256: 4,\n CADESCOM_HASH_ALGORITHM_SHA_384: 5,\n CADESCOM_HASH_ALGORITHM_SHA_512: 6,\n CADESCOM_HASH_ALGORITHM_SHA1: 0\n },\n CadesType: {\n CADESCOM_CADES_DEFAULT: 0,\n CADESCOM_CADES_BES: 1,\n CADESCOM_CADES_X_LONG_TYPE_1: 0x5d\n },\n ContentEncoding: {\n CADESCOM_BASE64_TO_BINARY: 0x01,\n CADESCOM_STRING_TO_UCS2LE: 0x00\n },\n StoreNames: {\n CAPICOM_MY_STORE: 'My'\n },\n Chain: {\n CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT: 0,\n CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN: 1,\n CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY: 2\n },\n GostXmlDSigUrls: {\n XmlDsigGost3410Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411',\n XmlDsigGost3411Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411',\n XmlDsigGost3410UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411',\n XmlDsigGost3411UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr3411'\n }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./constants.js\n ** module id = 7\n ** module chunks = 1 2\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/2.crypto-pro.js b/dist/2.crypto-pro.js
deleted file mode 100644
index fe2c37d..0000000
--- a/dist/2.crypto-pro.js
+++ /dev/null
@@ -1,1047 +0,0 @@
-webpackJsonpCryptoPro([2],[
-/* 0 */,
-/* 1 */,
-/* 2 */,
-/* 3 */,
-/* 4 */,
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
- var bowser = __webpack_require__(1);
- var oids = __webpack_require__(6);
-
- var subjectNameTagsTranslations = [
- {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},
- {possibleNames: ['CN'], translation: 'Владелец'},
- {possibleNames: ['SN'], translation: 'Фамилия'},
- {possibleNames: ['G'], translation: 'Имя Отчество'},
- {possibleNames: ['C'], translation: 'Страна'},
- {possibleNames: ['S'], translation: 'Регион'},
- {possibleNames: ['STREET'], translation: 'Адрес'},
- {possibleNames: ['O'], translation: 'Компания'},
- {possibleNames: ['OU'], translation: 'Отдел/подразделение'},
- {possibleNames: ['T'], translation: 'Должность'},
- {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},
- {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},
- {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},
- {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},
- {possibleNames: ['E'], translation: 'Email'},
- {possibleNames: ['L'], translation: 'Город'}
- ],
-
- issuerNameTagsTranslations = [
- {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},
- {possibleNames: ['CN'], translation: 'Удостоверяющий центр'},
- {possibleNames: ['S'], translation: 'Регион'},
- {possibleNames: ['C'], translation: 'Страна'},
- {possibleNames: ['STREET'], translation: 'Адрес'},
- {possibleNames: ['O'], translation: 'Компания'},
- {possibleNames: ['OU'], translation: 'Тип'},
- {possibleNames: ['T'], translation: 'Должность'},
- {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},
- {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},
- {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},
- {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},
- {possibleNames: ['E'], translation: 'Email'},
- {possibleNames: ['L'], translation: 'Город'}
- ];
-
- function execute(cb) {
- var canAsync = cadesplugin.CreateObjectAsync;
-
- cb = String(cb);
-
- var args = cb.match(/^function\s*?\((.*?)\)/);
-
- args = (args && args[1]) || '';
-
- cb = cb.replace(/^.*?{([\s\S]*?)}$/, '$1');
-
- function GeneratorFunction() {
- return (new Function('', 'return Object.getPrototypeOf(function*(){}).constructor'))();
- }
-
- cb = String(new (canAsync ? GeneratorFunction() : Function)(args, cb));
-
- cb = cb.replace(/cryptoCommon\.createObj(\([\s\S]*?\))/gm, 'cadesplugin.CreateObject' + (canAsync ? 'Async' : '') + '$1');
- cb = cb.replace(/("|')(yield)(\1)\s*?\+\s*?\b/gm, canAsync ? '$2 ' : '');
-
- if (!canAsync) {
- cb = cb.replace(/propset_(.*?)\((.*?)\)/gm, '.$1 = $2');
- }
-
- return canAsync ?
- 'cadesplugin.async_spawn(' + cb + ');'
- : '(' + cb + ')();';
- }
-
- /**
- * Парсит информацию из строки с информацией о сертификате
- * */
- function parseCertInfo(tags, infoString) {
- /**
- * Пример входной строки:
- *
-
- T=Генеральный директор, UnstructuredName="INN=7811514257/KPP=781101001/OGRN=1127847087884",
- STREET="Крыленко, д.3, лит.Б", CN=Король Анатолий Евгеньевич, G=Анатолий Евгеньевич, SN=Король,
- OU=Администрация, O="ООО ""Аксиома""", L=Санкт-Петербург, S=78 г. Санкт-Петербург, C=RU, E=korol@sferasro.ru,
- INN=007811514257, OGRN=1127847087884, SNILS=11617693460
-
- * */
- var result = infoString.match(/([а-яА-Яa-zA-Z0-9\.]+)=(?:("[^"]+?")|(.+?))(?:,|$)/g);
-
- if (result) {
- result = result.map(function (group) {
- /**
- * Пример входной строки:
- *
-
- UnstructuredName="INN=7811514257/KPP=781101001/OGRN=1127847087884",
-
- * */
- var parts = group.match(/^([а-яА-Яa-zA-Z0-9\.]+)=(.+?),?$/),
- title = parts && parts[1],
- descr = parts && parts[2],
- translated = false,
- oidTitle;
-
- // Если тайтл содержит ОИД, пытаемся расшифровать
- if (/^OID./.test(title)) {
- oidTitle = title.match(/^OID\.(.*)/);
-
- if (oidTitle && oidTitle[1]) {
- oidTitle = oids[oidTitle[1]];
-
- if (oidTitle) {
- title = oidTitle;
- }
- }
- }
-
- // Вырезаем лишние кавычки
- descr = descr.replace(/^"(.*)"/, '$1');
- descr = descr.replace(/"{2}/g, '"');
-
- tags.some(function (tag) {
- return tag.possibleNames.some(function (possible) {
- var match = possible === title;
-
- if (match) {
- title = tag.translation;
- translated = true;
- }
-
- return match;
- });
- });
-
- return {
- title: title,
- descr: descr,
- translated: translated
- };
- });
- }
-
- return result;
- }
-
- /**
- * Возвращает дату в формате (dd.mm.yyyy hh:mm:ss) из строки, формата, используемого плагином cryptoPro
- * */
- function getReadableDate(date) {
- date = new Date(date);
-
- return ([
- date.getDate(),
- date.getMonth() + 1,
- date.getFullYear()
- ].join('.') + ' ' + [
- date.getHours(),
- date.getMinutes(),
- date.getSeconds()
- ].join(':')).replace(/\b(\d)\b/g, '0$1');
- }
-
- /**
- * Преобразует дату для IE
- * */
- function getDateObj(dateObj) {
- return bowser.msie ? dateObj.getVarDate() : dateObj;
- }
-
- /**
- * Подготавливает информацию о сертификатах
- * */
- function prepareCertsInfo(items) {
- return items.map(function (c) {
- c.name = c.subjectName.match(/CN=(.+?)(?:,|$)/);
-
- // Удалось ли вытащить Common Name
- if (c.name && c.name[1]) {
- c.name = c.name[1];
- }
-
- c.validFrom = getReadableDate(c.validFrom);
- c.validTo = getReadableDate(c.validTo);
-
- c.label = c.name + ' (до ' + c.validTo + ')';
-
- return c;
- });
- }
-
- /**
- * Возвращает расшифрованные ОИД'ы
- * */
- function getDecodedExtendedKeyUsage() {
- var that = this;
-
- return new Promise(function (resolve) {
- that.getExtendedKeyUsage().then(function (certOids) {
- resolve(certOids.reduce(function (oidsLst, oid) {
- oid = {
- id: oid,
- descr: oids[oid] || null
- };
-
- if (oid.descr) {
- oidsLst.unshift(oid);
- } else {
- oidsLst.push(oid);
- }
-
- return oidsLst;
- }, []));
- });
- });
- }
-
- /**
- * Проверка наличия ОИД'а(ОИД'ов) у сертификата
- *
- * @param {String|Array} oids - ОИД'ы для проверки
- * @returns {Promise} с отложенным результатом типа {Boolean}
- * */
- function hasExtendedKeyUsage(oids) {
- var that = this;
-
- return new Promise(function (resolve) {
- that.getExtendedKeyUsage().then(function (certOids) {
- var result;
-
- if (Array.isArray(oids)) {
- result = oids.every(function (oidToCheck) {
- return certOids.some(function (certOid) {
- return certOid === oidToCheck;
- });
- });
- } else {
- result = certOids.some(function (certOid) {
- return certOid === oids;
- });
- }
-
- resolve(result);
- });
- });
- }
-
- /**
- * Выводит информацию о системе пользователя
- * */
- function getEnvInfo() {
- var parsed = bowser._detect(navigator.userAgent),
- info = {
- browserName: parsed.name,
- browserVersion: parsed.version
- };
-
- if (parsed.mac) {
- info.os = 'Mac';
- } else if (parsed.windows) {
- info.os = 'Windows';
- } else if (parsed.linux) {
- info.os = 'Linux';
- }
-
- return info;
- }
-
- /**
- * Подходящая ли версия CSP
- * */
- function isValidCSPVersion(version) {
- version = version.match(/\d+?\b(?:\.\d+)?/);
-
- return version >= 3.6;
- }
-
- /**
- * Подходящая ли версия cades плагина
- * */
- function isValidCadesVersion(version) {
- version = version.split('.').reduce(function (verInfo, number, i) {
- if (i === 0) {
- verInfo.major = number;
- } else if (i === 1) {
- verInfo.minor = number;
- } else if (i === 2) {
- verInfo.patch = number;
- }
-
- return verInfo;
- }, {});
-
- if (version.major < 2) {
- return false;
- }
-
- return version.patch >= 12438;
- }
-
- module.exports = {
- execute: execute,
- subjectNameTagsTranslations: subjectNameTagsTranslations,
- issuerNameTagsTranslations: issuerNameTagsTranslations,
- parseCertInfo: parseCertInfo,
- getReadableDate: getReadableDate,
- getDateObj: getDateObj,
- prepareCertsInfo: prepareCertsInfo,
- getDecodedExtendedKeyUsage: getDecodedExtendedKeyUsage,
- hasExtendedKeyUsage: hasExtendedKeyUsage,
- getEnvInfo: getEnvInfo,
- isValidCSPVersion: isValidCSPVersion,
- isValidCadesVersion: isValidCadesVersion
- };
-
-/***/ },
-/* 6 */
-/***/ function(module, exports) {
-
- module.exports = {
- '1.2.840.113549.1.9.2': 'Неструктурированное имя',
- '1.2.643.3.141.1.1': 'РНС ФСС',
- '1.2.643.3.141.1.2': 'КП ФСС',
- '1.2.643.3.131.1.1': 'ИНН',
- '1.3.6.1.5.5.7.3.2': 'Проверка подлинности клиента',
- '1.3.6.1.5.5.7.3.4': 'Защищенная электронная почта',
- '1.2.643.3.8.100.1': 'Сертификат типа "ekey-ГОСТ"',
- '1.2.643.3.8.100.1.1': 'Общее использование в системах ИОК без права заверения финансовых документов',
- '1.2.643.3.8.100.1.2': 'Передача отчетности по ТКС',
- '1.2.643.3.8.100.1.3': 'Оформление взаимных обязательств, соглашений, договоров, актов и т.п.',
- '1.2.643.3.8.100.1.4': 'Внутрикорпоративный документооборот',
- '1.2.643.3.8.100.1.5': 'Использование в системах электронной торговли',
- '1.2.643.3.8.100.1.6': 'Использование в торгово-закупочной системе "ЭЛЕКТРА"',
- '1.2.643.6.2.1.7.2': 'Использование физическим лицом в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских прав и обязанностей в отношении инвестиционных паев паевых инвестиционных фондов, в том числе отношения, связанные с учетом и/или фиксацией прав на инвестиционные паи паевых инвестиционных фондов',
- '1.2.643.6.2.1.7.1': 'Использование единоличным исполнительным органом юридического лица или уполномоченными представителями юридического лица в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских и иных прав и обязанностей в сфере негосударственного пенсионного обеспечения, негосударственного пенсионного страхования, в сфере деятельности паевых инвестиционных фондов, акционерных инвестиционных фондов, профессиональных участников рынка ценных бумаг, а также связанной с обслуживанием указанной деятельности услуг кредитных и иных организаций',
- '1.3.6.1.4.1.29919.21': 'Использование в системе Портал государственных закупок Ростовской области "Рефери".',
- '1.2.643.3.2.100.65.13.11': 'Использование в системе АИС "Госзакупки" Сахалинской области.',
- '1.2.643.3.8.100.1.7': 'Использование в системе Портал государственных закупок Ставропольского края.',
- '1.2.643.3.8.100.1.8': 'Использование в Единой системе электронной торговли B2B-Center и B2G.',
- '1.2.643.3.8.100.1.9': 'Для участия в электронных торгах и подписания государственного контракта в электронной площадке ОАО «ЕЭТП» уполномоченными лицами участников размещения государственного или муниципального заказа',
- '1.2.643.3.8.100.1.10': 'Для участия в электронных торгах и подписания государственного контракта в информационных системах Тендерного комитета города Москвы уполномоченными лицами участников размещения государственного заказа города Москвы',
- '1.2.643.3.8.100.1.11': 'Подписание электронных документов в автоматизированной информационной системе размещения государственного и муниципального заказа Саратовской области',
- '1.2.643.3.8.100.1.12': 'Использование в системе государственного заказа Иркутской области',
- '1.2.643.3.8.100.1.13': 'Использование в электронной торговой площадке агентства государственного заказа Красноярского края',
- '1.3.6.1.4.1.24138.1.1.8.1': 'Обеспечение юридической значимости в Системе "Электронная Торговая Площадка"',
- '1.2.643.3.8.100.1.14': 'Использование в электронной торговой площадке "Тендер"',
- '1.2.643.6.3': 'Использование в электронных торговых системах и в программном обеспечении, связанным с обменом электронных сообщений',
- '1.2.643.2.2.34.6': 'Пользователь Центра Регистрации',
- '1.2.643.2.39.1.1': 'Использование в программных продуктах системы "1С:Предприятие 8"',
- '1.2.643.5.1.24.2.1.3': 'Формирование документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',
- '1.2.643.5.1.24.2.1.3.1': 'Формирование кадастровым инженером документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',
- '1.2.643.5.1.24.2.2.2': 'Формирование документов как результата оказания услуги со стороны органов регистрации прав',
- '1.2.643.5.1.24.2.2.3': 'Формирование документов для получения государственных услуг в сфере государственной регистрации прав на недвижимое имущество и сделок с ним со стороны заявителя',
- '1.2.643.6.3.1.1': 'Использование на электронных площадок отобранных для проведения аукционах в электронной форме',
- '1.2.643.6.3.1.2.1': 'Тип участника - Юридическое лицо',
- '1.2.643.6.3.1.2.2': 'Тип участника - Физическое лицо',
- '1.2.643.6.3.1.2.3': 'Тип участника - Индивидуальный предприниматель',
- '1.2.643.6.3.1.3.1': 'Участник размещения заказа',
- '1.2.643.6.3.1.4.1': 'Администратор организации',
- '1.2.643.6.3.1.4.2': 'Уполномоченный специалист',
- '1.2.643.6.3.1.4.3': 'Специалист с правом подписи контракта',
- '1.3.643.3.8.100.15': 'Использование в ЭТП "uTender"'
- };
-
-/***/ },
-/* 7 */
-/***/ function(module, exports) {
-
- module.exports = {
- // CAPICOM_STORE_LOCATION enumeration
- StoreLocation: {
- CAPICOM_MEMORY_STORE: 0,
- CAPICOM_LOCAL_MACHINE_STORE: 1,
- CAPICOM_CURRENT_USER_STORE: 2,
- CAPICOM_ACTIVE_DIRECTORY_USER_STORE: 3,
- CAPICOM_SMART_CARD_USER_STORE: 4
- },
- // CAPICOM_STORE_OPEN_MODE enumeration
- StoreOpenMode: {
- CAPICOM_STORE_OPEN_READ_ONLY: 0,
- CAPICOM_STORE_OPEN_READ_WRITE: 1,
- CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED: 2,
- CAPICOM_STORE_OPEN_EXISTING_ONLY: 128,
- CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED: 256
- },
- // CAPICOM_CERTIFICATE_FIND_TYPE enumeration
- CertFindType: {
- CAPICOM_CERTIFICATE_FIND_SHA1_HASH: 0,
- CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME: 1,
- CAPICOM_CERTIFICATE_FIND_ISSUER_NAME: 2,
- CAPICOM_CERTIFICATE_FIND_ROOT_NAME: 3,
- CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME: 4,
- CAPICOM_CERTIFICATE_FIND_EXTENSION: 5,
- CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY: 6,
- CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY: 7,
- CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY: 8,
- CAPICOM_CERTIFICATE_FIND_TIME_VALID: 9,
- CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID: 10,
- CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED: 11,
- CAPICOM_CERTIFICATE_FIND_KEY_USAGE: 12
- },
- Time: {
- AUTHENTICATED_ATTRIBUTE_SIGNING_TIME: 0
- },
- Check: {
- CHECK_NONE: 0,
- CHECK_TRUSTED_ROOT: 1,
- CHECK_TIME_VALIDITY: 2,
- CHECK_SIGNATURE_VALIDITY: 4,
- CHECK_ONLINE_REVOCATION_STATUS: 8,
- CHECK_OFFLINE_REVOCATION_STATUS: 16,
- TRUST_IS_NOT_TIME_VALID: 1,
- TRUST_IS_NOT_TIME_NESTED: 2,
- TRUST_IS_REVOKED: 4,
- TRUST_IS_NOT_SIGNATURE_VALID: 8,
- TRUST_IS_NOT_VALID_FOR_USAGE: 16,
- TRUST_IS_UNTRUSTED_ROOT: 32,
- TRUST_REVOCATION_STATUS_UNKNOWN: 64,
- TRUST_IS_CYCLIC: 128,
- TRUST_IS_PARTIAL_CHAIN: 65536,
- TRUST_CTL_IS_NOT_TIME_VALID: 131072,
- TRUST_CTL_IS_NOT_SIGNATURE_VALID: 262144,
- TRUST_CTL_IS_NOT_VALID_FOR_USAGE: 524288,
- },
- // CAPICOM_PROPID enumeration
- PropId: {
- CAPICOM_PROPID_UNKNOWN: 0,
- CAPICOM_PROPID_KEY_PROV_HANDLE: 1,
- CAPICOM_PROPID_KEY_PROV_INFO: 2,
- CAPICOM_PROPID_SHA1_HASH: 3,
- CAPICOM_PROPID_HASH_PROP: 3,
- CAPICOM_PROPID_MD5_HASH: 4,
- CAPICOM_PROPID_KEY_CONTEXT: 5,
- CAPICOM_PROPID_KEY_SPEC: 6,
- CAPICOM_PROPID_IE30_RESERVED: 7,
- CAPICOM_PROPID_PUBKEY_HASH_RESERVED: 8,
- CAPICOM_PROPID_ENHKEY_USAGE: 9,
- CAPICOM_PROPID_CTL_USAGE: 9,
- CAPICOM_PROPID_NEXT_UPDATE_LOCATION: 10,
- CAPICOM_PROPID_FRIENDLY_NAME: 11,
- CAPICOM_PROPID_PVK_FILE: 12,
- CAPICOM_PROPID_DESCRIPTION: 13,
- CAPICOM_PROPID_ACCESS_STATE: 14,
- CAPICOM_PROPID_SIGNATURE_HASH: 15,
- CAPICOM_PROPID_SMART_CARD_DATA: 16,
- CAPICOM_PROPID_EFS: 17,
- CAPICOM_PROPID_FORTEZZA_DATA: 18,
- CAPICOM_PROPID_ARCHIVED: 19,
- CAPICOM_PROPID_KEY_IDENTIFIER: 20,
- CAPICOM_PROPID_AUTO_ENROLL: 21,
- CAPICOM_PROPID_PUBKEY_ALG_PARA: 22,
- CAPICOM_PROPID_CROSS_CERT_DIST_POINTS: 23,
- CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH: 24,
- CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH: 25,
- CAPICOM_PROPID_ENROLLMENT: 26,
- CAPICOM_PROPID_DATE_STAMP: 27,
- CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH: 28,
- CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH: 29,
- CAPICOM_PROPID_EXTENDED_ERROR_INFO: 30,
- CAPICOM_PROPID_RENEWAL: 64,
- CAPICOM_PROPID_ARCHIVED_KEY_HASH: 65,
- CAPICOM_PROPID_FIRST_RESERVED: 66,
- CAPICOM_PROPID_LAST_RESERVED: 0x00007FFF,
- CAPICOM_PROPID_FIRST_USER: 0x00008000,
- CAPICOM_PROPID_LAST_USER: 0x0000FFFF
- },
- // CADESCOM_XML_SIGNATURE_TYPE enumeration
- SignatureType: {
- CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED: 0,
- CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING: 1,
- CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE: 2
- },
- // CADESCOM_HASH_ALGORITHM enumeration
- HashAlgorithm: {
- CADESCOM_HASH_ALGORITHM_CP_GOST_3411: 100,
- CADESCOM_HASH_ALGORITHM_MD2: 1,
- CADESCOM_HASH_ALGORITHM_MD4: 2,
- CADESCOM_HASH_ALGORITHM_MD5: 3,
- CADESCOM_HASH_ALGORITHM_SHA_256: 4,
- CADESCOM_HASH_ALGORITHM_SHA_384: 5,
- CADESCOM_HASH_ALGORITHM_SHA_512: 6,
- CADESCOM_HASH_ALGORITHM_SHA1: 0
- },
- CadesType: {
- CADESCOM_CADES_DEFAULT: 0,
- CADESCOM_CADES_BES: 1,
- CADESCOM_CADES_X_LONG_TYPE_1: 0x5d
- },
- ContentEncoding: {
- CADESCOM_BASE64_TO_BINARY: 0x01,
- CADESCOM_STRING_TO_UCS2LE: 0x00
- },
- StoreNames: {
- CAPICOM_MY_STORE: 'My'
- },
- Chain: {
- CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT: 0,
- CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN: 1,
- CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY: 2
- },
- GostXmlDSigUrls: {
- XmlDsigGost3410Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411',
- XmlDsigGost3411Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411',
- XmlDsigGost3410UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411',
- XmlDsigGost3411UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr3411'
- }
- };
-
-/***/ },
-/* 8 */
-/***/ function(module, exports, __webpack_require__) {
-
- var cryptoCommon = __webpack_require__(5),
- cryptoConstants = __webpack_require__(7),
- _certListCache;
-
- function Certificate(item) {
- this._cert = item._cert;
- this.thumbprint = item.thumbprint;
- this.subjectName = item.subjectName;
- this.issuerName = item.issuerName;
- this.validFrom = item.validFrom;
- this.validTo = item.validTo;
- }
-
- /**
- * Проверяет, валиден ли сертификат
- * */
- Certificate.prototype.isValid = function isValid() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- var result;
-
- try {
- result = cert.IsValid();
- result = result.Result;
- } catch (err) {
- reject('Ошибка при проверке сертификата: ', err.message);
- return;
- }
-
- resolve(result);
- });
- };
-
- /**
- * Достает указанное свойство у сертификата
- * */
- Certificate.prototype.getProp = function (propName) {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- var result;
-
- try {
- result = cert[propName];
- } catch (err) {
- reject('Ошибка при обращении к свойству сертификата: ', err.message);
- return;
- }
-
- resolve(result);
- });
- };
-
- /**
- * Экспорт base64 представления сертификата пользователя
- * */
- Certificate.prototype.exportBase64 = function exportBase64() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- var base64;
-
- try {
- base64 = cert.Export(0);
- } catch (err) {
- reject('Ошибка при экспорте сертификата: ', err.message);
- return;
- }
-
- resolve(base64);
- });
- };
-
- /**
- * Возвращает информацию об алгоритме
- * */
- Certificate.prototype.getAlgorithm = function getAlgorithm() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- var result = {},
- algorithm;
-
- try {
- algorithm = cert.PublicKey();
- algorithm = algorithm.Algorithm;
-
- result.algorithm = algorithm.FriendlyName;
- result.oid = algorithm.Value;
- } catch (err) {
- reject('Ошибка при получении алгоритма: ', err.message);
- return;
- }
-
- resolve(result);
- });
- };
-
- /**
- * Разбирает SubjectName сертификата по тэгам
- * */
- Certificate.prototype.getOwnerInfo = function getOwnerInfo() {
- return getCertInfo.call(this, cryptoCommon.subjectNameTagsTranslations, 'SubjectName');
- };
-
- /**
- * Разбирает IssuerName сертификата по тэгам
- * */
- Certificate.prototype.getIssuerInfo = function getIssuerInfo() {
- return getCertInfo.call(this, cryptoCommon.issuerNameTagsTranslations, 'IssuerName');
- };
-
- /**
- * Получение OID сертификата
- * Возвращает массив OID (улучшенного ключа)
- * */
- Certificate.prototype.getExtendedKeyUsage = function getExtendedKeyUsage() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- var OIDS = [],
- count,
- item;
-
- try {
- count = cert.ExtendedKeyUsage();
- count = count.EKUs;
- count = count.Count;
-
- if (count > 0) {
- while (count > 0) {
- item = cert.ExtendedKeyUsage();
- item = item.EKUs;
- item = item.Item(count);
- item = item.OID;
-
- OIDS.push(item);
-
- count--;
- }
- }
- } catch (err) {
- reject('Ошибка при получении ОИД\'ов: ', err.message);
- return;
- }
-
- resolve(OIDS);
- });
- };
-
- Certificate.prototype.getDecodedExtendedKeyUsage = cryptoCommon.getDecodedExtendedKeyUsage;
-
- Certificate.prototype.hasExtendedKeyUsage = cryptoCommon.hasExtendedKeyUsage;
-
- /**
- * Проверяет корректность настроек ЭП на машине
- * */
- function isValidEDSSettings() {
- return new Promise(function (resolve, reject) {
- var result;
-
- try {
- result = cadesplugin.CreateObject('CAdESCOM.About');
- } catch (error) {
- reject('Настройки ЭП на данной машине не верны');
- }
-
- resolve();
- });
- }
-
- /**
- * Получить сертификат в формате cades по хэшу
- * */
- function getCadesCert(hash) {
- return new Promise(function (resolve, reject) {
- var oStore = cadesplugin.CreateObject('CAdESCOM.Store'),
- certs,
- certCnt,
- cert;
-
- if (!oStore) {
- reject('Не удалось получить доступ к хранилищу сертификатов');
- return;
- }
-
- // Открываем хранилище
- try {
- oStore.Open(
- cadesplugin.CAPICOM_CURRENT_USER_STORE,
- cadesplugin.CAPICOM_MY_STORE,
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
- );
- } catch (err) {
- reject('Ошибка при открытии хранилища: ' + err.message);
- return;
- }
-
- // Получаем доступ к сертификатам
- try {
- certs = oStore.Certificates;
- certCnt = certs.Count;
- } catch (err) {
- reject('Ошибка получения списка сертификатов: ' + err.message);
- return;
- }
-
- if (!certCnt) {
- reject('Нет доступных сертификатов');
- return;
- }
-
- // Получаем сертификат по хэшу
- try {
- certs = certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, hash);
-
- if (certs.Count) {
- cert = certs.Item(1);
- } else {
- throw new Error(hash);
- }
- } catch (err) {
- reject('Не удалось получить сертификат по хэшу: ' + err.message);
- return;
- }
-
- oStore.Close();
-
- resolve(cert);
- });
- }
-
- /**
- * Разбирает информацию сертификата по тэгам
- * */
- function getCertInfo(tags, propName) {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- var propInfo;
-
- try {
- propInfo = cert[propName];
- } catch (err) {
- reject('Ошибка при извлечении данных из сертификата: ', err.message);
- return;
- }
-
- resolve(cryptoCommon.parseCertInfo(tags, propInfo));
- });
- }
-
- /**
- * Возвращает список сертификатов, доступных в системе
- *
- * @param {Boolean} [resetCache=false] -- нужно ли сбросить кэш списка сертификатов
- * @returns {Promise} -- со списком сертификатов {Array}
- * */
- function getCertsList(resetCache) {
- return new Promise(function (resolve, reject) {
- if (!resetCache && _certListCache) {
- resolve(_certListCache);
- return;
- }
-
- var oStore = cadesplugin.CreateObject('CAdESCOM.Store'),
- result = [],
- certs,
- count,
- item;
-
- // Открываем хранилище
- try {
- oStore.Open(
- cadesplugin.CAPICOM_CURRENT_USER_STORE,
- cadesplugin.CAPICOM_MY_STORE,
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
- );
- } catch (err) {
- reject('Ошибка при открытии хранилища: ' + err.message);
- return;
- }
-
- // Получаем доступ к сертификатам
- try {
- certs = oStore.Certificates;
-
- if (certs) {
- certs = certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID);
- /**
- * Не рассматриваются сертификаты, в которых отсутствует закрытый ключ
- * или не действительны на данный момент
- * */
- certs = certs.Find(
- cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,
- cryptoConstants.PropId.CAPICOM_PROPID_KEY_PROV_INFO
- );
-
- count = certs.Count;
- }
- } catch (err) {
- reject('Ошибка получения списка сертификатов: ' + err.message);
- return;
- }
-
- if (!count) {
- reject('Нет доступных сертификатов');
- return;
- }
-
- try {
- while (count) {
- item = certs.Item(count);
-
- result.push(new Certificate({
- _cert: item,
- thumbprint: item.Thumbprint,
- subjectName: item.SubjectName,
- issuerName: item.IssuerName,
- validFrom: item.ValidFromDate,
- validTo: item.ValidToDate
- }));
-
- count--;
- }
- } catch (err) {
- reject('Ошибка обработки сертификатов: ' + err.message);
- return;
- }
-
- oStore.Close();
-
- _certListCache = cryptoCommon.prepareCertsInfo(result);
-
- resolve(_certListCache);
- });
- }
-
- /**
- * Получить сертификат по хэшу
- * */
- function getCert(hash) {
- return new Promise(function (resolve, reject) {
- if (!hash) {
- reject('Хэш не указан');
- return;
- }
-
- getCertsList().then(function (list) {
- var foundCert;
-
- list.some(function (cert) {
- if (hash === cert.thumbprint) {
- foundCert = cert;
- return true;
- }
- });
-
- if (foundCert) {
- resolve(foundCert);
- } else {
- reject('Сертификат с хэшем: "' + hash + '" не найден');
- }
- }, reject);
- });
- }
-
- /**
- * Создает подпись base64 строки по hash'у сертификата
- *
- * @param {String} hash -- fingerprint (thumbprint) сертификата
- * @param {String} dataBase64 -- строковые данные в формате base64
- * @param {Boolean} signType -- тип подписи открепленная (true) / присоединенная (false) (default: true)
- * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}
- * */
- function signData(hash, dataBase64, signType) {
- signType = typeof signType === 'undefined' ? true : Boolean(signType);
-
- return new Promise(function (resolve, reject) {
- getCadesCert(hash).then(function (cert) {
- var clientTime = new Date(),
- oAttrs = cadesplugin.CreateObject('CADESCOM.CPAttribute'),
- oSignedData = cadesplugin.CreateObject('CAdESCOM.CadesSignedData'),
- oSigner = cadesplugin.CreateObject('CAdESCOM.CPSigner'),
- attrs,
- signature;
-
- clientTime = cryptoCommon.getDateObj(clientTime);
-
- try {
- oAttrs.Name = cryptoConstants.Time.AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
- oAttrs.Value = clientTime;
- } catch (err) {
- reject('Ошибка при установке данных подписи: ' + err.message);
- return;
- }
-
- // Задаем настройки для подписи
- try {
- oSigner.Certificate = cert;
- attrs = oSigner.AuthenticatedAttributes2;
- attrs.Add(oAttrs);
- oSignedData.ContentEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;
- oSignedData.Content = dataBase64;
- oSigner.Options = cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY;
- } catch (err) {
- reject('Не удалось установить настройки для подписи: ' + err.message);
- return;
- }
-
- try {
- signature = oSignedData.SignCades(
- oSigner,
- cadesplugin.CADESCOM_CADES_BES,
- signType
- );
- } catch (err) {
- reject('Не удалось создать подпись: ' + err.message);
- return;
- }
-
- resolve(signature);
- }, reject);
- });
- }
-
- /**
- * Создает подпись XML строки по hash'у сертификата
- *
- * @param {String} hash -- fingerprint (thumbprint) сертификата
- * @param {String} dataXML -- данные в формате XML
- * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}
- * */
- function signDataXML(hash, dataXML) {
- return new Promise(function (resolve, reject) {
- getCadesCert(hash).then(function (cert) {
- var oSigner = cadesplugin.CreateObject('CAdESCOM.CPSigner'),
- signerXML = cadesplugin.CreateObject('CAdESCOM.SignedXML'),
- cnts = cryptoConstants,
- signature;
-
- // Задаем настройки для подписи
- try {
- oSigner.Certificate = cert;
- // Добавляем данные для подписи
- signerXML.Content = dataXML;
- // Устанавливаем тип подписи
- signerXML.SignatureType = cnts.SignatureType.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED;
- // Устанавливаем алгоритм подписи
- signerXML.SignatureMethod = cnts.GostXmlDSigUrls.XmlDsigGost3410Url;
- // Устанавливаем алгоритм хэширования
- signerXML.DigestMethod = cnts.GostXmlDSigUrls.XmlDsigGost3411Url;
- } catch (err) {
- reject('Не удалось установить настройки для подписи: ' + err.message);
- return;
- }
-
- try {
- signature = signerXML.Sign(oSigner);
- } catch (err) {
- reject('Не удалось создать подпись: ' + err.message);
- return;
- }
-
- resolve(signature);
- }, reject);
- });
- }
-
- /**
- * Возвращает информацию о версии CSP и плагина
- * */
- function getSystemInfo() {
- var sysInfo = cryptoCommon.getEnvInfo();
-
- return new Promise(function (resolve, reject) {
- var e;
-
- try {
- e = cadesplugin.CreateObject('CAdESCOM.About');
-
- sysInfo.cadesVersion = e.PluginVersion;
- // Возможен вызов в ранних версиях в виде sysInfo.cspVersion = e.CSPVersion('', 75);
- sysInfo.cspVersion = e.CSPVersion();
-
- if (!sysInfo.cadesVersion) {
- sysInfo.cadesVersion = e.Version;
- }
-
- sysInfo.cadesVersion = sysInfo.cadesVersion.toString();
- sysInfo.cspVersion = sysInfo.cspVersion.toString();
-
- resolve(sysInfo);
- } catch (err) {
- reject('Ошибка при получении информации о системе: ', err.message);
- }
- });
- }
-
- /**
- * Promise обертка для синхронного вызова проверки версии CSP
- * */
- function isValidCSPVersion(version) {
- return new Promise(function (resolve) {
- resolve(cryptoCommon.isValidCSPVersion(version));
- });
- }
-
- /**
- * Promise обертка для синхронного вызова проверки версии плагина
- * */
- function isValidCadesVersion(version) {
- return new Promise(function (resolve) {
- resolve(cryptoCommon.isValidCadesVersion(version));
- });
- }
-
- module.exports = {
- isValidEDSSettings: isValidEDSSettings,
- getCertsList: getCertsList,
- getCert: getCert,
- signData: signData,
- signDataXML: signDataXML,
- getSystemInfo: getSystemInfo,
- isValidCSPVersion: isValidCSPVersion,
- isValidCadesVersion: isValidCadesVersion
- };
-
-/***/ }
-]);
-//# sourceMappingURL=2.crypto-pro.js.map
\ No newline at end of file
diff --git a/dist/2.crypto-pro.js.map b/dist/2.crypto-pro.js.map
deleted file mode 100644
index 33bb126..0000000
--- a/dist/2.crypto-pro.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./common.js?fc46","webpack:///./oids.js?7c42","webpack:///./constants.js?532c","webpack:///./apiSync.js"],"names":[],"mappings":";;;;;;;;;AAAA;AACA;;AAEA;AACA,UAAS,4EAA4E;AACrF,UAAS,+CAA+C;AACxD,UAAS,8CAA8C;AACvD,UAAS,kDAAkD;AAC3D,UAAS,4CAA4C;AACrD,UAAS,4CAA4C;AACrD,UAAS,gDAAgD;AACzD,UAAS,8CAA8C;AACvD,UAAS,0DAA0D;AACnE,UAAS,+CAA+C;AACxD,UAAS,qDAAqD;AAC9D,UAAS,2DAA2D;AACpE,UAAS,wDAAwD;AACjE,UAAS,kDAAkD;AAC3D,UAAS,2CAA2C;AACpD,UAAS;AACT;;AAEA;AACA,UAAS,4EAA4E;AACrF,UAAS,2DAA2D;AACpE,UAAS,4CAA4C;AACrD,UAAS,4CAA4C;AACrD,UAAS,gDAAgD;AACzD,UAAS,8CAA8C;AACvD,UAAS,0CAA0C;AACnD,UAAS,+CAA+C;AACxD,UAAS,qDAAqD;AAC9D,UAAS,2DAA2D;AACpE,UAAS,wDAAwD;AACjE,UAAS,kDAAkD;AAC3D,UAAS,2CAA2C;AACpD,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC,EAAE;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,cAAa,QAAQ,gCAAgC;AACrD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB;AACrB,kBAAiB;AACjB,cAAa;AACb;AACA;AACA,kBAAiB;AACjB;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA,MAAK,IAAI;;AAET;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AC1IA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAuB;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,cAAa,QAAQ,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,QAAQ,wDAAwD;AAC7E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,QAAQ,wDAAwD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G","file":"2.crypto-pro.js","sourcesContent":["var bowser = require('bowser/bowser');\nvar oids = require('./oids');\n\nvar subjectNameTagsTranslations = [\n {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},\n {possibleNames: ['CN'], translation: 'Владелец'},\n {possibleNames: ['SN'], translation: 'Фамилия'},\n {possibleNames: ['G'], translation: 'Имя Отчество'},\n {possibleNames: ['C'], translation: 'Страна'},\n {possibleNames: ['S'], translation: 'Регион'},\n {possibleNames: ['STREET'], translation: 'Адрес'},\n {possibleNames: ['O'], translation: 'Компания'},\n {possibleNames: ['OU'], translation: 'Отдел/подразделение'},\n {possibleNames: ['T'], translation: 'Должность'},\n {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},\n {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},\n {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},\n {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},\n {possibleNames: ['E'], translation: 'Email'},\n {possibleNames: ['L'], translation: 'Город'}\n ],\n\n issuerNameTagsTranslations = [\n {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},\n {possibleNames: ['CN'], translation: 'Удостоверяющий центр'},\n {possibleNames: ['S'], translation: 'Регион'},\n {possibleNames: ['C'], translation: 'Страна'},\n {possibleNames: ['STREET'], translation: 'Адрес'},\n {possibleNames: ['O'], translation: 'Компания'},\n {possibleNames: ['OU'], translation: 'Тип'},\n {possibleNames: ['T'], translation: 'Должность'},\n {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},\n {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},\n {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},\n {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},\n {possibleNames: ['E'], translation: 'Email'},\n {possibleNames: ['L'], translation: 'Город'}\n ];\n\n/**\n * Парсит информацию из строки с информацией о сертификате\n * */\nfunction parseCertInfo(tags, infoString) {\n /**\n * Пример входной строки:\n *\n\n T=Генеральный директор, UnstructuredName=\"INN=7811514257/KPP=781101001/OGRN=1127847087884\",\n STREET=\"Крыленко, д.3, лит.Б\", CN=Король Анатолий Евгеньевич, G=Анатолий Евгеньевич, SN=Король,\n OU=Администрация, O=\"ООО \"\"Аксиома\"\"\", L=Санкт-Петербург, S=78 г. Санкт-Петербург, C=RU, E=korol@sferasro.ru,\n INN=007811514257, OGRN=1127847087884, SNILS=11617693460\n\n * */\n var result = infoString.match(/([а-яА-Яa-zA-Z0-9\\.]+)=(?:(\"[^\"]+?\")|(.+?))(?:,|$)/g);\n\n if (result) {\n result = result.map(function (group) {\n /**\n * Пример входной строки:\n *\n\n UnstructuredName=\"INN=7811514257/KPP=781101001/OGRN=1127847087884\",\n\n * */\n var parts = group.match(/^([а-яА-Яa-zA-Z0-9\\.]+)=(.+?),?$/),\n title = parts && parts[1],\n descr = parts && parts[2],\n translated = false,\n oidTitle;\n\n // Если тайтл содержит ОИД, пытаемся расшифровать\n if (/^OID./.test(title)) {\n oidTitle = title.match(/^OID\\.(.*)/);\n\n if (oidTitle && oidTitle[1]) {\n oidTitle = oids[oidTitle[1]];\n\n if (oidTitle) {\n title = oidTitle;\n }\n }\n }\n\n // Вырезаем лишние кавычки\n descr = descr.replace(/^\"(.*)\"/, '$1');\n descr = descr.replace(/\"{2}/g, '\"');\n\n tags.some(function (tag) {\n return tag.possibleNames.some(function (possible) {\n var match = possible === title;\n\n if (match) {\n title = tag.translation;\n translated = true;\n }\n\n return match;\n });\n });\n\n return {\n title: title,\n descr: descr,\n translated: translated\n };\n });\n }\n\n return result;\n}\n\n/**\n * Возвращает дату в формате (dd.mm.yyyy hh:mm:ss) из строки, формата, используемого плагином cryptoPro\n * */\nfunction getReadableDate(date) {\n date = new Date(date);\n\n return ([\n date.getDate(),\n date.getMonth() + 1,\n date.getFullYear()\n ].join('.') + ' ' + [\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n ].join(':')).replace(/\\b(\\d)\\b/g, '0$1');\n}\n\n/**\n * Преобразует дату для IE\n * */\nfunction getDateObj(dateObj) {\n return bowser.msie ? dateObj.getVarDate() : dateObj;\n}\n\n/**\n * Подготавливает информацию о сертификатах\n * */\nfunction prepareCertsInfo(items) {\n return items.map(function (c) {\n c.name = c.subjectName.match(/CN=(.+?)(?:,|$)/);\n\n // Удалось ли вытащить Common Name\n if (c.name && c.name[1]) {\n c.name = c.name[1];\n }\n\n c.validFrom = getReadableDate(c.validFrom);\n c.validTo = getReadableDate(c.validTo);\n\n c.label = c.name + ' (до ' + c.validTo + ')';\n\n return c;\n });\n}\n\n/**\n * Возвращает расшифрованные ОИД'ы\n * */\nfunction getDecodedExtendedKeyUsage() {\n var that = this;\n\n return new Promise(function (resolve) {\n that.getExtendedKeyUsage().then(function (certOids) {\n resolve(certOids.reduce(function (oidsLst, oid) {\n oid = {\n id: oid,\n descr: oids[oid] || null\n };\n\n if (oid.descr) {\n oidsLst.unshift(oid);\n } else {\n oidsLst.push(oid);\n }\n\n return oidsLst;\n }, []));\n });\n });\n}\n\n/**\n * Проверка наличия ОИД'а(ОИД'ов) у сертификата\n *\n * @param {String|Array} oids - ОИД'ы для проверки\n * @returns {Promise} с отложенным результатом типа {Boolean}\n * */\nfunction hasExtendedKeyUsage(oids) {\n var that = this;\n\n return new Promise(function (resolve) {\n that.getExtendedKeyUsage().then(function (certOids) {\n var result;\n\n if (Array.isArray(oids)) {\n result = oids.every(function (oidToCheck) {\n return certOids.some(function (certOid) {\n return certOid === oidToCheck;\n });\n });\n } else {\n result = certOids.some(function (certOid) {\n return certOid === oids;\n });\n }\n\n resolve(result);\n });\n });\n}\n\n/**\n * Выводит информацию о системе пользователя\n * */\nfunction getEnvInfo() {\n var parsed = bowser._detect(navigator.userAgent),\n info = {\n browserName: parsed.name,\n browserVersion: parsed.version\n };\n\n if (parsed.mac) {\n info.os = 'Mac';\n } else if (parsed.windows) {\n info.os = 'Windows';\n } else if (parsed.linux) {\n info.os = 'Linux';\n }\n\n return info;\n}\n\n/**\n * Подходящая ли версия CSP\n * */\nfunction isValidCSPVersion(version) {\n version = version.match(/\\d+?\\b(?:\\.\\d+)?/);\n\n return version >= 3.6;\n}\n\n/**\n * Подходящая ли версия cades плагина\n * */\nfunction isValidCadesVersion(version) {\n version = version.split('.').reduce(function (verInfo, number, i) {\n if (i === 0) {\n verInfo.major = number;\n } else if (i === 1) {\n verInfo.minor = number;\n } else if (i === 2) {\n verInfo.patch = number;\n }\n\n return verInfo;\n }, {});\n\n if (version.major < 2) {\n return false;\n }\n\n return version.patch >= 12438;\n}\n\nmodule.exports = {\n subjectNameTagsTranslations: subjectNameTagsTranslations,\n issuerNameTagsTranslations: issuerNameTagsTranslations,\n parseCertInfo: parseCertInfo,\n getReadableDate: getReadableDate,\n getDateObj: getDateObj,\n prepareCertsInfo: prepareCertsInfo,\n getDecodedExtendedKeyUsage: getDecodedExtendedKeyUsage,\n hasExtendedKeyUsage: hasExtendedKeyUsage,\n getEnvInfo: getEnvInfo,\n isValidCSPVersion: isValidCSPVersion,\n isValidCadesVersion: isValidCadesVersion\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./common.js\n ** module id = 5\n ** module chunks = 1 2\n **/","module.exports = {\n '1.2.840.113549.1.9.2': 'Неструктурированное имя',\n '1.2.643.3.141.1.1': 'РНС ФСС',\n '1.2.643.3.141.1.2': 'КП ФСС',\n '1.2.643.3.131.1.1': 'ИНН',\n '1.3.6.1.5.5.7.3.2': 'Проверка подлинности клиента',\n '1.3.6.1.5.5.7.3.4': 'Защищенная электронная почта',\n '1.2.643.3.8.100.1': 'Сертификат типа \"ekey-ГОСТ\"',\n '1.2.643.3.8.100.1.1': 'Общее использование в системах ИОК без права заверения финансовых документов',\n '1.2.643.3.8.100.1.2': 'Передача отчетности по ТКС',\n '1.2.643.3.8.100.1.3': 'Оформление взаимных обязательств, соглашений, договоров, актов и т.п.',\n '1.2.643.3.8.100.1.4': 'Внутрикорпоративный документооборот',\n '1.2.643.3.8.100.1.5': 'Использование в системах электронной торговли',\n '1.2.643.3.8.100.1.6': 'Использование в торгово-закупочной системе \"ЭЛЕКТРА\"',\n '1.2.643.6.2.1.7.2': 'Использование физическим лицом в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских прав и обязанностей в отношении инвестиционных паев паевых инвестиционных фондов, в том числе отношения, связанные с учетом и/или фиксацией прав на инвестиционные паи паевых инвестиционных фондов',\n '1.2.643.6.2.1.7.1': 'Использование единоличным исполнительным органом юридического лица или уполномоченными представителями юридического лица в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских и иных прав и обязанностей в сфере негосударственного пенсионного обеспечения, негосударственного пенсионного страхования, в сфере деятельности паевых инвестиционных фондов, акционерных инвестиционных фондов, профессиональных участников рынка ценных бумаг, а также связанной с обслуживанием указанной деятельности услуг кредитных и иных организаций',\n '1.3.6.1.4.1.29919.21': 'Использование в системе Портал государственных закупок Ростовской области \"Рефери\".',\n '1.2.643.3.2.100.65.13.11': 'Использование в системе АИС \"Госзакупки\" Сахалинской области.',\n '1.2.643.3.8.100.1.7': 'Использование в системе Портал государственных закупок Ставропольского края.',\n '1.2.643.3.8.100.1.8': 'Использование в Единой системе электронной торговли B2B-Center и B2G.',\n '1.2.643.3.8.100.1.9': 'Для участия в электронных торгах и подписания государственного контракта в электронной площадке ОАО «ЕЭТП» уполномоченными лицами участников размещения государственного или муниципального заказа',\n '1.2.643.3.8.100.1.10': 'Для участия в электронных торгах и подписания государственного контракта в информационных системах Тендерного комитета города Москвы уполномоченными лицами участников размещения государственного заказа города Москвы',\n '1.2.643.3.8.100.1.11': 'Подписание электронных документов в автоматизированной информационной системе размещения государственного и муниципального заказа Саратовской области',\n '1.2.643.3.8.100.1.12': 'Использование в системе государственного заказа Иркутской области',\n '1.2.643.3.8.100.1.13': 'Использование в электронной торговой площадке агентства государственного заказа Красноярского края',\n '1.3.6.1.4.1.24138.1.1.8.1': 'Обеспечение юридической значимости в Системе \"Электронная Торговая Площадка\"',\n '1.2.643.3.8.100.1.14': 'Использование в электронной торговой площадке \"Тендер\"',\n '1.2.643.6.3': 'Использование в электронных торговых системах и в программном обеспечении, связанным с обменом электронных сообщений',\n '1.2.643.2.2.34.6': 'Пользователь Центра Регистрации',\n '1.2.643.2.39.1.1': 'Использование в программных продуктах системы \"1С:Предприятие 8\"',\n '1.2.643.5.1.24.2.1.3': 'Формирование документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',\n '1.2.643.5.1.24.2.1.3.1': 'Формирование кадастровым инженером документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',\n '1.2.643.5.1.24.2.2.2': 'Формирование документов как результата оказания услуги со стороны органов регистрации прав',\n '1.2.643.5.1.24.2.2.3': 'Формирование документов для получения государственных услуг в сфере государственной регистрации прав на недвижимое имущество и сделок с ним со стороны заявителя',\n '1.2.643.6.3.1.1': 'Использование на электронных площадок отобранных для проведения аукционах в электронной форме',\n '1.2.643.6.3.1.2.1': 'Тип участника - Юридическое лицо',\n '1.2.643.6.3.1.2.2': 'Тип участника - Физическое лицо',\n '1.2.643.6.3.1.2.3': 'Тип участника - Индивидуальный предприниматель',\n '1.2.643.6.3.1.3.1': 'Участник размещения заказа',\n '1.2.643.6.3.1.4.1': 'Администратор организации',\n '1.2.643.6.3.1.4.2': 'Уполномоченный специалист',\n '1.2.643.6.3.1.4.3': 'Специалист с правом подписи контракта',\n '1.3.643.3.8.100.15': 'Использование в ЭТП \"uTender\"'\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./oids.js\n ** module id = 6\n ** module chunks = 1 2\n **/","module.exports = {\n // CAPICOM_STORE_LOCATION enumeration\n StoreLocation: {\n CAPICOM_MEMORY_STORE: 0,\n CAPICOM_LOCAL_MACHINE_STORE: 1,\n CAPICOM_CURRENT_USER_STORE: 2,\n CAPICOM_ACTIVE_DIRECTORY_USER_STORE: 3,\n CAPICOM_SMART_CARD_USER_STORE: 4\n },\n // CAPICOM_STORE_OPEN_MODE enumeration\n StoreOpenMode: {\n CAPICOM_STORE_OPEN_READ_ONLY: 0,\n CAPICOM_STORE_OPEN_READ_WRITE: 1,\n CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED: 2,\n CAPICOM_STORE_OPEN_EXISTING_ONLY: 128,\n CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED: 256\n },\n // CAPICOM_CERTIFICATE_FIND_TYPE enumeration\n CertFindType: {\n CAPICOM_CERTIFICATE_FIND_SHA1_HASH: 0,\n CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME: 1,\n CAPICOM_CERTIFICATE_FIND_ISSUER_NAME: 2,\n CAPICOM_CERTIFICATE_FIND_ROOT_NAME: 3,\n CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME: 4,\n CAPICOM_CERTIFICATE_FIND_EXTENSION: 5,\n CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY: 6,\n CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY: 7,\n CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY: 8,\n CAPICOM_CERTIFICATE_FIND_TIME_VALID: 9,\n CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID: 10,\n CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED: 11,\n CAPICOM_CERTIFICATE_FIND_KEY_USAGE: 12\n },\n Time: {\n AUTHENTICATED_ATTRIBUTE_SIGNING_TIME: 0\n },\n Check: {\n CHECK_NONE: 0,\n CHECK_TRUSTED_ROOT: 1,\n CHECK_TIME_VALIDITY: 2,\n CHECK_SIGNATURE_VALIDITY: 4,\n CHECK_ONLINE_REVOCATION_STATUS: 8,\n CHECK_OFFLINE_REVOCATION_STATUS: 16,\n TRUST_IS_NOT_TIME_VALID: 1,\n TRUST_IS_NOT_TIME_NESTED: 2,\n TRUST_IS_REVOKED: 4,\n TRUST_IS_NOT_SIGNATURE_VALID: 8,\n TRUST_IS_NOT_VALID_FOR_USAGE: 16,\n TRUST_IS_UNTRUSTED_ROOT: 32,\n TRUST_REVOCATION_STATUS_UNKNOWN: 64,\n TRUST_IS_CYCLIC: 128,\n TRUST_IS_PARTIAL_CHAIN: 65536,\n TRUST_CTL_IS_NOT_TIME_VALID: 131072,\n TRUST_CTL_IS_NOT_SIGNATURE_VALID: 262144,\n TRUST_CTL_IS_NOT_VALID_FOR_USAGE: 524288,\n },\n // CAPICOM_PROPID enumeration\n PropId: {\n CAPICOM_PROPID_UNKNOWN: 0,\n CAPICOM_PROPID_KEY_PROV_HANDLE: 1,\n CAPICOM_PROPID_KEY_PROV_INFO: 2,\n CAPICOM_PROPID_SHA1_HASH: 3,\n CAPICOM_PROPID_HASH_PROP: 3,\n CAPICOM_PROPID_MD5_HASH: 4,\n CAPICOM_PROPID_KEY_CONTEXT: 5,\n CAPICOM_PROPID_KEY_SPEC: 6,\n CAPICOM_PROPID_IE30_RESERVED: 7,\n CAPICOM_PROPID_PUBKEY_HASH_RESERVED: 8,\n CAPICOM_PROPID_ENHKEY_USAGE: 9,\n CAPICOM_PROPID_CTL_USAGE: 9,\n CAPICOM_PROPID_NEXT_UPDATE_LOCATION: 10,\n CAPICOM_PROPID_FRIENDLY_NAME: 11,\n CAPICOM_PROPID_PVK_FILE: 12,\n CAPICOM_PROPID_DESCRIPTION: 13,\n CAPICOM_PROPID_ACCESS_STATE: 14,\n CAPICOM_PROPID_SIGNATURE_HASH: 15,\n CAPICOM_PROPID_SMART_CARD_DATA: 16,\n CAPICOM_PROPID_EFS: 17,\n CAPICOM_PROPID_FORTEZZA_DATA: 18,\n CAPICOM_PROPID_ARCHIVED: 19,\n CAPICOM_PROPID_KEY_IDENTIFIER: 20,\n CAPICOM_PROPID_AUTO_ENROLL: 21,\n CAPICOM_PROPID_PUBKEY_ALG_PARA: 22,\n CAPICOM_PROPID_CROSS_CERT_DIST_POINTS: 23,\n CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH: 24,\n CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH: 25,\n CAPICOM_PROPID_ENROLLMENT: 26,\n CAPICOM_PROPID_DATE_STAMP: 27,\n CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH: 28,\n CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH: 29,\n CAPICOM_PROPID_EXTENDED_ERROR_INFO: 30,\n CAPICOM_PROPID_RENEWAL: 64,\n CAPICOM_PROPID_ARCHIVED_KEY_HASH: 65,\n CAPICOM_PROPID_FIRST_RESERVED: 66,\n CAPICOM_PROPID_LAST_RESERVED: 0x00007FFF,\n CAPICOM_PROPID_FIRST_USER: 0x00008000,\n CAPICOM_PROPID_LAST_USER: 0x0000FFFF\n },\n // CADESCOM_XML_SIGNATURE_TYPE enumeration\n SignatureType: {\n CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED: 0,\n CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING: 1,\n CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE: 2\n },\n // CADESCOM_HASH_ALGORITHM enumeration\n HashAlgorithm: {\n CADESCOM_HASH_ALGORITHM_CP_GOST_3411: 100,\n CADESCOM_HASH_ALGORITHM_MD2: 1,\n CADESCOM_HASH_ALGORITHM_MD4: 2,\n CADESCOM_HASH_ALGORITHM_MD5: 3,\n CADESCOM_HASH_ALGORITHM_SHA_256: 4,\n CADESCOM_HASH_ALGORITHM_SHA_384: 5,\n CADESCOM_HASH_ALGORITHM_SHA_512: 6,\n CADESCOM_HASH_ALGORITHM_SHA1: 0\n },\n CadesType: {\n CADESCOM_CADES_DEFAULT: 0,\n CADESCOM_CADES_BES: 1,\n CADESCOM_CADES_X_LONG_TYPE_1: 0x5d\n },\n ContentEncoding: {\n CADESCOM_BASE64_TO_BINARY: 0x01,\n CADESCOM_STRING_TO_UCS2LE: 0x00\n },\n StoreNames: {\n CAPICOM_MY_STORE: 'My'\n },\n Chain: {\n CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT: 0,\n CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN: 1,\n CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY: 2\n },\n GostXmlDSigUrls: {\n XmlDsigGost3410Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411',\n XmlDsigGost3411Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411',\n XmlDsigGost3410UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411',\n XmlDsigGost3411UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr3411'\n }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./constants.js\n ** module id = 7\n ** module chunks = 1 2\n **/","var cryptoCommon = require('./common'),\n cryptoConstants = require('./constants'),\n _certListCache;\n\nfunction Certificate(item) {\n this._cert = item._cert;\n this.thumbprint = item.thumbprint;\n this.subjectName = item.subjectName;\n this.issuerName = item.issuerName;\n this.validFrom = item.validFrom;\n this.validTo = item.validTo;\n}\n\n/**\n * Проверяет, валиден ли сертификат\n * */\nCertificate.prototype.isValid = function isValid() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n var result;\n\n try {\n result = cert.IsValid();\n result = result.Result;\n } catch (err) {\n reject('Ошибка при проверке сертификата: ', err.message);\n return;\n }\n\n resolve(result);\n });\n};\n\n/**\n * Достает указанное свойство у сертификата\n * */\nCertificate.prototype.getProp = function (propName) {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n var result;\n\n try {\n result = cert[propName];\n } catch (err) {\n reject('Ошибка при обращении к свойству сертификата: ', err.message);\n return;\n }\n\n resolve(result);\n });\n};\n\n/**\n * Экспорт base64 представления сертификата пользователя\n * */\nCertificate.prototype.exportBase64 = function exportBase64() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n var base64;\n\n try {\n base64 = cert.Export(0);\n } catch (err) {\n reject('Ошибка при экспорте сертификата: ', err.message);\n return;\n }\n\n resolve(base64);\n });\n};\n\n/**\n * Возвращает информацию об алгоритме\n * */\nCertificate.prototype.getAlgorithm = function getAlgorithm() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n var result = {},\n algorithm;\n\n try {\n algorithm = cert.PublicKey();\n algorithm = algorithm.Algorithm;\n\n result.algorithm = algorithm.FriendlyName;\n result.oid = algorithm.Value;\n } catch (err) {\n reject('Ошибка при получении алгоритма: ', err.message);\n return;\n }\n\n resolve(result);\n });\n};\n\n/**\n * Разбирает SubjectName сертификата по тэгам\n * */\nCertificate.prototype.getOwnerInfo = function getOwnerInfo() {\n return getCertInfo.call(this, cryptoCommon.subjectNameTagsTranslations, 'SubjectName');\n};\n\n/**\n * Разбирает IssuerName сертификата по тэгам\n * */\nCertificate.prototype.getIssuerInfo = function getIssuerInfo() {\n return getCertInfo.call(this, cryptoCommon.issuerNameTagsTranslations, 'IssuerName');\n};\n\n/**\n * Получение OID сертификата\n * Возвращает массив OID (улучшенного ключа)\n * */\nCertificate.prototype.getExtendedKeyUsage = function getExtendedKeyUsage() {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n var OIDS = [],\n count,\n item;\n\n try {\n count = cert.ExtendedKeyUsage();\n count = count.EKUs;\n count = count.Count;\n\n if (count > 0) {\n while (count > 0) {\n item = cert.ExtendedKeyUsage();\n item = item.EKUs;\n item = item.Item(count);\n item = item.OID;\n\n OIDS.push(item);\n\n count--;\n }\n }\n } catch (err) {\n reject('Ошибка при получении ОИД\\'ов: ', err.message);\n return;\n }\n\n resolve(OIDS);\n });\n};\n\nCertificate.prototype.getDecodedExtendedKeyUsage = cryptoCommon.getDecodedExtendedKeyUsage;\n\nCertificate.prototype.hasExtendedKeyUsage = cryptoCommon.hasExtendedKeyUsage;\n\n/**\n * Проверяет корректность настроек ЭП на машине\n * */\nfunction isValidEDSSettings() {\n return new Promise(function (resolve, reject) {\n var result;\n\n try {\n result = cadesplugin.CreateObject('CAdESCOM.About');\n } catch (error) {\n reject('Настройки ЭП на данной машине не верны');\n }\n\n resolve();\n });\n}\n\n/**\n * Получить сертификат в формате cades по хэшу\n * */\nfunction getCadesCert(hash) {\n return new Promise(function (resolve, reject) {\n var oStore = cadesplugin.CreateObject('CAdESCOM.Store'),\n certs,\n certCnt,\n cert;\n\n if (!oStore) {\n reject('Не удалось получить доступ к хранилищу сертификатов');\n return;\n }\n\n // Открываем хранилище\n try {\n oStore.Open(\n cadesplugin.CAPICOM_CURRENT_USER_STORE,\n cadesplugin.CAPICOM_MY_STORE,\n cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED\n );\n } catch (err) {\n reject('Ошибка при открытии хранилища: ' + err.message);\n return;\n }\n\n // Получаем доступ к сертификатам\n try {\n certs = oStore.Certificates;\n certCnt = certs.Count;\n } catch (err) {\n reject('Ошибка получения списка сертификатов: ' + err.message);\n return;\n }\n\n if (!certCnt) {\n reject('Нет доступных сертификатов');\n return;\n }\n\n // Получаем сертификат по хэшу\n try {\n certs = certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, hash);\n\n if (certs.Count) {\n cert = certs.Item(1);\n } else {\n throw new Error(hash);\n }\n } catch (err) {\n reject('Не удалось получить сертификат по хэшу: ' + err.message);\n return;\n }\n\n oStore.Close();\n\n resolve(cert);\n });\n}\n\n/**\n * Разбирает информацию сертификата по тэгам\n * */\nfunction getCertInfo(tags, propName) {\n var cert = this._cert;\n\n return new Promise(function (resolve, reject) {\n var propInfo;\n\n try {\n propInfo = cert[propName];\n } catch (err) {\n reject('Ошибка при извлечении данных из сертификата: ', err.message);\n return;\n }\n\n resolve(cryptoCommon.parseCertInfo(tags, propInfo));\n });\n}\n\n/**\n * Возвращает список сертификатов, доступных в системе\n *\n * @param {Boolean} [resetCache=false] -- нужно ли сбросить кэш списка сертификатов\n * @returns {Promise} -- со списком сертификатов {Array}\n * */\nfunction getCertsList(resetCache) {\n return new Promise(function (resolve, reject) {\n if (!resetCache && _certListCache) {\n resolve(_certListCache);\n return;\n }\n\n var oStore = cadesplugin.CreateObject('CAdESCOM.Store'),\n result = [],\n certs,\n count,\n item;\n\n // Открываем хранилище\n try {\n oStore.Open(\n cadesplugin.CAPICOM_CURRENT_USER_STORE,\n cadesplugin.CAPICOM_MY_STORE,\n cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED\n );\n } catch (err) {\n reject('Ошибка при открытии хранилища: ' + err.message);\n return;\n }\n\n // Получаем доступ к сертификатам\n try {\n certs = oStore.Certificates;\n\n if (certs) {\n certs = certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID);\n /**\n * Не рассматриваются сертификаты, в которых отсутствует закрытый ключ\n * или не действительны на данный момент\n * */\n certs = certs.Find(\n cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,\n cryptoConstants.PropId.CAPICOM_PROPID_KEY_PROV_INFO\n );\n\n count = certs.Count;\n }\n } catch (err) {\n reject('Ошибка получения списка сертификатов: ' + err.message);\n return;\n }\n\n if (!count) {\n reject('Нет доступных сертификатов');\n return;\n }\n\n try {\n while (count) {\n item = certs.Item(count);\n\n result.push(new Certificate({\n _cert: item,\n thumbprint: item.Thumbprint,\n subjectName: item.SubjectName,\n issuerName: item.IssuerName,\n validFrom: item.ValidFromDate,\n validTo: item.ValidToDate\n }));\n\n count--;\n }\n } catch (err) {\n reject('Ошибка обработки сертификатов: ' + err.message);\n return;\n }\n\n oStore.Close();\n\n _certListCache = cryptoCommon.prepareCertsInfo(result);\n\n resolve(_certListCache);\n });\n}\n\n/**\n * Получить сертификат по хэшу\n * */\nfunction getCert(hash) {\n return new Promise(function (resolve, reject) {\n if (!hash) {\n reject('Хэш не указан');\n return;\n }\n\n getCertsList().then(function (list) {\n var foundCert;\n\n list.some(function (cert) {\n if (hash === cert.thumbprint) {\n foundCert = cert;\n return true;\n }\n });\n\n if (foundCert) {\n resolve(foundCert);\n } else {\n reject('Сертификат с хэшем: \"' + hash + '\" не найден');\n }\n }, reject);\n });\n}\n\n/**\n * Создает подпись base64 строки по hash'у сертификата\n *\n * @param {String} hash -- fingerprint (thumbprint) сертификата\n * @param {String} dataBase64 -- строковые данные в формате base64\n * @param {Boolean} signType -- тип подписи открепленная (true) / присоединенная (false) (default: true)\n * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}\n * */\nfunction signData(hash, dataBase64, signType) {\n signType = typeof signType === 'undefined' ? true : Boolean(signType);\n\n return new Promise(function (resolve, reject) {\n getCadesCert(hash).then(function (cert) {\n var clientTime = new Date(),\n oAttrs = cadesplugin.CreateObject('CADESCOM.CPAttribute'),\n oSignedData = cadesplugin.CreateObject('CAdESCOM.CadesSignedData'),\n oSigner = cadesplugin.CreateObject('CAdESCOM.CPSigner'),\n attrs,\n signature;\n\n clientTime = cryptoCommon.getDateObj(clientTime);\n\n try {\n oAttrs.Name = cryptoConstants.Time.AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;\n oAttrs.Value = clientTime;\n } catch (err) {\n reject('Ошибка при установке данных подписи: ' + err.message);\n return;\n }\n\n // Задаем настройки для подписи\n try {\n oSigner.Certificate = cert;\n attrs = oSigner.AuthenticatedAttributes2;\n attrs.Add(oAttrs);\n oSignedData.ContentEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;\n oSignedData.Content = dataBase64;\n oSigner.Options = cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY;\n } catch (err) {\n reject('Не удалось установить настройки для подписи: ' + err.message);\n return;\n }\n\n try {\n signature = oSignedData.SignCades(\n oSigner,\n cadesplugin.CADESCOM_CADES_BES,\n signType\n );\n } catch (err) {\n reject('Не удалось создать подпись: ' + err.message);\n return;\n }\n\n resolve(signature);\n }, reject);\n });\n}\n\n/**\n * Создает подпись XML строки по hash'у сертификата\n *\n * @param {String} hash -- fingerprint (thumbprint) сертификата\n * @param {String} dataXML -- данные в формате XML\n * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}\n * */\nfunction signDataXML(hash, dataXML) {\n return new Promise(function (resolve, reject) {\n getCadesCert(hash).then(function (cert) {\n var oSigner = cadesplugin.CreateObject('CAdESCOM.CPSigner'),\n signerXML = cadesplugin.CreateObject('CAdESCOM.SignedXML'),\n cnts = cryptoConstants,\n signature;\n\n // Задаем настройки для подписи\n try {\n oSigner.Certificate = cert;\n // Добавляем данные для подписи\n signerXML.Content = dataXML;\n // Устанавливаем тип подписи\n signerXML.SignatureType = cnts.SignatureType.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED;\n // Устанавливаем алгоритм подписи\n signerXML.SignatureMethod = cnts.GostXmlDSigUrls.XmlDsigGost3410Url;\n // Устанавливаем алгоритм хэширования\n signerXML.DigestMethod = cnts.GostXmlDSigUrls.XmlDsigGost3411Url;\n } catch (err) {\n reject('Не удалось установить настройки для подписи: ' + err.message);\n return;\n }\n\n try {\n signature = signerXML.Sign(oSigner);\n } catch (err) {\n reject('Не удалось создать подпись: ' + err.message);\n return;\n }\n\n resolve(signature);\n }, reject);\n });\n}\n\n/**\n * Возвращает информацию о версии CSP и плагина\n * */\nfunction getSystemInfo() {\n var sysInfo = cryptoCommon.getEnvInfo();\n\n return new Promise(function (resolve, reject) {\n var e;\n\n try {\n e = cadesplugin.CreateObject('CAdESCOM.About');\n\n sysInfo.cadesVersion = e.PluginVersion;\n // Возможен вызов в ранних версиях в виде sysInfo.cspVersion = e.CSPVersion('', 75);\n sysInfo.cspVersion = e.CSPVersion();\n\n if (!sysInfo.cadesVersion) {\n sysInfo.cadesVersion = e.Version;\n }\n\n sysInfo.cadesVersion = sysInfo.cadesVersion.toString();\n sysInfo.cspVersion = sysInfo.cspVersion.toString();\n\n resolve(sysInfo);\n } catch (err) {\n reject('Ошибка при получении информации о системе: ', err.message);\n }\n });\n}\n\n/**\n * Promise обертка для синхронного вызова проверки версии CSP\n * */\nfunction isValidCSPVersion(version) {\n return new Promise(function (resolve) {\n resolve(cryptoCommon.isValidCSPVersion(version));\n });\n}\n\n/**\n * Promise обертка для синхронного вызова проверки версии плагина\n * */\nfunction isValidCadesVersion(version) {\n return new Promise(function (resolve) {\n resolve(cryptoCommon.isValidCadesVersion(version));\n });\n}\n\nmodule.exports = {\n isValidEDSSettings: isValidEDSSettings,\n getCertsList: getCertsList,\n getCert: getCert,\n signData: signData,\n signDataXML: signDataXML,\n getSystemInfo: getSystemInfo,\n isValidCSPVersion: isValidCSPVersion,\n isValidCadesVersion: isValidCadesVersion\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./apiSync.js\n ** module id = 8\n ** module chunks = 2\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/crypto-pro.js b/dist/crypto-pro.js
deleted file mode 100644
index 4ea186d..0000000
--- a/dist/crypto-pro.js
+++ /dev/null
@@ -1,2557 +0,0 @@
-var CryptoPro =
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-/******/
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
- __webpack_require__(1);
-
- var global = Function('return this')(),
- canPromise = Boolean(global.Promise),
- cadesplugin = global.cadesplugin,
- cryptoService = __webpack_require__(2),
- errorMsg = '',
- loadedPlugin = false,
- onLoadCallbacs = [],
-
- execOnloadQueue = function execOnloadQueue() {
- onLoadCallbacs.forEach(function (callback) {
- callback();
- });
- },
-
- passToWaitOnLoad = function passToWaitOnLoad(callback) {
- if (Object.prototype.toString.call(callback) === '[object Function]') {
- onLoadCallbacs.push(callback);
- }
- },
-
- callOnLoad = function callOnLoad(method) {
- loadedPlugin ? method() : passToWaitOnLoad(method);
- },
-
- finishLoading = function finishLoading() {
- loadedPlugin = true;
-
- execOnloadQueue();
- },
-
- call = function call() {
- var args = Array.prototype.slice.call(arguments),
- methodName = args.shift();
-
- return new Promise(function (resolve, reject) {
- callOnLoad(function () {
- var method;
-
- if (errorMsg) {
- reject(errorMsg);
- return;
- }
-
- method = cryptoService[methodName];
-
- if (!method) {
- reject('Метод "' + methodName + '" не доступен');
- return;
- }
-
- method.apply(null, args).then(resolve, reject);
- });
- });
- };
-
- if (cadesplugin) {
- // Уровень отладки (LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_ERROR)
- cadesplugin.set_log_level(cadesplugin.LOG_LEVEL_ERROR);
-
- if (canPromise) {
- cadesplugin.then(finishLoading, function () {
- errorMsg = 'КриптоПРО ЭЦП Browser Plug-In не доступен';
- finishLoading();
- });
- } else {
- throw new Error('Не поддерживаются промисы. Необходим полифилл.');
- }
- } else {
- throw new Error('Не подключен модуль для работы с cades plugin');
- }
-
- module.exports = {
- call: call
- };
-
-/***/ },
-/* 1 */
-/***/ function(module, exports) {
-
- ;(function () {
- //already loaded
- if(window.cadesplugin)
- return;
-
- var pluginObject;
- var plugin_resolved = 0;
- var plugin_reject;
- var plugin_resolve;
- var isOpera = 0;
- var isFireFox = 0;
- var isEdge = 0;
- var isSafari = 0;
- var failed_extensions = 0;
-
- var canPromise = !!window.Promise;
- var cadesplugin;
-
- if(canPromise)
- {
- cadesplugin = new Promise(function(resolve, reject)
- {
- plugin_resolve = resolve;
- plugin_reject = reject;
- });
- } else
- {
- cadesplugin = {};
- }
-
- function check_browser() {
- var ua= navigator.userAgent, tem, M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
- if(/trident/i.test(M[1])){
- tem= /\brv[ :]+(\d+)/g.exec(ua) || [];
- return {name:'IE',version:(tem[1] || '')};
- }
- if(M[1]=== 'Chrome'){
- tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
- if(tem!= null) return {name:tem[1].replace('OPR', 'Opera'),version:tem[2]};
- }
- M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
- if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
- return {name:M[0],version:M[1]};
- }
- var browserSpecs = check_browser();
-
- function cpcsp_console_log(level, msg){
- //IE9 не может писать в консоль если не открыта вкладка developer tools
- if(typeof(console) === 'undefined')
- return;
- if (level <= cadesplugin.current_log_level ){
- if (level === cadesplugin.LOG_LEVEL_DEBUG)
- console.log("DEBUG: %s", msg);
- if (level === cadesplugin.LOG_LEVEL_INFO)
- console.info("INFO: %s", msg);
- if (level === cadesplugin.LOG_LEVEL_ERROR)
- console.error("ERROR: %s", msg);
- return;
- }
- }
-
- function set_log_level(level){
- if (!((level === cadesplugin.LOG_LEVEL_DEBUG) ||
- (level === cadesplugin.LOG_LEVEL_INFO) ||
- (level === cadesplugin.LOG_LEVEL_ERROR))){
- cpcsp_console_log(cadesplugin.LOG_LEVEL_ERROR, "cadesplugin_api.js: Incorrect log_level: " + level);
- return;
- }
- cadesplugin.current_log_level = level;
- if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_DEBUG)
- cpcsp_console_log(cadesplugin.LOG_LEVEL_INFO, "cadesplugin_api.js: log_level = DEBUG");
- if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_INFO)
- cpcsp_console_log(cadesplugin.LOG_LEVEL_INFO, "cadesplugin_api.js: log_level = INFO");
- if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_ERROR)
- cpcsp_console_log(cadesplugin.LOG_LEVEL_INFO, "cadesplugin_api.js: log_level = ERROR");
- if(isNativeMessageSupported())
- {
- if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_DEBUG)
- window.postMessage("set_log_level=debug", "*");
- if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_INFO)
- window.postMessage("set_log_level=info", "*");
- if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_ERROR)
- window.postMessage("set_log_level=error", "*");
- }
- }
-
- function set_constantValues()
- {
- cadesplugin.CAPICOM_LOCAL_MACHINE_STORE = 1;
- cadesplugin.CAPICOM_CURRENT_USER_STORE = 2;
- cadesplugin.CADESCOM_LOCAL_MACHINE_STORE = 1;
- cadesplugin.CADESCOM_CURRENT_USER_STORE = 2;
- cadesplugin.CADESCOM_CONTAINER_STORE = 100;
-
- cadesplugin.CAPICOM_MY_STORE = "My";
-
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
-
- cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
-
- cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED = 0;
- cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING = 1;
- cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE = 2;
-
- cadesplugin.XmlDsigGost3410UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
- cadesplugin.XmlDsigGost3411UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
- cadesplugin.XmlDsigGost3410Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
- cadesplugin.XmlDsigGost3411Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";
-
- cadesplugin.CADESCOM_CADES_DEFAULT = 0;
- cadesplugin.CADESCOM_CADES_BES = 1;
- cadesplugin.CADESCOM_CADES_T = 0x5;
- cadesplugin.CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
- cadesplugin.CADESCOM_PKCS7_TYPE = 0xffff;
-
- cadesplugin.CADESCOM_ENCODE_BASE64 = 0;
- cadesplugin.CADESCOM_ENCODE_BINARY = 1;
- cadesplugin.CADESCOM_ENCODE_ANY = -1;
-
- cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT = 0;
- cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1;
- cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY = 2;
-
- cadesplugin.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME = 0;
- cadesplugin.CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME = 1;
-
- cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_ISSUER_NAME = 2;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_ROOT_NAME = 3;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME = 4;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENSION = 5;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY = 7;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY = 8;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID = 10;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED = 11;
- cadesplugin.CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12;
-
- cadesplugin.CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 128;
-
- cadesplugin.CAPICOM_PROPID_ENHKEY_USAGE = 9;
-
- cadesplugin.CAPICOM_OID_OTHER = 0;
- cadesplugin.CAPICOM_OID_KEY_USAGE_EXTENSION = 10;
-
- cadesplugin.CAPICOM_EKU_CLIENT_AUTH = 2;
- cadesplugin.CAPICOM_EKU_SMARTCARD_LOGON = 5;
- cadesplugin.CAPICOM_EKU_OTHER = 0;
-
- cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
- cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
- cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;
- cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
- cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
- cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;
- cadesplugin.CADESCOM_ATTRIBUTE_OTHER = -1;
-
- cadesplugin.CADESCOM_STRING_TO_UCS2LE = 0;
- cadesplugin.CADESCOM_BASE64_TO_BINARY = 1;
-
- cadesplugin.CADESCOM_DISPLAY_DATA_NONE = 0;
- cadesplugin.CADESCOM_DISPLAY_DATA_CONTENT = 1;
- cadesplugin.CADESCOM_DISPLAY_DATA_ATTRIBUTE = 2;
-
- cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_RC2 = 0;
- cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_RC4 = 1;
- cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_DES = 2;
- cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_3DES = 3;
- cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_AES = 4;
- cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_GOST_28147_89 = 25;
-
- cadesplugin.CADESCOM_HASH_ALGORITHM_SHA1 = 0;
- cadesplugin.CADESCOM_HASH_ALGORITHM_MD2 = 1;
- cadesplugin.CADESCOM_HASH_ALGORITHM_MD4 = 2;
- cadesplugin.CADESCOM_HASH_ALGORITHM_MD5 = 3;
- cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_256 = 4;
- cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_384 = 5;
- cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_512 = 6;
- cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
- cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;
- cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512 = 102;
- cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_HMAC = 110;
- cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256_HMAC = 111;
- cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512_HMAC = 112;
-
- cadesplugin.LOG_LEVEL_DEBUG = 4;
- cadesplugin.LOG_LEVEL_INFO = 2;
- cadesplugin.LOG_LEVEL_ERROR = 1;
-
- cadesplugin.CADESCOM_AllowNone = 0;
- cadesplugin.CADESCOM_AllowNoOutstandingRequest = 0x1;
- cadesplugin.CADESCOM_AllowUntrustedCertificate = 0x2;
- cadesplugin.CADESCOM_AllowUntrustedRoot = 0x4;
- cadesplugin.CADESCOM_SkipInstallToStore = 0x10000000;
- }
-
- function async_spawn(generatorFunc) {
- function continuer(verb, arg) {
- var result;
- try {
- result = generator[verb](arg);
- } catch (err) {
- return Promise.reject(err);
- }
- if (result.done) {
- return result.value;
- } else {
- return Promise.resolve(result.value).then(onFulfilled, onRejected);
- }
- }
- var generator = generatorFunc(Array.prototype.slice.call(arguments, 1));
- var onFulfilled = continuer.bind(continuer, "next");
- var onRejected = continuer.bind(continuer, "throw");
- return onFulfilled();
- }
-
- function isIE() {
- // var retVal = (("Microsoft Internet Explorer" == navigator.appName) || // IE < 11
- // navigator.userAgent.match(/Trident\/./i)); // IE 11
- return (browserSpecs.name === 'IE' || browserSpecs.name === 'MSIE');
- }
-
- function isIOS() {
- return (navigator.userAgent.match(/ipod/i) ||
- navigator.userAgent.match(/ipad/i) ||
- navigator.userAgent.match(/iphone/i));
- }
-
- function isNativeMessageSupported()
- {
- // В IE работаем через NPAPI
- if(isIE())
- return false;
- // В Edge работаем через NativeMessage
- if(browserSpecs.name === 'Edge') {
- isEdge = true;
- return true;
- }
- // В Chrome, Firefox, Safari и Opera работаем через асинхронную версию в зависимости от версии
- if(browserSpecs.name === 'Opera') {
- isOpera = true;
- if(browserSpecs.version >= 33){
- return true;
- }
- else{
- return false;
- }
- }
- if(browserSpecs.name === 'Firefox') {
- isFireFox = true;
- if(browserSpecs.version >= 52){
- return true;
- }
- else{
- return false;
- }
- }
- if(browserSpecs.name === 'Chrome') {
- if(browserSpecs.version >= 42){
- return true;
- }
- else{
- return false;
- }
- }
- //В Сафари начиная с 12 версии нет NPAPI
- if(browserSpecs.name === 'Safari') {
- isSafari = true;
- if(browserSpecs.version >= 12) {
- return true;
- } else {
- return false;
- }
- }
- }
-
- // Функция активации объектов КриптоПро ЭЦП Browser plug-in
- function CreateObject(name) {
- if (isIOS()) {
- // На iOS для создания объектов используется функция
- // call_ru_cryptopro_npcades_10_native_bridge, определенная в IOS_npcades_supp.js
- return call_ru_cryptopro_npcades_10_native_bridge("CreateObject", [name]);
- }
- if (isIE()) {
- // В Internet Explorer создаются COM-объекты
- if (name.match(/X509Enrollment/i)) {
- try {
- // Объекты CertEnroll пробуем создавать через нашу фабрику,
- // если не получилось то через CX509EnrollmentWebClassFactory
- var objCertEnrollClassFactory = document.getElementById("webClassFactory");
- return objCertEnrollClassFactory.CreateObject(name);
- }
- catch (e) {
- try {
- var objWebClassFactory = document.getElementById("certEnrollClassFactory");
- return objWebClassFactory.CreateObject(name);
- }
- catch (err) {
- throw ("Для создания обьектов X509Enrollment следует настроить веб-узел на использование проверки подлинности по протоколу HTTPS");
- }
- }
- }
- // Объекты CAPICOM и CAdESCOM создаются через CAdESCOM.WebClassFactory
- try {
- var objWebClassFactory = document.getElementById("webClassFactory");
- return objWebClassFactory.CreateObject(name);
- }
- catch (e) {
- // Для версий плагина ниже 2.0.12538
- return new ActiveXObject(name);
- }
- }
- // создаются объекты NPAPI
- return pluginObject.CreateObject(name);
- }
-
- function decimalToHexString(number) {
- if (number < 0) {
- number = 0xFFFFFFFF + number + 1;
- }
-
- return number.toString(16).toUpperCase();
- }
-
- function GetMessageFromException(e) {
- var err = e.message;
- if (!err) {
- err = e;
- } else if (e.number) {
- err += " (0x" + decimalToHexString(e.number) + ")";
- }
- return err;
- }
-
- function getLastError(exception) {
- if(isNativeMessageSupported() || isIE() || isIOS() ) {
- return GetMessageFromException(exception);
- }
-
- try {
- return pluginObject.getLastError();
- } catch(e) {
- return GetMessageFromException(exception);
- }
- }
-
- // Функция для удаления созданных объектов
- function ReleasePluginObjects() {
- return cpcsp_chrome_nmcades.ReleasePluginObjects();
- }
-
- // Функция активации асинхронных объектов КриптоПро ЭЦП Browser plug-in
- function CreateObjectAsync(name) {
- return pluginObject.CreateObjectAsync(name);
- }
-
- //Функции для IOS
- var ru_cryptopro_npcades_10_native_bridge = {
- callbacksCount : 1,
- callbacks : {},
-
- // Automatically called by native layer when a result is available
- resultForCallback : function resultForCallback(callbackId, resultArray) {
- var callback = ru_cryptopro_npcades_10_native_bridge.callbacks[callbackId];
- if (!callback) return;
- callback.apply(null,resultArray);
- },
-
- // Use this in javascript to request native objective-c code
- // functionName : string (I think the name is explicit :p)
- // args : array of arguments
- // callback : function with n-arguments that is going to be called when the native code returned
- call : function call(functionName, args, callback) {
- var hasCallback = callback && typeof callback === "function";
- var callbackId = hasCallback ? ru_cryptopro_npcades_10_native_bridge.callbacksCount++ : 0;
-
- if (hasCallback)
- ru_cryptopro_npcades_10_native_bridge.callbacks[callbackId] = callback;
-
- var iframe = document.createElement("IFRAME");
- var arrObjs = new Array("_CPNP_handle");
- try{
- iframe.setAttribute("src", "cpnp-js-call:" + functionName + ":" + callbackId+ ":" + encodeURIComponent(JSON.stringify(args, arrObjs)));
- } catch(e){
- alert(e);
- }
- document.documentElement.appendChild(iframe);
- iframe.parentNode.removeChild(iframe);
- iframe = null;
- }
- };
-
- function call_ru_cryptopro_npcades_10_native_bridge(functionName, array){
- var tmpobj;
- var ex;
- ru_cryptopro_npcades_10_native_bridge.call(functionName, array, function(e, response){
- ex = e;
- var str='tmpobj='+response;
- eval(str);
- if (typeof (tmpobj) === "string"){
- tmpobj = tmpobj.replace(/\\\n/gm, "\n");
- tmpobj = tmpobj.replace(/\\\r/gm, "\r");
- }
- });
- if(ex)
- throw ex;
- return tmpobj;
- }
-
- function show_firefox_missing_extension_dialog()
- {
- if (!window.cadesplugin_skip_extension_install)
- {
- var ovr = document.createElement('div');
- ovr.id = "cadesplugin_ovr";
- ovr.style = "visibility: hidden; position: fixed; left: 0px; top: 0px; width:100%; height:100%; background-color: rgba(0,0,0,0.7)";
- ovr.innerHTML = "
" +
- "" +
- "
Для работы КриптоПро ЭЦП Browser plugin на данном сайте необходимо расширение для браузера. Убедитесь, что оно у Вас включено или установите его." +
- "
";
- document.getElementsByTagName("Body")[0].appendChild(ovr);
- document.getElementById("cadesplugin_close_install").addEventListener('click',function()
- {
- plugin_loaded_error("Плагин недоступен");
- document.getElementById("cadesplugin_ovr").style.visibility = 'hidden';
- });
-
- ovr.addEventListener('click',function()
- {
- plugin_loaded_error("Плагин недоступен");
- document.getElementById("cadesplugin_ovr").style.visibility = 'hidden';
- });
- ovr.style.visibility="visible";
- }
- }
-
-
- //Выводим окно поверх других с предложением установить расширение для Opera.
- //Если установленна переменная cadesplugin_skip_extension_install - не предлагаем установить расширение
- function install_opera_extension()
- {
- if (!window.cadesplugin_skip_extension_install)
- {
- document.addEventListener('DOMContentLoaded', function() {
- var ovr = document.createElement('div');
- ovr.id = "cadesplugin_ovr";
- ovr.style = "visibility: hidden; position: fixed; left: 0px; top: 0px; width:100%; height:100%; background-color: rgba(0,0,0,0.7)";
- ovr.innerHTML = "
" +
- "" +
- "
Для работы КриптоПро ЭЦП Browser plugin на данном сайте необходимо установить расширение из каталога дополнений Opera." +
- "
" +
- "
";
- document.getElementsByTagName("Body")[0].appendChild(ovr);
- var btn_install = document.getElementById("cadesplugin_install");
- btn_install.addEventListener('click', function(event) {
- opr.addons.installExtension("epebfcehmdedogndhlcacafjaacknbcm",
- function()
- {
- document.getElementById("cadesplugin_ovr").style.visibility = 'hidden';
- location.reload();
- },
- function(){})
- });
- document.getElementById("cadesplugin_close_install").addEventListener('click',function()
- {
- plugin_loaded_error("Плагин недоступен");
- document.getElementById("cadesplugin_ovr").style.visibility = 'hidden';
- });
-
- ovr.addEventListener('click',function()
- {
- plugin_loaded_error("Плагин недоступен");
- document.getElementById("cadesplugin_ovr").style.visibility = 'hidden';
- });
- ovr.style.visibility="visible";
- document.getElementById("cadesplugin_ovr_item").addEventListener('click',function(e){
- e.stopPropagation();
- });
- });
- }else
- {
- plugin_loaded_error("Плагин недоступен");
- }
- }
-
- function firefox_or_edge_nmcades_onload() {
- cpcsp_chrome_nmcades.check_chrome_plugin(plugin_loaded, plugin_loaded_error);
- }
-
- function nmcades_api_onload () {
- window.postMessage("cadesplugin_echo_request", "*");
- window.addEventListener("message", function (event){
- if (typeof(event.data) !== "string" || !event.data.match("cadesplugin_loaded"))
- return;
- if(isFireFox || isEdge || isSafari)
- {
- // Для Firefox, Сафари, Edge вместе с сообщением cadesplugin_loaded прилетает url для загрузки nmcades_plugin_api.js
- var url = event.data.substring(event.data.indexOf("url:") + 4);
- var fileref = document.createElement('script');
- fileref.setAttribute("type", "text/javascript");
- fileref.setAttribute("src", url);
- fileref.onerror = plugin_loaded_error;
- fileref.onload = firefox_or_edge_nmcades_onload;
- document.getElementsByTagName("head")[0].appendChild(fileref);
- // Для Firefox, Safari и Edge у нас только по одному расширению.
- failed_extensions++;
- }else {
- cpcsp_chrome_nmcades.check_chrome_plugin(plugin_loaded, plugin_loaded_error);
- }
- }, false);
- }
-
- //Загружаем расширения для Chrome, Opera, YaBrowser, FireFox, Edge, Safari
- function load_extension()
- {
-
- if(isFireFox || isEdge || isSafari){
- // вызываем callback руками т.к. нам нужно узнать ID расширения. Он уникальный для браузера.
- nmcades_api_onload();
- } else {
- // в асинхронном варианте для chrome и opera подключаем оба расширения
- var fileref = document.createElement('script');
- fileref.setAttribute("type", "text/javascript");
- fileref.setAttribute("src", "chrome-extension://iifchhfnnmpdbibifmljnfjhpififfog/nmcades_plugin_api.js");
- fileref.onerror = plugin_loaded_error;
- fileref.onload = nmcades_api_onload;
- document.getElementsByTagName("head")[0].appendChild(fileref);
- fileref = document.createElement('script');
- fileref.setAttribute("type", "text/javascript");
- fileref.setAttribute("src", "chrome-extension://epebfcehmdedogndhlcacafjaacknbcm/nmcades_plugin_api.js");
- fileref.onerror = plugin_loaded_error;
- fileref.onload = nmcades_api_onload;
- document.getElementsByTagName("head")[0].appendChild(fileref);
- }
- }
-
- //Загружаем плагин для NPAPI
- function load_npapi_plugin()
- {
- var elem = document.createElement('object');
- elem.setAttribute("id", "cadesplugin_object");
- elem.setAttribute("type", "application/x-cades");
- elem.setAttribute("style", "visibility: hidden");
- document.getElementsByTagName("body")[0].appendChild(elem);
- pluginObject = document.getElementById("cadesplugin_object");
- if(isIE())
- {
- var elem1 = document.createElement('object');
- elem1.setAttribute("id", "certEnrollClassFactory");
- elem1.setAttribute("classid", "clsid:884e2049-217d-11da-b2a4-000e7bbb2b09");
- elem1.setAttribute("style", "visibility: hidden");
- document.getElementsByTagName("body")[0].appendChild(elem1);
- var elem2 = document.createElement('object');
- elem2.setAttribute("id", "webClassFactory");
- elem2.setAttribute("classid", "clsid:B04C8637-10BD-484E-B0DA-B8A039F60024");
- elem2.setAttribute("style", "visibility: hidden");
- document.getElementsByTagName("body")[0].appendChild(elem2);
- }
- }
-
- //Отправляем событие что все ок.
- function plugin_loaded()
- {
- plugin_resolved = 1;
- if(canPromise)
- {
- plugin_resolve();
- }else {
- window.postMessage("cadesplugin_loaded", "*");
- }
- }
-
- //Отправляем событие что сломались.
- function plugin_loaded_error(msg)
- {
- if(isNativeMessageSupported())
- {
- //в асинхронном варианте подключаем оба расширения, если сломались оба пробуем установить для Opera
- failed_extensions++;
- if(failed_extensions<2)
- return;
- if(isOpera && (typeof(msg) === 'undefined'|| typeof(msg) === 'object'))
- {
- install_opera_extension();
- return;
- }
- }
- if(typeof(msg) === 'undefined' || typeof(msg) === 'object')
- msg = "Плагин недоступен";
- plugin_resolved = 1;
- if(canPromise)
- {
- plugin_reject(msg);
- } else {
- window.postMessage("cadesplugin_load_error", "*");
- }
- }
-
- //проверяем что у нас хоть какое то событие ушло, и если не уходило кидаем еще раз ошибку
- function check_load_timeout()
- {
- if(plugin_resolved === 1)
- return;
- if(isFireFox)
- {
- show_firefox_missing_extension_dialog();
- }
- plugin_resolved = 1;
- if(canPromise)
- {
- plugin_reject("Истекло время ожидания загрузки плагина");
- } else {
- window.postMessage("cadesplugin_load_error", "*");
- }
-
- }
-
- //Вспомогательная функция для NPAPI
- function createPromise(arg)
- {
- return new Promise(arg);
- }
-
- function check_npapi_plugin (){
- try {
- var oAbout = CreateObject("CAdESCOM.About");
- plugin_loaded();
- }
- catch (err) {
- document.getElementById("cadesplugin_object").style.display = 'none';
- // Объект создать не удалось, проверим, установлен ли
- // вообще плагин. Такая возможность есть не во всех браузерах
- var mimetype = navigator.mimeTypes["application/x-cades"];
- if (mimetype) {
- var plugin = mimetype.enabledPlugin;
- if (plugin) {
- plugin_loaded_error("Плагин загружен, но не создаются обьекты");
- }else
- {
- plugin_loaded_error("Ошибка при загрузке плагина");
- }
- }else
- {
- plugin_loaded_error("Плагин недоступен");
- }
- }
- }
-
- //Проверяем работает ли плагин
- function check_plugin_working()
- {
- var div = document.createElement("div");
- div.innerHTML = "";
- var isIeLessThan9 = (div.getElementsByTagName("i").length === 1);
- if (isIeLessThan9) {
- plugin_loaded_error("Internet Explorer версии 8 и ниже не поддерживается");
- return;
- }
-
- if(isNativeMessageSupported())
- {
- load_extension();
- }else if(!canPromise) {
- window.addEventListener("message", function (event){
- if (event.data !== "cadesplugin_echo_request")
- return;
- load_npapi_plugin();
- check_npapi_plugin();
- },
- false);
- }else
- {
- if(document.readyState === "complete"){
- load_npapi_plugin();
- check_npapi_plugin();
- } else {
- window.addEventListener("load", function (event) {
- load_npapi_plugin();
- check_npapi_plugin();
- }, false);
- }
- }
- }
-
- function set_pluginObject(obj)
- {
- pluginObject = obj;
- }
-
- function is_capilite_enabled()
- {
- if ((typeof (cadesplugin.EnableInternalCSP) !== 'undefined') && cadesplugin.EnableInternalCSP)
- return true;
- return false;
- };
-
- //Export
- cadesplugin.JSModuleVersion = "2.1.2";
- cadesplugin.async_spawn = async_spawn;
- cadesplugin.set = set_pluginObject;
- cadesplugin.set_log_level = set_log_level;
- cadesplugin.getLastError = getLastError;
- cadesplugin.is_capilite_enabled = is_capilite_enabled;
-
- if(isNativeMessageSupported())
- {
- cadesplugin.CreateObjectAsync = CreateObjectAsync;
- cadesplugin.ReleasePluginObjects = ReleasePluginObjects;
- }
-
- if(!isNativeMessageSupported())
- {
- cadesplugin.CreateObject = CreateObject;
- }
-
- if(window.cadesplugin_load_timeout)
- {
- setTimeout(check_load_timeout, window.cadesplugin_load_timeout);
- }
- else
- {
- setTimeout(check_load_timeout, 20000);
- }
-
- set_constantValues();
-
- cadesplugin.current_log_level = cadesplugin.LOG_LEVEL_ERROR;
- window.cadesplugin = cadesplugin;
- check_plugin_working();
- }());
-
-
-/***/ },
-/* 2 */
-/***/ function(module, exports, __webpack_require__) {
-
- var cryptoCommon = __webpack_require__(3),
- cryptoConstants = __webpack_require__(7),
- _certListCache;
-
- function Certificate(item) {
- this._cert = item._cert;
- this.thumbprint = item.thumbprint;
- this.subjectName = item.subjectName;
- this.issuerName = item.issuerName;
- this.validFrom = item.validFrom;
- this.validTo = item.validTo;
- }
-
- /**
- * Проверяет, валиден ли сертификат
- * */
- Certificate.prototype.isValid = function isValid() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function isValid() {
- var result;
-
- try {
- result = 'yield' + cert.IsValid();
- result = 'yield' + result.Result;
- } catch (err) {
- reject('Ошибка при проверке сертификата: ', err.message);
- return;
- }
-
- resolve(result);
- }));
- });
- };
-
- /**
- * Достает указанное свойство у сертификата
- * */
- Certificate.prototype.getProp = function (propName) {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function getProp() {
- var result;
-
- try {
- result = 'yield' + cert[propName];
- } catch (err) {
- reject('Ошибка при обращении к свойству сертификата: ', err.message);
- return;
- }
-
- resolve(result);
- }));
- });
- };
-
- /**
- * Экспорт base64 представления сертификата пользователя
- * */
- Certificate.prototype.exportBase64 = function exportBase64() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function exportBase64() {
- var base64;
-
- try {
- base64 = 'yield' + cert.Export(0);
- } catch (err) {
- reject('Ошибка при экспорте сертификата: ', err.message);
- return;
- }
-
- resolve(base64);
- }));
- });
- };
-
- /**
- * Возвращает информацию об алгоритме
- * */
- Certificate.prototype.getAlgorithm = function getAlgorithm() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function getAlgorithm() {
- var result = {},
- algorithm;
-
- try {
- algorithm = 'yield' + cert.PublicKey();
- algorithm = 'yield' + algorithm.Algorithm;
-
- result.algorithm = 'yield' + algorithm.FriendlyName;
- result.oid = 'yield' + algorithm.Value;
- } catch (err) {
- reject('Ошибка при получении алгоритма: ', err.message);
- return;
- }
-
- resolve(result);
- }));
- });
- };
-
- /**
- * Разбирает SubjectName сертификата по тэгам
- * */
- Certificate.prototype.getOwnerInfo = function getOwnerInfo() {
- return getCertInfo.call(this, cryptoCommon.subjectNameTagsTranslations, 'SubjectName');
- };
-
- /**
- * Разбирает IssuerName сертификата по тэгам
- * */
- Certificate.prototype.getIssuerInfo = function getIssuerInfo() {
- return getCertInfo.call(this, cryptoCommon.issuerNameTagsTranslations, 'IssuerName');
- };
-
- /**
- * Получение OID сертификата
- *
- * @returns {Array} Возвращает массив OID (улучшенного ключа)
- * */
- Certificate.prototype.getExtendedKeyUsage = function getExtendedKeyUsage() {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function getExtendedKeyUsage() {
- var OIDS = [],
- count,
- item;
-
- try {
- count = 'yield' + cert.ExtendedKeyUsage();
- count = 'yield' + count.EKUs;
- count = 'yield' + count.Count;
-
- if (count > 0) {
- while (count > 0) {
- item = 'yield' + cert.ExtendedKeyUsage();
- item = 'yield' + item.EKUs;
- item = 'yield' + item.Item(count);
- item = 'yield' + item.OID;
-
- OIDS.push(item);
-
- count--;
- }
- }
- } catch (err) {
- reject('Ошибка при получении ОИД\'ов: ', err.message);
- return;
- }
-
- resolve(OIDS);
- }));
- });
- };
-
- Certificate.prototype.getDecodedExtendedKeyUsage = cryptoCommon.getDecodedExtendedKeyUsage;
-
- Certificate.prototype.hasExtendedKeyUsage = cryptoCommon.hasExtendedKeyUsage;
-
- /**
- * Проверяет корректность настроек ЭП на машине
- * */
- function isValidEDSSettings() {
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function isValidEDSSettings() {
- var result;
-
- try {
- result = 'yield' + cryptoCommon.createObj('CAdESCOM.About');
- } catch (error) {
- reject('Настройки ЭП на данной машине не верны');
- }
-
- resolve();
- }));
- });
- }
-
- /**
- * Получить сертификат в формате cades по хэшу
- * */
- function getCadesCert(hash) {
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function getCadesCert() {
- var oStore,
- certs,
- certCnt,
- cert;
-
- // Получаем доступ к хранилищу
- try {
- oStore = 'yield' + cryptoCommon.createObj('CAdESCOM.Store');
- } catch (err) {
- reject('Ошибка при попытке доступа к хранилищу: ' + err.message);
- return;
- }
-
- if (!oStore) {
- reject('Не удалось получить доступ к хранилищу сертификатов');
- return;
- }
-
- // Открываем хранилище
- try {
- void('yield' + oStore.Open(
- cadesplugin.CAPICOM_CURRENT_USER_STORE,
- cadesplugin.CAPICOM_MY_STORE,
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
- ));
- } catch (err) {
- reject('Ошибка при открытии хранилища: ' + err.message);
- return;
- }
-
- // Получаем доступ к сертификатам
- try {
- certs = 'yield' + oStore.Certificates;
- certCnt = 'yield' + certs.Count;
- } catch (err) {
- reject('Ошибка получения списка сертификатов: ' + err.message);
- return;
- }
-
- if (!certCnt) {
- reject('Нет доступных сертификатов');
- return;
- }
-
- // Получаем сертификат по хэшу
- try {
- certs = 'yield' + certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, hash);
-
- if (certs.Count) {
- cert = 'yield' + certs.Item(1);
- } else {
- throw new Error(hash);
- }
- } catch (err) {
- reject('Не удалось получить сертификат по хэшу: ' + err.message);
- return;
- }
-
- oStore.Close();
-
- resolve(cert);
- }));
- });
- }
-
- /**
- * Разбирает информацию сертификата по тэгам
- * */
- function getCertInfo(tags, propName) {
- var cert = this._cert;
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function getCertInfo() {
- var propInfo;
-
- try {
- propInfo = 'yield' + cert[propName];
- } catch (err) {
- reject('Ошибка при извлечении данных из сертификата: ', err.message);
- return;
- }
-
- resolve(cryptoCommon.parseCertInfo(tags, propInfo));
- }));
- });
- }
-
- /**
- * Возвращает список сертификатов, доступных в системе
- *
- * @param {Boolean} [resetCache=false] -- нужно ли сбросить кэш списка сертификатов
- * @returns {Promise} -- со списком сертификатов {Array}
- * */
- function getCertsList(resetCache) {
- return new Promise(function (resolve, reject) {
- if (!resetCache && _certListCache) {
- resolve(_certListCache);
- return;
- }
-
- eval(cryptoCommon.generateAsyncFn(function getCertsList() {
- var result = [],
- oStore,
- certs,
- count,
- item;
-
- // Получаем доступ к хранилищу
- try {
- oStore = 'yield' + cryptoCommon.createObj('CAdESCOM.Store');
- } catch (err) {
- reject('Ошибка при попытке доступа к хранилищу: ' + err.message);
- return;
- }
-
- // Открываем хранилище
- try {
- void('yield' + oStore.Open(
- cadesplugin.CAPICOM_CURRENT_USER_STORE,
- cadesplugin.CAPICOM_MY_STORE,
- cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
- ));
- } catch (err) {
- reject('Ошибка при открытии хранилища: ' + err.message);
- return;
- }
-
- // Получаем доступ к сертификатам
- try {
- certs = 'yield' + oStore.Certificates;
-
- if (certs) {
- certs = 'yield' + certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID);
- /**
- * Не рассматриваются сертификаты, в которых отсутствует закрытый ключ
- * или не действительны на данный момент
- * */
- certs = 'yield' + certs.Find(
- cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,
- cryptoConstants.PropId.CAPICOM_PROPID_KEY_PROV_INFO
- );
-
- count = 'yield' + certs.Count;
- }
- } catch (err) {
- reject('Ошибка получения списка сертификатов: ' + err.message);
- return;
- }
-
- if (!count) {
- reject('Нет доступных сертификатов');
- return;
- }
-
- try {
- while (count) {
- item = 'yield' + certs.Item(count);
-
- result.push(new Certificate({
- _cert: 'yield' + item,
- thumbprint: 'yield' + item.Thumbprint,
- subjectName: 'yield' + item.SubjectName,
- issuerName: 'yield' + item.IssuerName,
- validFrom: 'yield' + item.ValidFromDate,
- validTo: 'yield' + item.ValidToDate
- }));
-
- count--;
- }
- } catch (err) {
- reject('Ошибка обработки сертификатов: ' + err.message);
- return;
- }
-
- oStore.Close();
-
- _certListCache = cryptoCommon.prepareCertsInfo(result);
-
- resolve(_certListCache);
- }));
- });
- }
-
- /**
- * Получить сертификат по хэшу
- * */
- function getCert(hash) {
- return new Promise(function (resolve, reject) {
- if (!hash) {
- reject('Хэш не указан');
- return;
- }
-
- getCertsList().then(function (list) {
- var foundCert;
-
- list.some(function (cert) {
- if (hash === cert.thumbprint) {
- foundCert = cert;
- return true;
- }
- });
-
- if (foundCert) {
- resolve(foundCert);
- } else {
- reject('Сертификат с хэшем: "' + hash + '" не найден');
- }
- }, reject);
- });
- }
-
- /**
- * Создает подпись base64 строки по hash'у сертификата
- *
- * @param {String} hash -- fingerprint (thumbprint) сертификата
- * @param {String} dataBase64 -- строковые данные в формате base64
- * @param {Boolean} signType -- тип подписи открепленная (true) / присоединенная (false) (default: true)
- * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}
- * */
- function signData(hash, dataBase64, signType) {
- signType = typeof signType === 'undefined' ? true : Boolean(signType);
-
- return new Promise(function (resolve, reject) {
- getCadesCert(hash).then(function (cert) {
- eval(cryptoCommon.generateAsyncFn(function signData() {
- var clientTime = new Date(),
- oAttrs,
- oSignedData,
- oSigner,
- attrs,
- signature;
-
- try {
- oAttrs = 'yield' + cryptoCommon.createObj('CADESCOM.CPAttribute');
- oSignedData = 'yield' + cryptoCommon.createObj('CAdESCOM.CadesSignedData');
- oSigner = 'yield' + cryptoCommon.createObj('CAdESCOM.CPSigner');
- } catch (error) {
- reject('Ошибка при инициализации подписи: ' + err.message);
- return;
- }
-
- clientTime = cryptoCommon.getDateObj(clientTime);
-
- try {
- void('yield' + oAttrs.propset_Name(cryptoConstants.Time.AUTHENTICATED_ATTRIBUTE_SIGNING_TIME));
- void('yield' + oAttrs.propset_Value(clientTime));
- } catch (err) {
- reject('Ошибка при установке данных подписи: ' + err.message);
- return;
- }
-
- // Задаем настройки для подписи
- try {
- void('yield' + oSigner.propset_Certificate(cert));
- attrs = 'yield' + oSigner.AuthenticatedAttributes2;
- void('yield' + attrs.Add(oAttrs));
- void('yield' + oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY));
- void('yield' + oSignedData.propset_Content(dataBase64));
- void('yield' + oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY));
- } catch (err) {
- reject('Не удалось установить настройки для подписи: ' + err.message);
- return;
- }
-
- try {
- signature = 'yield' + oSignedData.SignCades(
- oSigner,
- cadesplugin.CADESCOM_CADES_BES,
- signType
- );
- } catch (err) {
- reject('Не удалось создать подпись: ' + err.message);
- return;
- }
-
- resolve(signature);
- }));
- }, reject);
- });
- }
-
- /**
- * Создает подпись XML строки по hash'у сертификата
- *
- * @param {String} hash -- fingerprint (thumbprint) сертификата
- * @param {String} dataXML -- данные в формате XML
- * @returns {Promise} -- обещание, которое зарезолвится с данными о подписи {String}
- * */
- function signDataXML(hash, dataXML) {
- return new Promise(function (resolve, reject) {
- getCadesCert(hash).then(function (cert) {
- eval(cryptoCommon.generateAsyncFn(function signDataXML() {
- var cnts = cryptoConstants,
- oSigner,
- signerXML,
- signature;
-
- try {
- oSigner = 'yield' + cryptoCommon.createObj('CAdESCOM.CPSigner');
- signerXML = 'yield' + cryptoCommon.createObj('CAdESCOM.SignedXML');
- } catch (err) {
- reject('Ошибка при инициализации подписи: ' + err.message);
- return;
- }
-
- // Задаем настройки для подписи
- try {
- void('yield' + oSigner.propset_Certificate(cert));
- // Добавляем данные для подписи
- void('yield' + signerXML.propset_Content(dataXML));
- // Устанавливаем тип подписи
- void('yield' + signerXML.propset_SignatureType(cnts.SignatureType.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED));
- // Устанавливаем алгоритм подписи
- void('yield' + signerXML.propset_SignatureMethod(cnts.GostXmlDSigUrls.XmlDsigGost3410Url));
- // Устанавливаем алгоритм хэширования
- void('yield' + signerXML.propset_DigestMethod(cnts.GostXmlDSigUrls.XmlDsigGost3411Url));
- } catch (err) {
- reject('Не удалось установить настройки для подписи: ' + err.message);
- return;
- }
-
- try {
- signature = 'yield' + signerXML.Sign(oSigner);
- } catch (err) {
- reject('Не удалось создать подпись: ' + err.message);
- return;
- }
-
- resolve(signature);
- }));
- }, reject);
- });
- }
-
- /**
- * Возвращает информацию о версии CSP и плагина
- * */
- function getSystemInfo() {
- var sysInfo = cryptoCommon.getEnvInfo();
-
- return new Promise(function (resolve, reject) {
- eval(cryptoCommon.generateAsyncFn(function getSystemInfo() {
- var e;
-
- try {
- e = 'yield' + cryptoCommon.createObj('CAdESCOM.About');
-
- sysInfo.cadesVersion = 'yield' + e.PluginVersion;
- // Возможен вызов в ранних версиях в виде sysInfo.cspVersion = 'yield' + e.CSPVersion('', 75);
- sysInfo.cspVersion = 'yield' + e.CSPVersion();
-
- if (!sysInfo.cadesVersion) {
- sysInfo.cadesVersion = 'yield' + e.Version;
- }
-
- sysInfo.cadesVersion = 'yield' + sysInfo.cadesVersion.toString();
- sysInfo.cspVersion = 'yield' + sysInfo.cspVersion.toString();
-
- resolve(sysInfo);
- } catch (err) {
- reject('Ошибка при получении информации о системе: ', err.message);
- }
- }));
- });
- }
-
- /**
- * Promise обертка для синхронного вызова проверки версии CSP
- * */
- function isValidCSPVersion(version) {
- return new Promise(function (resolve) {
- resolve(cryptoCommon.isValidCSPVersion(version));
- });
- }
-
- /**
- * Promise обертка для синхронного вызова проверки версии плагина
- * */
- function isValidCadesVersion(version) {
- return new Promise(function (resolve) {
- resolve(cryptoCommon.isValidCadesVersion(version));
- });
- }
-
- module.exports = {
- isValidEDSSettings: isValidEDSSettings,
- getCertsList: getCertsList,
- getCert: getCert,
- signData: signData,
- signDataXML: signDataXML,
- getSystemInfo: getSystemInfo,
- isValidCSPVersion: isValidCSPVersion,
- isValidCadesVersion: isValidCadesVersion
- };
-
-/***/ },
-/* 3 */
-/***/ function(module, exports, __webpack_require__) {
-
- var bowser = __webpack_require__(4);
- var oids = __webpack_require__(6);
-
- var subjectNameTagsTranslations = [
- {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},
- {possibleNames: ['CN'], translation: 'Владелец'},
- {possibleNames: ['SN'], translation: 'Фамилия'},
- {possibleNames: ['G'], translation: 'Имя Отчество'},
- {possibleNames: ['C'], translation: 'Страна'},
- {possibleNames: ['S'], translation: 'Регион'},
- {possibleNames: ['STREET'], translation: 'Адрес'},
- {possibleNames: ['O'], translation: 'Компания'},
- {possibleNames: ['OU'], translation: 'Отдел/подразделение'},
- {possibleNames: ['T'], translation: 'Должность'},
- {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},
- {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},
- {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},
- {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},
- {possibleNames: ['E'], translation: 'Email'},
- {possibleNames: ['L'], translation: 'Город'}
- ],
-
- issuerNameTagsTranslations = [
- {possibleNames: ['UnstructuredName'], translation: 'Неструктурированное имя'},
- {possibleNames: ['CN'], translation: 'Удостоверяющий центр'},
- {possibleNames: ['S'], translation: 'Регион'},
- {possibleNames: ['C'], translation: 'Страна'},
- {possibleNames: ['STREET'], translation: 'Адрес'},
- {possibleNames: ['O'], translation: 'Компания'},
- {possibleNames: ['OU'], translation: 'Тип'},
- {possibleNames: ['T'], translation: 'Должность'},
- {possibleNames: ['ОГРН', 'OGRN'], translation: 'ОГРН'},
- {possibleNames: ['ОГРНИП', 'OGRNIP'], translation: 'ОГРНИП'},
- {possibleNames: ['СНИЛС', 'SNILS'], translation: 'СНИЛС'},
- {possibleNames: ['ИНН', 'INN'], translation: 'ИНН'},
- {possibleNames: ['E'], translation: 'Email'},
- {possibleNames: ['L'], translation: 'Город'}
- ];
-
- function generateAsyncFn(cb) {
- var canAsync = cadesplugin.CreateObjectAsync;
- var dynamicScriptName = cb.name || 'asyncFn';
-
- cb = String(cb);
-
- var args = cb.match(/^function[\s\w]*?\((.*?)\)/);
-
- args = (args && args[1]) || '';
-
- cb = cb.replace(/^.*?{([\s\S]*?)}$/, '$1');
-
- function GeneratorFunction() {
- return (new Function('', 'return Object.getPrototypeOf(function*(){}).constructor'))();
- }
-
- cb = String(new (canAsync ? GeneratorFunction() : Function)(args, cb));
-
- cb = cb.replace(/cryptoCommon\.createObj(\([\s\S]*?\))/gm, 'cadesplugin.CreateObject' + (canAsync ? 'Async' : '') + '$1');
- cb = cb.replace(/("|')(yield)(\1)\s*?\+\s*?\b/gm, canAsync ? '$2 ' : '');
-
- if (!canAsync) {
- cb = cb.replace(/propset_(.*?)\((.*?)\)/gm, '$1 = $2');
- }
-
- return (canAsync ?
- 'cadesplugin.async_spawn(' + cb + ');'
- : '(' + cb + ')();') + '//# sourceURL=evaled-' + dynamicScriptName + '.js';
- }
-
- /**
- * Парсит информацию из строки с информацией о сертификате
- * */
- function parseCertInfo(tags, infoString) {
- /**
- * Пример входной строки:
- *
-
- T=Генеральный директор, UnstructuredName="INN=7811514257/KPP=781101001/OGRN=1127847087884",
- STREET="Крыленко, д.3, лит.Б", CN=Король Анатолий Евгеньевич, G=Анатолий Евгеньевич, SN=Король,
- OU=Администрация, O="ООО ""Аксиома""", L=Санкт-Петербург, S=78 г. Санкт-Петербург, C=RU, E=korol@sferasro.ru,
- INN=007811514257, OGRN=1127847087884, SNILS=11617693460
-
- * */
- var result = infoString.match(/([а-яА-Яa-zA-Z0-9\.]+)=(?:("[^"]+?")|(.+?))(?:,|$)/g);
-
- if (result) {
- result = result.map(function (group) {
- /**
- * Пример входной строки:
- *
-
- UnstructuredName="INN=7811514257/KPP=781101001/OGRN=1127847087884",
-
- * */
- var parts = group.match(/^([а-яА-Яa-zA-Z0-9\.]+)=(.+?),?$/),
- title = parts && parts[1],
- descr = parts && parts[2],
- translated = false,
- oidTitle;
-
- // Если тайтл содержит ОИД, пытаемся расшифровать
- if (/^OID./.test(title)) {
- oidTitle = title.match(/^OID\.(.*)/);
-
- if (oidTitle && oidTitle[1]) {
- oidTitle = oids[oidTitle[1]];
-
- if (oidTitle) {
- title = oidTitle;
- }
- }
- }
-
- // Вырезаем лишние кавычки
- descr = descr.replace(/^"(.*)"/, '$1');
- descr = descr.replace(/"{2}/g, '"');
-
- tags.some(function (tag) {
- return tag.possibleNames.some(function (possible) {
- var match = possible === title;
-
- if (match) {
- title = tag.translation;
- translated = true;
- }
-
- return match;
- });
- });
-
- return {
- title: title,
- descr: descr,
- translated: translated
- };
- });
- }
-
- return result;
- }
-
- /**
- * Возвращает дату в формате (dd.mm.yyyy hh:mm:ss) из строки, формата, используемого плагином cryptoPro
- * */
- function getReadableDate(date) {
- date = new Date(date);
-
- return ([
- date.getDate(),
- date.getMonth() + 1,
- date.getFullYear()
- ].join('.') + ' ' + [
- date.getHours(),
- date.getMinutes(),
- date.getSeconds()
- ].join(':')).replace(/\b(\d)\b/g, '0$1');
- }
-
- /**
- * Преобразует дату для IE
- * */
- function getDateObj(dateObj) {
- return bowser.msie ? dateObj.getVarDate() : dateObj;
- }
-
- /**
- * Подготавливает информацию о сертификатах
- * */
- function prepareCertsInfo(items) {
- return items.map(function (c) {
- c.name = c.subjectName.match(/CN=(.+?)(?:,|$)/);
-
- // Удалось ли вытащить Common Name
- if (c.name && c.name[1]) {
- c.name = c.name[1];
- }
-
- c.validFrom = getReadableDate(c.validFrom);
- c.validTo = getReadableDate(c.validTo);
-
- c.label = c.name + ' (до ' + c.validTo + ')';
-
- return c;
- });
- }
-
- /**
- * Возвращает расшифрованные ОИД'ы
- * */
- function getDecodedExtendedKeyUsage() {
- var that = this;
-
- return new Promise(function (resolve) {
- that.getExtendedKeyUsage().then(function (certOids) {
- resolve(certOids.reduce(function (oidsLst, oid) {
- oid = {
- id: oid,
- descr: oids[oid] || null
- };
-
- if (oid.descr) {
- oidsLst.unshift(oid);
- } else {
- oidsLst.push(oid);
- }
-
- return oidsLst;
- }, []));
- });
- });
- }
-
- /**
- * Проверка наличия ОИД'а(ОИД'ов) у сертификата
- *
- * @param {String|Array} oids - ОИД'ы для проверки
- * @returns {Promise} с отложенным результатом типа {Boolean}
- * */
- function hasExtendedKeyUsage(oids) {
- var that = this;
-
- return new Promise(function (resolve) {
- that.getExtendedKeyUsage().then(function (certOids) {
- var result;
-
- if (Array.isArray(oids)) {
- result = oids.every(function (oidToCheck) {
- return certOids.some(function (certOid) {
- return certOid === oidToCheck;
- });
- });
- } else {
- result = certOids.some(function (certOid) {
- return certOid === oids;
- });
- }
-
- resolve(result);
- });
- });
- }
-
- /**
- * Выводит информацию о системе пользователя
- * */
- function getEnvInfo() {
- var parsed = bowser._detect(navigator.userAgent),
- info = {
- browserName: parsed.name,
- browserVersion: parsed.version
- };
-
- if (parsed.mac) {
- info.os = 'Mac';
- } else if (parsed.windows) {
- info.os = 'Windows';
- } else if (parsed.linux) {
- info.os = 'Linux';
- }
-
- return info;
- }
-
- /**
- * Подходящая ли версия CSP
- * */
- function isValidCSPVersion(version) {
- version = version.match(/\d+?\b(?:\.\d+)?/);
-
- return version >= 3.6;
- }
-
- /**
- * Подходящая ли версия cades плагина
- * */
- function isValidCadesVersion(version) {
- version = version.split('.').reduce(function (verInfo, number, i) {
- if (i === 0) {
- verInfo.major = number;
- } else if (i === 1) {
- verInfo.minor = number;
- } else if (i === 2) {
- verInfo.patch = number;
- }
-
- return verInfo;
- }, {});
-
- if (version.major < 2) {
- return false;
- }
-
- return version.patch >= 12438;
- }
-
- module.exports = {
- generateAsyncFn: generateAsyncFn,
- subjectNameTagsTranslations: subjectNameTagsTranslations,
- issuerNameTagsTranslations: issuerNameTagsTranslations,
- parseCertInfo: parseCertInfo,
- getReadableDate: getReadableDate,
- getDateObj: getDateObj,
- prepareCertsInfo: prepareCertsInfo,
- getDecodedExtendedKeyUsage: getDecodedExtendedKeyUsage,
- hasExtendedKeyUsage: hasExtendedKeyUsage,
- getEnvInfo: getEnvInfo,
- isValidCSPVersion: isValidCSPVersion,
- isValidCadesVersion: isValidCadesVersion
- };
-
-/***/ },
-/* 4 */
-/***/ function(module, exports, __webpack_require__) {
-
- /*!
- * Bowser - a browser detector
- * https://github.com/ded/bowser
- * MIT License | (c) Dustin Diaz 2015
- */
-
- !function (name, definition) {
- if (typeof module != 'undefined' && module.exports) module.exports = definition()
- else if (true) __webpack_require__(5)(name, definition)
- else this[name] = definition()
- }('bowser', function () {
- /**
- * See useragents.js for examples of navigator.userAgent
- */
-
- var t = true
-
- function detect(ua) {
-
- function getFirstMatch(regex) {
- var match = ua.match(regex);
- return (match && match.length > 1 && match[1]) || '';
- }
-
- function getSecondMatch(regex) {
- var match = ua.match(regex);
- return (match && match.length > 1 && match[2]) || '';
- }
-
- var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
- , likeAndroid = /like android/i.test(ua)
- , android = !likeAndroid && /android/i.test(ua)
- , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
- , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
- , chromeos = /CrOS/.test(ua)
- , silk = /silk/i.test(ua)
- , sailfish = /sailfish/i.test(ua)
- , tizen = /tizen/i.test(ua)
- , webos = /(web|hpw)os/i.test(ua)
- , windowsphone = /windows phone/i.test(ua)
- , samsungBrowser = /SamsungBrowser/i.test(ua)
- , windows = !windowsphone && /windows/i.test(ua)
- , mac = !iosdevice && !silk && /macintosh/i.test(ua)
- , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
- , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
- , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
- , tablet = /tablet/i.test(ua)
- , mobile = !tablet && /[^-]mobi/i.test(ua)
- , xbox = /xbox/i.test(ua)
- , result
-
- if (/opera/i.test(ua)) {
- // an old Opera
- result = {
- name: 'Opera'
- , opera: t
- , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
- }
- } else if (/opr|opios/i.test(ua)) {
- // a new Opera
- result = {
- name: 'Opera'
- , opera: t
- , version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
- }
- }
- else if (/SamsungBrowser/i.test(ua)) {
- result = {
- name: 'Samsung Internet for Android'
- , samsungBrowser: t
- , version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
- }
- }
- else if (/coast/i.test(ua)) {
- result = {
- name: 'Opera Coast'
- , coast: t
- , version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
- }
- }
- else if (/yabrowser/i.test(ua)) {
- result = {
- name: 'Yandex Browser'
- , yandexbrowser: t
- , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
- }
- }
- else if (/ucbrowser/i.test(ua)) {
- result = {
- name: 'UC Browser'
- , ucbrowser: t
- , version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
- }
- }
- else if (/mxios/i.test(ua)) {
- result = {
- name: 'Maxthon'
- , maxthon: t
- , version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
- }
- }
- else if (/epiphany/i.test(ua)) {
- result = {
- name: 'Epiphany'
- , epiphany: t
- , version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
- }
- }
- else if (/puffin/i.test(ua)) {
- result = {
- name: 'Puffin'
- , puffin: t
- , version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
- }
- }
- else if (/sleipnir/i.test(ua)) {
- result = {
- name: 'Sleipnir'
- , sleipnir: t
- , version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
- }
- }
- else if (/k-meleon/i.test(ua)) {
- result = {
- name: 'K-Meleon'
- , kMeleon: t
- , version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
- }
- }
- else if (windowsphone) {
- result = {
- name: 'Windows Phone'
- , windowsphone: t
- }
- if (edgeVersion) {
- result.msedge = t
- result.version = edgeVersion
- }
- else {
- result.msie = t
- result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
- }
- }
- else if (/msie|trident/i.test(ua)) {
- result = {
- name: 'Internet Explorer'
- , msie: t
- , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
- }
- } else if (chromeos) {
- result = {
- name: 'Chrome'
- , chromeos: t
- , chromeBook: t
- , chrome: t
- , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
- }
- } else if (/chrome.+? edge/i.test(ua)) {
- result = {
- name: 'Microsoft Edge'
- , msedge: t
- , version: edgeVersion
- }
- }
- else if (/vivaldi/i.test(ua)) {
- result = {
- name: 'Vivaldi'
- , vivaldi: t
- , version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
- }
- }
- else if (sailfish) {
- result = {
- name: 'Sailfish'
- , sailfish: t
- , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
- }
- }
- else if (/seamonkey\//i.test(ua)) {
- result = {
- name: 'SeaMonkey'
- , seamonkey: t
- , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
- }
- }
- else if (/firefox|iceweasel|fxios/i.test(ua)) {
- result = {
- name: 'Firefox'
- , firefox: t
- , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
- }
- if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
- result.firefoxos = t
- }
- }
- else if (silk) {
- result = {
- name: 'Amazon Silk'
- , silk: t
- , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
- }
- }
- else if (/phantom/i.test(ua)) {
- result = {
- name: 'PhantomJS'
- , phantom: t
- , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
- }
- }
- else if (/slimerjs/i.test(ua)) {
- result = {
- name: 'SlimerJS'
- , slimer: t
- , version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
- }
- }
- else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
- result = {
- name: 'BlackBerry'
- , blackberry: t
- , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
- }
- }
- else if (webos) {
- result = {
- name: 'WebOS'
- , webos: t
- , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
- };
- /touchpad\//i.test(ua) && (result.touchpad = t)
- }
- else if (/bada/i.test(ua)) {
- result = {
- name: 'Bada'
- , bada: t
- , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
- };
- }
- else if (tizen) {
- result = {
- name: 'Tizen'
- , tizen: t
- , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
- };
- }
- else if (/qupzilla/i.test(ua)) {
- result = {
- name: 'QupZilla'
- , qupzilla: t
- , version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
- }
- }
- else if (/chromium/i.test(ua)) {
- result = {
- name: 'Chromium'
- , chromium: t
- , version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
- }
- }
- else if (/chrome|crios|crmo/i.test(ua)) {
- result = {
- name: 'Chrome'
- , chrome: t
- , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
- }
- }
- else if (android) {
- result = {
- name: 'Android'
- , version: versionIdentifier
- }
- }
- else if (/safari|applewebkit/i.test(ua)) {
- result = {
- name: 'Safari'
- , safari: t
- }
- if (versionIdentifier) {
- result.version = versionIdentifier
- }
- }
- else if (iosdevice) {
- result = {
- name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
- }
- // WTF: version is not part of user agent in web apps
- if (versionIdentifier) {
- result.version = versionIdentifier
- }
- }
- else if(/googlebot/i.test(ua)) {
- result = {
- name: 'Googlebot'
- , googlebot: t
- , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
- }
- }
- else {
- result = {
- name: getFirstMatch(/^(.*)\/(.*) /),
- version: getSecondMatch(/^(.*)\/(.*) /)
- };
- }
-
- // set webkit or gecko flag for browsers based on these engines
- if (!result.msedge && /(apple)?webkit/i.test(ua)) {
- if (/(apple)?webkit\/537\.36/i.test(ua)) {
- result.name = result.name || "Blink"
- result.blink = t
- } else {
- result.name = result.name || "Webkit"
- result.webkit = t
- }
- if (!result.version && versionIdentifier) {
- result.version = versionIdentifier
- }
- } else if (!result.opera && /gecko\//i.test(ua)) {
- result.name = result.name || "Gecko"
- result.gecko = t
- result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
- }
-
- // set OS flags for platforms that have multiple browsers
- if (!result.windowsphone && !result.msedge && (android || result.silk)) {
- result.android = t
- } else if (!result.windowsphone && !result.msedge && iosdevice) {
- result[iosdevice] = t
- result.ios = t
- } else if (mac) {
- result.mac = t
- } else if (xbox) {
- result.xbox = t
- } else if (windows) {
- result.windows = t
- } else if (linux) {
- result.linux = t
- }
-
- // OS version extraction
- var osVersion = '';
- if (result.windowsphone) {
- osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
- } else if (iosdevice) {
- osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
- osVersion = osVersion.replace(/[_\s]/g, '.');
- } else if (android) {
- osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
- } else if (result.webos) {
- osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
- } else if (result.blackberry) {
- osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
- } else if (result.bada) {
- osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
- } else if (result.tizen) {
- osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
- }
- if (osVersion) {
- result.osversion = osVersion;
- }
-
- // device type extraction
- var osMajorVersion = osVersion.split('.')[0];
- if (
- tablet
- || nexusTablet
- || iosdevice == 'ipad'
- || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
- || result.silk
- ) {
- result.tablet = t
- } else if (
- mobile
- || iosdevice == 'iphone'
- || iosdevice == 'ipod'
- || android
- || nexusMobile
- || result.blackberry
- || result.webos
- || result.bada
- ) {
- result.mobile = t
- }
-
- // Graded Browser Support
- // http://developer.yahoo.com/yui/articles/gbs
- if (result.msedge ||
- (result.msie && result.version >= 10) ||
- (result.yandexbrowser && result.version >= 15) ||
- (result.vivaldi && result.version >= 1.0) ||
- (result.chrome && result.version >= 20) ||
- (result.samsungBrowser && result.version >= 4) ||
- (result.firefox && result.version >= 20.0) ||
- (result.safari && result.version >= 6) ||
- (result.opera && result.version >= 10.0) ||
- (result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
- (result.blackberry && result.version >= 10.1)
- || (result.chromium && result.version >= 20)
- ) {
- result.a = t;
- }
- else if ((result.msie && result.version < 10) ||
- (result.chrome && result.version < 20) ||
- (result.firefox && result.version < 20.0) ||
- (result.safari && result.version < 6) ||
- (result.opera && result.version < 10.0) ||
- (result.ios && result.osversion && result.osversion.split(".")[0] < 6)
- || (result.chromium && result.version < 20)
- ) {
- result.c = t
- } else result.x = t
-
- return result
- }
-
- var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
-
- bowser.test = function (browserList) {
- for (var i = 0; i < browserList.length; ++i) {
- var browserItem = browserList[i];
- if (typeof browserItem=== 'string') {
- if (browserItem in bowser) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Get version precisions count
- *
- * @example
- * getVersionPrecision("1.10.3") // 3
- *
- * @param {string} version
- * @return {number}
- */
- function getVersionPrecision(version) {
- return version.split(".").length;
- }
-
- /**
- * Array::map polyfill
- *
- * @param {Array} arr
- * @param {Function} iterator
- * @return {Array}
- */
- function map(arr, iterator) {
- var result = [], i;
- if (Array.prototype.map) {
- return Array.prototype.map.call(arr, iterator);
- }
- for (i = 0; i < arr.length; i++) {
- result.push(iterator(arr[i]));
- }
- return result;
- }
-
- /**
- * Calculate browser version weight
- *
- * @example
- * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1
- * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1
- * compareVersions(['1.10.2.1', '1.10.2.1']); // 0
- * compareVersions(['1.10.2.1', '1.0800.2']); // -1
- *
- * @param {Array} versions versions to compare
- * @return {Number} comparison result
- */
- function compareVersions(versions) {
- // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
- var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
- var chunks = map(versions, function (version) {
- var delta = precision - getVersionPrecision(version);
-
- // 2) "9" -> "9.0" (for precision = 2)
- version = version + new Array(delta + 1).join(".0");
-
- // 3) "9.0" -> ["000000000"", "000000009"]
- return map(version.split("."), function (chunk) {
- return new Array(20 - chunk.length).join("0") + chunk;
- }).reverse();
- });
-
- // iterate in reverse order by reversed chunks array
- while (--precision >= 0) {
- // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
- if (chunks[0][precision] > chunks[1][precision]) {
- return 1;
- }
- else if (chunks[0][precision] === chunks[1][precision]) {
- if (precision === 0) {
- // all version chunks are same
- return 0;
- }
- }
- else {
- return -1;
- }
- }
- }
-
- /**
- * Check if browser is unsupported
- *
- * @example
- * bowser.isUnsupportedBrowser({
- * msie: "10",
- * firefox: "23",
- * chrome: "29",
- * safari: "5.1",
- * opera: "16",
- * phantom: "534"
- * });
- *
- * @param {Object} minVersions map of minimal version to browser
- * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
- * @param {String} [ua] user agent string
- * @return {Boolean}
- */
- function isUnsupportedBrowser(minVersions, strictMode, ua) {
- var _bowser = bowser;
-
- // make strictMode param optional with ua param usage
- if (typeof strictMode === 'string') {
- ua = strictMode;
- strictMode = void(0);
- }
-
- if (strictMode === void(0)) {
- strictMode = false;
- }
- if (ua) {
- _bowser = detect(ua);
- }
-
- var version = "" + _bowser.version;
- for (var browser in minVersions) {
- if (minVersions.hasOwnProperty(browser)) {
- if (_bowser[browser]) {
- if (typeof minVersions[browser] !== 'string') {
- throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
- }
-
- // browser version and min supported version.
- return compareVersions([version, minVersions[browser]]) < 0;
- }
- }
- }
-
- return strictMode; // not found
- }
-
- /**
- * Check if browser is supported
- *
- * @param {Object} minVersions map of minimal version to browser
- * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
- * @param {String} [ua] user agent string
- * @return {Boolean}
- */
- function check(minVersions, strictMode, ua) {
- return !isUnsupportedBrowser(minVersions, strictMode, ua);
- }
-
- bowser.isUnsupportedBrowser = isUnsupportedBrowser;
- bowser.compareVersions = compareVersions;
- bowser.check = check;
-
- /*
- * Set our detect method to the main bowser object so we can
- * reuse it to test other user agents.
- * This is needed to implement future tests.
- */
- bowser._detect = detect;
-
- return bowser
- });
-
-
-/***/ },
-/* 5 */
-/***/ function(module, exports) {
-
- module.exports = function() { throw new Error("define cannot be used indirect"); };
-
-
-/***/ },
-/* 6 */
-/***/ function(module, exports) {
-
- module.exports = {
- '1.2.840.113549.1.9.2': 'Неструктурированное имя',
- '1.2.643.3.141.1.1': 'РНС ФСС',
- '1.2.643.3.141.1.2': 'КП ФСС',
- '1.2.643.3.131.1.1': 'ИНН',
- '1.3.6.1.5.5.7.3.2': 'Проверка подлинности клиента',
- '1.3.6.1.5.5.7.3.4': 'Защищенная электронная почта',
- '1.2.643.3.8.100.1': 'Сертификат типа "ekey-ГОСТ"',
- '1.2.643.3.8.100.1.1': 'Общее использование в системах ИОК без права заверения финансовых документов',
- '1.2.643.3.8.100.1.2': 'Передача отчетности по ТКС',
- '1.2.643.3.8.100.1.3': 'Оформление взаимных обязательств, соглашений, договоров, актов и т.п.',
- '1.2.643.3.8.100.1.4': 'Внутрикорпоративный документооборот',
- '1.2.643.3.8.100.1.5': 'Использование в системах электронной торговли',
- '1.2.643.3.8.100.1.6': 'Использование в торгово-закупочной системе "ЭЛЕКТРА"',
- '1.2.643.6.2.1.7.2': 'Использование физическим лицом в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских прав и обязанностей в отношении инвестиционных паев паевых инвестиционных фондов, в том числе отношения, связанные с учетом и/или фиксацией прав на инвестиционные паи паевых инвестиционных фондов',
- '1.2.643.6.2.1.7.1': 'Использование единоличным исполнительным органом юридического лица или уполномоченными представителями юридического лица в отношениях, связанных с возникновением, исполнением (осуществлением) и прекращением гражданских и иных прав и обязанностей в сфере негосударственного пенсионного обеспечения, негосударственного пенсионного страхования, в сфере деятельности паевых инвестиционных фондов, акционерных инвестиционных фондов, профессиональных участников рынка ценных бумаг, а также связанной с обслуживанием указанной деятельности услуг кредитных и иных организаций',
- '1.3.6.1.4.1.29919.21': 'Использование в системе Портал государственных закупок Ростовской области "Рефери".',
- '1.2.643.3.2.100.65.13.11': 'Использование в системе АИС "Госзакупки" Сахалинской области.',
- '1.2.643.3.8.100.1.7': 'Использование в системе Портал государственных закупок Ставропольского края.',
- '1.2.643.3.8.100.1.8': 'Использование в Единой системе электронной торговли B2B-Center и B2G.',
- '1.2.643.3.8.100.1.9': 'Для участия в электронных торгах и подписания государственного контракта в электронной площадке ОАО «ЕЭТП» уполномоченными лицами участников размещения государственного или муниципального заказа',
- '1.2.643.3.8.100.1.10': 'Для участия в электронных торгах и подписания государственного контракта в информационных системах Тендерного комитета города Москвы уполномоченными лицами участников размещения государственного заказа города Москвы',
- '1.2.643.3.8.100.1.11': 'Подписание электронных документов в автоматизированной информационной системе размещения государственного и муниципального заказа Саратовской области',
- '1.2.643.3.8.100.1.12': 'Использование в системе государственного заказа Иркутской области',
- '1.2.643.3.8.100.1.13': 'Использование в электронной торговой площадке агентства государственного заказа Красноярского края',
- '1.3.6.1.4.1.24138.1.1.8.1': 'Обеспечение юридической значимости в Системе "Электронная Торговая Площадка"',
- '1.2.643.3.8.100.1.14': 'Использование в электронной торговой площадке "Тендер"',
- '1.2.643.6.3': 'Использование в электронных торговых системах и в программном обеспечении, связанным с обменом электронных сообщений',
- '1.2.643.2.2.34.6': 'Пользователь Центра Регистрации',
- '1.2.643.2.39.1.1': 'Использование в программных продуктах системы "1С:Предприятие 8"',
- '1.2.643.5.1.24.2.1.3': 'Формирование документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',
- '1.2.643.5.1.24.2.1.3.1': 'Формирование кадастровым инженером документов для получения государственных услуг в сфере ведения государственного кадастра недвижимости со стороны заявителя',
- '1.2.643.5.1.24.2.2.2': 'Формирование документов как результата оказания услуги со стороны органов регистрации прав',
- '1.2.643.5.1.24.2.2.3': 'Формирование документов для получения государственных услуг в сфере государственной регистрации прав на недвижимое имущество и сделок с ним со стороны заявителя',
- '1.2.643.6.3.1.1': 'Использование на электронных площадок отобранных для проведения аукционах в электронной форме',
- '1.2.643.6.3.1.2.1': 'Тип участника - Юридическое лицо',
- '1.2.643.6.3.1.2.2': 'Тип участника - Физическое лицо',
- '1.2.643.6.3.1.2.3': 'Тип участника - Индивидуальный предприниматель',
- '1.2.643.6.3.1.3.1': 'Участник размещения заказа',
- '1.2.643.6.3.1.4.1': 'Администратор организации',
- '1.2.643.6.3.1.4.2': 'Уполномоченный специалист',
- '1.2.643.6.3.1.4.3': 'Специалист с правом подписи контракта',
- '1.3.643.3.8.100.15': 'Использование в ЭТП "uTender"'
- };
-
-/***/ },
-/* 7 */
-/***/ function(module, exports) {
-
- module.exports = {
- // CAPICOM_STORE_LOCATION enumeration
- StoreLocation: {
- CAPICOM_MEMORY_STORE: 0,
- CAPICOM_LOCAL_MACHINE_STORE: 1,
- CAPICOM_CURRENT_USER_STORE: 2,
- CAPICOM_ACTIVE_DIRECTORY_USER_STORE: 3,
- CAPICOM_SMART_CARD_USER_STORE: 4
- },
- // CAPICOM_STORE_OPEN_MODE enumeration
- StoreOpenMode: {
- CAPICOM_STORE_OPEN_READ_ONLY: 0,
- CAPICOM_STORE_OPEN_READ_WRITE: 1,
- CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED: 2,
- CAPICOM_STORE_OPEN_EXISTING_ONLY: 128,
- CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED: 256
- },
- // CAPICOM_CERTIFICATE_FIND_TYPE enumeration
- CertFindType: {
- CAPICOM_CERTIFICATE_FIND_SHA1_HASH: 0,
- CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME: 1,
- CAPICOM_CERTIFICATE_FIND_ISSUER_NAME: 2,
- CAPICOM_CERTIFICATE_FIND_ROOT_NAME: 3,
- CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME: 4,
- CAPICOM_CERTIFICATE_FIND_EXTENSION: 5,
- CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY: 6,
- CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY: 7,
- CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY: 8,
- CAPICOM_CERTIFICATE_FIND_TIME_VALID: 9,
- CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID: 10,
- CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED: 11,
- CAPICOM_CERTIFICATE_FIND_KEY_USAGE: 12
- },
- Time: {
- AUTHENTICATED_ATTRIBUTE_SIGNING_TIME: 0
- },
- Check: {
- CHECK_NONE: 0,
- CHECK_TRUSTED_ROOT: 1,
- CHECK_TIME_VALIDITY: 2,
- CHECK_SIGNATURE_VALIDITY: 4,
- CHECK_ONLINE_REVOCATION_STATUS: 8,
- CHECK_OFFLINE_REVOCATION_STATUS: 16,
- TRUST_IS_NOT_TIME_VALID: 1,
- TRUST_IS_NOT_TIME_NESTED: 2,
- TRUST_IS_REVOKED: 4,
- TRUST_IS_NOT_SIGNATURE_VALID: 8,
- TRUST_IS_NOT_VALID_FOR_USAGE: 16,
- TRUST_IS_UNTRUSTED_ROOT: 32,
- TRUST_REVOCATION_STATUS_UNKNOWN: 64,
- TRUST_IS_CYCLIC: 128,
- TRUST_IS_PARTIAL_CHAIN: 65536,
- TRUST_CTL_IS_NOT_TIME_VALID: 131072,
- TRUST_CTL_IS_NOT_SIGNATURE_VALID: 262144,
- TRUST_CTL_IS_NOT_VALID_FOR_USAGE: 524288,
- },
- // CAPICOM_PROPID enumeration
- PropId: {
- CAPICOM_PROPID_UNKNOWN: 0,
- CAPICOM_PROPID_KEY_PROV_HANDLE: 1,
- CAPICOM_PROPID_KEY_PROV_INFO: 2,
- CAPICOM_PROPID_SHA1_HASH: 3,
- CAPICOM_PROPID_HASH_PROP: 3,
- CAPICOM_PROPID_MD5_HASH: 4,
- CAPICOM_PROPID_KEY_CONTEXT: 5,
- CAPICOM_PROPID_KEY_SPEC: 6,
- CAPICOM_PROPID_IE30_RESERVED: 7,
- CAPICOM_PROPID_PUBKEY_HASH_RESERVED: 8,
- CAPICOM_PROPID_ENHKEY_USAGE: 9,
- CAPICOM_PROPID_CTL_USAGE: 9,
- CAPICOM_PROPID_NEXT_UPDATE_LOCATION: 10,
- CAPICOM_PROPID_FRIENDLY_NAME: 11,
- CAPICOM_PROPID_PVK_FILE: 12,
- CAPICOM_PROPID_DESCRIPTION: 13,
- CAPICOM_PROPID_ACCESS_STATE: 14,
- CAPICOM_PROPID_SIGNATURE_HASH: 15,
- CAPICOM_PROPID_SMART_CARD_DATA: 16,
- CAPICOM_PROPID_EFS: 17,
- CAPICOM_PROPID_FORTEZZA_DATA: 18,
- CAPICOM_PROPID_ARCHIVED: 19,
- CAPICOM_PROPID_KEY_IDENTIFIER: 20,
- CAPICOM_PROPID_AUTO_ENROLL: 21,
- CAPICOM_PROPID_PUBKEY_ALG_PARA: 22,
- CAPICOM_PROPID_CROSS_CERT_DIST_POINTS: 23,
- CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH: 24,
- CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH: 25,
- CAPICOM_PROPID_ENROLLMENT: 26,
- CAPICOM_PROPID_DATE_STAMP: 27,
- CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH: 28,
- CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH: 29,
- CAPICOM_PROPID_EXTENDED_ERROR_INFO: 30,
- CAPICOM_PROPID_RENEWAL: 64,
- CAPICOM_PROPID_ARCHIVED_KEY_HASH: 65,
- CAPICOM_PROPID_FIRST_RESERVED: 66,
- CAPICOM_PROPID_LAST_RESERVED: 0x00007FFF,
- CAPICOM_PROPID_FIRST_USER: 0x00008000,
- CAPICOM_PROPID_LAST_USER: 0x0000FFFF
- },
- // CADESCOM_XML_SIGNATURE_TYPE enumeration
- SignatureType: {
- CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED: 0,
- CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING: 1,
- CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE: 2
- },
- // CADESCOM_HASH_ALGORITHM enumeration
- HashAlgorithm: {
- CADESCOM_HASH_ALGORITHM_CP_GOST_3411: 100,
- CADESCOM_HASH_ALGORITHM_MD2: 1,
- CADESCOM_HASH_ALGORITHM_MD4: 2,
- CADESCOM_HASH_ALGORITHM_MD5: 3,
- CADESCOM_HASH_ALGORITHM_SHA_256: 4,
- CADESCOM_HASH_ALGORITHM_SHA_384: 5,
- CADESCOM_HASH_ALGORITHM_SHA_512: 6,
- CADESCOM_HASH_ALGORITHM_SHA1: 0
- },
- CadesType: {
- CADESCOM_CADES_DEFAULT: 0,
- CADESCOM_CADES_BES: 1,
- CADESCOM_CADES_X_LONG_TYPE_1: 0x5d
- },
- ContentEncoding: {
- CADESCOM_BASE64_TO_BINARY: 0x01,
- CADESCOM_STRING_TO_UCS2LE: 0x00
- },
- StoreNames: {
- CAPICOM_MY_STORE: 'My'
- },
- Chain: {
- CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT: 0,
- CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN: 1,
- CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY: 2
- },
- GostXmlDSigUrls: {
- XmlDsigGost3410Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411',
- XmlDsigGost3411Url: 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411',
- XmlDsigGost3410UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411',
- XmlDsigGost3411UrlObsolete: 'http://www.w3.org/2001/04/xmldsig-more#gostr3411'
- }
- };
-
-/***/ }
-/******/ ]);
-//# sourceMappingURL=crypto-pro.js.map
\ No newline at end of file
diff --git a/dist/crypto-pro.js.map b/dist/crypto-pro.js.map
deleted file mode 100644
index 6a05622..0000000
--- a/dist/crypto-pro.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 6cc881294ca2406ad20a","webpack:///./index.js","webpack:///./vendor/cadesplugin_api.js","webpack:///./api.js","webpack:///./common.js","webpack:///../~/bowser/bowser.js","webpack:///../~/webpack/buildin/amd-define.js","webpack:///./oids.js","webpack:///./constants.js"],"names":[],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA,G;;;;;;AC3EA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0DAAyD;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C,iBAAiB,WAAW,UAAU,YAAY,aAAa;AAC3G,sFAAqF,aAAa,mBAAmB,uBAAuB,uBAAuB,cAAc,mBAAmB,YAAY;AAChN,6EAA4E,iBAAiB,yBAAyB,WAAW;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAgD,iBAAiB,WAAW,UAAU,YAAY,aAAa;AAC/G,0FAAyF,aAAa,mBAAmB,uBAAuB,uBAAuB,cAAc,mBAAmB,YAAY;AACpN,iFAAgF,iBAAiB,yBAAyB,WAAW;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB,qCAAoC;AACpC,kBAAiB;AACjB;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,kBAAiB;AACjB,cAAa;AACb,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAC;;;;;;;AC5tBD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B;AAC3B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,cAAa,QAAQ,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;;AAErB;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,QAAQ,wDAAwD;AAC7E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,QAAQ,wDAAwD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACzkBA;AACA;;AAEA;AACA,UAAS,4EAA4E;AACrF,UAAS,+CAA+C;AACxD,UAAS,8CAA8C;AACvD,UAAS,kDAAkD;AAC3D,UAAS,4CAA4C;AACrD,UAAS,4CAA4C;AACrD,UAAS,gDAAgD;AACzD,UAAS,8CAA8C;AACvD,UAAS,0DAA0D;AACnE,UAAS,+CAA+C;AACxD,UAAS,qDAAqD;AAC9D,UAAS,2DAA2D;AACpE,UAAS,wDAAwD;AACjE,UAAS,kDAAkD;AAC3D,UAAS,2CAA2C;AACpD,UAAS;AACT;;AAEA;AACA,UAAS,4EAA4E;AACrF,UAAS,2DAA2D;AACpE,UAAS,4CAA4C;AACrD,UAAS,4CAA4C;AACrD,UAAS,gDAAgD;AACzD,UAAS,8CAA8C;AACvD,UAAS,0CAA0C;AACnD,UAAS,+CAA+C;AACxD,UAAS,qDAAqD;AAC9D,UAAS,2DAA2D;AACpE,UAAS,wDAAwD;AACjE,UAAS,kDAAkD;AAC3D,UAAS,2CAA2C;AACpD,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,2BAA0B,WAAW;;AAErC;AACA,6EAA4E;AAC5E;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C,2BAA0B;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC,EAAE;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA,cAAa;AACb,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,cAAa,QAAQ,gCAAgC;AACrD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB;AACrB,kBAAiB;AACjB,cAAa;AACb;AACA;AACA,kBAAiB;AACjB;;AAEA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;;AAEA;AACA,MAAK,IAAI;;AAET;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACpTA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;AACA,oBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,OAAO;AACrB,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,MAAM;AACpB,eAAc,SAAS;AACvB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,gBAAgB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sDAAqD;AACrD,mDAAkD;AAClD,mDAAkD;AAClD;AACA,eAAc,cAAc;AAC5B,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA,eAAc,OAAO;AACrB,eAAc,QAAQ;AACtB,eAAc,OAAO;AACrB,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAsB;AACtB;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,eAAc,QAAQ;AACtB,eAAc,OAAO;AACrB,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;ACnkBD,8BAA6B,mDAAmD;;;;;;;ACAhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,G","file":"crypto-pro.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 6cc881294ca2406ad20a\n **/","require('./vendor/cadesplugin_api');\n\nvar global = Function('return this')(),\n canPromise = Boolean(global.Promise),\n cadesplugin = global.cadesplugin,\n cryptoService = require('./api'),\n errorMsg = '',\n loadedPlugin = false,\n onLoadCallbacs = [],\n\n execOnloadQueue = function execOnloadQueue() {\n onLoadCallbacs.forEach(function (callback) {\n callback();\n });\n },\n\n passToWaitOnLoad = function passToWaitOnLoad(callback) {\n if (Object.prototype.toString.call(callback) === '[object Function]') {\n onLoadCallbacs.push(callback);\n }\n },\n\n callOnLoad = function callOnLoad(method) {\n loadedPlugin ? method() : passToWaitOnLoad(method);\n },\n\n finishLoading = function finishLoading() {\n loadedPlugin = true;\n\n execOnloadQueue();\n },\n\n call = function call() {\n var args = Array.prototype.slice.call(arguments),\n methodName = args.shift();\n\n return new Promise(function (resolve, reject) {\n callOnLoad(function () {\n var method;\n\n if (errorMsg) {\n reject(errorMsg);\n return;\n }\n\n method = cryptoService[methodName];\n\n if (!method) {\n reject('Метод \"' + methodName + '\" не доступен');\n return;\n }\n\n method.apply(null, args).then(resolve, reject);\n });\n });\n };\n\nif (cadesplugin) {\n // Уровень отладки (LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_ERROR)\n cadesplugin.set_log_level(cadesplugin.LOG_LEVEL_ERROR);\n\n if (canPromise) {\n cadesplugin.then(finishLoading, function () {\n errorMsg = 'КриптоПРО ЭЦП Browser Plug-In не доступен';\n finishLoading();\n });\n } else {\n throw new Error('Не поддерживаются промисы. Необходим полифилл.');\n }\n} else {\n throw new Error('Не подключен модуль для работы с cades plugin');\n}\n\nmodule.exports = {\n call: call\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/",";(function () {\n //already loaded\n if(window.cadesplugin)\n return;\n\n var pluginObject;\n var plugin_resolved = 0;\n var plugin_reject;\n var plugin_resolve;\n var isOpera = 0;\n var isFireFox = 0;\n var isEdge = 0;\n var isSafari = 0;\n var failed_extensions = 0;\n\n var canPromise = !!window.Promise;\n var cadesplugin;\n\n if(canPromise)\n {\n cadesplugin = new Promise(function(resolve, reject)\n {\n plugin_resolve = resolve;\n plugin_reject = reject;\n });\n } else\n {\n cadesplugin = {};\n }\n\n function check_browser() {\n var ua= navigator.userAgent, tem, M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if(/trident/i.test(M[1])){\n tem= /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {name:'IE',version:(tem[1] || '')};\n }\n if(M[1]=== 'Chrome'){\n tem= ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if(tem!= null) return {name:tem[1].replace('OPR', 'Opera'),version:tem[2]};\n }\n M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];\n if((tem= ua.match(/version\\/(\\d+)/i))!= null) M.splice(1, 1, tem[1]);\n return {name:M[0],version:M[1]};\n }\n var browserSpecs = check_browser();\n\n function cpcsp_console_log(level, msg){\n //IE9 не может писать в консоль если не открыта вкладка developer tools\n if(typeof(console) === 'undefined')\n return;\n if (level <= cadesplugin.current_log_level ){\n if (level === cadesplugin.LOG_LEVEL_DEBUG)\n console.log(\"DEBUG: %s\", msg);\n if (level === cadesplugin.LOG_LEVEL_INFO)\n console.info(\"INFO: %s\", msg);\n if (level === cadesplugin.LOG_LEVEL_ERROR)\n console.error(\"ERROR: %s\", msg);\n return;\n }\n }\n\n function set_log_level(level){\n if (!((level === cadesplugin.LOG_LEVEL_DEBUG) ||\n (level === cadesplugin.LOG_LEVEL_INFO) ||\n (level === cadesplugin.LOG_LEVEL_ERROR))){\n cpcsp_console_log(cadesplugin.LOG_LEVEL_ERROR, \"cadesplugin_api.js: Incorrect log_level: \" + level);\n return;\n }\n cadesplugin.current_log_level = level;\n if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_DEBUG)\n cpcsp_console_log(cadesplugin.LOG_LEVEL_INFO, \"cadesplugin_api.js: log_level = DEBUG\");\n if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_INFO)\n cpcsp_console_log(cadesplugin.LOG_LEVEL_INFO, \"cadesplugin_api.js: log_level = INFO\");\n if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_ERROR)\n cpcsp_console_log(cadesplugin.LOG_LEVEL_INFO, \"cadesplugin_api.js: log_level = ERROR\");\n if(isNativeMessageSupported())\n {\n if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_DEBUG)\n window.postMessage(\"set_log_level=debug\", \"*\");\n if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_INFO)\n window.postMessage(\"set_log_level=info\", \"*\");\n if (cadesplugin.current_log_level === cadesplugin.LOG_LEVEL_ERROR)\n window.postMessage(\"set_log_level=error\", \"*\");\n }\n }\n\n function set_constantValues()\n {\n cadesplugin.CAPICOM_LOCAL_MACHINE_STORE = 1;\n cadesplugin.CAPICOM_CURRENT_USER_STORE = 2;\n cadesplugin.CADESCOM_LOCAL_MACHINE_STORE = 1;\n cadesplugin.CADESCOM_CURRENT_USER_STORE = 2;\n cadesplugin.CADESCOM_CONTAINER_STORE = 100;\n\n cadesplugin.CAPICOM_MY_STORE = \"My\";\n\n cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;\n\n cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;\n\n cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED = 0;\n cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING = 1;\n cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE = 2;\n\n cadesplugin.XmlDsigGost3410UrlObsolete = \"http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411\";\n cadesplugin.XmlDsigGost3411UrlObsolete = \"http://www.w3.org/2001/04/xmldsig-more#gostr3411\";\n cadesplugin.XmlDsigGost3410Url = \"urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411\";\n cadesplugin.XmlDsigGost3411Url = \"urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411\";\n\n cadesplugin.CADESCOM_CADES_DEFAULT = 0;\n cadesplugin.CADESCOM_CADES_BES = 1;\n cadesplugin.CADESCOM_CADES_T = 0x5;\n cadesplugin.CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;\n cadesplugin.CADESCOM_PKCS7_TYPE = 0xffff;\n\n cadesplugin.CADESCOM_ENCODE_BASE64 = 0;\n cadesplugin.CADESCOM_ENCODE_BINARY = 1;\n cadesplugin.CADESCOM_ENCODE_ANY = -1;\n\n cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT = 0;\n cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1;\n cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY = 2;\n\n cadesplugin.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME = 0;\n cadesplugin.CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME = 1;\n\n cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_ISSUER_NAME = 2;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_ROOT_NAME = 3;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME = 4;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENSION = 5;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY = 7;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY = 8;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID = 10;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED = 11;\n cadesplugin.CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12;\n\n cadesplugin.CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 128;\n\n cadesplugin.CAPICOM_PROPID_ENHKEY_USAGE = 9;\n\n cadesplugin.CAPICOM_OID_OTHER = 0;\n cadesplugin.CAPICOM_OID_KEY_USAGE_EXTENSION = 10;\n\n cadesplugin.CAPICOM_EKU_CLIENT_AUTH = 2;\n cadesplugin.CAPICOM_EKU_SMARTCARD_LOGON = 5;\n cadesplugin.CAPICOM_EKU_OTHER = 0;\n\n cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;\n cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;\n cadesplugin.CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;\n cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;\n cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;\n cadesplugin.CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;\n cadesplugin.CADESCOM_ATTRIBUTE_OTHER = -1;\n\n cadesplugin.CADESCOM_STRING_TO_UCS2LE = 0;\n cadesplugin.CADESCOM_BASE64_TO_BINARY = 1;\n\n cadesplugin.CADESCOM_DISPLAY_DATA_NONE = 0;\n cadesplugin.CADESCOM_DISPLAY_DATA_CONTENT = 1;\n cadesplugin.CADESCOM_DISPLAY_DATA_ATTRIBUTE = 2;\n\n cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_RC2 = 0;\n cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_RC4 = 1;\n cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_DES = 2;\n cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_3DES = 3;\n cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_AES = 4;\n cadesplugin.CADESCOM_ENCRYPTION_ALGORITHM_GOST_28147_89 = 25;\n\n cadesplugin.CADESCOM_HASH_ALGORITHM_SHA1 = 0;\n cadesplugin.CADESCOM_HASH_ALGORITHM_MD2 = 1;\n cadesplugin.CADESCOM_HASH_ALGORITHM_MD4 = 2;\n cadesplugin.CADESCOM_HASH_ALGORITHM_MD5 = 3;\n cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_256 = 4;\n cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_384 = 5;\n cadesplugin.CADESCOM_HASH_ALGORITHM_SHA_512 = 6;\n cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;\n cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;\n cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512 = 102;\n cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_HMAC = 110;\n cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256_HMAC = 111;\n cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512_HMAC = 112;\n\n cadesplugin.LOG_LEVEL_DEBUG = 4;\n cadesplugin.LOG_LEVEL_INFO = 2;\n cadesplugin.LOG_LEVEL_ERROR = 1;\n\n cadesplugin.CADESCOM_AllowNone = 0;\n cadesplugin.CADESCOM_AllowNoOutstandingRequest = 0x1;\n cadesplugin.CADESCOM_AllowUntrustedCertificate = 0x2;\n cadesplugin.CADESCOM_AllowUntrustedRoot = 0x4;\n cadesplugin.CADESCOM_SkipInstallToStore = 0x10000000;\n }\n\n function async_spawn(generatorFunc) {\n function continuer(verb, arg) {\n var result;\n try {\n result = generator[verb](arg);\n } catch (err) {\n return Promise.reject(err);\n }\n if (result.done) {\n return result.value;\n } else {\n return Promise.resolve(result.value).then(onFulfilled, onRejected);\n }\n }\n var generator = generatorFunc(Array.prototype.slice.call(arguments, 1));\n var onFulfilled = continuer.bind(continuer, \"next\");\n var onRejected = continuer.bind(continuer, \"throw\");\n return onFulfilled();\n }\n\n function isIE() {\n // var retVal = ((\"Microsoft Internet Explorer\" == navigator.appName) || // IE < 11\n // navigator.userAgent.match(/Trident\\/./i)); // IE 11\n return (browserSpecs.name === 'IE' || browserSpecs.name === 'MSIE');\n }\n\n function isIOS() {\n return (navigator.userAgent.match(/ipod/i) ||\n navigator.userAgent.match(/ipad/i) ||\n navigator.userAgent.match(/iphone/i));\n }\n\n function isNativeMessageSupported()\n {\n // В IE работаем через NPAPI\n if(isIE())\n return false;\n // В Edge работаем через NativeMessage\n if(browserSpecs.name === 'Edge') {\n isEdge = true;\n return true;\n }\n // В Chrome, Firefox, Safari и Opera работаем через асинхронную версию в зависимости от версии\n if(browserSpecs.name === 'Opera') {\n isOpera = true;\n if(browserSpecs.version >= 33){\n return true;\n }\n else{\n return false;\n }\n }\n if(browserSpecs.name === 'Firefox') {\n isFireFox = true;\n if(browserSpecs.version >= 52){\n return true;\n }\n else{\n return false;\n }\n }\n if(browserSpecs.name === 'Chrome') {\n if(browserSpecs.version >= 42){\n return true;\n }\n else{\n return false;\n }\n }\n //В Сафари начиная с 12 версии нет NPAPI\n if(browserSpecs.name === 'Safari') {\n isSafari = true;\n if(browserSpecs.version >= 12) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n // Функция активации объектов КриптоПро ЭЦП Browser plug-in\n function CreateObject(name) {\n if (isIOS()) {\n // На iOS для создания объектов используется функция\n // call_ru_cryptopro_npcades_10_native_bridge, определенная в IOS_npcades_supp.js\n return call_ru_cryptopro_npcades_10_native_bridge(\"CreateObject\", [name]);\n }\n if (isIE()) {\n // В Internet Explorer создаются COM-объекты\n if (name.match(/X509Enrollment/i)) {\n try {\n // Объекты CertEnroll пробуем создавать через нашу фабрику,\n // если не получилось то через CX509EnrollmentWebClassFactory\n var objCertEnrollClassFactory = document.getElementById(\"webClassFactory\");\n return objCertEnrollClassFactory.CreateObject(name);\n }\n catch (e) {\n try {\n var objWebClassFactory = document.getElementById(\"certEnrollClassFactory\");\n return objWebClassFactory.CreateObject(name);\n }\n catch (err) {\n throw (\"Для создания обьектов X509Enrollment следует настроить веб-узел на использование проверки подлинности по протоколу HTTPS\");\n }\n }\n }\n // Объекты CAPICOM и CAdESCOM создаются через CAdESCOM.WebClassFactory\n try {\n var objWebClassFactory = document.getElementById(\"webClassFactory\");\n return objWebClassFactory.CreateObject(name);\n }\n catch (e) {\n // Для версий плагина ниже 2.0.12538\n return new ActiveXObject(name);\n }\n }\n // создаются объекты NPAPI\n return pluginObject.CreateObject(name);\n }\n\n function decimalToHexString(number) {\n if (number < 0) {\n number = 0xFFFFFFFF + number + 1;\n }\n\n return number.toString(16).toUpperCase();\n }\n\n function GetMessageFromException(e) {\n var err = e.message;\n if (!err) {\n err = e;\n } else if (e.number) {\n err += \" (0x\" + decimalToHexString(e.number) + \")\";\n }\n return err;\n }\n\n function getLastError(exception) {\n if(isNativeMessageSupported() || isIE() || isIOS() ) {\n return GetMessageFromException(exception);\n }\n\n try {\n return pluginObject.getLastError();\n } catch(e) {\n return GetMessageFromException(exception);\n }\n }\n\n // Функция для удаления созданных объектов\n function ReleasePluginObjects() {\n return cpcsp_chrome_nmcades.ReleasePluginObjects();\n }\n\n // Функция активации асинхронных объектов КриптоПро ЭЦП Browser plug-in\n function CreateObjectAsync(name) {\n return pluginObject.CreateObjectAsync(name);\n }\n\n //Функции для IOS\n var ru_cryptopro_npcades_10_native_bridge = {\n callbacksCount : 1,\n callbacks : {},\n\n // Automatically called by native layer when a result is available\n resultForCallback : function resultForCallback(callbackId, resultArray) {\n var callback = ru_cryptopro_npcades_10_native_bridge.callbacks[callbackId];\n if (!callback) return;\n callback.apply(null,resultArray);\n },\n\n // Use this in javascript to request native objective-c code\n // functionName : string (I think the name is explicit :p)\n // args : array of arguments\n // callback : function with n-arguments that is going to be called when the native code returned\n call : function call(functionName, args, callback) {\n var hasCallback = callback && typeof callback === \"function\";\n var callbackId = hasCallback ? ru_cryptopro_npcades_10_native_bridge.callbacksCount++ : 0;\n\n if (hasCallback)\n ru_cryptopro_npcades_10_native_bridge.callbacks[callbackId] = callback;\n\n var iframe = document.createElement(\"IFRAME\");\n var arrObjs = new Array(\"_CPNP_handle\");\n try{\n iframe.setAttribute(\"src\", \"cpnp-js-call:\" + functionName + \":\" + callbackId+ \":\" + encodeURIComponent(JSON.stringify(args, arrObjs)));\n } catch(e){\n alert(e);\n }\n document.documentElement.appendChild(iframe);\n iframe.parentNode.removeChild(iframe);\n iframe = null;\n }\n };\n\n function call_ru_cryptopro_npcades_10_native_bridge(functionName, array){\n var tmpobj;\n var ex;\n ru_cryptopro_npcades_10_native_bridge.call(functionName, array, function(e, response){\n ex = e;\n var str='tmpobj='+response;\n eval(str);\n if (typeof (tmpobj) === \"string\"){\n tmpobj = tmpobj.replace(/\\\\\\n/gm, \"\\n\");\n tmpobj = tmpobj.replace(/\\\\\\r/gm, \"\\r\");\n }\n });\n if(ex)\n throw ex;\n return tmpobj;\n }\n\n function show_firefox_missing_extension_dialog()\n {\n if (!window.cadesplugin_skip_extension_install)\n {\n var ovr = document.createElement('div');\n ovr.id = \"cadesplugin_ovr\";\n ovr.style = \"visibility: hidden; position: fixed; left: 0px; top: 0px; width:100%; height:100%; background-color: rgba(0,0,0,0.7)\";\n ovr.innerHTML = \"
\" +\n \"\" +\n \"
Для работы КриптоПро ЭЦП Browser plugin на данном сайте необходимо расширение для браузера. Убедитесь, что оно у Вас включено или установите его.\" +\n \"