Статус: Новичок
Группы: Участники
Зарегистрирован: 25.03.2009(UTC) Сообщений: 9
|
День добрый. Есть сертификат, пытаюсь вытащить из него "использование ключа" Код:
// читаем расширения сертификата
PCERT_EXTENSION pExtension = NULL;
pExtension = CertFindExtension(szOID_KEY_USAGE,
pUserCert->pCertInfo->cExtension,
pUserCert->pCertInfo->rgExtension);
PCRYPT_DATA_BLOB usages = NULL;
DWORD dwSize= 0;
BYTE bUsage;
if(pExtension)
{
CryptDecodeObject(ENCODING, X509_KEY_USAGE,
pExtension->Value.pbData, pExtension->Value.cbData,
0, 0, &dwSize);
usages = (CRYPT_DATA_BLOB*)malloc(dwSize);
usages->cbData = dwSize;
CryptDecodeObject(ENCODING, X509_KEY_USAGE,
pExtension->Value.pbData, pExtension->Value.cbData,
0, (LPVOID)usages, &dwSize);
bUsage = (BYTE)usages->pbData;
if( (bUsage & CERT_DIGITAL_SIGNATURE_KEY_USAGE) > 0)
MessageBox("такой тип использования есть");
if(usages) free(usages);
}
ну вот как то так. Вытащить текстовые значения из полей расширения у меня получается, а вот BYTE (каковым, как я понимаю является szOID_KEY_USAGE) не получается. Заранее спасибо.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.03.2008(UTC) Сообщений: 17 Откуда: г. Москва, Россия
|
soap, лучше используйте функцию CertGetEnhancedKeyUsage(), ее описание смотрите в MSDN.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
soap, после декодирования szOID_KEY_USAGE получается структура CRYPT_BIT_BLOB а не CRYPT_DATA_BLOB. nikita1 - CertGetEnhancedKeyUsage используется для получения совершенно другого расширения - Enhanced Key Usage ("Улучшенный ключ"), а не Key Usage ("Использование ключа"). |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.03.2009(UTC) Сообщений: 9
|
Поменял структуру, но все равно, не могу вычленить тип использования. То как я делаю Код:
bUsage = (BYTE)usages->pbData;
if( (bUsage & CERT_DIGITAL_SIGNATURE_KEY_USAGE) > 0)
MessageBox("такой тип использования есть");
не проходит. Как тогда можно узнать?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Что значит не проходит? CryptDecodeObject отрабатывает без ошибок? Что лежит в usages->pbData после декодирования? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.03.2009(UTC) Сообщений: 9
|
в usages->pbData что то лежит =)) в usages->сbData = 1 то есть, как я понимаю, там лежит один байт, который определяет использование ключа. Но когда я произвожу сравнения Цитата: bUsage = (BYTE)usages->pbData; if( (bUsage & CERT_DIGITAL_SIGNATURE_KEY_USAGE) > 0) MessageBox("такой тип использования есть");
то результаты получаю неверные (ну в плане того, что я знаю, что ключ для этого не используется, а показывает messagebox) Может я просто не так сравниваю?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
судя по тому что usages->сbData = 1 декодируется все правильно. какое значение лежит в usages->pbData? или там все время разные значения? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.03.2009(UTC) Сообщений: 9
|
usages->pbData = 254 ('ю') если перевести, то получается -2. Теперь я совсем сбит с толку. Кажется разобрался. В usages->pbData было 254, в bUsage = (BYTE)usages->pbData[0] было нормальное значение. Большое спасибо за помощь. Отредактировано пользователем 24 августа 2009 г. 18:05:32(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close