Асинхронный JavaScript SDK для КриптоПРО ЭЦП Browser Plug-In
Go to file
dependabot[bot] 4702b8f14a
Bump json5, ts-loader, webpack and webpack-cli
Bumps [json5](https://github.com/json5/json5) to 2.2.3 and updates ancestor dependencies [json5](https://github.com/json5/json5), [ts-loader](https://github.com/TypeStrong/ts-loader), [webpack](https://github.com/webpack/webpack) and [webpack-cli](https://github.com/webpack/webpack-cli). These dependencies need to be updated together.


Updates `json5` from 2.2.1 to 2.2.3
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

Updates `ts-loader` from 6.2.2 to 9.4.2
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/compare/v6.2.2...v9.4.2)

Updates `webpack` from 4.46.0 to 5.75.0
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.46.0...v5.75.0)

Updates `webpack-cli` from 3.3.12 to 5.0.1
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v3.3.12...webpack-cli@5.0.1)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
- dependency-name: ts-loader
  dependency-type: direct:development
- dependency-name: webpack
  dependency-type: direct:development
- dependency-name: webpack-cli
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-03 06:45:46 +00:00
.github/workflows run test only on node 16 (#38) 2022-11-10 18:30:19 +03:00
dist Исправления в соответсвии с приказом ФСБ России (#40) 2022-11-11 19:40:20 +03:00
examples/script-tag Исправления в соответсвии с приказом ФСБ России (#40) 2022-11-11 19:40:20 +03:00
lib Исправления в соответсвии с приказом ФСБ России (#40) 2022-11-11 19:40:20 +03:00
resources Добавил ссылку на Jetbrains в рамках поддержки OpenSource проекта 2020-12-19 17:13:23 +03:00
src Исправления в соответсвии с приказом ФСБ России (#40) 2022-11-11 19:40:20 +03:00
types/cadesplugin 2.0.0 2020-03-28 21:11:00 +03:00
.editorconfig 2.0.0 2020-03-28 21:11:00 +03:00
.eslintrc.js 2.0.0 2020-03-28 21:11:00 +03:00
.gitignore для bower сборка добавлена под версионный контроль для возможности устанавливать пакет напрямую с github 2020-03-29 10:05:07 +03:00
.prettierrc.js 2.0.0 2020-03-28 21:11:00 +03:00
bower.json v.2.3.1 Release (#21) 2021-09-15 13:57:05 +03:00
definition-header.js 2.0.0 2020-03-28 21:11:00 +03:00
jest.config.js 2.0.0 2020-03-28 21:11:00 +03:00
LICENSE v.2.3.1 Release (#21) 2021-09-15 13:57:05 +03:00
package-lock.json Bump json5, ts-loader, webpack and webpack-cli 2023-01-03 06:45:46 +00:00
package.json Bump json5, ts-loader, webpack and webpack-cli 2023-01-03 06:45:46 +00:00
README.md Добавил новые методы для получения сертификатов (#28) 2022-06-23 13:13:33 +03:00
tsconfig-es5.json 2.0.0 2020-03-28 21:11:00 +03:00
tsconfig-esm.json 2.0.0 2020-03-28 21:11:00 +03:00
tsconfig.json 2.3.0 2021-06-04 18:44:56 +03:00
webpack.config.js 2.0.0 2020-03-28 21:11:00 +03:00

License NPM version NPM downloads Build Status

cryptoPro

Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In

Это форк проекта vgoma/crypto-pro

API форка отличается от оригинала: внимательно читайте README

Chrome Firefox IE Opera
v45+ с расширением CryptoPro Extension for CAdES Browser Plug-in v43+. Начиная с версии 52, с расширением v9+ с установленным КриптоПро ЭЦП Browser plug-in v40+ с расширением CryptoPro Extension for CAdES Browser Plug-in

Ошибка Параметр задан неверно. (0x80070057)

Если при попытке подписать сообщение с использованием PKCS#7 подписи падает такая ошибка, то читайте этот issue

Зачем мне этот пакет?

КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях. Асинхронной (в современных браузерах) и синхронной (в браузерах постарше). С помощью этого пакета можно не писать реализацию под каждую версию плагина дважды.

Установка

Для NPM:

npm install crypto-pro-js

Для Yarn:

yarn add crypto-pro-js

Для Bower:

bower install webmasterskaya/crypto-pro-js

Подключение пакета как UMD модуля через тэг script:

<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:

import { getUserCertificates, Certificate } from 'crypto-pro-js';

(async () => {
  let certificates: Certificate[];

  try {
    certificates = await getUserCertificates();
  } catch(error) {
    // ...
  }
})();

Список требуемых полифиллов (если необходимы, подключаются самостоятельно):

  • Promise
  • Array.prototype.find

API

Методы объекта cryptoPro

  • getUserCertificates - возвращает список сертификатов, доступных пользователю в системе
  • getAllUserCertificates - возвращает список сертификатов, доступных пользователю в системе, в том числе просроченные и без закрытого ключа
  • getContainerCertificates - возвращает список сертификатов, из закрытых ключей и/или сертификаты не установленные всистеме*
  • getAllContainerCertificates - возвращает список сертификатов, из закрытых ключей и/или сертификаты не установленные всистеме*, в том числе просроченные и без закрытого ключа
  • getCertificate - возвращает сертификат по отпечатку
  • createAttachedSignature - создает совмещенную (присоединенную) подпись сообщения
  • createDetachedSignature - создает отсоединенную (открепленную) подпись сообщения
  • addAttachedSignature - добавляет совмещенную (присоединенную) подпись к раннее подписанному документу (реализует метод coSign)
  • addDetachedSignature - добавляет отсоединенную (открепленную) подпись к раннее подписанному документу (реализует метод coSign)
  • createXMLSignature - создает XML подпись для документа в формате XML
  • createHash - создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
  • getSystemInfo - возвращает информацию о CSP и плагине
  • isValidSystemSetup - возвращает флаг корректности настроек ЭП на машине

*Методы getContainerCertificates и getAllContainerCertificates позволяют получить сертификаты из закрытых ключей, записанных на обыкновенную флэшку

Методы объекта сертификата

Сертификат предоставляет следущее API:

  • isValid - возвращает флаг действительности сертификата
  • getCadesProp - возвращает указанное внутренее свойство у сертификата в формате Cades
  • exportBase64 - возвращает сертификат в формате base64
  • getAlgorithm - возвращает информацию об алгоритме сертификата
  • getOwnerInfo - возвращает расшифрованную информацию о владельце сертификата
  • getIssuerInfo - возвращает расшифрованную информацию об издателе сертификата
  • getExtendedKeyUsage - возвращает ОИД'ы сертификата
  • getDecodedExtendedKeyUsage - возвращает расшифрованные ОИД'ы
  • hasExtendedKeyUsage - проверяет наличие ОИД'а (ОИД'ов) у сертификата

Поддерживаемые СКЗИ

КриптоПРО CSP (v4.0+)

Примеры

Для их запуска необходим NodeJS LTS.

Тэг script (UMD)

cd examples/script-tag
npm i
npm start

Тем, кто хочет помочь

Буду благодарен за расширение/улучшение/доработку API. Вам будут полезны примеры, предоставляемые Крипто ПРО.

Запуск режима разработки

Устанавливаем зависимости:

npm i

Во время работы с кодом необходим запущенный сборщик:

npm start

И пример, на котором можно тестировать изменения. Удобнее всего тестировать на примере с тэгом script, тк он отвязан от фреймворков и использует сборку в формате UMD из папки dist/, постоянно обновляемую пока работает сборщик. Запускаем его таким образом:

cd examples/script-tag
npm i
npm link ../../
npm start

После выполнения npm link ../../ в директории examples/script-tag/node_modules папка crypto-pro-js станет ярлыком, указывающим на папку содержащую локально собранный пакет.

Запуск тестов

Тесты написаны с использованием Jest:

npm test

Проверка пакета перед публикацией в NPM

Необходимо протестировать работу в заявленных браузерах, сделав это на локально запакованной версии пакета. Для этого собираем пакет:

npm run package
mv package ..

Важно переместить папку package куда-нибудь выше для избежания конфликтов при линковке с текущим package.json.

Переходим в любую директорию с примером и создаем там ссылку на только что собранный пакет:

cd examples/script-tag
npm link ../../../package

Проверяем работу примеров в режимах разработки и продакшн.

После завершения экспериментов можно удалить глобальную ссылку из директории ../../../package таким образом:

cd ../../../package
npm unlink

Лицензия

MIT