crypto-pro-cadesplugin
Version:
Библиотека предоставляет API для работы c cadesplugin и Крипто Про
180 lines (129 loc) • 7.36 kB
Markdown
# cadesplugin





[npm crypto-pro-cadesplugin](https://www.npmjs.com/package/crypto-pro-cadesplugin)
Библиотека предоставляет API для работы c cadesplugin и Крипто Про
> ## Обратите внимание! Для пробной работы с Компонентом вам необходимо иметь
> * Компьютер под управлением Windows, Linux, MacOS или FreeBSD
> * Один из современных браузеров (Internet Explorer, Mozilla Firefox, Opera, Chrome, Яндекс.Браузер, Safari) с поддержкой сценариев JavaScript
> * Установленный плагин для браузера «КриптоПро ЭЦП Browser plug-in» ([Установить](https://www.cryptopro.ru/products/cades/plugin/get_2_0))
> * Если планируется создание ЭЦП по ГОСТ Р 34.10-2001/2012, то необходимо установить [СКЗИ КриптоПро CSP](https://www.cryptopro.ru/products/csp/overview)
> * Cертификат ключа подписи, который можно получить на странице [тестового центра](https://www.cryptopro.ru/certsrv/certrqma.asp)
> * [Проверить работу установленного плагина](https://www.cryptopro.ru/sites/default/files/products/cades/demopage/simple.html)
## API
### about()
Выводит информацию о верисии плагина и так далее
### getCertsList()
Получает массив валидных сертификатов
### currentCadesCert(thumbprint)
Получает сертификат по thumbprint значению сертификата
### getCert(thumbprint)
Получает сертификат по thumbprint значению сертификата.
С помощью этой функции в сертификате доступны методы для парсинга информации о сертификате
### signBase64(thumbprint, base64, type)
Подписать строку в формате base64
> Поддерживаемые КриптоПро ЭЦП Browser plug-in браузеры (IE, Firefox, Opera, Chrome, Safari) не предоставляют простого и надежного способа обработки бинарных данных. Таким образом, невозможно обеспечить корректную передачу бинарных данных из браузера в плагин и обратно.
При подписании произвольных данных рекомендуется предварительно закодировать их в Base64 и использовать свойство ContentEncoding.
> По этой же причине для возвращаемых из КриптоПро ЭЦП Browser plug-in строк, в которых могут содержаться бинарные данные, не поддерживается кодировка CAPICOM_ENCODING_BINARY.
### signXml(thumbprint, xml, cadescomXmlSignatureType)
Подписать строку в формате XML
## Custom certs format API
### friendlySubjectInfo()
Возвращает распаршенную информацию о строке subjectInfo
### friendlyIssuerInfo()
Возвращает распаршенную информацию о строке issuerInfo
### friendlyValidPeriod()
Возвращает распаршенную информацию об объекте validPeriod
### possibleInfo(subjectIssuer)
Функция формирует ключи и значения в зависимости от переданного параметра
Доступные параметры 'subjectInfo' и 'issuerInfo'
### friendlyDate(date)
Формирует дату от переданного параметра
### isValid()
Производит проверку на валидность сертификата
## Usage
```js
import cadesplugin from 'crypto-pro-cadesplugin';
/**
* @async
* @function doCertsList
* @description формирует массив сертификатов с оригинальными значениями
*/
async function doCertsList() {
const certsApi = await cadesplugin;
const certsList = await certsApi.getCertsList();
return certsList;
}
/**
* @async
* @function doFriendlyCustomCertsList
* @description формирует массив сертификатов с кастомными полями
*/
async function doFriendlyCustomCertsList() {
const certsApi = await cadesplugin;
const certsList = await certsApi.getCertsList();
const friendlyCertsList = certsList.map(cert => {
const friendlySubjectInfo = cert.friendlySubjectInfo();
const friendlyIssuerInfo = cert.friendlyIssuerInfo();
const friendlyValidPeriod = cert.friendlyValidPeriod();
const {
to: { ddmmyy, hhmmss }
} = friendlyValidPeriod;
return {
subjectInfo: friendlySubjectInfo,
issuerInfo: friendlyIssuerInfo,
validPeriod: friendlyValidPeriod,
thumbprint: cert.thumbprint,
title: `${
friendlySubjectInfo.filter(el => el.value === 'Владелец')[0].text
}. Сертификат действителен до: ${ddmmyy} ${hhmmss}`
};
});
}
```
### Получение сертификатов на примере react.js
```js
import {useMemo, useState} from "react";
import ccpa from "crypto-pro-cadesplugin";
const useDoCertsList = () =>
useMemo(async () => {
const certsApi = await ccpa();
const certsList = await certsApi.getCertsList();
const list = certsList.map(({subjectInfo, thumbprint}) => ({
value: thumbprint,
label: subjectInfo
}));
return list;
}, []);
const SelectCert = () => {
const [listSert, setListSert] = useState([{value: "подпись", label: "подпись"}]);
useDoCertsList()
.then(setListSert)
return (
<label>
<select name="thumbprint" >
{
listSert.map(item => (
<option value={item.value} selected>{item.label}</option>
))
}
</select>
Выберите сертификат
</label>
);
};
export default SelectCert;
```
### Подписание файла в формате base64
```js
const sign = await ccpa.signBase64(thumbprint, sBase64Data);
```
### Подписание файла в формате Xml
```js
const sign = await ccpa.signXml(thumbprint, Xml);
```
> пример использования можно посмотреть в библиотеке которая использует этот компонент для React.js **file-signature-in-react**
> https://github.com/bad4iz/file-signature-in-react