Статус: Новичок
Группы: Участники
Зарегистрирован: 08.10.2008(UTC) Сообщений: 9
|
Добрый день. Есть необходимость программно, используя Crypto API 2.0, получить (к примеру для последующей печати) все имеющиеся у сертификата расширения: их названия и значения. использую следующий код: Код:
BYTE* pbDecoded; // result
DWORD cbDecoded; // result length
DWORD ExtCount = pCertContext->pCertInfo->cExtension;
for (int i = 0; i < ExtCount; i++) // перебор все расширений сертификата
{
// Get length needed to buffer;
if (!CryptDecodeObject(
pCertContext->dwCertEncodingType,
pCertContext->pCertInfo->rgExtension[i].pszObjId,
pCertContext->pCertInfo->rgExtension[i].Value.pbData,
pCertContext->pCertInfo->rgExtension[i].Value.cbData,
NULL,
NULL,
&cbDecoded))
{
return 0;
}
// Allocated the needed buffer
pbDecoded = (BYTE*)malloc(cbDecoded);
if (!pbDecoded)
{
return 0;
}
// Call again to
if (!CryptDecodeObject(
pCertContext->dwCertEncodingType,
pCertContext->pCertInfo->rgExtension[i].pszObjId,
pCertContext->pCertInfo->rgExtension[i].Value.pbData,
pCertContext->pCertInfo->rgExtension[i].Value.cbData,
NULL,
pbDecoded,
&cbDecoded))
{
return 0;
}
// далее по названию расширения пытаюсь получить его значение
if (!strcmp(pCertContext->pCertInfo->rgExtension[i].pszObjId, szOID_KEY_USAGE))
{
PCERT_KEY_ATTRIBUTES_INFO pKeyAtt;
pKeyAtt= (PCERT_KEY_ATTRIBUTES_INFO) pbDecoded;
if (*pKeyAtt->IntendedKeyUsage.pbData & CERT_DIGITAL_SIGNATURE_KEY_USAGE) // строка генерирует access violation
fprintf(fout, "CERT_DIGITAL_SIGNATURE_KEY_USAGE"); // вывод значения - CERT_DIGITAL_SIGNATURE_KEY_USAGE
//if (*pKeyAtt->IntendedKeyUsage.pbData & CERT_DIGITAL_SIGNATURE_KEY_USAGE)
// fprintf(fout, "CERT_DATA_ENCIPHERMENT_KEY_USAGE");
// и т. д для все описанных в wincrypt.h атрибутов
}
//(!strcmp(pCertContext->pCertInfo->rgExtension[i].pszObjId, szOID_KEY_USAGE))
// далее для всех описанных в wincrypt.h OID-ов расширений
}
при побитовом сравнении декодированных и приведенных к PCERT_KEY_ATTRIBUTES_INFO данных, возникает ошибка чтения памяти, видимо с декодированием или приведением данных что-то не так. Еще бы хотелось узнать общий алгоритм чтения всех расширений и их значений, имеющихся у сертификата)).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:возникает ошибка чтения памяти, видимо с декодированием по szOID_KEY_USAGE CryptDecodeObject декодирует в CRYPT_BIT_BLOB, а не в PCERT_KEY_ATTRIBUTES_INFO Цитата:Еще бы хотелось узнать общий алгоритм чтения всех расширений и их значений, имеющихся у сертификата)). Перебор в цикле, как у Вас сделано. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.10.2008(UTC) Сообщений: 9
|
Cтал декодировать в CRYPT_BIT_BLOB, и все стало работать как надо. Большое спасибо)).
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close