Здравствуйте, slavyancheg, Вы писали:
S>Доброго всем времени суток.
S>Здесь есть пример как, как скачать СОС с узла указанного в сертификате пользователя(CRL Distribution Point). После некоторой переработки примера, все работает, в итоге CRL_CONTEXT, в котором можно проверить наличие сертификата в СОС. Проблема в том, если на узле СОС храниться в формате DER, то функция CertCreateCRLContext не создает CRL_CONTEXT, пробовал CryptDecodeObjectEx, но не нашел нужной структуры чтобы перекодировать в PEM.
S>Может кто-нибудь знает, как можно из DER создать CRL_CONTEXT?
S>Спасибо.
Разобрался, такой код поможет:
BYTE *pbData = NULL;
DWORD cbData = 0;
BYTE *pbPem = NULL;
DWORD cbPem = 0;
DWORD pdwSkip = 0;
DWORD pdwFlags = 0;
CryptStringToBinaryA((LPSTR)pbData, cbData, CRYPT_STRING_BASE64X509CRLHEADER, NULL, &cbPem, &pdwSkip, &pdwFlags);
pbPem = (BYTE*)malloc(cbPem);
CryptStringToBinaryA((LPSTR)pbData, cbData, CRYPT_STRING_BASE64X509CRLHEADER, pbPem, &cbPem, &pdwSkip, &pdwFlags);
if(!cbPem)
pCRL = CertCreateCRLContext(X509_ASN_ENCODING, pbData, cbData);
else
pCRL = CertCreateCRLContext(X509_ASN_ENCODING, pbPem, cbPem);
free(pbData);
free(pbPem);