# Подписание

:::caution
Неформализованные документы (как и прочие электронные документы) являются юридически значимыми если подписываются
КЭП.

Рекомендуется подписывать все входящие и исходящие документы.
:::

## Общий принцип работы

Для подписания документа необходимо выполнить следующие шаги:

1. Получить подписываемые данные в одном из методов (в методах фигурирует как `export`). Это будет строка закодированная
   в base64 или бинарный файл.
2. Используя один из СКЗИ (например CryptoPro CSP, ViPNet CSP и другие) выполнить подписание. Нужна отсоединенная
   подпись (detached).
3. Полученную подпись закодировать в base64 и отправить в одном из методов (в методах фигурирует как `sign`).

## Предлагаемые решения на основе Cryptopro CSP

При установке Cryptopro CSP на клиентском сервере рекомендуется использовать одну из библиотек под конкретный язык
программирования ([phpcades](https://cpdn.cryptopro.ru/default.asp?url=content/cades/phpcades.html) для
PHP, [crypto-pro](https://github.com/vgoma/crypto-pro) для JavaScript (в том числе в браузере), [pycryptoprosdk](https://github.com/Keyintegrity/pycryptoprosdk) для
Python, [GostCryptography](https://github.com/AlexMAS/GostCryptography) для
C#, [КриптоПро Java CSP](https://www.cryptopro.ru/products/csp/jcsp) для Java) либо утилиту командной
строки [cryptcp](https://www.cryptopro.ru/products/other/cryptcp).
