Key is not permitted to be used in operation
Здравствуйте! Разбираюсь с API pkicore, работаю с ЭЦП смарт-картой. Использую тестовый сертификат, который мне выдал мой локальный контроллер домена. Сертификат успешно экспортирован на карту. Открытый ключ - RSA (1024). Успешно шифрую им тестовое сообщение, но при попытке его тут же расшифровать на устройстве, получаю "Key is not permitted to be used in operation".
В чем может быть причина? Может ключевая пара не той системы?
Код примерно такой:
try
{
cout << boolalpha;
rutoken::pkicore::initialize(".");
SCOPE_EXIT() { rutoken::pkicore::deinitialize(); };
auto devices = Pkcs11Device::enumerate();
const std::string plaint_text = "Hello, World!"; //Типа секретные данные
const std::vector<uint8_t> plaint_data{ plaint_text.begin(), plaint_text.end() };
for (auto&& device : devices)
{
device.login("12345678");
SCOPE_EXIT(&device) { device.logout(); };
auto cert_file_data = readFile("D:\\Temp\\123-dev.cer");
ExternalCert cert_file(cert_file_data.data(), cert_file_data.size());
cms::EnvelopParams enlelop_params{ device };
enlelop_params.addRecipient(cert_file);
auto enveloped_data = cms::envelop(plaint_data, enlelop_params);
auto certs = device.enumerateCerts();
if (certs.empty())
{
throw runtime_error("Token has no certificates.");
}
auto cert = move(certs.front());
try
{
cert.getCorrespondingPrivateKey();
}
catch (std::exception&)
{
throw runtime_error("Certificate has no private key.");
}
auto message = enveloped_data.decrypt(cms::EnvelopedData::DecryptParams{ cert }); // <<= Вот тут вылетает исключение с сообщением "Key is not permitted to be used in operation"
if (message.contentType() != cms::ContentType::data)
{
throw runtime_error("Unsupported content type of enveloped data");
}
}
}
catch (const exception& e)
{
cerr << e.what() << endl;
return 1;
}