mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2024-11-23 16:44:59 +03:00
commit
d8f2ba6c23
249
README.md
249
README.md
@ -2,21 +2,19 @@
|
|||||||
[![NPM downloads][npm-downloads-image]][downloads-url]
|
[![NPM downloads][npm-downloads-image]][downloads-url]
|
||||||
[![Build Status][travis-image]][travis-url]
|
[![Build Status][travis-image]][travis-url]
|
||||||
[![Coverage Status][coveralls-image]][coveralls-url]
|
[![Coverage Status][coveralls-image]][coveralls-url]
|
||||||
[![Examples][examples-image]][examples-url]
|
|
||||||
[![Donate][donate-image]][donate-url]
|
|
||||||
<a href="https://www.jetbrains.com/?from=crypto-pro" title="При поддержке Jetbrains"><img src="resources/logo-webstorm.svg" height="20"></a>
|
|
||||||
|
|
||||||
<a name="cryptopro"></a>
|
<a name="cryptopro"></a>
|
||||||
# cryptoPro
|
# cryptoPro
|
||||||
Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In
|
Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In
|
||||||
|
|
||||||
|
> :warning: **Это форк проекта [vgoma/crypto-pro](https://github.com/vgoma/crypto-pro)**
|
||||||
|
>
|
||||||
|
> :warning: **API форка отличается от оригинала**: внимательно читайте README
|
||||||
|
|
||||||
| [![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/chrome/chrome_64x64.png)](https://www.chromium.org/getting-involved/download-chromium#TOC-Downloading-old-builds-of-Chrome-Chromium) | [![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/firefox/firefox_64x64.png)](https://ftp.mozilla.org/pub/firefox/releases/) | [![IE](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/archive/internet-explorer_9-11/internet-explorer_9-11_64x64.png)](https://www.microsoft.com/ru-ru/download/details.aspx?id=43374) | [![Opera](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/opera/opera_64x64.png)](http://get.opera.com/ftp/pub/opera/desktop/) |
|
| [![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/chrome/chrome_64x64.png)](https://www.chromium.org/getting-involved/download-chromium#TOC-Downloading-old-builds-of-Chrome-Chromium) | [![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/firefox/firefox_64x64.png)](https://ftp.mozilla.org/pub/firefox/releases/) | [![IE](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/archive/internet-explorer_9-11/internet-explorer_9-11_64x64.png)](https://www.microsoft.com/ru-ru/download/details.aspx?id=43374) | [![Opera](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/opera/opera_64x64.png)](http://get.opera.com/ftp/pub/opera/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) | __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) | __v9+__ с установленным [КриптоПро ЭЦП Browser plug-in](https://www.cryptopro.ru/products/cades/plugin) | __v40+__ с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://addons.opera.com/en/extensions/details/cryptopro-extension-for-cades-browser-plug-in/) |
|
| __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) | __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) | __v9+__ с установленным [КриптоПро ЭЦП Browser plug-in](https://www.cryptopro.ru/products/cades/plugin) | __v40+__ с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://addons.opera.com/en/extensions/details/cryptopro-extension-for-cades-browser-plug-in/) |
|
||||||
|
|
||||||
[![demo.gif](resources/demo.gif)](#example-script-tag)
|
|
||||||
[![gosuslugi-demo-result.png](resources/gosuslugi-demo-result.png)](#example-script-tag)
|
|
||||||
[![gosuslugi-signature-types.png](resources/gosuslugi-signature-types.png)](#example-script-tag)
|
|
||||||
|
|
||||||
- [cryptoPro](#cryptopro)
|
- [cryptoPro](#cryptopro)
|
||||||
- [Зачем мне этот пакет?](#why)
|
- [Зачем мне этот пакет?](#why)
|
||||||
@ -29,17 +27,11 @@
|
|||||||
- [Тэг script (UMD)](#example-script-tag)
|
- [Тэг script (UMD)](#example-script-tag)
|
||||||
- [Angular (ES Modules + Typescript)](#example-angular)
|
- [Angular (ES Modules + Typescript)](#example-angular)
|
||||||
- [React (ES Modules + JavaScript)](#example-react)
|
- [React (ES Modules + JavaScript)](#example-react)
|
||||||
- [Миграция с версии 1 на 2](#upgrade-from-1-to-2)
|
|
||||||
- [Тем, кто хочет помочь](#developers)
|
- [Тем, кто хочет помочь](#developers)
|
||||||
- [Запуск режима разработки](#dev-mode)
|
- [Запуск режима разработки](#dev-mode)
|
||||||
- [Запуск тестов](#tests-execution)
|
- [Запуск тестов](#tests-execution)
|
||||||
- [Проверка работы примеров с React и Angular](#examples-testing)
|
- [Проверка работы примеров с React и Angular](#examples-testing)
|
||||||
- [Проверка пакета перед публикацией в NPM](#final-check)
|
- [Проверка пакета перед публикацией в NPM](#final-check)
|
||||||
- [Полезная информация](#helpful)
|
|
||||||
- [Установка КриптоПРО CSP в Linux / OSX](#csp-install-linux-osx)
|
|
||||||
- [Установка КриптоПРО ЭЦП browser plug-in в Linux](#plugin-install-linux)
|
|
||||||
- [Настройка плагина для Firefox (до версии 52)](#plugin-install-old-firefox)
|
|
||||||
- [Установка сертификатов в Linux](#certificates-install-linux)
|
|
||||||
- [Лицензия](#lisense)
|
- [Лицензия](#lisense)
|
||||||
|
|
||||||
<a name="why"></a>
|
<a name="why"></a>
|
||||||
@ -47,15 +39,6 @@
|
|||||||
КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях.
|
КриптоПРО ЭЦП 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):
|
|
||||||
|
|
||||||
![example-umd.gif](resources/example-umd-js.gif)
|
|
||||||
|
|
||||||
или это (ES Modules + Typescript):
|
|
||||||
|
|
||||||
![example-esm.gif](resources/example-esm-ts.gif)
|
|
||||||
|
|
||||||
<a name="install"></a>
|
<a name="install"></a>
|
||||||
## Установка
|
## Установка
|
||||||
@ -116,11 +99,10 @@ import { getUserCertificates, Certificate } from 'crypto-pro';
|
|||||||
- [getCertificate](src/api/getCertificate.ts) - возвращает [сертификат](#api-certificate) по отпечатку
|
- [getCertificate](src/api/getCertificate.ts) - возвращает [сертификат](#api-certificate) по отпечатку
|
||||||
- [createAttachedSignature](src/api/createAttachedSignature.ts) - создает совмещенную (присоединенную) подпись сообщения
|
- [createAttachedSignature](src/api/createAttachedSignature.ts) - создает совмещенную (присоединенную) подпись сообщения
|
||||||
- [createDetachedSignature](src/api/createDetachedSignature.ts) - создает отсоединенную (открепленную) подпись сообщения
|
- [createDetachedSignature](src/api/createDetachedSignature.ts) - создает отсоединенную (открепленную) подпись сообщения
|
||||||
|
- [addAttachedSignature](src/api/addAttachedSignature.ts) - добавляет совмещенную (присоединенную) подпись к раннее подписанному документу (реализует метод coSign)
|
||||||
|
- [addDetachedSignature](src/api/addDetachedSignature.ts) - добавляет отсоединенную (открепленную) подпись к раннее подписанному документу (реализует метод coSign)
|
||||||
- [createXMLSignature](src/api/createXMLSignature.ts) - создает XML подпись для документа в формате XML
|
- [createXMLSignature](src/api/createXMLSignature.ts) - создает XML подпись для документа в формате XML
|
||||||
- [createHash](src/api/createHash.ts) - создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
- [createHash](src/api/createHash.ts) - создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
||||||
- [createSignature](src/api/createSignature.ts) - создает подпись сообщения
|
|
||||||
> Является устаревшим и будет убран из будущих версий.
|
|
||||||
Используйте "createAttachedSignature" и "createDetachedSignature".
|
|
||||||
- [getSystemInfo](src/api/getSystemInfo.ts) - возвращает информацию о CSP и плагине
|
- [getSystemInfo](src/api/getSystemInfo.ts) - возвращает информацию о CSP и плагине
|
||||||
- [isValidSystemSetup](src/api/isValidSystemSetup.ts) - возвращает флаг корректности настроек ЭП на машине
|
- [isValidSystemSetup](src/api/isValidSystemSetup.ts) - возвращает флаг корректности настроек ЭП на машине
|
||||||
|
|
||||||
@ -139,15 +121,7 @@ import { getUserCertificates, Certificate } from 'crypto-pro';
|
|||||||
|
|
||||||
<a name="supported-cist"></a>
|
<a name="supported-cist"></a>
|
||||||
## Поддерживаемые СКЗИ
|
## Поддерживаемые СКЗИ
|
||||||
[КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v4.0+) *рекомендуется использование только сертифицированных версий*. Инструкция по установке:
|
[КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v4.0+)
|
||||||
- [Linux / OSX](#csp-install-linux-osx)
|
|
||||||
- (в Windows следуйте указаниям программы-установщика)
|
|
||||||
|
|
||||||
[КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) (v2.0.12438+).
|
|
||||||
|
|
||||||
[Инструкция](#plugin-install-linux) по установке плагина в Linux. В Windows и OSX следуйте указаниям программы-установщика.
|
|
||||||
|
|
||||||
[Инструкция](#certificates-install-linux) по установке сертификатов в систему для Linux / OSX.
|
|
||||||
|
|
||||||
<a name="examples"></a>
|
<a name="examples"></a>
|
||||||
## Примеры
|
## Примеры
|
||||||
@ -197,50 +171,6 @@ npm run build
|
|||||||
npm run serve
|
npm run serve
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="upgrade-from-1-to-2"></a>
|
|
||||||
## Миграция с версии 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();
|
|
||||||
```
|
|
||||||
|
|
||||||
<a name="developers"></a>
|
<a name="developers"></a>
|
||||||
# Тем, кто хочет помочь
|
# Тем, кто хочет помочь
|
||||||
@ -330,162 +260,15 @@ cd ../../../package
|
|||||||
npm unlink
|
npm unlink
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="helpful"></a>
|
|
||||||
# Полезная информация
|
|
||||||
|
|
||||||
<a name="csp-install-linux-osx"></a>
|
|
||||||
## Установка КриптоПРО CSP в Linux / OSX
|
|
||||||
> Процесс установки в OSX незначительно отличается от Linux, поэтому описание приведено на примере дистрибутива семейства Debian (x64).
|
|
||||||
|
|
||||||
Некоторые команды могут потребовать запуска с `sudo`.
|
|
||||||
Названия файлов и директорий могут отличаться из-за различий в версиях.
|
|
||||||
|
|
||||||
После загрузки [КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) для нужной платформы, распакуйте архив:
|
|
||||||
```bash
|
|
||||||
tar -xzvf linux-amd64_deb.tgz
|
|
||||||
chmod 777 -R linux-amd64_deb/
|
|
||||||
```
|
|
||||||
|
|
||||||
Запустите скрипт установки:
|
|
||||||
```bash
|
|
||||||
linux-amd64_deb/install.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверьте **отсутствие** `cprocsp-rdr-gui`:
|
|
||||||
```bash
|
|
||||||
dpkg -l | grep cprocsp-rdr
|
|
||||||
```
|
|
||||||
|
|
||||||
Установите дополнительно `cprocsp-rdr-gui-gtk`:
|
|
||||||
```bash
|
|
||||||
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)
|
|
||||||
|
|
||||||
<a name="plugin-install-linux"></a>
|
|
||||||
## Установка КриптоПРО ЭЦП browser plugin в Linux
|
|
||||||
Загрузите [КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) и распакуйте его:
|
|
||||||
```bash
|
|
||||||
mkdir cades_linux_amd64
|
|
||||||
tar -xzvf cades_linux_amd64.tar.gz -C cades_linux_amd64
|
|
||||||
```
|
|
||||||
|
|
||||||
Сконвертируйте `rpm` в `deb` пакеты при помощи утилиты `alien`:
|
|
||||||
```bash
|
|
||||||
apt-get update && apt-get install alien
|
|
||||||
cd cades_linux_amd64
|
|
||||||
alien *
|
|
||||||
```
|
|
||||||
|
|
||||||
Установите пакеты:
|
|
||||||
```bash
|
|
||||||
dpkg -i cprocsp-pki-cades_2.0.0-2_amd64.deb
|
|
||||||
dpkg -i cprocsp-pki-plugin_2.0.0-2_amd64.deb
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверьте наличие файлов плагина:
|
|
||||||
```bash
|
|
||||||
ls -la /opt/cprocsp/lib/amd64 | grep libnpcades
|
|
||||||
|
|
||||||
lrwxrwxrwx 1 root root 19 Окт 21 12:33 libnpcades.so -> libnpcades.so.2.0.0
|
|
||||||
lrwxrwxrwx 1 root root 19 Окт 21 12:33 libnpcades.so.2 -> libnpcades.so.2.0.0
|
|
||||||
-rwxr-xr-x 1 root root 2727236 Июн 8 14:33 libnpcades.so.2.0.0
|
|
||||||
```
|
|
||||||
|
|
||||||
<a name="plugin-install-old-firefox"></a>
|
|
||||||
### Настройка плагина для Firefox (до версии 52)
|
|
||||||
> После настройки плагина на страницах, запрашивающих работу с ЭП в панели навигации, рядом с url будет кнопка,
|
|
||||||
позволяющая "разрешить и запомнить" использование установленного плагина.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /usr/lib/mozilla/plugins
|
|
||||||
|
|
||||||
cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./
|
|
||||||
ldd libnpcades.so.2.0.0
|
|
||||||
|
|
||||||
cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./libnpcades.so
|
|
||||||
ldd libnpcades.so
|
|
||||||
```
|
|
||||||
Перезапустите Firefox, и убедитесь в наличии CryptoPRO Cades plugin (см. Menu -> Addons).
|
|
||||||
|
|
||||||
<a name="certificates-install-linux"></a>
|
|
||||||
## Установка сертификатов в Linux
|
|
||||||
> В OSX процесс схож с Linux.
|
|
||||||
|
|
||||||
Подключите USB носитель с ключевыми контейнерами и проверьте результат команды:
|
|
||||||
```bash
|
|
||||||
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
|
|
||||||
|
|
||||||
CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
|
|
||||||
AcquireContext: OK. HCRYPTPROV: 16188003
|
|
||||||
\\.\FLASH\ivanov
|
|
||||||
\\.\FLASH\petrov
|
|
||||||
\\.\FLASH\sidorov
|
|
||||||
\\.\FLASH\vasiliev
|
|
||||||
\\.\FLASH\smirnov
|
|
||||||
OK.
|
|
||||||
Total: SYS: 0,020 sec USR: 0,060 sec UTC: 0,180 sec
|
|
||||||
```
|
|
||||||
|
|
||||||
Скопируйте ключевой контейнер `\\.\FLASH\.\sidorov` на жесткий диск:
|
|
||||||
```bash
|
|
||||||
/opt/cprocsp/bin/amd64/csptest -keycopy -contsrc '\\.\FLASH\sidorov' -contdest '\\.\HDIMAGE\sidor'
|
|
||||||
|
|
||||||
CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
|
|
||||||
CryptAcquireContext succeeded.HCRYPTPROV: 38556259
|
|
||||||
CryptAcquireContext succeeded.HCRYPTPROV: 38770755
|
|
||||||
Total: SYS: 0,000 sec USR: 0,100 sec UTC: 14,920 sec
|
|
||||||
[ErrorCode: 0x00000000]
|
|
||||||
```
|
|
||||||
> Наличие [ErrorCode: 0x00000000] в завершении каждой команды КриптоПРО говорит о ее успешном выполнении.
|
|
||||||
|
|
||||||
Проверьте наличие нового контейнера `\\.\HDIMAGE\sidor`:
|
|
||||||
```bash
|
|
||||||
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
|
|
||||||
|
|
||||||
CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
|
|
||||||
AcquireContext: OK. HCRYPTPROV: 34554467
|
|
||||||
\\.\FLASH\ivanov
|
|
||||||
\\.\FLASH\petrov
|
|
||||||
\\.\FLASH\sidorov
|
|
||||||
\\.\FLASH\vasiliev
|
|
||||||
\\.\FLASH\smirnov
|
|
||||||
\\.\HDIMAGE\sidor
|
|
||||||
OK.
|
|
||||||
Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
|
|
||||||
[ErrorCode: 0x00000000]
|
|
||||||
```
|
|
||||||
|
|
||||||
Установите личный сертификат:
|
|
||||||
```bash
|
|
||||||
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\HDIMAGE\sidor'
|
|
||||||
```
|
|
||||||
> Возможно в выводе вы ссылку на сертификат УЦ
|
|
||||||
|
|
||||||
При необходимости загрузите сертификат удостоверяющего центра и установите его командой:
|
|
||||||
```bash
|
|
||||||
/opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file <файл сертификата>.crt
|
|
||||||
```
|
|
||||||
|
|
||||||
После чего, при проверке установленного личного сертификата вы увидите `PrivateKey Link: Yes`:
|
|
||||||
```bash
|
|
||||||
/opt/cprocsp/bin/amd64/certmgr -list -store uMy
|
|
||||||
```
|
|
||||||
|
|
||||||
<a name="lisense"></a>
|
<a name="lisense"></a>
|
||||||
# Лицензия
|
# Лицензия
|
||||||
MIT
|
[MIT](/LICENSE)
|
||||||
|
|
||||||
[npm-url]: https://npmjs.org/package/crypto-pro
|
[npm-url]: https://npmjs.org/package/crypto-pro-js
|
||||||
[npm-version-image]: http://img.shields.io/npm/v/crypto-pro.svg?style=flat
|
[npm-version-image]: https://img.shields.io/npm/v/crypto-pro-js.svg?style=flat
|
||||||
[npm-downloads-image]: http://img.shields.io/npm/dm/crypto-pro.svg?style=flat
|
[npm-downloads-image]: http://img.shields.io/npm/dm/crypto-pro-js.svg?style=flat
|
||||||
[downloads-url]: https://npmcharts.com/compare/crypto-pro?minimal=true
|
[downloads-url]: https://npmcharts.com/compare/crypto-pro-js?minimal=true
|
||||||
[travis-url]: https://travis-ci.org/vgoma/crypto-pro
|
[travis-url]: https://www.travis-ci.com/kernusr/crypto-pro-js
|
||||||
[travis-image]: http://img.shields.io/travis/vgoma/crypto-pro/master.svg?style=flat
|
[travis-image]: http://img.shields.io/travis/kernusr/crypto-pro-js/master.svg?style=flat
|
||||||
[coveralls-image]: https://coveralls.io/repos/github/vgoma/crypto-pro/badge.svg?branch=master
|
[coveralls-image]: https://coveralls.io/repos/github/kernusr/crypto-pro-js/badge.svg?branch=master
|
||||||
[coveralls-url]: https://coveralls.io/github/vgoma/crypto-pro?branch=master
|
[coveralls-url]: https://coveralls.io/github/kernusr/crypto-pro-js?branch=master
|
||||||
[donate-image]: https://img.shields.io/badge/%D1%81%D0%BF%D0%B0%D1%81%D0%B8%D0%B1%D0%BE-%E2%82%BD-yellow
|
|
||||||
[donate-url]: https://money.yandex.ru/to/410011609769902
|
|
||||||
[examples-image]: https://img.shields.io/badge/examples-folder-pink
|
|
||||||
[examples-url]: examples
|
|
||||||
|
9
dist/api/createSignature.d.ts
vendored
9
dist/api/createSignature.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает подпись base64 строки по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
|
|
||||||
* @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
|
|
||||||
* @returns подпись
|
|
||||||
*/
|
|
||||||
export declare const createSignature: (thumbprint: string, messageHash: string, detachedSignature?: boolean) => Promise<string>;
|
|
8
dist/api/getAllUserCertificates.d.ts
vendored
Normal file
8
dist/api/getAllUserCertificates.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { Certificate } from './certificate';
|
||||||
|
/**
|
||||||
|
* Возвращает все сертификаты без фильтрации по дате и наличию приватного ключа
|
||||||
|
*
|
||||||
|
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
||||||
|
* @returns список сертификатов
|
||||||
|
*/
|
||||||
|
export declare const getAllUserCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
6
dist/api/getCspVersion.d.ts
vendored
Normal file
6
dist/api/getCspVersion.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Предоставляет информацию о системе
|
||||||
|
*
|
||||||
|
* @returns информацию о CSP
|
||||||
|
*/
|
||||||
|
export declare const getCspVersion: () => Promise<string>;
|
6
dist/api/getPluginVersion.d.ts
vendored
Normal file
6
dist/api/getPluginVersion.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Предоставляет информацию о системе
|
||||||
|
*
|
||||||
|
* @returns информацию о плагине
|
||||||
|
*/
|
||||||
|
export declare const getPluginVersion: () => Promise<string>;
|
1
dist/api/index.d.ts
vendored
1
dist/api/index.d.ts
vendored
@ -3,7 +3,6 @@ export * from './getUserCertificates';
|
|||||||
export * from './getAllUserCertificates';
|
export * from './getAllUserCertificates';
|
||||||
export * from './getSystemInfo';
|
export * from './getSystemInfo';
|
||||||
export * from './isValidSystemSetup';
|
export * from './isValidSystemSetup';
|
||||||
export * from './createSignature';
|
|
||||||
export * from './createXMLSignature';
|
export * from './createXMLSignature';
|
||||||
export * from './createDetachedSignature';
|
export * from './createDetachedSignature';
|
||||||
export * from './addDetachedSignature';
|
export * from './addDetachedSignature';
|
||||||
|
7
dist/crypto-pro-js.d.ts
vendored
Normal file
7
dist/crypto-pro-js.d.ts
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// Type definitions for crypto-pro-js 2.3.0
|
||||||
|
// Project: crypto-pro-js
|
||||||
|
// Definitions by: Artem Vasilev https://github.com/kernusr
|
||||||
|
|
||||||
|
export as namespace cryptoPro;
|
||||||
|
|
||||||
|
export * from './api';
|
5408
dist/crypto-pro-js.js
vendored
Normal file
5408
dist/crypto-pro-js.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
dist/crypto-pro-js.js.map
vendored
Normal file
1
dist/crypto-pro-js.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
11
dist/crypto-pro-js.min.js
vendored
Normal file
11
dist/crypto-pro-js.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/crypto-pro-js.min.js.map
vendored
Normal file
1
dist/crypto-pro-js.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
13378
examples/angular/package-lock.json
generated
13378
examples/angular/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -21,7 +21,7 @@
|
|||||||
"@angular/platform-browser": "~9.0.7",
|
"@angular/platform-browser": "~9.0.7",
|
||||||
"@angular/platform-browser-dynamic": "~9.0.7",
|
"@angular/platform-browser-dynamic": "~9.0.7",
|
||||||
"@angular/router": "~9.0.7",
|
"@angular/router": "~9.0.7",
|
||||||
"crypto-pro": "2.2.0",
|
"crypto-pro-js": "^2.3.0",
|
||||||
"rxjs": "~6.5.4",
|
"rxjs": "~6.5.4",
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
"zone.js": "~0.10.2"
|
"zone.js": "~0.10.2"
|
||||||
@ -31,9 +31,9 @@
|
|||||||
"@angular/cli": "~9.0.7",
|
"@angular/cli": "~9.0.7",
|
||||||
"@angular/compiler-cli": "~9.0.7",
|
"@angular/compiler-cli": "~9.0.7",
|
||||||
"@angular/language-service": "~9.0.7",
|
"@angular/language-service": "~9.0.7",
|
||||||
"@types/node": "^12.11.1",
|
|
||||||
"@types/jasmine": "~3.5.0",
|
"@types/jasmine": "~3.5.0",
|
||||||
"@types/jasminewd2": "~2.0.3",
|
"@types/jasminewd2": "~2.0.3",
|
||||||
|
"@types/node": "^12.11.1",
|
||||||
"codelyzer": "^5.1.2",
|
"codelyzer": "^5.1.2",
|
||||||
"jasmine-core": "~3.5.0",
|
"jasmine-core": "~3.5.0",
|
||||||
"jasmine-spec-reporter": "~4.2.1",
|
"jasmine-spec-reporter": "~4.2.1",
|
||||||
|
18482
examples/react/package-lock.json
generated
18482
examples/react/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@
|
|||||||
"@testing-library/jest-dom": "4.2.4",
|
"@testing-library/jest-dom": "4.2.4",
|
||||||
"@testing-library/react": "9.5.0",
|
"@testing-library/react": "9.5.0",
|
||||||
"@testing-library/user-event": "7.2.1",
|
"@testing-library/user-event": "7.2.1",
|
||||||
"crypto-pro": "2.2.0",
|
"crypto-pro-js": "^2.3.0",
|
||||||
"react": "^16.13.1",
|
"react": "^16.13.1",
|
||||||
"react-app-polyfill": "1.0.6",
|
"react-app-polyfill": "1.0.6",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
|
279
examples/script-tag/package-lock.json
generated
279
examples/script-tag/package-lock.json
generated
@ -1,8 +1,277 @@
|
|||||||
{
|
{
|
||||||
"name": "crypto-pro-example-es5-script-tag",
|
"name": "crypto-pro-example-es5-script-tag",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "crypto-pro-example-es5-script-tag",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"crypto-pro-js": "^2.3.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"node-static": "0.7.11",
|
||||||
|
"symlink-dir": "3.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/better-path-resolve": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"is-windows": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/colors": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.1.90"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/crypto-pro-js": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/crypto-pro-js/-/crypto-pro-js-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-pJ9vaQDdInhz2NhIE9NRj3mH6W7PsY+UQCwz7ZHrjgpVlTNWrg2Rk/ooorNfVuQUjOk3tbLYaLnMqkPkRgbmlA=="
|
||||||
|
},
|
||||||
|
"node_modules/fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/glob": {
|
||||||
|
"version": "7.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||||
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/graceful-fs": {
|
||||||
|
"version": "4.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||||
|
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/is-windows": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/make-dir": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"semver": "^6.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"mime": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minimist": {
|
||||||
|
"version": "0.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
||||||
|
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/node-static": {
|
||||||
|
"version": "0.7.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.11.tgz",
|
||||||
|
"integrity": "sha512-zfWC/gICcqb74D9ndyvxZWaI1jzcoHmf4UTHWQchBNuNMxdBLJMDiUgZ1tjGLEIe/BMhj2DxKD8HOuc2062pDQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"colors": ">=0.6.0",
|
||||||
|
"mime": "^1.2.9",
|
||||||
|
"optimist": ">=0.3.4"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"static": "bin/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/optimist": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
|
||||||
|
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minimist": "~0.0.1",
|
||||||
|
"wordwrap": "~0.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rename-overwrite": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rename-overwrite/-/rename-overwrite-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-XodkUmbg11ZzZoAkYfJYEmj8FscfeRL2KHGALeDSB76ia8A1zqQq0+WkcepXm7QkuzmW0CE3uiFUBr/UJfin+w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"graceful-fs": "^4.1.11",
|
||||||
|
"rimraf": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rimraf": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "^7.1.3"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rimraf": "bin.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/semver": {
|
||||||
|
"version": "6.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/symlink-dir": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/symlink-dir/-/symlink-dir-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-wuqI+beQTU3XQq6bHTg4tcFiXlAN5uWNus+R0/I/R9O/ORpVHdCo2JQp04dCexBIb94VarosKFU+kjVEgzIQpQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"better-path-resolve": "^1.0.0",
|
||||||
|
"graceful-fs": "^4.1.11",
|
||||||
|
"make-dir": "^3.0.0",
|
||||||
|
"rename-overwrite": "^2.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"symlink-dir": "dist/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.15"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/wordwrap": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -41,10 +310,10 @@
|
|||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"crypto-pro": {
|
"crypto-pro-js": {
|
||||||
"version": "2.2.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/crypto-pro-js/-/crypto-pro-js-2.3.0.tgz",
|
||||||
"integrity": "sha512-OUOmAMtzWXO3wuY6WBPv7QdkamI4WABjkRD/8OFoDyx2S9bsbZzukktFlPIgz0nvVUS7UTXACQeO0q56bh+whA=="
|
"integrity": "sha512-pJ9vaQDdInhz2NhIE9NRj3mH6W7PsY+UQCwz7ZHrjgpVlTNWrg2Rk/ooorNfVuQUjOk3tbLYaLnMqkPkRgbmlA=="
|
||||||
},
|
},
|
||||||
"fs.realpath": {
|
"fs.realpath": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -13,6 +13,6 @@
|
|||||||
"symlink-dir": "3.1.2"
|
"symlink-dir": "3.1.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"crypto-pro": "2.2.0"
|
"crypto-pro-js": "^2.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
package-lock.json
generated
8
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "crypto-pro-custom",
|
"name": "crypto-pro-js",
|
||||||
"version": "2.2.2",
|
"version": "2.3.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "crypto-pro-custom",
|
"name": "crypto-pro-js",
|
||||||
"version": "2.2.2",
|
"version": "2.3.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "25.1.4",
|
"@types/jest": "25.1.4",
|
||||||
|
18
package.json
18
package.json
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "crypto-pro-custom",
|
"name": "crypto-pro-js",
|
||||||
"version": "2.2.2",
|
"version": "2.3.0",
|
||||||
"description": "Кастомизированный API для взаимодействия с КриптоПро",
|
"description": "API для работы с КриптоПро. Forked from https://github.com/vgoma/crypto-pro",
|
||||||
"main": "./lib/crypto-pro-custom.js",
|
"main": "./lib/crypto-pro-js.js",
|
||||||
"types": "./lib/crypto-pro-custom.d.ts",
|
"types": "./lib/crypto-pro-js.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
"lib/**/*",
|
"lib/**/*",
|
||||||
"dist/**/*",
|
"dist/**/*",
|
||||||
@ -35,7 +35,7 @@
|
|||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/kernusr/crypto-pro"
|
"url": "https://github.com/kernusr/crypto-pro-js"
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Artem Vasilev",
|
"name": "Artem Vasilev",
|
||||||
@ -47,12 +47,18 @@
|
|||||||
"name": "Vitalii Goma",
|
"name": "Vitalii Goma",
|
||||||
"email": "vgoma@yandex.ru",
|
"email": "vgoma@yandex.ru",
|
||||||
"url": "https://github.com/vgoma"
|
"url": "https://github.com/vgoma"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "German Arutyunov",
|
||||||
|
"email": "germanarutyunov@gmail.com",
|
||||||
|
"url": "https://github.com/gaarutyunov"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"crypto",
|
"crypto",
|
||||||
"cryptopro",
|
"cryptopro",
|
||||||
"crypto-pro",
|
"crypto-pro",
|
||||||
|
"crypto-pro-js",
|
||||||
"cades",
|
"cades",
|
||||||
"КриптоПро",
|
"КриптоПро",
|
||||||
"Крипто ПРО"
|
"Крипто ПРО"
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
import 'cadesplugin';
|
|
||||||
import 'console-mock';
|
|
||||||
import { rawCertificates, parsedCertificates } from '../__mocks__/certificates';
|
|
||||||
import { createSignature } from './createSignature';
|
|
||||||
import { _getCadesCert } from '../helpers/_getCadesCert';
|
|
||||||
|
|
||||||
const [rawCertificateMock] = rawCertificates;
|
|
||||||
const [parsedCertificateMock] = parsedCertificates;
|
|
||||||
|
|
||||||
jest.mock('../helpers/_getCadesCert', () => ({ _getCadesCert: jest.fn(() => rawCertificateMock) }));
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
(_getCadesCert as jest.Mock).mockClear();
|
|
||||||
});
|
|
||||||
|
|
||||||
const executionSteps = [Symbol('step 0'), Symbol('step 1'), Symbol('step 2'), Symbol('step 3'), Symbol('step 4')];
|
|
||||||
|
|
||||||
const executionFlow = {
|
|
||||||
[executionSteps[0]]: {
|
|
||||||
propset_Name: jest.fn(),
|
|
||||||
propset_Value: jest.fn(),
|
|
||||||
},
|
|
||||||
[executionSteps[1]]: {
|
|
||||||
propset_ContentEncoding: jest.fn(),
|
|
||||||
propset_Content: jest.fn(),
|
|
||||||
SignCades: jest.fn(() => executionSteps[4]),
|
|
||||||
},
|
|
||||||
[executionSteps[2]]: {
|
|
||||||
propset_Certificate: jest.fn(),
|
|
||||||
AuthenticatedAttributes2: executionSteps[3],
|
|
||||||
propset_Options: jest.fn(),
|
|
||||||
},
|
|
||||||
[executionSteps[3]]: {
|
|
||||||
Add: jest.fn(),
|
|
||||||
},
|
|
||||||
[executionSteps[4]]: 'signature',
|
|
||||||
};
|
|
||||||
|
|
||||||
window.cadesplugin.__defineExecutionFlow(executionFlow);
|
|
||||||
window.cadesplugin.CreateObjectAsync.mockImplementation((object) => {
|
|
||||||
switch (object) {
|
|
||||||
case 'CADESCOM.CPAttribute':
|
|
||||||
return executionSteps[0];
|
|
||||||
case 'CAdESCOM.CadesSignedData':
|
|
||||||
return executionSteps[1];
|
|
||||||
case 'CAdESCOM.CPSigner':
|
|
||||||
return executionSteps[2];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('createSignature', () => {
|
|
||||||
test('goes through whole execution flow to create signature', async () => {
|
|
||||||
const data = btoa('b285056dbf18d7392d7677369524dd14747459ed8143997e163b2986f92fd42c');
|
|
||||||
const signature = await createSignature(parsedCertificateMock.thumbprint, data);
|
|
||||||
|
|
||||||
expect(_getCadesCert).toHaveBeenCalledTimes(1);
|
|
||||||
expect(signature).toEqual('signature');
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,88 +0,0 @@
|
|||||||
import { CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME } from '../constants';
|
|
||||||
import { _afterPluginsLoaded } from '../helpers/_afterPluginsLoaded';
|
|
||||||
import { _extractMeaningfulErrorMessage } from '../helpers/_extractMeaningfulErrorMessage';
|
|
||||||
import { __cadesAsyncToken__, __createCadesPluginObject__, _generateCadesFn } from '../helpers/_generateCadesFn';
|
|
||||||
import { _getCadesCert } from '../helpers/_getCadesCert';
|
|
||||||
import { _getDateObj } from '../helpers/_getDateObj';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Создает подпись base64 строки по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
|
|
||||||
* @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
|
|
||||||
* @returns подпись
|
|
||||||
*/
|
|
||||||
export const createSignature = _afterPluginsLoaded(
|
|
||||||
async (thumbprint: string, messageHash: string, detachedSignature: boolean = true): Promise<string> => {
|
|
||||||
console.warn(
|
|
||||||
[
|
|
||||||
'cryptoPro: Метод "createSignature" является устаревшим и будет убран из будущих версий.',
|
|
||||||
'Используйте "createAttachedSignature" и "createDetachedSignature".',
|
|
||||||
].join('\n'),
|
|
||||||
);
|
|
||||||
|
|
||||||
const { cadesplugin } = window;
|
|
||||||
const cadesCertificate = await _getCadesCert(thumbprint);
|
|
||||||
|
|
||||||
return eval(
|
|
||||||
_generateCadesFn(function createSignature(): string {
|
|
||||||
let cadesAttrs;
|
|
||||||
let cadesSignedData;
|
|
||||||
let cadesSigner;
|
|
||||||
|
|
||||||
try {
|
|
||||||
cadesAttrs = __cadesAsyncToken__ + __createCadesPluginObject__('CADESCOM.CPAttribute');
|
|
||||||
cadesSignedData = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.CadesSignedData');
|
|
||||||
cadesSigner = __cadesAsyncToken__ + __createCadesPluginObject__('CAdESCOM.CPSigner');
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
|
|
||||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации подписи');
|
|
||||||
}
|
|
||||||
|
|
||||||
const currentTime = _getDateObj(new Date());
|
|
||||||
|
|
||||||
try {
|
|
||||||
void (__cadesAsyncToken__ + cadesAttrs.propset_Name(CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME));
|
|
||||||
void (__cadesAsyncToken__ + cadesAttrs.propset_Value(currentTime));
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
|
|
||||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при установке времени подписи');
|
|
||||||
}
|
|
||||||
|
|
||||||
let cadesAuthAttrs;
|
|
||||||
|
|
||||||
try {
|
|
||||||
void (__cadesAsyncToken__ + cadesSigner.propset_Certificate(cadesCertificate));
|
|
||||||
cadesAuthAttrs = __cadesAsyncToken__ + cadesSigner.AuthenticatedAttributes2;
|
|
||||||
void (__cadesAsyncToken__ + cadesAuthAttrs.Add(cadesAttrs));
|
|
||||||
void (__cadesAsyncToken__ + cadesSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY));
|
|
||||||
void (__cadesAsyncToken__ + cadesSignedData.propset_Content(messageHash));
|
|
||||||
void (
|
|
||||||
__cadesAsyncToken__ + cadesSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY)
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
|
|
||||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при указании данных для подписи');
|
|
||||||
}
|
|
||||||
|
|
||||||
let signature: string;
|
|
||||||
|
|
||||||
try {
|
|
||||||
signature =
|
|
||||||
__cadesAsyncToken__ +
|
|
||||||
cadesSignedData.SignCades(cadesSigner, cadesplugin.CADESCOM_CADES_BES, detachedSignature);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
|
|
||||||
throw new Error(_extractMeaningfulErrorMessage(error) || 'Ошибка при подписании данных');
|
|
||||||
}
|
|
||||||
|
|
||||||
return signature;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
@ -3,7 +3,6 @@ export * from './getUserCertificates';
|
|||||||
export * from './getAllUserCertificates';
|
export * from './getAllUserCertificates';
|
||||||
export * from './getSystemInfo';
|
export * from './getSystemInfo';
|
||||||
export * from './isValidSystemSetup';
|
export * from './isValidSystemSetup';
|
||||||
export * from './createSignature';
|
|
||||||
export * from './createXMLSignature';
|
export * from './createXMLSignature';
|
||||||
export * from './createDetachedSignature';
|
export * from './createDetachedSignature';
|
||||||
export * from './addDetachedSignature';
|
export * from './addDetachedSignature';
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"./src/crypto-pro-custom.ts"
|
"./src/crypto-pro-js.ts"
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules"
|
"node_modules"
|
||||||
|
Loading…
Reference in New Issue
Block a user