mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2025-04-21 13:03:07 +03:00
Compare commits
No commits in common. "master" and "v1.1.2" have entirely different histories.
@ -1,10 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[*.{js, ts}]
|
|
||||||
charset = utf-8
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
51
.eslintrc.js
51
.eslintrc.js
@ -1,51 +0,0 @@
|
|||||||
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/**/*'
|
|
||||||
]
|
|
||||||
};
|
|
46
.github/workflows/test.yml
vendored
46
.github/workflows/test.yml
vendored
@ -1,46 +0,0 @@
|
|||||||
name: CryptoPRO tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
buildAndTest:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [ 16 ]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
check-latest: true
|
|
||||||
|
|
||||||
- name: Clean install, build, test
|
|
||||||
run: |
|
|
||||||
npm ci
|
|
||||||
npm run build --if-present --openssl-legacy-provider
|
|
||||||
npm test
|
|
||||||
|
|
||||||
lint:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Use Node.js 16
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 16
|
|
||||||
check-latest: true
|
|
||||||
|
|
||||||
- name: Clean install, lint
|
|
||||||
run: |
|
|
||||||
npm ci
|
|
||||||
npm run lint
|
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,4 +1,2 @@
|
|||||||
.idea
|
.idea
|
||||||
node_modules/
|
node_modules/
|
||||||
package/
|
|
||||||
coverage/
|
|
@ -1,8 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
semi: true,
|
|
||||||
trailingComma: 'all',
|
|
||||||
singleQuote: true,
|
|
||||||
printWidth: 120,
|
|
||||||
tabWidth: 2,
|
|
||||||
arrowParens: 'always',
|
|
||||||
};
|
|
65
CHANGELOG.md
Normal file
65
CHANGELOG.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
1.1.2 / 2019-12-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Фикс: Дополнена [обработка ошибок](https://github.com/vgoma/crypto-pro/issues/8)
|
||||||
|
|
||||||
|
1.1.1 / 2019-12-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Добавлены изменения из оригинального js модуля Крипто ПРО "2.1.2" [ссылка на оригинальный файл](https://www.cryptopro.ru/sites/default/files/products/cades/cadesplugin_api.js)
|
||||||
|
|
||||||
|
1.1.0 / 2017-12-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: объединена кодовая база по работе с синхронной и асинхронной версии API Крипто ПРО
|
||||||
|
|
||||||
|
1.0.11 / 2017-06-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Убрана зависимость от Object.keys и Object.assign
|
||||||
|
|
||||||
|
1.0.10 / 2017-04-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Фикс: уточнения в README
|
||||||
|
|
||||||
|
1.0.9 / 2017-04-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Фикс: оформление README
|
||||||
|
|
||||||
|
1.0.8 / 2017-04-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Добавлена поддержка Firefox >= 52
|
||||||
|
* Улучшение: Более подробный README
|
||||||
|
|
||||||
|
1.0.7 / 2017-01-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Указание хэша сертификата при ошибке доступа к нему
|
||||||
|
|
||||||
|
1.0.6 / 2017-01-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Фикс: Проброс ошибки метода получения сертификатов по цепочке промисов
|
||||||
|
|
||||||
|
1.0.5 / 2017-01-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Фиксация версий всех зависимостей
|
||||||
|
|
||||||
|
1.0.4 / 2017-01-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Добавлены изменения из оригинального js модуля Крипто ПРО "2.0.3" [ссылка на оригинальный файл](https://www.cryptopro.ru/sites/default/files/products/cades/cadesplugin_api.js)
|
||||||
|
|
||||||
|
1.0.3 / 2017-01-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Убрана попытка загрузки сразу двух расширений (для Opera и для Chrome)
|
||||||
|
|
||||||
|
1.0.2 / 2017-01-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Улучшение: Добавлена возможность подключать модуль напрямую из папки src/ для приложений, собираемых webpack'ом
|
22
LICENSE
22
LICENSE
@ -1,22 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020 Vitalii Goma
|
|
||||||
Copyright (c) 2021 Artem Vasilev
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
384
README.md
Normal file → Executable file
384
README.md
Normal file → Executable file
@ -1,216 +1,186 @@
|
|||||||
[![License][license-image]][license-url]
|
# CryptoPro
|
||||||
[![NPM version][npm-version-image]][npm-url]
|
Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In (IE8+)
|
||||||
[![NPM downloads][npm-downloads-image]][downloads-url]
|
|
||||||
[![Build Status][actions-image]][actions-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+).
|
||||||
|
|
||||||
<a name="cryptopro"></a>
|
Список необходимых полифиллов (подключаются самостоятельно):
|
||||||
# cryptoPro
|
|
||||||
Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In
|
|
||||||
|
|
||||||
> **Это форк проекта [vgoma/crypto-pro](https://github.com/vgoma/crypto-pro)**
|
|
||||||
>
|
|
||||||
> **API форка отличается от оригинала**: внимательно читайте README
|
|
||||||
|
|
||||||
| [](https://www.chromium.org/getting-involved/download-chromium#TOC-Downloading-old-builds-of-Chrome-Chromium) | [](https://ftp.mozilla.org/pub/firefox/releases/) | [](https://www.microsoft.com/ru-ru/download/details.aspx?id=43374) | [](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/) |
|
|
||||||
|
|
||||||
## Ошибка `Параметр задан неверно. (0x80070057)`
|
|
||||||
Если при попытке подписать сообщение с использованием PKCS#7 подписи падает такая ошибка, то читайте [этот issue](https://github.com/webmasterskaya/crypto-pro-js/issues/20)
|
|
||||||
|
|
||||||
- [cryptoPro](#cryptopro)
|
|
||||||
- [Зачем мне этот пакет?](#why)
|
|
||||||
- [Установка](#install)
|
|
||||||
- [API](#api)
|
|
||||||
- [Методы объекта cryptoPro](#api-cryptopro)
|
|
||||||
- [Методы объекта сертификата](#api-certificate)
|
|
||||||
- [Поддерживаемые СКЗИ](#supported-cist)
|
|
||||||
- [Примеры](#examples)
|
|
||||||
- [Тэг script (UMD)](#example-script-tag)
|
|
||||||
- [Тем, кто хочет помочь](#developers)
|
|
||||||
- [Запуск режима разработки](#dev-mode)
|
|
||||||
- [Запуск тестов](#tests-execution)
|
|
||||||
- [Проверка пакета перед публикацией в NPM](#final-check)
|
|
||||||
- [Лицензия](#lisense)
|
|
||||||
|
|
||||||
<a name="why"></a>
|
|
||||||
## Зачем мне этот пакет?
|
|
||||||
КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях.
|
|
||||||
Асинхронной (в современных браузерах) и синхронной (в браузерах постарше).
|
|
||||||
С помощью этого пакета можно не писать реализацию под каждую версию плагина дважды.
|
|
||||||
|
|
||||||
<a name="install"></a>
|
|
||||||
## Установка
|
|
||||||
Для NPM:
|
|
||||||
```bash
|
|
||||||
npm install crypto-pro-js
|
|
||||||
```
|
|
||||||
|
|
||||||
Для Yarn:
|
|
||||||
```bash
|
|
||||||
yarn add crypto-pro-js
|
|
||||||
```
|
|
||||||
|
|
||||||
Для Bower:
|
|
||||||
```bash
|
|
||||||
bower install webmasterskaya/crypto-pro-js
|
|
||||||
```
|
|
||||||
|
|
||||||
Подключение пакета как UMD модуля через тэг script:
|
|
||||||
```html
|
|
||||||
<script src="crypto-pro-js/dist/crypto-pro.min.js"></script>
|
|
||||||
<script>
|
|
||||||
window.cryptoPro.getUserCertificates()
|
|
||||||
.then(function (certificates) {
|
|
||||||
//...
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
//...
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
Подключение пакета как ES модуля с Typescript или JavaScript:
|
|
||||||
```typescript
|
|
||||||
import { getUserCertificates, Certificate } from 'crypto-pro-js';
|
|
||||||
|
|
||||||
(async () => {
|
|
||||||
let certificates: Certificate[];
|
|
||||||
|
|
||||||
try {
|
|
||||||
certificates = await getUserCertificates();
|
|
||||||
} catch(error) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
```
|
|
||||||
|
|
||||||
Список требуемых полифиллов (если необходимы, подключаются самостоятельно):
|
|
||||||
- Promise
|
- Promise
|
||||||
- Array.prototype.find
|
- EventTarget.addEventListener
|
||||||
|
- Array.prototype.forEach
|
||||||
|
- Array.prototype.map
|
||||||
|
|
||||||
|
## Установка и настройка
|
||||||
|
### NPM
|
||||||
|
```bash
|
||||||
|
npm install crypto-pro
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bower
|
||||||
|
```bash
|
||||||
|
bower install crypto-pro
|
||||||
|
```
|
||||||
|
|
||||||
|
Для корректной работы используйте:
|
||||||
|
1. [КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v3.6+) *рекомендуется использование только сертифицированных версий*. Инструкция по установке:
|
||||||
|
- [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.
|
||||||
|
|
||||||
|
### <a name="install_csp_linux"></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="install_plugin_linux"></a> Установка КриптоПРО ЭЦП browser plug-in в 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
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Настройка плагина для 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="install_cert_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="api"></a>
|
|
||||||
## API
|
## API
|
||||||
|
Пример работы с API лежит в папке `example`.
|
||||||
|
|
||||||
<a name="api-cryptopro"></a>
|
``` js
|
||||||
### Методы объекта cryptoPro
|
window.CryptoPro.call('getCertsList').then(function (certList) {
|
||||||
- [getUserCertificates](src/api/getUserCertificates.ts) - возвращает список [сертификатов](#api-certificate), доступных пользователю в системе
|
console.log(certList);
|
||||||
- [getAllUserCertificates](src/api/getAllUserCertificates.ts) - возвращает список [сертификатов](#api-certificate), доступных пользователю в системе, в том числе просроченные и без закрытого ключа
|
});
|
||||||
- [getContainerCertificates](src/api/getContainerCertificates.ts) - возвращает список [сертификатов](#api-certificate), из закрытых ключей и/или сертификаты не установленные всистеме*
|
|
||||||
- [getAllContainerCertificates](src/api/getAllContainerCertificates.ts) - возвращает список [сертификатов](#api-certificate), из закрытых ключей и/или сертификаты не установленные всистеме*, в том числе просроченные и без закрытого ключа
|
|
||||||
- [getCertificate](src/api/getCertificate.ts) - возвращает [сертификат](#api-certificate) по отпечатку
|
|
||||||
- [createAttachedSignature](src/api/createAttachedSignature.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
|
|
||||||
- [createHash](src/api/createHash.ts) - создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
- [getSystemInfo](src/api/getSystemInfo.ts) - возвращает информацию о CSP и плагине
|
|
||||||
- [isValidSystemSetup](src/api/isValidSystemSetup.ts) - возвращает флаг корректности настроек ЭП на машине
|
|
||||||
|
|
||||||
> *Методы `getContainerCertificates` и `getAllContainerCertificates` позволяют получить сертификаты из закрытых ключей, записанных на обыкновенную флэшку
|
|
||||||
|
|
||||||
<a name="api-certificate"></a>
|
|
||||||
### Методы объекта сертификата
|
|
||||||
[Сертификат](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) - проверяет наличие ОИД'а (ОИД'ов) у сертификата
|
|
||||||
|
|
||||||
<a name="supported-cist"></a>
|
|
||||||
## Поддерживаемые СКЗИ
|
|
||||||
[КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v4.0+)
|
|
||||||
|
|
||||||
<a name="examples"></a>
|
|
||||||
## Примеры
|
|
||||||
Для их запуска необходим NodeJS LTS.
|
|
||||||
|
|
||||||
<a name="example-script-tag"></a>
|
|
||||||
### Тэг script (UMD)
|
|
||||||
```bash
|
|
||||||
cd examples/script-tag
|
|
||||||
npm i
|
|
||||||
npm start
|
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="developers"></a>
|
### Доступные методы
|
||||||
# Тем, кто хочет помочь
|
Список доступных методов можно посмотреть в файле `src/api.js`.
|
||||||
Буду благодарен за расширение/улучшение/доработку API.
|
|
||||||
Вам будут полезны [примеры](http://cpdn.cryptopro.ru/?url=/content/cades/plugin-samples-sign.html),
|
|
||||||
предоставляемые Крипто ПРО.
|
|
||||||
|
|
||||||
<a name="dev-mode"></a>
|
### License
|
||||||
## Запуск режима разработки
|
Licensed as MIT. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.
|
||||||
Устанавливаем зависимости:
|
|
||||||
```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-js` станет ярлыком,
|
|
||||||
> указывающим на папку содержащую локально собранный пакет.
|
|
||||||
|
|
||||||
<a name="tests-execution"></a>
|
|
||||||
## Запуск тестов
|
|
||||||
Тесты написаны с использованием [Jest](https://jestjs.io/docs/en/configuration#testpathignorepatterns-arraystring):
|
|
||||||
```bash
|
|
||||||
npm test
|
|
||||||
```
|
|
||||||
|
|
||||||
<a name="final-check"></a>
|
|
||||||
## Проверка пакета перед публикацией в NPM
|
|
||||||
Необходимо протестировать работу в заявленных браузерах, сделав это на локально запакованной версии пакета.
|
|
||||||
Для этого собираем пакет:
|
|
||||||
```bash
|
|
||||||
npm run package
|
|
||||||
mv package ..
|
|
||||||
```
|
|
||||||
> Важно переместить папку `package` куда-нибудь выше для избежания конфликтов при линковке с текущим `package.json`.
|
|
||||||
|
|
||||||
Переходим в любую директорию с примером и создаем там ссылку на только что собранный пакет:
|
|
||||||
```bash
|
|
||||||
cd examples/script-tag
|
|
||||||
npm link ../../../package
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверяем работу примеров в режимах разработки и продакшн.
|
|
||||||
|
|
||||||
После завершения экспериментов можно удалить глобальную ссылку из директории `../../../package` таким образом:
|
|
||||||
```bash
|
|
||||||
cd ../../../package
|
|
||||||
npm unlink
|
|
||||||
```
|
|
||||||
|
|
||||||
<a name="lisense"></a>
|
|
||||||
# Лицензия
|
|
||||||
[MIT](/LICENSE)
|
|
||||||
|
|
||||||
[license-url]: /LICENSE
|
|
||||||
[license-image]: https://img.shields.io/github/license/webmasterskaya/crypto-pro-js
|
|
||||||
[npm-url]: https://npmjs.org/package/crypto-pro-js
|
|
||||||
[npm-version-image]: https://img.shields.io/npm/v/crypto-pro-js.svg?style=flat
|
|
||||||
[npm-downloads-image]: https://img.shields.io/npm/dm/crypto-pro-js.svg?style=flat
|
|
||||||
[downloads-url]: https://npmcharts.com/compare/crypto-pro-js?minimal=true
|
|
||||||
[actions-url]: https://github.com/webmasterskaya/crypto-pro-js/actions
|
|
||||||
[actions-image]: https://img.shields.io/github/workflow/status/webmasterskaya/crypto-pro-js/test?event=push
|
|
||||||
|
24
bower.json
24
bower.json
@ -1,32 +1,24 @@
|
|||||||
{
|
{
|
||||||
"name": "crypto-pro-js",
|
"name": "crypto-pro",
|
||||||
"description": "Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In. Forked from https://github.com/vgoma/crypto-pro",
|
"description": "API для взаимодействия с КриптоПро",
|
||||||
"main": "./lib/crypto-pro-js.js",
|
"main": "dist/crypto-pro.js",
|
||||||
"authors": [
|
"authors": [
|
||||||
"kern.usr <kern.usr@gmail.com>",
|
|
||||||
"vgoma <vgoma@yandex.ru>"
|
"vgoma <vgoma@yandex.ru>"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "ISC",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"crypto",
|
"crypto",
|
||||||
"cryptopro",
|
"cryptopro",
|
||||||
"crypto-pro",
|
"crypto-pro",
|
||||||
"crypto-pro-js",
|
|
||||||
"cades",
|
"cades",
|
||||||
"КриптоПро",
|
"КриптоПро"
|
||||||
"Крипто ПРО"
|
|
||||||
],
|
],
|
||||||
"homepage": "https://github.com/webmasterskaya/crypto-pro-js",
|
"homepage": "https://github.com/vgoma/crypto-pro",
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"**/.*",
|
"**/.*",
|
||||||
"/*.js",
|
|
||||||
"/*.gif",
|
|
||||||
"/tsconfig*",
|
|
||||||
"node_modules",
|
"node_modules",
|
||||||
"bower_components",
|
"bower_components",
|
||||||
"examples",
|
"test",
|
||||||
"src",
|
"tests"
|
||||||
"types",
|
|
||||||
"package"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
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}`);
|
|
1071
dist/1.crypto-pro.js
vendored
Normal file
1071
dist/1.crypto-pro.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
dist/1.crypto-pro.js.map
vendored
Normal file
1
dist/1.crypto-pro.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1047
dist/2.crypto-pro.js
vendored
Normal file
1047
dist/2.crypto-pro.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
dist/2.crypto-pro.js.map
vendored
Normal file
1
dist/2.crypto-pro.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
8
dist/api/addAttachedSignature.d.ts
vendored
8
dist/api/addAttachedSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Добавляет присоединенную подпись к подписанному сообщению по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param signedMessage - подписанное сообщение
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const addAttachedSignature: (thumbprint: string, signedMessage: string | ArrayBuffer) => Promise<string>;
|
|
9
dist/api/addDetachedSignature.d.ts
vendored
9
dist/api/addDetachedSignature.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
* Добавляет отсоединенную подпись хеша к подписанному сообщению по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param signedMessage - подписанное сообщение
|
|
||||||
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const addDetachedSignature: (thumbprint: string, signedMessage: string | ArrayBuffer, messageHash: string) => Promise<string>;
|
|
22
dist/api/certificate/certificate.d.ts
vendored
22
dist/api/certificate/certificate.d.ts
vendored
@ -1,22 +0,0 @@
|
|||||||
import { TagTranslation } from '../../helpers/_parseCertInfo';
|
|
||||||
import { ExtendedKeysTranslations } from './getDecodedExtendedKeyUsage';
|
|
||||||
export declare type CadesCertificate = any;
|
|
||||||
export declare class Certificate {
|
|
||||||
_cadesCertificate: CadesCertificate;
|
|
||||||
name: string;
|
|
||||||
issuerName: string;
|
|
||||||
subjectName: string;
|
|
||||||
thumbprint: string;
|
|
||||||
validFrom: string;
|
|
||||||
validTo: string;
|
|
||||||
constructor(_cadesCertificate: CadesCertificate, name: string, issuerName: string, subjectName: string, thumbprint: string, validFrom: string, validTo: string);
|
|
||||||
getOwnerInfo(): Promise<TagTranslation[]>;
|
|
||||||
getIssuerInfo(): Promise<TagTranslation[]>;
|
|
||||||
getExtendedKeyUsage(): Promise<string[]>;
|
|
||||||
getDecodedExtendedKeyUsage(): Promise<ExtendedKeysTranslations>;
|
|
||||||
getAlgorithm(): Promise<string>;
|
|
||||||
getCadesProp(propName: any): Promise<any>;
|
|
||||||
isValid(): Promise<boolean>;
|
|
||||||
exportBase64(): Promise<string>;
|
|
||||||
hasExtendedKeyUsage(oids: any): Promise<boolean>;
|
|
||||||
}
|
|
6
dist/api/certificate/exportBase64.d.ts
vendored
6
dist/api/certificate/exportBase64.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Экспортирует сертификат в формате base64
|
|
||||||
*
|
|
||||||
* @returns сертификат в формате base64
|
|
||||||
*/
|
|
||||||
export declare const exportBase64: () => Promise<string>;
|
|
11
dist/api/certificate/getAlgorithm.d.ts
vendored
11
dist/api/certificate/getAlgorithm.d.ts
vendored
@ -1,11 +0,0 @@
|
|||||||
interface AlgorithmInfo {
|
|
||||||
algorithm: string;
|
|
||||||
oid: string;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Возвращает информацию об алгоритме сертификата
|
|
||||||
*
|
|
||||||
* @returns информацию об алгоритме и его OID'е
|
|
||||||
*/
|
|
||||||
export declare const getAlgorithm: () => Promise<AlgorithmInfo>;
|
|
||||||
export {};
|
|
7
dist/api/certificate/getCadesProp.d.ts
vendored
7
dist/api/certificate/getCadesProp.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает указанное внутренее свойство у сертификата в формате Cades
|
|
||||||
*
|
|
||||||
* @param propName = наименование свойства
|
|
||||||
* @returns значение запрошенного свойства
|
|
||||||
*/
|
|
||||||
export declare const getCadesProp: (propName: string) => Promise<any>;
|
|
@ -1,9 +0,0 @@
|
|||||||
export interface ExtendedKeysTranslations {
|
|
||||||
[key: string]: string | null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Возвращает расшифрованные ОИД'ы сертификата
|
|
||||||
*
|
|
||||||
* @returns словарь расшифрованных ОИД'ов
|
|
||||||
*/
|
|
||||||
export declare const getDecodedExtendedKeyUsage: () => Promise<ExtendedKeysTranslations>;
|
|
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает ОИД'ы сертификата
|
|
||||||
*
|
|
||||||
* @returns список ОИД'ов
|
|
||||||
*/
|
|
||||||
export declare const getExtendedKeyUsage: () => Promise<string[]>;
|
|
10
dist/api/certificate/getInfo.d.ts
vendored
10
dist/api/certificate/getInfo.d.ts
vendored
@ -1,10 +0,0 @@
|
|||||||
import { TagsTranslations } from '../../constants/tags-translations';
|
|
||||||
import { TagTranslation } from '../../helpers/_parseCertInfo';
|
|
||||||
/**
|
|
||||||
* Возвращает расшифрованную информацию о сертификате из указанного свойства по тэгам
|
|
||||||
*
|
|
||||||
* @param tags = словарь
|
|
||||||
* @param entitiesPath = путь к разбираемой сущности
|
|
||||||
* @returns расшифрованная информация по отдельным тэгам
|
|
||||||
*/
|
|
||||||
export declare const getInfo: (tags: TagsTranslations[], entitiesPath: string) => Promise<TagTranslation[]>;
|
|
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Проверяет наличие ОИД'а (ОИД'ов) у сертификата
|
|
||||||
*
|
|
||||||
* @param oids - ОИД'ы для проверки
|
|
||||||
* @returns флаг наличия ОИД'ов у сертификата
|
|
||||||
*/
|
|
||||||
export declare const hasExtendedKeyUsage: (oids: string | string[]) => Promise<boolean>;
|
|
1
dist/api/certificate/index.d.ts
vendored
1
dist/api/certificate/index.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
export * from './certificate';
|
|
6
dist/api/certificate/isValid.d.ts
vendored
6
dist/api/certificate/isValid.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Проверяет действительность сертификата
|
|
||||||
*
|
|
||||||
* @returns флаг валидности
|
|
||||||
*/
|
|
||||||
export declare const isValid: () => Promise<boolean>;
|
|
8
dist/api/createAttachedSignature.d.ts
vendored
8
dist/api/createAttachedSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает присоединенную подпись сообщения по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param message - подписываемое сообщение
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const createAttachedSignature: (thumbprint: string, unencryptedMessage: string | ArrayBuffer) => Promise<string>;
|
|
8
dist/api/createDetachedSignature.d.ts
vendored
8
dist/api/createDetachedSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает отсоединенную подпись хеша по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const createDetachedSignature: (thumbprint: string, messageHash: string) => Promise<string>;
|
|
9
dist/api/createHash.d.ts
vendored
9
dist/api/createHash.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
* https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
|
|
||||||
*
|
|
||||||
* @param unencryptedMessage - сообщение для хеширования
|
|
||||||
*
|
|
||||||
* @returns хеш
|
|
||||||
*/
|
|
||||||
export declare const createHash: (unencryptedMessage: string | ArrayBuffer) => Promise<string>;
|
|
8
dist/api/createXMLSignature.d.ts
vendored
8
dist/api/createXMLSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает XML подпись для документа в формате XML
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param unencryptedMessage - подписываемое сообщение в формате XML
|
|
||||||
* @returns подпись
|
|
||||||
*/
|
|
||||||
export declare const createXMLSignature: (thumbprint: string, unencryptedMessage: string) => Promise<string>;
|
|
8
dist/api/getAllCertificates.d.ts
vendored
8
dist/api/getAllCertificates.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Возвращает список сертификатов, доступных пользователю из пользовательского хранилища и закрытых ключей, не установленных в системе, без фильтрации по дате и наличию приватного ключа
|
|
||||||
*
|
|
||||||
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
||||||
* @returns список сертификатов
|
|
||||||
*/
|
|
||||||
export declare const getAllCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
|
9
dist/api/getAllContainerCertificates.d.ts
vendored
9
dist/api/getAllContainerCertificates.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Начиная с версии плагина 2.0.13292 есть возможность получить сертификаты из закрытых ключей
|
|
||||||
* Возвращает все сертификаты без фильтрации по дате и наличию приватного ключа
|
|
||||||
*
|
|
||||||
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
||||||
* @returns список сертификатов
|
|
||||||
*/
|
|
||||||
export declare const getAllContainerCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
|
8
dist/api/getAllUserCertificates.d.ts
vendored
8
dist/api/getAllUserCertificates.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Возвращает все сертификаты без фильтрации по дате и наличию приватного ключа
|
|
||||||
*
|
|
||||||
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
||||||
* @returns список сертификатов
|
|
||||||
*/
|
|
||||||
export declare const getAllUserCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
|
9
dist/api/getCertificate.d.ts
vendored
9
dist/api/getCertificate.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Возвращает сертификат по отпечатку
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param validOnly - проверять сертификаты по дате и наличию приватного ключа
|
|
||||||
* @returns сертификат
|
|
||||||
*/
|
|
||||||
export declare const getCertificate: (thumbprint: string, validOnly?: boolean) => Promise<Certificate>;
|
|
8
dist/api/getCertificates.d.ts
vendored
8
dist/api/getCertificates.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Возвращает список сертификатов, доступных пользователю из пользовательского хранилища и закрытых ключей, не установленных в системе
|
|
||||||
*
|
|
||||||
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
||||||
* @returns список сертификатов
|
|
||||||
*/
|
|
||||||
export declare const getCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
|
9
dist/api/getContainerCertificates.d.ts
vendored
9
dist/api/getContainerCertificates.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Начиная с версии плагина 2.0.13292 есть возможность получить сертификаты из закрытых ключей
|
|
||||||
* Возвращает список сертификатов, доступных пользователю в системе
|
|
||||||
*
|
|
||||||
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
||||||
* @returns список сертификатов
|
|
||||||
*/
|
|
||||||
export declare const getContainerCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
|
6
dist/api/getCspVersion.d.ts
vendored
6
dist/api/getCspVersion.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Предоставляет информацию о системе
|
|
||||||
*
|
|
||||||
* @returns информацию о CSP
|
|
||||||
*/
|
|
||||||
export declare const getCspVersion: () => Promise<string>;
|
|
6
dist/api/getPluginVersion.d.ts
vendored
6
dist/api/getPluginVersion.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Предоставляет информацию о системе
|
|
||||||
*
|
|
||||||
* @returns информацию о плагине
|
|
||||||
*/
|
|
||||||
export declare const getPluginVersion: () => Promise<string>;
|
|
10
dist/api/getSystemInfo.d.ts
vendored
10
dist/api/getSystemInfo.d.ts
vendored
@ -1,10 +0,0 @@
|
|||||||
export interface SystemInfo {
|
|
||||||
cadesVersion: string;
|
|
||||||
cspVersion: string;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Предоставляет информацию о системе
|
|
||||||
*
|
|
||||||
* @returns информацию о CSP и плагине
|
|
||||||
*/
|
|
||||||
export declare const getSystemInfo: () => Promise<SystemInfo>;
|
|
8
dist/api/getUserCertificates.d.ts
vendored
8
dist/api/getUserCertificates.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
import { Certificate } from './certificate';
|
|
||||||
/**
|
|
||||||
* Возвращает список сертификатов, доступных пользователю в системе
|
|
||||||
*
|
|
||||||
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
|
|
||||||
* @returns список сертификатов
|
|
||||||
*/
|
|
||||||
export declare const getUserCertificates: (resetCache?: boolean) => Promise<Certificate[]>;
|
|
18
dist/api/index.d.ts
vendored
18
dist/api/index.d.ts
vendored
@ -1,18 +0,0 @@
|
|||||||
export * from './getCertificate';
|
|
||||||
export * from './getUserCertificates';
|
|
||||||
export * from './getAllUserCertificates';
|
|
||||||
export * from './getContainerCertificates';
|
|
||||||
export * from './getAllContainerCertificates';
|
|
||||||
export * from './getCertificates';
|
|
||||||
export * from './getAllCertificates';
|
|
||||||
export * from './getSystemInfo';
|
|
||||||
export * from './isValidSystemSetup';
|
|
||||||
export * from './createXMLSignature';
|
|
||||||
export * from './createDetachedSignature';
|
|
||||||
export * from './addDetachedSignature';
|
|
||||||
export * from './createAttachedSignature';
|
|
||||||
export * from './addAttachedSignature';
|
|
||||||
export * from './createHash';
|
|
||||||
export * from './certificate';
|
|
||||||
export * from './getCspVersion';
|
|
||||||
export * from './getPluginVersion';
|
|
6
dist/api/isValidSystemSetup.d.ts
vendored
6
dist/api/isValidSystemSetup.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Проверяет корректность настроек ЭП на машине
|
|
||||||
*
|
|
||||||
* @returns флаг корректности настроек
|
|
||||||
*/
|
|
||||||
export declare const isValidSystemSetup: () => Promise<boolean>;
|
|
149
dist/constants/cades-constants.d.ts
vendored
149
dist/constants/cades-constants.d.ts
vendored
@ -1,149 +0,0 @@
|
|||||||
export declare const CADESCOM_ATTRIBUTE_OTHER = -1;
|
|
||||||
export declare const CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;
|
|
||||||
export declare const CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
|
|
||||||
export declare const CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
|
|
||||||
export declare const CADESCOM_AllowNoOutstandingRequest = 1;
|
|
||||||
export declare const CADESCOM_AllowNone = 0;
|
|
||||||
export declare const CADESCOM_AllowUntrustedCertificate = 2;
|
|
||||||
export declare const CADESCOM_AllowUntrustedRoot = 4;
|
|
||||||
export declare const CADESCOM_BASE64_TO_BINARY = 1;
|
|
||||||
export declare const CADESCOM_CADES_BES = 1;
|
|
||||||
export declare const CADESCOM_CADES_DEFAULT = 0;
|
|
||||||
export declare const CADESCOM_CADES_T = 5;
|
|
||||||
export declare const CADESCOM_CADES_X_LONG_TYPE_1 = 93;
|
|
||||||
export declare const CADESCOM_CONTAINER_STORE = 100;
|
|
||||||
export declare const CADESCOM_CURRENT_USER_STORE = 2;
|
|
||||||
export declare const CADESCOM_DISPLAY_DATA_ATTRIBUTE = 2;
|
|
||||||
export declare const CADESCOM_DISPLAY_DATA_CONTENT = 1;
|
|
||||||
export declare const CADESCOM_DISPLAY_DATA_NONE = 0;
|
|
||||||
export declare const CADESCOM_ENCODE_ANY = -1;
|
|
||||||
export declare const CADESCOM_ENCODE_BASE64 = 0;
|
|
||||||
export declare const CADESCOM_ENCODE_BINARY = 1;
|
|
||||||
export declare const CADESCOM_ENCRYPTION_ALGORITHM_3DES = 3;
|
|
||||||
export declare const CADESCOM_ENCRYPTION_ALGORITHM_AES = 4;
|
|
||||||
export declare const CADESCOM_ENCRYPTION_ALGORITHM_DES = 2;
|
|
||||||
export declare const CADESCOM_ENCRYPTION_ALGORITHM_GOST_28147_89 = 25;
|
|
||||||
export declare const CADESCOM_ENCRYPTION_ALGORITHM_RC2 = 0;
|
|
||||||
export declare const CADESCOM_ENCRYPTION_ALGORITHM_RC4 = 1;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256_HMAC = 111;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512 = 102;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512_HMAC = 112;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_HMAC = 110;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_MD2 = 1;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_MD4 = 2;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_MD5 = 3;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_SHA1 = 0;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_SHA_256 = 4;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_SHA_384 = 5;
|
|
||||||
export declare const CADESCOM_HASH_ALGORITHM_SHA_512 = 6;
|
|
||||||
export declare const CADESCOM_LOCAL_MACHINE_STORE = 1;
|
|
||||||
export declare const CADESCOM_PKCS7_TYPE = 65535;
|
|
||||||
export declare const CADESCOM_STRING_TO_UCS2LE = 0;
|
|
||||||
export declare const CADESCOM_SkipInstallToStore = 268435456;
|
|
||||||
export declare const CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED = 0;
|
|
||||||
export declare const CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING = 1;
|
|
||||||
export declare const CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE = 2;
|
|
||||||
export declare const CAPICOM_ACTIVE_DIRECTORY_USER_STORE = 3;
|
|
||||||
export declare const CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;
|
|
||||||
export declare const CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
|
|
||||||
export declare const CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY = 7;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY = 8;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_EXTENSION = 5;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_ISSUER_NAME = 2;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_ROOT_NAME = 3;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME = 4;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED = 11;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID = 10;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT = 0;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY = 2;
|
|
||||||
export declare const CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1;
|
|
||||||
export declare const CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME = 1;
|
|
||||||
export declare const CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME = 0;
|
|
||||||
export declare const CAPICOM_CURRENT_USER_STORE = 2;
|
|
||||||
export declare const CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 128;
|
|
||||||
export declare const CAPICOM_EKU_CLIENT_AUTH = 2;
|
|
||||||
export declare const CAPICOM_EKU_OTHER = 0;
|
|
||||||
export declare const CAPICOM_EKU_SMARTCARD_LOGON = 5;
|
|
||||||
export declare const CAPICOM_LOCAL_MACHINE_STORE = 1;
|
|
||||||
export declare const CAPICOM_MEMORY_STORE = 0;
|
|
||||||
export declare const CAPICOM_MY_STORE = "My";
|
|
||||||
export declare const CAPICOM_OID_KEY_USAGE_EXTENSION = 10;
|
|
||||||
export declare const CAPICOM_OID_OTHER = 0;
|
|
||||||
export declare const CAPICOM_PROPID_ACCESS_STATE = 14;
|
|
||||||
export declare const CAPICOM_PROPID_ARCHIVED = 19;
|
|
||||||
export declare const CAPICOM_PROPID_ARCHIVED_KEY_HASH = 65;
|
|
||||||
export declare const CAPICOM_PROPID_AUTO_ENROLL = 21;
|
|
||||||
export declare const CAPICOM_PROPID_CROSS_CERT_DIST_POINTS = 23;
|
|
||||||
export declare const CAPICOM_PROPID_CTL_USAGE = 9;
|
|
||||||
export declare const CAPICOM_PROPID_DATE_STAMP = 27;
|
|
||||||
export declare const CAPICOM_PROPID_DESCRIPTION = 13;
|
|
||||||
export declare const CAPICOM_PROPID_EFS = 17;
|
|
||||||
export declare const CAPICOM_PROPID_ENHKEY_USAGE = 9;
|
|
||||||
export declare const CAPICOM_PROPID_ENROLLMENT = 26;
|
|
||||||
export declare const CAPICOM_PROPID_EXTENDED_ERROR_INFO = 30;
|
|
||||||
export declare const CAPICOM_PROPID_FIRST_RESERVED = 66;
|
|
||||||
export declare const CAPICOM_PROPID_FIRST_USER = 32768;
|
|
||||||
export declare const CAPICOM_PROPID_FORTEZZA_DATA = 18;
|
|
||||||
export declare const CAPICOM_PROPID_FRIENDLY_NAME = 11;
|
|
||||||
export declare const CAPICOM_PROPID_HASH_PROP = 3;
|
|
||||||
export declare const CAPICOM_PROPID_IE30_RESERVED = 7;
|
|
||||||
export declare const CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH = 24;
|
|
||||||
export declare const CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH = 28;
|
|
||||||
export declare const CAPICOM_PROPID_KEY_CONTEXT = 5;
|
|
||||||
export declare const CAPICOM_PROPID_KEY_IDENTIFIER = 20;
|
|
||||||
export declare const CAPICOM_PROPID_KEY_PROV_HANDLE = 1;
|
|
||||||
export declare const CAPICOM_PROPID_KEY_PROV_INFO = 2;
|
|
||||||
export declare const CAPICOM_PROPID_KEY_SPEC = 6;
|
|
||||||
export declare const CAPICOM_PROPID_LAST_RESERVED = 32767;
|
|
||||||
export declare const CAPICOM_PROPID_LAST_USER = 65535;
|
|
||||||
export declare const CAPICOM_PROPID_MD5_HASH = 4;
|
|
||||||
export declare const CAPICOM_PROPID_NEXT_UPDATE_LOCATION = 10;
|
|
||||||
export declare const CAPICOM_PROPID_PUBKEY_ALG_PARA = 22;
|
|
||||||
export declare const CAPICOM_PROPID_PUBKEY_HASH_RESERVED = 8;
|
|
||||||
export declare const CAPICOM_PROPID_PVK_FILE = 12;
|
|
||||||
export declare const CAPICOM_PROPID_RENEWAL = 64;
|
|
||||||
export declare const CAPICOM_PROPID_SHA1_HASH = 3;
|
|
||||||
export declare const CAPICOM_PROPID_SIGNATURE_HASH = 15;
|
|
||||||
export declare const CAPICOM_PROPID_SMART_CARD_DATA = 16;
|
|
||||||
export declare const CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH = 29;
|
|
||||||
export declare const CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH = 25;
|
|
||||||
export declare const CAPICOM_PROPID_UNKNOWN = 0;
|
|
||||||
export declare const CAPICOM_SMART_CARD_USER_STORE = 4;
|
|
||||||
export declare const CAPICOM_STORE_OPEN_EXISTING_ONLY = 128;
|
|
||||||
export declare const CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED = 256;
|
|
||||||
export declare const CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
|
|
||||||
export declare const CAPICOM_STORE_OPEN_READ_ONLY = 0;
|
|
||||||
export declare const CAPICOM_STORE_OPEN_READ_WRITE = 1;
|
|
||||||
export declare const CHECK_NONE = 0;
|
|
||||||
export declare const CHECK_OFFLINE_REVOCATION_STATUS = 16;
|
|
||||||
export declare const CHECK_ONLINE_REVOCATION_STATUS = 8;
|
|
||||||
export declare const CHECK_SIGNATURE_VALIDITY = 4;
|
|
||||||
export declare const CHECK_TIME_VALIDITY = 2;
|
|
||||||
export declare const CHECK_TRUSTED_ROOT = 1;
|
|
||||||
export declare const LOG_LEVEL_DEBUG = 4;
|
|
||||||
export declare const LOG_LEVEL_ERROR = 1;
|
|
||||||
export declare const LOG_LEVEL_INFO = 2;
|
|
||||||
export declare const TRUST_CTL_IS_NOT_SIGNATURE_VALID = 262144;
|
|
||||||
export declare const TRUST_CTL_IS_NOT_TIME_VALID = 131072;
|
|
||||||
export declare const TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 524288;
|
|
||||||
export declare const TRUST_IS_CYCLIC = 128;
|
|
||||||
export declare const TRUST_IS_NOT_SIGNATURE_VALID = 8;
|
|
||||||
export declare const TRUST_IS_NOT_TIME_NESTED = 2;
|
|
||||||
export declare const TRUST_IS_NOT_TIME_VALID = 1;
|
|
||||||
export declare const TRUST_IS_NOT_VALID_FOR_USAGE = 16;
|
|
||||||
export declare const TRUST_IS_PARTIAL_CHAIN = 65536;
|
|
||||||
export declare const TRUST_IS_REVOKED = 4;
|
|
||||||
export declare const TRUST_IS_UNTRUSTED_ROOT = 32;
|
|
||||||
export declare const TRUST_REVOCATION_STATUS_UNKNOWN = 64;
|
|
||||||
export declare const XmlDsigGost3410Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
|
|
||||||
export declare const XmlDsigGost3410UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
|
|
||||||
export declare const XmlDsigGost3411Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";
|
|
||||||
export declare const XmlDsigGost3411UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
|
|
4
dist/constants/index.d.ts
vendored
4
dist/constants/index.d.ts
vendored
@ -1,4 +0,0 @@
|
|||||||
export * from './cades-constants';
|
|
||||||
export * from './issuer-tags-translations';
|
|
||||||
export * from './oids-dictionary';
|
|
||||||
export * from './subject-tags-translations';
|
|
2
dist/constants/issuer-tags-translations.d.ts
vendored
2
dist/constants/issuer-tags-translations.d.ts
vendored
@ -1,2 +0,0 @@
|
|||||||
import { TagsTranslations } from './tags-translations';
|
|
||||||
export declare const ISSUER_TAGS_TRANSLATIONS: TagsTranslations[];
|
|
48
dist/constants/oids-dictionary.d.ts
vendored
48
dist/constants/oids-dictionary.d.ts
vendored
@ -1,48 +0,0 @@
|
|||||||
export declare const OIDS_DICTIONARY: {
|
|
||||||
'1.2.643.2.2.34.6': string;
|
|
||||||
'1.2.643.2.39.1.1': string;
|
|
||||||
'1.2.643.3.131.1.1': string;
|
|
||||||
'1.2.643.100.4': string;
|
|
||||||
'1.2.643.100.1': string;
|
|
||||||
'1.2.643.100.5': string;
|
|
||||||
'1.2.643.100.3': string;
|
|
||||||
'1.2.643.3.141.1.1': string;
|
|
||||||
'1.2.643.3.141.1.2': string;
|
|
||||||
'1.2.643.3.2.100.65.13.11': string;
|
|
||||||
'1.2.643.3.8.100.1': string;
|
|
||||||
'1.2.643.3.8.100.1.1': string;
|
|
||||||
'1.2.643.3.8.100.1.10': string;
|
|
||||||
'1.2.643.3.8.100.1.11': string;
|
|
||||||
'1.2.643.3.8.100.1.12': string;
|
|
||||||
'1.2.643.3.8.100.1.13': string;
|
|
||||||
'1.2.643.3.8.100.1.14': string;
|
|
||||||
'1.2.643.3.8.100.1.2': string;
|
|
||||||
'1.2.643.3.8.100.1.3': string;
|
|
||||||
'1.2.643.3.8.100.1.4': string;
|
|
||||||
'1.2.643.3.8.100.1.5': string;
|
|
||||||
'1.2.643.3.8.100.1.6': string;
|
|
||||||
'1.2.643.3.8.100.1.7': string;
|
|
||||||
'1.2.643.3.8.100.1.8': string;
|
|
||||||
'1.2.643.3.8.100.1.9': string;
|
|
||||||
'1.2.643.5.1.24.2.1.3': string;
|
|
||||||
'1.2.643.5.1.24.2.1.3.1': string;
|
|
||||||
'1.2.643.5.1.24.2.2.2': string;
|
|
||||||
'1.2.643.5.1.24.2.2.3': string;
|
|
||||||
'1.2.643.6.2.1.7.1': string;
|
|
||||||
'1.2.643.6.2.1.7.2': string;
|
|
||||||
'1.2.643.6.3': string;
|
|
||||||
'1.2.643.6.3.1.1': string;
|
|
||||||
'1.2.643.6.3.1.2.1': string;
|
|
||||||
'1.2.643.6.3.1.2.2': string;
|
|
||||||
'1.2.643.6.3.1.2.3': string;
|
|
||||||
'1.2.643.6.3.1.3.1': string;
|
|
||||||
'1.2.643.6.3.1.4.1': string;
|
|
||||||
'1.2.643.6.3.1.4.2': string;
|
|
||||||
'1.2.643.6.3.1.4.3': string;
|
|
||||||
'1.2.840.113549.1.9.2': string;
|
|
||||||
'1.3.6.1.4.1.24138.1.1.8.1': string;
|
|
||||||
'1.3.6.1.4.1.29919.21': string;
|
|
||||||
'1.3.6.1.5.5.7.3.2': string;
|
|
||||||
'1.3.6.1.5.5.7.3.4': string;
|
|
||||||
'1.3.643.3.8.100.15': string;
|
|
||||||
};
|
|
@ -1,2 +0,0 @@
|
|||||||
import { TagsTranslations } from './tags-translations';
|
|
||||||
export declare const SUBJECT_TAGS_TRANSLATIONS: TagsTranslations[];
|
|
4
dist/constants/tags-translations.d.ts
vendored
4
dist/constants/tags-translations.d.ts
vendored
@ -1,4 +0,0 @@
|
|||||||
export interface TagsTranslations {
|
|
||||||
possibleNames: string[];
|
|
||||||
translation: string;
|
|
||||||
}
|
|
7
dist/crypto-pro-js.d.ts
vendored
7
dist/crypto-pro-js.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
// Type definitions for crypto-pro-js 2.3.3
|
|
||||||
// Project: crypto-pro-js
|
|
||||||
// Definitions by: Artem Vasilev https://github.com/kernusr
|
|
||||||
|
|
||||||
export as namespace cryptoPro;
|
|
||||||
|
|
||||||
export * from './api';
|
|
6071
dist/crypto-pro-js.js
vendored
6071
dist/crypto-pro-js.js
vendored
File diff suppressed because one or more lines are too long
1
dist/crypto-pro-js.js.map
vendored
1
dist/crypto-pro-js.js.map
vendored
File diff suppressed because one or more lines are too long
11
dist/crypto-pro-js.min.js
vendored
11
dist/crypto-pro-js.min.js
vendored
File diff suppressed because one or more lines are too long
1
dist/crypto-pro-js.min.js.map
vendored
1
dist/crypto-pro-js.min.js.map
vendored
File diff suppressed because one or more lines are too long
2557
dist/crypto-pro.js
vendored
Normal file
2557
dist/crypto-pro.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
dist/crypto-pro.js.map
vendored
Normal file
1
dist/crypto-pro.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
dist/helpers/_afterPluginsLoaded.d.ts
vendored
3
dist/helpers/_afterPluginsLoaded.d.ts
vendored
@ -1,3 +0,0 @@
|
|||||||
declare type Unpromisify<T> = T extends Promise<infer R> ? R : T;
|
|
||||||
export declare const _afterPluginsLoaded: <T extends (...args: any[]) => any>(fn: T) => (...args: Parameters<T>) => Promise<Unpromisify<ReturnType<T>>>;
|
|
||||||
export {};
|
|
1
dist/helpers/_extractCommonName.d.ts
vendored
1
dist/helpers/_extractCommonName.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
export declare const _extractCommonName: (subjectName: string) => string | undefined;
|
|
@ -1 +0,0 @@
|
|||||||
export declare const _extractMeaningfulErrorMessage: (error: Error) => string | null;
|
|
3
dist/helpers/_generateCadesFn.d.ts
vendored
3
dist/helpers/_generateCadesFn.d.ts
vendored
@ -1,3 +0,0 @@
|
|||||||
export declare const __cadesAsyncToken__: {};
|
|
||||||
export declare const __createCadesPluginObject__: (...args: any[]) => any;
|
|
||||||
export declare const _generateCadesFn: (callback: Function) => string;
|
|
7
dist/helpers/_getCadesCert.d.ts
vendored
7
dist/helpers/_getCadesCert.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает сертификат в формате Cades по отпечатку
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @returns сертификат в формате Cades
|
|
||||||
*/
|
|
||||||
export declare const _getCadesCert: (thumbprint: string) => Promise<any>;
|
|
7
dist/helpers/_getCadesContainerCert.d.ts
vendored
7
dist/helpers/_getCadesContainerCert.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает сертификат в формате Cades по отпечатку из хранилища закрытого ключа
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @returns сертификат в формате Cades
|
|
||||||
*/
|
|
||||||
export declare const _getCadesContainerCert: (thumbprint: string) => Promise<any>;
|
|
7
dist/helpers/_getCadesUserCert.d.ts
vendored
7
dist/helpers/_getCadesUserCert.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает сертификат в формате Cades по отпечатку из хранилища пользователя
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @returns сертификат в формате Cades
|
|
||||||
*/
|
|
||||||
export declare const _getCadesUserCert: (thumbprint: string) => Promise<any>;
|
|
7
dist/helpers/_getDateObj.d.ts
vendored
7
dist/helpers/_getDateObj.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает объект даты, совместимый с Cades plugin'ом, зависящий от браузера.
|
|
||||||
*
|
|
||||||
* В IE необходимо использовать специфичный формат "VT_DATE"
|
|
||||||
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Microsoft_Extensions/Date.getVarDate
|
|
||||||
*/
|
|
||||||
export declare const _getDateObj: (dateObj: any) => Date;
|
|
1
dist/helpers/_isSupportedCSPVersion.d.ts
vendored
1
dist/helpers/_isSupportedCSPVersion.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
export declare const _isSupportedCSPVersion: (version: string) => boolean;
|
|
1
dist/helpers/_isSupportedCadesVersion.d.ts
vendored
1
dist/helpers/_isSupportedCadesVersion.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
export declare const _isSupportedCadesVersion: (version: string) => boolean;
|
|
14
dist/helpers/_parseCertInfo.d.ts
vendored
14
dist/helpers/_parseCertInfo.d.ts
vendored
@ -1,14 +0,0 @@
|
|||||||
import { TagsTranslations } from '../constants/tags-translations';
|
|
||||||
export interface TagTranslation {
|
|
||||||
description: string;
|
|
||||||
title: string;
|
|
||||||
isTranslated: boolean;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Парсит информацию из строки с информацией о сертификате
|
|
||||||
*
|
|
||||||
* @param tagsTranslations - словарь с расшифровками тэгов
|
|
||||||
* @param rawInfo - данные для парсинга
|
|
||||||
* @returns расшифрованная информация по отдельным тэгам
|
|
||||||
*/
|
|
||||||
export declare const _parseCertInfo: (tagsTranslations: TagsTranslations[], rawInfo: string) => TagTranslation[];
|
|
26
example/cert-list.js
Normal file
26
example/cert-list.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
;(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var $certs = document.querySelector('#certList');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Пример получения списка сертификатов
|
||||||
|
* */
|
||||||
|
window.CryptoPro.call('getCertsList').then(function (list) {
|
||||||
|
list.forEach(function (cert) {
|
||||||
|
var $certOption = document.createElement('option');
|
||||||
|
|
||||||
|
if (typeof $certOption.textContent !== 'undefined') {
|
||||||
|
$certOption.textContent = cert.label;
|
||||||
|
} else {
|
||||||
|
$certOption.innerText = cert.label;
|
||||||
|
}
|
||||||
|
|
||||||
|
$certOption.value = cert.thumbprint;
|
||||||
|
|
||||||
|
$certs.appendChild($certOption);
|
||||||
|
});
|
||||||
|
}, function (error) {
|
||||||
|
console.error(error);
|
||||||
|
});
|
||||||
|
}());
|
24
example/create-sign.js
Normal file
24
example/create-sign.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
;(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Пример создания подписи данных, сгенерированных по ГОСТ Р 34.11-94
|
||||||
|
* https://ru.wikipedia.org/wiki/%D0%93%D0%9E%D0%A1%D0%A2_%D0%A0_34.11-94
|
||||||
|
* */
|
||||||
|
var $certs = document.querySelector('#certList'),
|
||||||
|
$createSignBtn = document.querySelector('#createSign'),
|
||||||
|
$signatureCnt = document.querySelector('#createdSign'),
|
||||||
|
|
||||||
|
// Вычислинный hash по ГОСТ Р 34.11-94 для строки: "abc"
|
||||||
|
hash = 'b285056dbf18d7392d7677369524dd14747459ed8143997e163b2986f92fd42c',
|
||||||
|
|
||||||
|
hashBase64 = window.btoa(hash);
|
||||||
|
|
||||||
|
$createSignBtn.addEventListener('click', function () {
|
||||||
|
var thumbprint = $certs.value;
|
||||||
|
|
||||||
|
window.CryptoPro.call('signData', thumbprint, hashBase64).then(function (signature) {
|
||||||
|
$signatureCnt.value = signature;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}());
|
29
example/index.html
Executable file
29
example/index.html
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Пример использования CryptoPro</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<select id="certList"></select>
|
||||||
|
<button id="createSign" type="button">Создать подпись</button>
|
||||||
|
<br>
|
||||||
|
<textarea id="createdSign" cols="90" rows="30"></textarea>
|
||||||
|
|
||||||
|
<!-- Полифиллы для работы библиотеки -->
|
||||||
|
<script src="polyfills/addEventListener.js"></script>
|
||||||
|
<script src="polyfills/promise.js"></script>
|
||||||
|
<script src="polyfills/forEach.js"></script>
|
||||||
|
<script src="polyfills/map.js"></script>
|
||||||
|
|
||||||
|
<!-- Библиотека -->
|
||||||
|
<script src="../dist/crypto-pro.js"></script>
|
||||||
|
|
||||||
|
<!-- Полифиллы для работы демо скриптов -->
|
||||||
|
<script src="polyfills/atob-btoa.js"></script>
|
||||||
|
|
||||||
|
<!-- Демо скрипты -->
|
||||||
|
<script src="cert-list.js"></script>
|
||||||
|
<script src="create-sign.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
32
example/polyfills/addEventListener.js
Normal file
32
example/polyfills/addEventListener.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
!window.addEventListener && (function (WindowPrototype, DocumentPrototype, ElementPrototype, addEventListener, removeEventListener, dispatchEvent, registry) {
|
||||||
|
WindowPrototype[addEventListener] = DocumentPrototype[addEventListener] = ElementPrototype[addEventListener] = function (type, listener) {
|
||||||
|
var target = this;
|
||||||
|
|
||||||
|
registry.unshift([target, type, listener, function (event) {
|
||||||
|
event.currentTarget = target;
|
||||||
|
event.preventDefault = function () {
|
||||||
|
event.returnValue = false
|
||||||
|
};
|
||||||
|
event.stopPropagation = function () {
|
||||||
|
event.cancelBubble = true
|
||||||
|
};
|
||||||
|
event.target = event.srcElement || target;
|
||||||
|
|
||||||
|
listener.call(target, event);
|
||||||
|
}]);
|
||||||
|
|
||||||
|
this.attachEvent("on" + type, registry[0][3]);
|
||||||
|
};
|
||||||
|
|
||||||
|
WindowPrototype[removeEventListener] = DocumentPrototype[removeEventListener] = ElementPrototype[removeEventListener] = function (type, listener) {
|
||||||
|
for (var index = 0, register; register = registry[index]; ++index) {
|
||||||
|
if (register[0] == this && register[1] == type && register[2] == listener) {
|
||||||
|
return this.detachEvent("on" + type, registry.splice(index, 1)[0][3]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
WindowPrototype[dispatchEvent] = DocumentPrototype[dispatchEvent] = ElementPrototype[dispatchEvent] = function (eventObject) {
|
||||||
|
return this.fireEvent("on" + eventObject.type, eventObject);
|
||||||
|
};
|
||||||
|
})(Window.prototype, HTMLDocument.prototype, Element.prototype, "addEventListener", "removeEventListener", "dispatchEvent", []);
|
59
example/polyfills/forEach.js
Normal file
59
example/polyfills/forEach.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.18
|
||||||
|
// Ссылка (en): http://es5.github.io/#x15.4.4.18
|
||||||
|
// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.18
|
||||||
|
if (!Array.prototype.forEach) {
|
||||||
|
|
||||||
|
Array.prototype.forEach = function (callback, thisArg) {
|
||||||
|
|
||||||
|
var T, k;
|
||||||
|
|
||||||
|
if (this == null) {
|
||||||
|
throw new TypeError(' this is null or not defined');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Положим O равным результату вызова ToObject passing the |this| value as the argument.
|
||||||
|
var O = Object(this);
|
||||||
|
|
||||||
|
// 2. Положим lenValue равным результату вызова внутреннего метода Get объекта O с аргументом "length".
|
||||||
|
// 3. Положим len равным ToUint32(lenValue).
|
||||||
|
var len = O.length >>> 0;
|
||||||
|
|
||||||
|
// 4. Если IsCallable(callback) равен false, выкинем исключение TypeError.
|
||||||
|
// Смотрите: http://es5.github.com/#x9.11
|
||||||
|
if (typeof callback !== 'function') {
|
||||||
|
throw new TypeError(callback + ' is not a function');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
|
||||||
|
if (arguments.length > 1) {
|
||||||
|
T = thisArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. Положим k равным 0
|
||||||
|
k = 0;
|
||||||
|
|
||||||
|
// 7. Пока k < len, будем повторять
|
||||||
|
while (k < len) {
|
||||||
|
|
||||||
|
var kValue;
|
||||||
|
|
||||||
|
// a. Положим Pk равным ToString(k).
|
||||||
|
// Это неявное преобразование для левостороннего операнда в операторе in
|
||||||
|
// b. Положим kPresent равным результату вызова внутреннего метода HasProperty объекта O с аргументом Pk.
|
||||||
|
// Этот шаг может быть объединён с шагом c
|
||||||
|
// c. Если kPresent равен true, то
|
||||||
|
if (k in O) {
|
||||||
|
|
||||||
|
// i. Положим kValue равным результату вызова внутреннего метода Get объекта O с аргументом Pk.
|
||||||
|
kValue = O[k];
|
||||||
|
|
||||||
|
// ii. Вызовем внутренний метод Call функции callback с объектом T в качестве значения this и
|
||||||
|
// списком аргументов, содержащим kValue, k и O.
|
||||||
|
callback.call(T, kValue, k, O);
|
||||||
|
}
|
||||||
|
// d. Увеличим k на 1.
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
// 8. Вернём undefined.
|
||||||
|
};
|
||||||
|
}
|
91
example/polyfills/map.js
Normal file
91
example/polyfills/map.js
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.19
|
||||||
|
// Ссылка (en): http://es5.github.com/#x15.4.4.19
|
||||||
|
// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.19
|
||||||
|
if (!Array.prototype.map) {
|
||||||
|
|
||||||
|
Array.prototype.map = function(callback, thisArg) {
|
||||||
|
|
||||||
|
var T, A, k;
|
||||||
|
|
||||||
|
if (this == null) {
|
||||||
|
throw new TypeError(' this is null or not defined');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Положим O равным результату вызова ToObject с передачей ему
|
||||||
|
// значения |this| в качестве аргумента.
|
||||||
|
var O = Object(this);
|
||||||
|
|
||||||
|
// 2. Положим lenValue равным результату вызова внутреннего метода Get
|
||||||
|
// объекта O с аргументом "length".
|
||||||
|
// 3. Положим len равным ToUint32(lenValue).
|
||||||
|
var len = O.length >>> 0;
|
||||||
|
|
||||||
|
// 4. Если вызов IsCallable(callback) равен false, выкидываем исключение TypeError.
|
||||||
|
// Смотрите (en): http://es5.github.com/#x9.11
|
||||||
|
// Смотрите (ru): http://es5.javascript.ru/x9.html#x9.11
|
||||||
|
if (typeof callback !== 'function') {
|
||||||
|
throw new TypeError(callback + ' is not a function');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
|
||||||
|
if (arguments.length > 1) {
|
||||||
|
T = thisArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. Положим A равным новому масиву, как если бы он был создан выражением new Array(len),
|
||||||
|
// где Array является стандартным встроенным конструктором с этим именем,
|
||||||
|
// а len является значением len.
|
||||||
|
A = new Array(len);
|
||||||
|
|
||||||
|
// 7. Положим k равным 0
|
||||||
|
k = 0;
|
||||||
|
|
||||||
|
// 8. Пока k < len, будем повторять
|
||||||
|
while (k < len) {
|
||||||
|
|
||||||
|
var kValue, mappedValue;
|
||||||
|
|
||||||
|
// a. Положим Pk равным ToString(k).
|
||||||
|
// Это неявное преобразование для левостороннего операнда в операторе in
|
||||||
|
// b. Положим kPresent равным результату вызова внутреннего метода HasProperty
|
||||||
|
// объекта O с аргументом Pk.
|
||||||
|
// Этот шаг может быть объединён с шагом c
|
||||||
|
// c. Если kPresent равен true, то
|
||||||
|
if (k in O) {
|
||||||
|
|
||||||
|
// i. Положим kValue равным результату вызова внутреннего метода Get
|
||||||
|
// объекта O с аргументом Pk.
|
||||||
|
kValue = O[k];
|
||||||
|
|
||||||
|
// ii. Положим mappedValue равным результату вызова внутреннего метода Call
|
||||||
|
// функции callback со значением T в качестве значения this и списком
|
||||||
|
// аргументов, содержащим kValue, k и O.
|
||||||
|
mappedValue = callback.call(T, kValue, k, O);
|
||||||
|
|
||||||
|
// iii. Вызовем внутренний метод DefineOwnProperty объекта A с аргументами
|
||||||
|
// Pk, Описатель Свойства
|
||||||
|
// { Value: mappedValue,
|
||||||
|
// Writable: true,
|
||||||
|
// Enumerable: true,
|
||||||
|
// Configurable: true }
|
||||||
|
// и false.
|
||||||
|
|
||||||
|
// В браузерах, поддерживающих Object.defineProperty, используем следующий код:
|
||||||
|
// Object.defineProperty(A, k, {
|
||||||
|
// value: mappedValue,
|
||||||
|
// writable: true,
|
||||||
|
// enumerable: true,
|
||||||
|
// configurable: true
|
||||||
|
// });
|
||||||
|
|
||||||
|
// Для лучшей поддержки браузерами, используем следующий код:
|
||||||
|
A[k] = mappedValue;
|
||||||
|
}
|
||||||
|
// d. Увеличим k на 1.
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 9. Вернём A.
|
||||||
|
return A;
|
||||||
|
};
|
||||||
|
}
|
1
examples/script-tag/.gitignore
vendored
1
examples/script-tag/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
/public/dist
|
|
485
examples/script-tag/package-lock.json
generated
485
examples/script-tag/package-lock.json
generated
@ -1,485 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "crypto-pro-example-es5-script-tag",
|
|
||||||
"version": "2.3.3",
|
|
||||||
"lockfileVersion": 2,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"name": "crypto-pro-example-es5-script-tag",
|
|
||||||
"version": "2.3.3",
|
|
||||||
"dependencies": {
|
|
||||||
"crypto-pro-js": "^2.3.3"
|
|
||||||
},
|
|
||||||
"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.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/crypto-pro-js/-/crypto-pro-js-2.3.3.tgz",
|
|
||||||
"integrity": "sha512-ge6PXRw6pu2kXeaqwEpHvmQEuSRQWJcVfQfPfF5gGONIi+jUHFsvkeS5ojFcKKBDqFHnYUQXFZ1aMKDGdoVRqg==",
|
|
||||||
"engines": {
|
|
||||||
"node": "~16"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
|
||||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
|
||||||
"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": {
|
|
||||||
"balanced-match": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
"requires": {
|
|
||||||
"is-windows": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
"requires": {
|
|
||||||
"balanced-match": "^1.0.0",
|
|
||||||
"concat-map": "0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"colors": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
|
|
||||||
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"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
|
|
||||||
},
|
|
||||||
"crypto-pro-js": {
|
|
||||||
"version": "2.3.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/crypto-pro-js/-/crypto-pro-js-2.3.3.tgz",
|
|
||||||
"integrity": "sha512-ge6PXRw6pu2kXeaqwEpHvmQEuSRQWJcVfQfPfF5gGONIi+jUHFsvkeS5ojFcKKBDqFHnYUQXFZ1aMKDGdoVRqg=="
|
|
||||||
},
|
|
||||||
"fs.realpath": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"glob": {
|
|
||||||
"version": "7.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
|
||||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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
|
|
||||||
},
|
|
||||||
"inflight": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"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
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
"requires": {
|
|
||||||
"semver": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mime": {
|
|
||||||
"version": "1.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
|
||||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"minimatch": {
|
|
||||||
"version": "3.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
|
||||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"brace-expansion": "^1.1.7"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"minimist": {
|
|
||||||
"version": "0.0.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
|
||||||
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
"requires": {
|
|
||||||
"colors": ">=0.6.0",
|
|
||||||
"mime": "^1.2.9",
|
|
||||||
"optimist": ">=0.3.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"optimist": {
|
|
||||||
"version": "0.6.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
|
|
||||||
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"minimist": "~0.0.1",
|
|
||||||
"wordwrap": "~0.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.11",
|
|
||||||
"rimraf": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rimraf": {
|
|
||||||
"version": "3.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
|
||||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"glob": "^7.1.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"semver": {
|
|
||||||
"version": "6.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
"requires": {
|
|
||||||
"better-path-resolve": "^1.0.0",
|
|
||||||
"graceful-fs": "^4.1.11",
|
|
||||||
"make-dir": "^3.0.0",
|
|
||||||
"rename-overwrite": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wordwrap": {
|
|
||||||
"version": "0.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
|
|
||||||
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "crypto-pro-example-es5-script-tag",
|
|
||||||
"version": "2.3.3",
|
|
||||||
"description": "Пример использования пакета crypto-pro через тэг script",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"link-library": "symlink-dir ./node_modules/crypto-pro-js/dist ./public/dist",
|
|
||||||
"serve": "static --host-address localhost --port 8080 public",
|
|
||||||
"start": "npm run link-library && npm run serve"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"node-static": "0.7.11",
|
|
||||||
"symlink-dir": "3.1.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"crypto-pro-js": "^2.3.3"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* Пример получения списка сертификатов
|
|
||||||
* */
|
|
||||||
;(function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var $certificate = document.getElementById('certificate'),
|
|
||||||
$createSignature = document.getElementById('createSignature'),
|
|
||||||
$certificateDetails = document.getElementById('certificateDetails'),
|
|
||||||
$certificateError = document.getElementById('certificateListError');
|
|
||||||
|
|
||||||
$certificate.addEventListener('change', function handleCertSelection() {
|
|
||||||
var thumbprint = $certificate.value;
|
|
||||||
|
|
||||||
$createSignature.disabled = !thumbprint;
|
|
||||||
$certificateDetails.style.display = thumbprint ? 'block' : 'none';
|
|
||||||
});
|
|
||||||
|
|
||||||
window.cryptoPro.getCertificates().then(function (certificateList) {
|
|
||||||
certificateList.forEach(function (certificate) {
|
|
||||||
var $certOption = document.createElement('option');
|
|
||||||
|
|
||||||
$certOption.textContent = certificate.name + ' (действителен до: ' + certificate.validTo + ')';
|
|
||||||
$certOption.value = certificate.thumbprint;
|
|
||||||
|
|
||||||
$certificate.appendChild($certOption);
|
|
||||||
});
|
|
||||||
}, function (error) {
|
|
||||||
$certificateError.textContent = error.message;
|
|
||||||
});
|
|
||||||
})();
|
|
@ -1,104 +0,0 @@
|
|||||||
/**
|
|
||||||
* Пример создания подписи данных
|
|
||||||
* */
|
|
||||||
;(function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var $createSignature = document.forms.createSignature,
|
|
||||||
$certificate = document.getElementById('certificate'),
|
|
||||||
$message = document.getElementById('message'),
|
|
||||||
$messageFile = document.getElementById('messageFile'),
|
|
||||||
$messageFileError = document.getElementById('messageFileError'),
|
|
||||||
$hash = document.getElementById('hash'),
|
|
||||||
$hashError = document.getElementById('hashError'),
|
|
||||||
$signature = document.getElementById('signature'),
|
|
||||||
$signatureError = document.getElementById('signatureError'),
|
|
||||||
|
|
||||||
// https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/213/12/ogrnichenie-n-rzmer-podpisyvemogo-fjjl-v-bruzere
|
|
||||||
MAX_FILE_SIZE = 25000000;
|
|
||||||
|
|
||||||
function readFile(messageFile) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
var fileReader = new FileReader();
|
|
||||||
|
|
||||||
fileReader.onload = function () {
|
|
||||||
resolve(this.result);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (messageFile.size > MAX_FILE_SIZE) {
|
|
||||||
reject('Файл для подписи не должен превышать ' + MAX_FILE_SIZE / 1000000 + 'МБ');
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fileReader.readAsArrayBuffer(messageFile);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSignature(message, hash) {
|
|
||||||
var thumbprint = $certificate.value,
|
|
||||||
signatureType = document.querySelector('input[name="signatureType"]:checked').value,
|
|
||||||
signaturePromise;
|
|
||||||
|
|
||||||
$hash.value = hash;
|
|
||||||
|
|
||||||
$signature.placeholder = 'Создается...';
|
|
||||||
$signature.value = '';
|
|
||||||
|
|
||||||
switch (signatureType) {
|
|
||||||
case 'attached':
|
|
||||||
signaturePromise = window.cryptoPro.createAttachedSignature(thumbprint, message);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 'xml':
|
|
||||||
signaturePromise = window.cryptoPro.createXMLSignature(thumbprint, message);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 'detached':
|
|
||||||
signaturePromise = window.cryptoPro.createDetachedSignature(thumbprint, hash);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
signaturePromise.then(function (signature) {
|
|
||||||
$signature.value = signature;
|
|
||||||
$signatureError.textContent = '';
|
|
||||||
}, function (error) {
|
|
||||||
$signature.placeholder = 'Не создана';
|
|
||||||
$signatureError.textContent = error.message;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$message.addEventListener('keydown', function() {
|
|
||||||
$messageFile.value = null;
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($messageFile) {
|
|
||||||
$messageFile.addEventListener('change', function() {
|
|
||||||
$message.value = '';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$createSignature.addEventListener('submit', function (event) {
|
|
||||||
var messageFile = $messageFile && $messageFile.files.length && $messageFile.files[0],
|
|
||||||
messagePromise = Promise.resolve($message.value);
|
|
||||||
|
|
||||||
if (messageFile) {
|
|
||||||
messagePromise = readFile(messageFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
messagePromise.then(function (message) {
|
|
||||||
$hash.placeholder = 'Вычисляется...';
|
|
||||||
$hash.value = '';
|
|
||||||
|
|
||||||
window.cryptoPro.createHash(message).then(createSignature.bind(null, message), function (hashError) {
|
|
||||||
$hash.placeholder = 'Не вычислен';
|
|
||||||
$hashError.textContent = hashError.message;
|
|
||||||
});
|
|
||||||
}, function (fileError) {
|
|
||||||
$messageFileError.textContent = fileError;
|
|
||||||
})
|
|
||||||
});
|
|
||||||
})();
|
|
@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* Пример получения сведений о системе
|
|
||||||
*/
|
|
||||||
;(function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var $systemInfo = document.getElementById('systemInfo'),
|
|
||||||
$systemInfoError = document.getElementById('systemInfoError');
|
|
||||||
|
|
||||||
window.cryptoPro.getSystemInfo().then(function (systemInfo) {
|
|
||||||
window.cryptoPro.isValidSystemSetup().then(function (isValidSystemSetup) {
|
|
||||||
systemInfo.isValidSystemSetup = isValidSystemSetup;
|
|
||||||
|
|
||||||
$systemInfo.textContent = JSON.stringify(systemInfo, null, ' ');
|
|
||||||
}, handleError);
|
|
||||||
}, handleError);
|
|
||||||
|
|
||||||
function handleError(error) {
|
|
||||||
$systemInfoError.textContent = error.message;
|
|
||||||
}
|
|
||||||
})();
|
|
@ -1,97 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Пример использования cryptoPro</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<form name="createSignature" novalidate>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Создание подписи</legend>
|
|
||||||
<label for="message">Подписываемое сообщение: *</label>
|
|
||||||
<br>
|
|
||||||
<textarea id="message" cols="80" rows="5" placeholder="Введите сообщение" autofocus required>Привет мир!</textarea>
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<!--[if gte IE 10]><!-->
|
|
||||||
<label for="messageFile">Или файл для подписи:</label>
|
|
||||||
<br/>
|
|
||||||
<input id="messageFile" type="file">
|
|
||||||
<pre id="messageFileError"></pre>
|
|
||||||
<!--<![endif]-->
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<label for="certificate">Сертификат: *</label>
|
|
||||||
<br>
|
|
||||||
<select id="certificate" tabindex="-1" required>
|
|
||||||
<option disabled selected>Не выбран</option>
|
|
||||||
</select>
|
|
||||||
<pre id="certificateListError"></pre>
|
|
||||||
|
|
||||||
<details id="certificateDetails">
|
|
||||||
<summary>Информация о сертификате</summary>
|
|
||||||
<pre id="certificateInfo"></pre>
|
|
||||||
</details>
|
|
||||||
<pre id="certificateInfoError"></pre>
|
|
||||||
|
|
||||||
<label>Тип подписи: *</label>
|
|
||||||
<br>
|
|
||||||
<label><input type="radio" name="signatureType" value="attached">Совмещенная</label>
|
|
||||||
<br>
|
|
||||||
<label><input type="radio" name="signatureType" value="xml">XML</label>
|
|
||||||
<br>
|
|
||||||
<label><input type="radio" name="signatureType" value="detached" checked>Отделенная</label>
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<button id="createSignature" type="submit" disabled>Создать подпись</button>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<fieldset>
|
|
||||||
<legend>Результат</legend>
|
|
||||||
<label for="hash">Хеш (ГОСТ Р 34.11-2012 256 бит):</label><br>
|
|
||||||
<textarea id="hash" cols="80" rows="5" placeholder="Не вычислен"></textarea>
|
|
||||||
<br>
|
|
||||||
<pre id="hashError"></pre>
|
|
||||||
|
|
||||||
<label for="signature">Подпись (PKCS7):</label><br>
|
|
||||||
<textarea id="signature" cols="80" rows="30" placeholder="Не создана"></textarea>
|
|
||||||
<pre id="signatureError"></pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Для
|
|
||||||
<a href="https://www.gosuslugi.ru/pgu/eds/"
|
|
||||||
target="_blank"
|
|
||||||
rel="nofollow noopener noreferrer"
|
|
||||||
title="Перейти к проверке подписи">проверки</a>
|
|
||||||
нужно создать файл со сгенерированной подписью в кодировке UTF-8 с расширением *.sgn
|
|
||||||
<br>
|
|
||||||
для отделенной подписи (или *.sig для совмещенной).
|
|
||||||
</p>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<fieldset>
|
|
||||||
<legend>Информация о системе</legend>
|
|
||||||
<pre id="systemInfo"></pre>
|
|
||||||
<pre id="systemInfoError"></pre>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<!-- Полифиллы для работы библиотеки -->
|
|
||||||
<script src="polyfills/promise.js"></script>
|
|
||||||
<script src="polyfills/find.js"></script>
|
|
||||||
|
|
||||||
<!-- Библиотека -->
|
|
||||||
<script src="dist/crypto-pro-js.js"></script>
|
|
||||||
|
|
||||||
<!-- Полифиллы для работы демо скриптов -->
|
|
||||||
<script src="polyfills/atob-btoa.js"></script>
|
|
||||||
<script src="polyfills/details-element-polyfill.js"></script>
|
|
||||||
|
|
||||||
<!-- Демо скрипты -->
|
|
||||||
<script src="cert-list.js"></script>
|
|
||||||
<script src="create-sign.js"></script>
|
|
||||||
<script src="get-env-info.js"></script>
|
|
||||||
<script src="show-cert.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,194 +0,0 @@
|
|||||||
/*
|
|
||||||
Details Element Polyfill 2.4.0
|
|
||||||
Copyright © 2019 Javan Makhmali
|
|
||||||
*/
|
|
||||||
(function() {
|
|
||||||
"use strict";
|
|
||||||
var element = document.createElement("details");
|
|
||||||
var elementIsNative = typeof HTMLDetailsElement != "undefined" && element instanceof HTMLDetailsElement;
|
|
||||||
var support = {
|
|
||||||
open: "open" in element || elementIsNative,
|
|
||||||
toggle: "ontoggle" in element
|
|
||||||
};
|
|
||||||
var styles = '\ndetails, summary {\n display: block;\n}\ndetails:not([open]) > *:not(summary) {\n display: none;\n}\nsummary::before {\n content: "►";\n padding-right: 0.3rem;\n font-size: 0.6rem;\n cursor: default;\n}\n[open] > summary::before {\n content: "▼";\n}\n';
|
|
||||||
var _ref = [], forEach = _ref.forEach, slice = _ref.slice;
|
|
||||||
if (!support.open) {
|
|
||||||
polyfillStyles();
|
|
||||||
polyfillProperties();
|
|
||||||
polyfillToggle();
|
|
||||||
polyfillAccessibility();
|
|
||||||
}
|
|
||||||
if (support.open && !support.toggle) {
|
|
||||||
polyfillToggleEvent();
|
|
||||||
}
|
|
||||||
function polyfillStyles() {
|
|
||||||
document.head.insertAdjacentHTML("afterbegin", "<style>" + styles + "</style>");
|
|
||||||
}
|
|
||||||
function polyfillProperties() {
|
|
||||||
var prototype = document.createElement("details").constructor.prototype;
|
|
||||||
var setAttribute = prototype.setAttribute, removeAttribute = prototype.removeAttribute;
|
|
||||||
var open = Object.getOwnPropertyDescriptor(prototype, "open");
|
|
||||||
Object.defineProperties(prototype, {
|
|
||||||
open: {
|
|
||||||
get: function get() {
|
|
||||||
if (this.tagName == "DETAILS") {
|
|
||||||
return this.hasAttribute("open");
|
|
||||||
} else {
|
|
||||||
if (open && open.get) {
|
|
||||||
return open.get.call(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
set: function set(value) {
|
|
||||||
if (this.tagName == "DETAILS") {
|
|
||||||
return value ? this.setAttribute("open", "") : this.removeAttribute("open");
|
|
||||||
} else {
|
|
||||||
if (open && open.set) {
|
|
||||||
return open.set.call(this, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setAttribute: {
|
|
||||||
value: function value(name, _value) {
|
|
||||||
var _this = this;
|
|
||||||
var call = function call() {
|
|
||||||
return setAttribute.call(_this, name, _value);
|
|
||||||
};
|
|
||||||
if (name == "open" && this.tagName == "DETAILS") {
|
|
||||||
var wasOpen = this.hasAttribute("open");
|
|
||||||
var result = call();
|
|
||||||
if (!wasOpen) {
|
|
||||||
var summary = this.querySelector("summary");
|
|
||||||
if (summary) summary.setAttribute("aria-expanded", true);
|
|
||||||
triggerToggle(this);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return call();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
removeAttribute: {
|
|
||||||
value: function value(name) {
|
|
||||||
var _this2 = this;
|
|
||||||
var call = function call() {
|
|
||||||
return removeAttribute.call(_this2, name);
|
|
||||||
};
|
|
||||||
if (name == "open" && this.tagName == "DETAILS") {
|
|
||||||
var wasOpen = this.hasAttribute("open");
|
|
||||||
var result = call();
|
|
||||||
if (wasOpen) {
|
|
||||||
var summary = this.querySelector("summary");
|
|
||||||
if (summary) summary.setAttribute("aria-expanded", false);
|
|
||||||
triggerToggle(this);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return call();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function polyfillToggle() {
|
|
||||||
onTogglingTrigger(function(element) {
|
|
||||||
element.hasAttribute("open") ? element.removeAttribute("open") : element.setAttribute("open", "");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function polyfillToggleEvent() {
|
|
||||||
if (window.MutationObserver) {
|
|
||||||
new MutationObserver(function(mutations) {
|
|
||||||
forEach.call(mutations, function(mutation) {
|
|
||||||
var target = mutation.target, attributeName = mutation.attributeName;
|
|
||||||
if (target.tagName == "DETAILS" && attributeName == "open") {
|
|
||||||
triggerToggle(target);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).observe(document.documentElement, {
|
|
||||||
attributes: true,
|
|
||||||
subtree: true
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
onTogglingTrigger(function(element) {
|
|
||||||
var wasOpen = element.getAttribute("open");
|
|
||||||
setTimeout(function() {
|
|
||||||
var isOpen = element.getAttribute("open");
|
|
||||||
if (wasOpen != isOpen) {
|
|
||||||
triggerToggle(element);
|
|
||||||
}
|
|
||||||
}, 1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function polyfillAccessibility() {
|
|
||||||
setAccessibilityAttributes(document);
|
|
||||||
if (window.MutationObserver) {
|
|
||||||
new MutationObserver(function(mutations) {
|
|
||||||
forEach.call(mutations, function(mutation) {
|
|
||||||
forEach.call(mutation.addedNodes, setAccessibilityAttributes);
|
|
||||||
});
|
|
||||||
}).observe(document.documentElement, {
|
|
||||||
subtree: true,
|
|
||||||
childList: true
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
document.addEventListener("DOMNodeInserted", function(event) {
|
|
||||||
setAccessibilityAttributes(event.target);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function setAccessibilityAttributes(root) {
|
|
||||||
findElementsWithTagName(root, "SUMMARY").forEach(function(summary) {
|
|
||||||
var details = findClosestElementWithTagName(summary, "DETAILS");
|
|
||||||
summary.setAttribute("aria-expanded", details.hasAttribute("open"));
|
|
||||||
if (!summary.hasAttribute("tabindex")) summary.setAttribute("tabindex", "0");
|
|
||||||
if (!summary.hasAttribute("role")) summary.setAttribute("role", "button");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function eventIsSignificant(event) {
|
|
||||||
return !(event.defaultPrevented || event.ctrlKey || event.metaKey || event.shiftKey || event.target.isContentEditable);
|
|
||||||
}
|
|
||||||
function onTogglingTrigger(callback) {
|
|
||||||
addEventListener("click", function(event) {
|
|
||||||
if (eventIsSignificant(event)) {
|
|
||||||
if (event.which <= 1) {
|
|
||||||
var element = findClosestElementWithTagName(event.target, "SUMMARY");
|
|
||||||
if (element && element.parentNode && element.parentNode.tagName == "DETAILS") {
|
|
||||||
callback(element.parentNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
addEventListener("keydown", function(event) {
|
|
||||||
if (eventIsSignificant(event)) {
|
|
||||||
if (event.keyCode == 13 || event.keyCode == 32) {
|
|
||||||
var element = findClosestElementWithTagName(event.target, "SUMMARY");
|
|
||||||
if (element && element.parentNode && element.parentNode.tagName == "DETAILS") {
|
|
||||||
callback(element.parentNode);
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
function triggerToggle(element) {
|
|
||||||
var event = document.createEvent("Event");
|
|
||||||
event.initEvent("toggle", false, false);
|
|
||||||
element.dispatchEvent(event);
|
|
||||||
}
|
|
||||||
function findElementsWithTagName(root, tagName) {
|
|
||||||
return (root.tagName == tagName ? [ root ] : []).concat(typeof root.getElementsByTagName == "function" ? slice.call(root.getElementsByTagName(tagName)) : []);
|
|
||||||
}
|
|
||||||
function findClosestElementWithTagName(element, tagName) {
|
|
||||||
if (typeof element.closest == "function") {
|
|
||||||
return element.closest(tagName);
|
|
||||||
} else {
|
|
||||||
while (element) {
|
|
||||||
if (element.tagName == tagName) {
|
|
||||||
return element;
|
|
||||||
} else {
|
|
||||||
element = element.parentNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
@ -1,43 +0,0 @@
|
|||||||
// https://tc39.github.io/ecma262/#sec-array.prototype.find
|
|
||||||
if (!Array.prototype.find) {
|
|
||||||
Array.prototype.find = function(predicate) {
|
|
||||||
'use strict';
|
|
||||||
// 1. Let O be ? ToObject(this value).
|
|
||||||
if (this == null) {
|
|
||||||
throw new TypeError('"this" is null or not defined');
|
|
||||||
}
|
|
||||||
|
|
||||||
var o = Object(this);
|
|
||||||
|
|
||||||
// 2. Let len be ? ToLength(? Get(O, "length")).
|
|
||||||
var len = o.length >>> 0;
|
|
||||||
|
|
||||||
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
|
|
||||||
if (typeof predicate !== 'function') {
|
|
||||||
throw new TypeError('predicate must be a function');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
|
||||||
var thisArg = arguments[1];
|
|
||||||
|
|
||||||
// 5. Let k be 0.
|
|
||||||
var k = 0;
|
|
||||||
|
|
||||||
// 6. Repeat, while k < len
|
|
||||||
while (k < len) {
|
|
||||||
// a. Let Pk be ! ToString(k).
|
|
||||||
// b. Let kValue be ? Get(O, Pk).
|
|
||||||
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
|
|
||||||
// d. If testResult is true, return kValue.
|
|
||||||
var kValue = o[k];
|
|
||||||
if (predicate.call(thisArg, kValue, k, o)) {
|
|
||||||
return kValue;
|
|
||||||
}
|
|
||||||
// e. Increase k by 1.
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 7. Return undefined.
|
|
||||||
return undefined;
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
/**
|
|
||||||
* Пример извлечения информации о сертификате
|
|
||||||
* */
|
|
||||||
;(function () {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var $certificate = document.getElementById('certificate'),
|
|
||||||
$certificateDetails = document.getElementById('certificateDetails'),
|
|
||||||
$certificateInfo = document.getElementById('certificateInfo'),
|
|
||||||
$certificatesError = document.getElementById('certificateInfoError');
|
|
||||||
|
|
||||||
$certificateDetails.style.display = 'none';
|
|
||||||
|
|
||||||
$certificateDetails.addEventListener('toggle', function () {
|
|
||||||
if ($certificateDetails.open) {
|
|
||||||
var thumbprint = $certificate.value;
|
|
||||||
|
|
||||||
$certificateInfo.textContent = 'Запрашивается...';
|
|
||||||
|
|
||||||
window.cryptoPro.getCertificate(thumbprint).then(function (certificate) {
|
|
||||||
Promise.all([
|
|
||||||
certificate.isValid(),
|
|
||||||
certificate.getCadesProp('Version'),
|
|
||||||
certificate.exportBase64(),
|
|
||||||
certificate.getAlgorithm(),
|
|
||||||
certificate.getExtendedKeyUsage(),
|
|
||||||
certificate.getOwnerInfo(),
|
|
||||||
certificate.getIssuerInfo(),
|
|
||||||
certificate.getDecodedExtendedKeyUsage(),
|
|
||||||
certificate.hasExtendedKeyUsage('1.3.6.1.4.1.311.80.1'),
|
|
||||||
certificate.hasExtendedKeyUsage(['1.3.6.1.5.5.7.3.2', '1.3.6.1.4.1.311.10.3.12']),
|
|
||||||
certificate.hasExtendedKeyUsage('1.3.6.1.4.1.311.80.2'),
|
|
||||||
certificate.hasExtendedKeyUsage(['1.3.6.1.5.5.7.3.3', '1.3.6.1.4.1.311.10.3.12']),
|
|
||||||
]).then(function (results) {
|
|
||||||
$certificateInfo.textContent = JSON.stringify({
|
|
||||||
name: certificate.name,
|
|
||||||
issuerName: certificate.issuerName,
|
|
||||||
subjectName: certificate.subjectName,
|
|
||||||
thumbprint: certificate.thumbprint,
|
|
||||||
validFrom: certificate.validFrom,
|
|
||||||
validTo: certificate.validTo,
|
|
||||||
isValid: results[0],
|
|
||||||
version: results[1],
|
|
||||||
base64: results[2],
|
|
||||||
algorithm: results[3],
|
|
||||||
extendedKeyUsage: results[4],
|
|
||||||
ownerInfo: results[5],
|
|
||||||
issuerInfo: results[6],
|
|
||||||
decodedExtendedKeyUsage: results[7],
|
|
||||||
'1.3.6.1.4.1.311.80.1': results[8],
|
|
||||||
"['1.3.6.1.5.5.7.3.2', '1.3.6.1.4.1.311.10.3.12']": results[9],
|
|
||||||
'1.3.6.1.4.1.311.80.2': results[10],
|
|
||||||
"'1.3.6.1.5.5.7.3.3', '1.3.6.1.4.1.311.10.3.12'": results[11],
|
|
||||||
}, null, ' ');
|
|
||||||
}, handleError);
|
|
||||||
}, handleError);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$certificateInfo.textContent = '';
|
|
||||||
});
|
|
||||||
|
|
||||||
function handleError(error) {
|
|
||||||
$certificatesError.textContent = '\n' + error.message;
|
|
||||||
}
|
|
||||||
})();
|
|
@ -1,10 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
preset: 'ts-jest',
|
|
||||||
testEnvironment: 'jsdom',
|
|
||||||
coveragePathIgnorePatterns: [
|
|
||||||
'<rootDir>/src/vendor/',
|
|
||||||
],
|
|
||||||
testPathIgnorePatterns: [
|
|
||||||
'<rootDir>/examples/',
|
|
||||||
],
|
|
||||||
};
|
|
8
lib/api/addAttachedSignature.d.ts
vendored
8
lib/api/addAttachedSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Добавляет присоединенную подпись к подписанному сообщению по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param signedMessage - подписанное сообщение
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const addAttachedSignature: (thumbprint: string, signedMessage: string | ArrayBuffer) => Promise<string>;
|
|
9
lib/api/addDetachedSignature.d.ts
vendored
9
lib/api/addDetachedSignature.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
* Добавляет отсоединенную подпись хеша к подписанному сообщению по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param signedMessage - подписанное сообщение
|
|
||||||
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const addDetachedSignature: (thumbprint: string, signedMessage: string | ArrayBuffer, messageHash: string) => Promise<string>;
|
|
22
lib/api/certificate/certificate.d.ts
vendored
22
lib/api/certificate/certificate.d.ts
vendored
@ -1,22 +0,0 @@
|
|||||||
import { TagTranslation } from '../../helpers/_parseCertInfo';
|
|
||||||
import { ExtendedKeysTranslations } from './getDecodedExtendedKeyUsage';
|
|
||||||
export declare type CadesCertificate = any;
|
|
||||||
export declare class Certificate {
|
|
||||||
_cadesCertificate: CadesCertificate;
|
|
||||||
name: string;
|
|
||||||
issuerName: string;
|
|
||||||
subjectName: string;
|
|
||||||
thumbprint: string;
|
|
||||||
validFrom: string;
|
|
||||||
validTo: string;
|
|
||||||
constructor(_cadesCertificate: CadesCertificate, name: string, issuerName: string, subjectName: string, thumbprint: string, validFrom: string, validTo: string);
|
|
||||||
getOwnerInfo(): Promise<TagTranslation[]>;
|
|
||||||
getIssuerInfo(): Promise<TagTranslation[]>;
|
|
||||||
getExtendedKeyUsage(): Promise<string[]>;
|
|
||||||
getDecodedExtendedKeyUsage(): Promise<ExtendedKeysTranslations>;
|
|
||||||
getAlgorithm(): Promise<string>;
|
|
||||||
getCadesProp(propName: any): Promise<any>;
|
|
||||||
isValid(): Promise<boolean>;
|
|
||||||
exportBase64(): Promise<string>;
|
|
||||||
hasExtendedKeyUsage(oids: any): Promise<boolean>;
|
|
||||||
}
|
|
6
lib/api/certificate/exportBase64.d.ts
vendored
6
lib/api/certificate/exportBase64.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Экспортирует сертификат в формате base64
|
|
||||||
*
|
|
||||||
* @returns сертификат в формате base64
|
|
||||||
*/
|
|
||||||
export declare const exportBase64: () => Promise<string>;
|
|
11
lib/api/certificate/getAlgorithm.d.ts
vendored
11
lib/api/certificate/getAlgorithm.d.ts
vendored
@ -1,11 +0,0 @@
|
|||||||
interface AlgorithmInfo {
|
|
||||||
algorithm: string;
|
|
||||||
oid: string;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Возвращает информацию об алгоритме сертификата
|
|
||||||
*
|
|
||||||
* @returns информацию об алгоритме и его OID'е
|
|
||||||
*/
|
|
||||||
export declare const getAlgorithm: () => Promise<AlgorithmInfo>;
|
|
||||||
export {};
|
|
7
lib/api/certificate/getCadesProp.d.ts
vendored
7
lib/api/certificate/getCadesProp.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает указанное внутренее свойство у сертификата в формате Cades
|
|
||||||
*
|
|
||||||
* @param propName = наименование свойства
|
|
||||||
* @returns значение запрошенного свойства
|
|
||||||
*/
|
|
||||||
export declare const getCadesProp: (propName: string) => Promise<any>;
|
|
@ -1,9 +0,0 @@
|
|||||||
export interface ExtendedKeysTranslations {
|
|
||||||
[key: string]: string | null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Возвращает расшифрованные ОИД'ы сертификата
|
|
||||||
*
|
|
||||||
* @returns словарь расшифрованных ОИД'ов
|
|
||||||
*/
|
|
||||||
export declare const getDecodedExtendedKeyUsage: () => Promise<ExtendedKeysTranslations>;
|
|
6
lib/api/certificate/getExtendedKeyUsage.d.ts
vendored
6
lib/api/certificate/getExtendedKeyUsage.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Возвращает ОИД'ы сертификата
|
|
||||||
*
|
|
||||||
* @returns список ОИД'ов
|
|
||||||
*/
|
|
||||||
export declare const getExtendedKeyUsage: () => Promise<string[]>;
|
|
10
lib/api/certificate/getInfo.d.ts
vendored
10
lib/api/certificate/getInfo.d.ts
vendored
@ -1,10 +0,0 @@
|
|||||||
import { TagsTranslations } from '../../constants/tags-translations';
|
|
||||||
import { TagTranslation } from '../../helpers/_parseCertInfo';
|
|
||||||
/**
|
|
||||||
* Возвращает расшифрованную информацию о сертификате из указанного свойства по тэгам
|
|
||||||
*
|
|
||||||
* @param tags = словарь
|
|
||||||
* @param entitiesPath = путь к разбираемой сущности
|
|
||||||
* @returns расшифрованная информация по отдельным тэгам
|
|
||||||
*/
|
|
||||||
export declare const getInfo: (tags: TagsTranslations[], entitiesPath: string) => Promise<TagTranslation[]>;
|
|
7
lib/api/certificate/hasExtendedKeyUsage.d.ts
vendored
7
lib/api/certificate/hasExtendedKeyUsage.d.ts
vendored
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Проверяет наличие ОИД'а (ОИД'ов) у сертификата
|
|
||||||
*
|
|
||||||
* @param oids - ОИД'ы для проверки
|
|
||||||
* @returns флаг наличия ОИД'ов у сертификата
|
|
||||||
*/
|
|
||||||
export declare const hasExtendedKeyUsage: (oids: string | string[]) => Promise<boolean>;
|
|
1
lib/api/certificate/index.d.ts
vendored
1
lib/api/certificate/index.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
export * from './certificate';
|
|
6
lib/api/certificate/isValid.d.ts
vendored
6
lib/api/certificate/isValid.d.ts
vendored
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* Проверяет действительность сертификата
|
|
||||||
*
|
|
||||||
* @returns флаг валидности
|
|
||||||
*/
|
|
||||||
export declare const isValid: () => Promise<boolean>;
|
|
8
lib/api/createAttachedSignature.d.ts
vendored
8
lib/api/createAttachedSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает присоединенную подпись сообщения по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param message - подписываемое сообщение
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const createAttachedSignature: (thumbprint: string, unencryptedMessage: string | ArrayBuffer) => Promise<string>;
|
|
8
lib/api/createDetachedSignature.d.ts
vendored
8
lib/api/createDetachedSignature.d.ts
vendored
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает отсоединенную подпись хеша по отпечатку сертификата
|
|
||||||
*
|
|
||||||
* @param thumbprint - отпечаток сертификата
|
|
||||||
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
* @returns подпись в формате PKCS#7
|
|
||||||
*/
|
|
||||||
export declare const createDetachedSignature: (thumbprint: string, messageHash: string) => Promise<string>;
|
|
9
lib/api/createHash.d.ts
vendored
9
lib/api/createHash.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
/**
|
|
||||||
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
|
||||||
* https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
|
|
||||||
*
|
|
||||||
* @param unencryptedMessage - сообщение для хеширования
|
|
||||||
*
|
|
||||||
* @returns хеш
|
|
||||||
*/
|
|
||||||
export declare const createHash: (unencryptedMessage: string | ArrayBuffer) => Promise<string>;
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user