...
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); |
Шифрование, расшифрование
...