Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2013(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 1 раз
|
Есть код функции CertGetCRLFromStore (взято из интернета) Там после CertFindCRLInStoreпроверяется отдельно CERT_STORE_TIME_VALIDITY_FLAG и CERT_STORE_SIGNATURE_FLAG: В capilite есть проверки или нет? Или только CertFindCRLInStore? Судя по тому, что в библиотеке нет CryptVerifyCertificateSignatureEx, хотя она и описана в заголовочных файлах - не проверяется. Код:PCCRL_CONTEXT WINAPI CertGetCRLFromStore ( HCERTSTORE hCertStore,
PCCERT_CONTEXT pIssuerContext,
PCCRL_CONTEXT pPrevCrlContext,
DWORD * pdwFlags
)
{
static const DWORD supportedFlags = CERT_STORE_SIGNATURE_FLAG |
CERT_STORE_TIME_VALIDITY_FLAG | CERT_STORE_BASE_CRL_FLAG |
CERT_STORE_DELTA_CRL_FLAG;
PCCRL_CONTEXT ret;
TRACE("(%p, %p, %p, %08x)\n", hCertStore, pIssuerContext, pPrevCrlContext,
*pdwFlags);
if (*pdwFlags & ~supportedFlags)
{
SetLastError(E_INVALIDARG);
return NULL;
}
if (pIssuerContext)
ret = CertFindCRLInStore(hCertStore, pIssuerContext->dwCertEncodingType,
0, CRL_FIND_ISSUED_BY, pIssuerContext, pPrevCrlContext);
else
ret = CertFindCRLInStore(hCertStore, 0, 0, CRL_FIND_ANY, NULL,
pPrevCrlContext);
if (ret)
{
if (*pdwFlags & CERT_STORE_TIME_VALIDITY_FLAG)
{
if (0 == CertVerifyCRLTimeValidity(NULL, ret->pCrlInfo))
*pdwFlags &= ~CERT_STORE_TIME_VALIDITY_FLAG;
}
if (*pdwFlags & CERT_STORE_SIGNATURE_FLAG)
{
if (CryptVerifyCertificateSignatureEx(0, ret->dwCertEncodingType,
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL, (void *)ret,
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT, (void *)pIssuerContext, 0,
NULL))
*pdwFlags &= ~CERT_STORE_SIGNATURE_FLAG;
}
}
return ret;
}
|