Статус: Новичок
Группы: Участники
Зарегистрирован: 08.07.2019(UTC) Сообщений: 9 Откуда: Москва Сказал(а) «Спасибо»: 3 раз
|
Доброй ночи! Подскажите, пожалуйста, по ошибке. У заказчика имеется Astra Linux 2.12.45 (Orel) и КриптоПро CSP 5.0 13000 KC1 x64. Единственный контейнер с ключами обмена (AT_KEYEXCHANGE) находится на диске (носитель HDIMAGE). При попытке получения отпечатка ключа при помощи CryptGetProvParam с параметром PP_EXCHANGE_KEY_FP выдаётся ошибка с кодом 87 (0x57) - ERROR_INVALID_PARAMETER. Тестирование контейнера успешно. На нашем тестовом окружении с аналогичными ОС, КриптоПро CSP ошибка не воспроизводится - контейнер находится, подпись успешно формируется (и в других окружениях ALT, Red OS, Windows этот функционал работает). На всякий случай приведу адаптированный код: Код:if (CryptAcquireContext(&hCryptProv, NULL, szProviderName, dwProviderType, CRYPT_VERIFYCONTEXT))
{
if (CryptImportPublicKeyInfo(hCryptProv, pCertContext->dwCertEncodingType, &pCertContext->pCertInfo->SubjectPublicKeyInfo, &hKey))
{
if (CryptGetKeyParam(hKey, KP_FP, NULL, &dwCertFP, 0))
{
if (pbCertFP = (BYTE *) malloc(dwCertFP))
{
if (CryptGetKeyParam(hKey, KP_FP, pbCertFP, &dwCertFP, 0))
dwKeyFP = dwCertFP;
}
}
}
if (hKey)
CryptDestroyKey(hKey);
if (hCryptProv)
CryptReleaseContext(hCryptProv, 0);
}
if (CryptAcquireContext(&hCryptEnumProv, NULL, szProviderName, dwProviderType, CRYPT_VERIFYCONTEXT))
{
...
while (CryptGetProvParam(hCryptEnumProv, PP_ENUMCONTAINERS, pbData, &cbSize, dwParams))
{
...
if (CryptAcquireContext(&hCryptProv, szContainerName, szProviderName, dwProviderType, CRYPT_VERIFYCONTEXT))
{
if (pbKeyFP = (BYTE *) malloc(dwKeyFP))
{
// Вызов завершается ошибкой 87 (0x57) - ERROR_INVALID_PARAMETER
if (CryptGetProvParam(hCryptProv, PP_EXCHANGE_KEY_FP, pbKeyFP, &dwKeyFP, 0))
{
// сравнение отпечатков pbKeyFP и pbCertFP и другие действия
}
}
}
...
}
}
Что можете посоветовать? Отредактировано пользователем 12 июля 2024 г. 0:18:35(UTC)
| Причина: Не указана
|