//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1996 - 1999
//
//  File:       certprov.cpp
//
//  Contents:   Microsoft Internet Security Authenticode Policy Provider
//
//  Functions:  SoftpubDefCertInit
//
//  History:    02-Oct-1997 pberkman   created
//
//--------------------------------------------------------------------------

#include    "global.hxx"

HRESULT WINAPI SoftpubDefCertInit(CRYPT_PROVIDER_DATA *pProvData)
{
    if (!(pProvData->padwTrustStepErrors) ||
        (pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_WVTINIT] != ERROR_SUCCESS))
    {
        return(S_FALSE);
    }

    if (!(_ISINSTRUCT(CRYPT_PROVIDER_DATA, pProvData->cbStruct, pszUsageOID)))
    {
        pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_INITPROV] = ERROR_INVALID_PARAMETER;
        return(S_FALSE);
    }

    HRESULT                     hr;
    GUID                        gAuthenticode = WINTRUST_ACTION_GENERIC_VERIFY_V2;
    CRYPT_PROVIDER_FUNCTIONS    sAuthenticodePfns;

    //
    //  fill in the Authenticode Functions
    //
    memset(&sAuthenticodePfns, 0x00, sizeof(CRYPT_PROVIDER_FUNCTIONS));
    sAuthenticodePfns.cbStruct = sizeof(CRYPT_PROVIDER_FUNCTIONS);

    if (!(WintrustLoadFunctionPointers(&gAuthenticode, &sAuthenticodePfns)))
    {
        pProvData->padwTrustStepErrors[TRUSTERROR_STEP_FINAL_INITPROV]   = TRUST_E_PROVIDER_UNKNOWN;
        return(S_FALSE);
    }

    hr = S_OK;

    if (sAuthenticodePfns.pfnInitialize)
    {
        hr = sAuthenticodePfns.pfnInitialize(pProvData);
    }

    //
    //  assign our usage
    //
    if (pProvData->pWintrustData)
    {
        if (pProvData->pWintrustData->pPolicyCallbackData)
        {
            pProvData->pszUsageOID = (char *)pProvData->pWintrustData->pPolicyCallbackData;
        }
    }

    return(hr);
}