# @mmskazak/crypto-pro-plus

📦 Современная обёртка над [CryptoPro CAdES plugin](https://www.cryptopro.ru/products/cades)  
Позволяет удобно работать с сертификатами, получать информацию, подписывать данные (attached/detached) и добавлять метку времени — всё на `async/await`.

---

## 🚀 Установка

```bash
npm install @mmskazak/crypto-pro-plus
```

> ⚠️ Требуется установленный [CryptoPro CSP](https://www.cryptopro.ru/products/csp) и плагин `cadesplugin`.

---

## 🧠 Возможности

* 🔍 Проверка версии плагина
* 📋 Получение списка сертификатов
* 🧾 Получение информации по сертификату
* ✍️ Detached/Attached подпись (CAdES-BES)
* ⏱ Подпись с меткой времени (CAdES-T)
* 🔄 Конвертация Unicode-строк в корректный base64

---

## 📘 Примеры

### ✅ Проверка плагина

```js
import { pluginVersion, countCertificates } from '@mmskazak/crypto-pro-plus';

const version = await pluginVersion();
console.log("Версия плагина:", version);

const count = await countCertificates();
console.log("Сертификатов найдено:", count);
```

---

### 📜 Получение всех сертификатов

```js
import { getCertificates } from '@mmskazak/crypto-pro-plus';

const certs = await getCertificates();
certs.forEach(cert => {
  console.log(cert.subjectName, cert.thumbprint, cert.validToDate);
});
```

---

### 📄 Информация по сертификату

```js
import { getCertificateByThumbprint, getCertificateInfo } from '@mmskazak/crypto-pro-plus';

const cert = await getCertificateByThumbprint("DA9142...");
const info = await getCertificateInfo(cert);
console.log(info);
```

---

### ✍️ Detached-подпись (без метки)

```js
import { signBase64Detached, toBase64Unicode } from '@mmskazak/crypto-pro-plus';

const data = toBase64Unicode("Данные для подписи");
const signature = await signBase64Detached(data, "DA9142...");
console.log(signature);
```

---

### ⏱ Detached-подпись с меткой времени

```js
import { signBase64WithTimestamp } from '@mmskazak/crypto-pro-plus';

const signature = await signBase64WithTimestamp(data, "DA9142...", "http://testca.cryptopro.ru/tsp/");
console.log(signature);
```

---

### 📎 Attached-подпись (встроенная)

```js
import { signBase64Attached } from '@mmskazak/crypto-pro-plus';

const signature = await signBase64Attached(data, "DA9142...");
console.log(signature);
```

---

### 📎⏱ Attached-подпись с меткой времени

```js
import { signBase64AttachedWithTimestamp } from '@mmskazak/crypto-pro-plus';

const signature = await signBase64AttachedWithTimestamp(data, "DA9142...", "http://testca.cryptopro.ru/tsp/");
console.log(signature);
```

---

## 📌 API

| Метод                                                           | Описание                                                                   |
| --------------------------------------------------------------- | -------------------------------------------------------------------------- |
| pluginVersion()                                                 | Возвращает версию установленного плагина                                   |
| countCertificates()                                             | Считает количество сертификатов в личном хранилище                         |
| getCertificates()                                               | Получает список сертификатов с SubjectName, Thumbprint, сроками и объектом |
| getCertificateByThumbprint(thumbprint)                          | Возвращает объект сертификата по отпечатку                                 |
| getCertificateInfo(cert)                                        | Возвращает подробную информацию о сертификате                              |
| signBase64Detached(dataBase64, thumbprint)                      | Detached-подпись без метки времени (CAdES-BES)                             |
| signBase64WithTimestamp(dataBase64, thumbprint, tspUrl)         | Detached-подпись с меткой времени (CAdES-T)                                |
| signBase64Attached(dataBase64, thumbprint)                      | Attached-подпись без метки времени (CAdES-BES)                             |
| signBase64AttachedWithTimestamp(dataBase64, thumbprint, tspUrl) | Attached-подпись с меткой времени (CAdES-T)                                |
| toBase64Unicode(str)                                            | Кодирует строку в корректный base64 с поддержкой Unicode                   |

---

## 🧑‍💻 Автор

Михаил Мельников — [github.com/mmskazak](https://github.com/mmskazak)

---

## 📜 Лицензия

MIT
