Библиотека pki-core-cpp – это инструмент, предназначенный для упрощения управления криптографическими примитивами, хранящимися на аппаратных СКЗИ Рутокен ЭЦП и Рутокен Пинпад, и выполнения с ними криптографических операций по стандартам PKI.
Начало использования
Для того, чтобы начать использовать pki-core-cpp, необходимо в настройках проекта добавить путь до каталога с заголовочными файлами библиотеки и включить файл rutoken/pki-core-cpp.h. Приложение должно быть слинковано с динамической библиотекой pki-core.
...
Code Block |
---|
using namespace rutoken::pkicore; initialize("."); auto devices = Pkcs11Device::enumerate(); // Выбор подходящего устройства. assert(devices.size() == 1); auto device = std::move(devices.front()); auto certs = device.enumerateCerts(); device.login("12345678"); auto userCerts = device.enumerateUserCerts(); device.logout(); deinitialize(); |
PKCS#10
В общем случае для получения пользовательского сертификата, который можно использовать в операциях подписи, необходимо выполнить следующие действия:
...
Code Block |
---|
using namespace rutoken::pkicore; auto key = device.generateKeyPair(Pkcs11Device::Gost34102001KeyGenParams()); X500Dn subject; subject.setRdn(X500Dn::RdnId::commonName, "Ivanov Ivan Ivanovich"); Pkcs10RequestInfo info; info.setSubject(subject); auto request = createPkcs10Request(key, info); // Вызов request.toPem() вернет PKCS#10 запрос на сертификат в формате PEM, который можно передать в центр сертификации для получения пользовательского сертификата. device.importCert(ExternalCert(pemCert)); |
CMS
Формирование подписи, проверка подписи
...
Code Block |
---|
using namespace rutoken::pkicore; std::vector<unsigned char> data(10, 'a'); // В SignParams необходимо передать пользовательский сертификат, для которого на токене содержится соответствующая ключевая пара. auto signedData = cms::sign(cms::Data(data.begin(), data.end()), cms::SignParams(cert)); // В VerifyParams необходимо передать токен, на котором будет производиться проверка подписи. auto result = signedData.verify(cms::VerifyParams(device)); assert(result == cms::VerifyResult::success); |
Шифрование, расшифрование
...