npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

crypto-pro-js

v2.3.3

Published

Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In. Forked from https://github.com/vgoma/crypto-pro

Downloads

1,046

Readme

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