You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.3 KiB
118 lines
3.3 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: memory.cpp
|
|
//
|
|
// Contents: Microsoft Internet Security Trust Provider
|
|
//
|
|
// Functions: WVTNew
|
|
// WVTDelete
|
|
// WVTAddStore
|
|
// WVTAddSigner
|
|
// WVTAddCertContext
|
|
// WVTAddPrivateData
|
|
//
|
|
// History: 07-Jun-1997 pberkman created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include "global.hxx"
|
|
|
|
|
|
// PFN_CPD_MEM_ALLOC
|
|
void *WVTNew(DWORD cbSize)
|
|
{
|
|
void *pvRet;
|
|
|
|
pvRet = (void *)new char[cbSize];
|
|
|
|
if (!(pvRet))
|
|
{
|
|
assert(pvRet);
|
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
|
}
|
|
|
|
return(pvRet);
|
|
}
|
|
|
|
// PFN_CPD_MEM_FREE
|
|
void WVTDelete(void *pvMem)
|
|
{
|
|
DELETE_OBJECT(pvMem);
|
|
}
|
|
|
|
// PFN_CPD_ADD_STORE
|
|
BOOL WVTAddStore(CRYPT_PROVIDER_DATA *pProvData, HCERTSTORE hStore)
|
|
{
|
|
HCERTSTORE hStoreDup;
|
|
|
|
hStoreDup = CertDuplicateStore(hStore);
|
|
|
|
return(AddToStoreChain(hStoreDup, &pProvData->chStores, &pProvData->pahStores));
|
|
}
|
|
|
|
// PFN_CPD_ADD_SGNR
|
|
BOOL WVTAddSigner(CRYPT_PROVIDER_DATA *pProvData,
|
|
BOOL fCounterSigner,
|
|
DWORD idxSigner,
|
|
CRYPT_PROVIDER_SGNR *pSngr2Add)
|
|
{
|
|
if (fCounterSigner)
|
|
{
|
|
if (idxSigner > pProvData->csSigners)
|
|
{
|
|
return(FALSE);
|
|
}
|
|
|
|
return(AddToSignerChain(pSngr2Add,
|
|
&pProvData->pasSigners[idxSigner].csCounterSigners,
|
|
&pProvData->pasSigners[idxSigner].pasCounterSigners));
|
|
}
|
|
|
|
return(AddToSignerChain(pSngr2Add, &pProvData->csSigners, &pProvData->pasSigners));
|
|
}
|
|
|
|
// PFN_CPD_ADD_CERT
|
|
BOOL WVTAddCertContext(CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner,
|
|
BOOL fCounterSigner, DWORD idxCounterSigner, PCCERT_CONTEXT pCert)
|
|
{
|
|
CRYPT_PROVIDER_CERT sCert;
|
|
|
|
if (idxSigner > pProvData->csSigners)
|
|
{
|
|
return(FALSE);
|
|
}
|
|
|
|
memset(&sCert, 0x00, sizeof(CRYPT_PROVIDER_CERT));
|
|
sCert.cbStruct = sizeof(CRYPT_PROVIDER_CERT);
|
|
|
|
sCert.pCert = CertDuplicateCertificateContext(pCert);
|
|
|
|
if (fCounterSigner)
|
|
{
|
|
if (idxCounterSigner > pProvData->pasSigners[idxSigner].csCounterSigners)
|
|
{
|
|
return(FALSE);
|
|
}
|
|
|
|
return(AddToCertChain(&sCert,
|
|
&pProvData->pasSigners[idxSigner].pasCounterSigners[idxCounterSigner].csCertChain,
|
|
&pProvData->pasSigners[idxSigner].pasCounterSigners[idxCounterSigner].pasCertChain));
|
|
}
|
|
|
|
return(AddToCertChain(&sCert,
|
|
&pProvData->pasSigners[idxSigner].csCertChain,
|
|
&pProvData->pasSigners[idxSigner].pasCertChain));
|
|
}
|
|
|
|
// PFN_CPD_ADD_PRIVDATA
|
|
BOOL WVTAddPrivateData(CRYPT_PROVIDER_DATA *pProvData, CRYPT_PROVIDER_PRIVDATA *psPrivData2Add)
|
|
{
|
|
return(AllocateNewChain(sizeof(CRYPT_PROVIDER_PRIVDATA), psPrivData2Add,
|
|
&pProvData->csProvPrivData,
|
|
(void **)&pProvData->pasProvPrivData,
|
|
psPrivData2Add->cbStruct));
|
|
}
|