crypt32: Make a helper function to create initial candidate chain.
This commit is contained in:
parent
192ed7353d
commit
1a059879bf
|
@ -569,42 +569,13 @@ static BOOL CRYPT_BuildSimpleChain(HCERTCHAINENGINE hChainEngine,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct _CERT_CHAIN_PARA_NO_EXTRA_FIELDS {
|
static BOOL CRYPT_BuildCandidateChainFromCert(HCERTCHAINENGINE hChainEngine,
|
||||||
DWORD cbSize;
|
|
||||||
CERT_USAGE_MATCH RequestedUsage;
|
|
||||||
} CERT_CHAIN_PARA_NO_EXTRA_FIELDS, *PCERT_CHAIN_PARA_NO_EXTRA_FIELDS;
|
|
||||||
|
|
||||||
typedef struct _CERT_CHAIN_PARA_EXTRA_FIELDS {
|
|
||||||
DWORD cbSize;
|
|
||||||
CERT_USAGE_MATCH RequestedUsage;
|
|
||||||
CERT_USAGE_MATCH RequestedIssuancePolicy;
|
|
||||||
DWORD dwUrlRetrievalTimeout;
|
|
||||||
BOOL fCheckRevocationFreshnessTime;
|
|
||||||
DWORD dwRevocationFreshnessTime;
|
|
||||||
} CERT_CHAIN_PARA_EXTRA_FIELDS, *PCERT_CHAIN_PARA_EXTRA_FIELDS;
|
|
||||||
|
|
||||||
BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
|
|
||||||
PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
|
PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
|
||||||
PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,
|
PCertificateChain *ppChain)
|
||||||
PCCERT_CHAIN_CONTEXT* ppChainContext)
|
|
||||||
{
|
{
|
||||||
PCERT_SIMPLE_CHAIN simpleChain = NULL;
|
PCERT_SIMPLE_CHAIN simpleChain = NULL;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
|
||||||
TRACE("(%p, %p, %p, %p, %p, %08x, %p, %p)\n", hChainEngine, pCertContext,
|
|
||||||
pTime, hAdditionalStore, pChainPara, dwFlags, pvReserved, ppChainContext);
|
|
||||||
|
|
||||||
if (!pChainPara)
|
|
||||||
{
|
|
||||||
SetLastError(E_INVALIDARG);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (ppChainContext)
|
|
||||||
*ppChainContext = NULL;
|
|
||||||
if (!hChainEngine)
|
|
||||||
hChainEngine = CRYPT_GetDefaultChainEngine();
|
|
||||||
/* FIXME: what about HCCE_LOCAL_MACHINE? */
|
|
||||||
/* FIXME: pChainPara is for now ignored */
|
|
||||||
/* FIXME: only simple chains are supported for now, as CTLs aren't
|
/* FIXME: only simple chains are supported for now, as CTLs aren't
|
||||||
* supported yet.
|
* supported yet.
|
||||||
*/
|
*/
|
||||||
|
@ -629,6 +600,51 @@ BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
|
*ppChain = chain;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct _CERT_CHAIN_PARA_NO_EXTRA_FIELDS {
|
||||||
|
DWORD cbSize;
|
||||||
|
CERT_USAGE_MATCH RequestedUsage;
|
||||||
|
} CERT_CHAIN_PARA_NO_EXTRA_FIELDS, *PCERT_CHAIN_PARA_NO_EXTRA_FIELDS;
|
||||||
|
|
||||||
|
typedef struct _CERT_CHAIN_PARA_EXTRA_FIELDS {
|
||||||
|
DWORD cbSize;
|
||||||
|
CERT_USAGE_MATCH RequestedUsage;
|
||||||
|
CERT_USAGE_MATCH RequestedIssuancePolicy;
|
||||||
|
DWORD dwUrlRetrievalTimeout;
|
||||||
|
BOOL fCheckRevocationFreshnessTime;
|
||||||
|
DWORD dwRevocationFreshnessTime;
|
||||||
|
} CERT_CHAIN_PARA_EXTRA_FIELDS, *PCERT_CHAIN_PARA_EXTRA_FIELDS;
|
||||||
|
|
||||||
|
BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
|
||||||
|
PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
|
||||||
|
PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,
|
||||||
|
PCCERT_CHAIN_CONTEXT* ppChainContext)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
PCertificateChain chain;
|
||||||
|
|
||||||
|
TRACE("(%p, %p, %p, %p, %p, %08x, %p, %p)\n", hChainEngine, pCertContext,
|
||||||
|
pTime, hAdditionalStore, pChainPara, dwFlags, pvReserved, ppChainContext);
|
||||||
|
|
||||||
|
if (!pChainPara)
|
||||||
|
{
|
||||||
|
SetLastError(E_INVALIDARG);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (ppChainContext)
|
||||||
|
*ppChainContext = NULL;
|
||||||
|
if (!hChainEngine)
|
||||||
|
hChainEngine = CRYPT_GetDefaultChainEngine();
|
||||||
|
/* FIXME: what about HCCE_LOCAL_MACHINE? */
|
||||||
|
/* FIXME: pChainPara is for now ignored */
|
||||||
|
ret = CRYPT_BuildCandidateChainFromCert(hChainEngine, pCertContext, pTime,
|
||||||
|
hAdditionalStore, &chain);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
if (ppChainContext)
|
if (ppChainContext)
|
||||||
*ppChainContext = (PCCERT_CHAIN_CONTEXT)chain;
|
*ppChainContext = (PCCERT_CHAIN_CONTEXT)chain;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue