Upd.
Павел Анфимов, что я делаю не так? Хочу добавить все найденные сертификаты в получателей шифрованного сообщения. Во время выполнения кода
r = sk_X509_push(certs, cert);
CHECK(" sk_X509_push", r == 1, free_sk_certs);
на второй итерации цикла происходит вылет в free_sk_certs.
/*************************************************************************
* Создание контейнера сертификатов *
*************************************************************************/
certs = sk_X509_new_null();
CHECK(" sk_X509_new_null", certs != NULL, free_cert);
rv = m_functionList->C_FindObjectsInit(session, certificateTemplate, arraysize(certificateTemplate));
CHECK(" C_FindObjectsInit", rv == CKR_OK, close_session);
certHandles.clear();
certHandles.resize(10000);
rv = m_functionList->C_FindObjects(session, certHandles.data(), (CK_ULONG)certHandles.size(), &certCount);
CHECK(" C_FindObjects", rv == CKR_OK, close_session);
for (size_t i = 0; i < certCount; ++i)
{
CK_ATTRIBUTE certValueAttr = { CKA_VALUE, NULL_PTR, 0 };
rv = m_functionList->C_GetAttributeValue(session, certHandles[i], &certValueAttr, 1);
CHECK(" C_GetAttributeValue", rv == CKR_OK, close_session);
certValue.resize(certValueAttr.ulValueLen);
certValueAttr.pValue = certValue.data();
rv = m_functionList->C_GetAttributeValue(session, certHandles[i], &certValueAttr, 1);
CHECK(" C_GetAttributeValue", rv == CKR_OK, close_session);
pemCerts.emplace_back(certToPem(certValue));
cert = certToX509(pemCerts[i]);
CHECK(" certToX509", cert != NULL, free_in_bio);
/*************************************************************************
* Добавление сертификата в контейнер *
*************************************************************************/
r = sk_X509_push(certs, cert);
CHECK(" sk_X509_push", r == 1, free_sk_certs);
}
rv = m_functionList->C_FindObjectsFinal(session);
CHECK(" C_FindObjectsFinal", rv == CKR_OK, close_session);
Подскажите, пожалуйста, как правильно добавить сертификат в получатели? Спасибо.