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

#include    "global.hxx"

BOOL WINAPI SoftpubLoadDefUsageCallData(const char *pszUsageOID, CRYPT_PROVIDER_DEFUSAGE *psDefUsage)
{
    if (!(pszUsageOID) ||
        !(psDefUsage) ||
        !(_ISINSTRUCT(CRYPT_PROVIDER_DEFUSAGE, psDefUsage->cbStruct, pDefSIPClientData)))
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }

    HTTPSPolicyCallbackData polHttps;

    memset(&polHttps, 0x00, sizeof(HTTPSPolicyCallbackData));

    polHttps.cbStruct   =  sizeof(HTTPSPolicyCallbackData);
    polHttps.fdwChecks  = INTERNET_FLAG_IGNORE_CERT_CN_INVALID;

    psDefUsage->pDefPolicyCallbackData  = NULL;
    psDefUsage->pDefSIPClientData       = NULL;

    if (strcmp(pszUsageOID, szOID_PKIX_KP_SERVER_AUTH) == 0)
    {
        polHttps.dwAuthType = AUTHTYPE_SERVER;
    }

    if (strcmp(pszUsageOID, szOID_PKIX_KP_CLIENT_AUTH) == 0)
    {
        polHttps.dwAuthType = AUTHTYPE_CLIENT;
    }

    if (strcmp(pszUsageOID, szOID_SERVER_GATED_CRYPTO) == 0)
    {
        polHttps.dwAuthType = AUTHTYPE_SERVER;
    }

    if (strcmp(pszUsageOID, szOID_SGC_NETSCAPE) == 0)
    {
        polHttps.dwAuthType = AUTHTYPE_SERVER;
    }

    if (polHttps.dwAuthType == 0)
    {
        return(TRUE);
    }

    if (!(psDefUsage->pDefPolicyCallbackData = (HTTPSPolicyCallbackData *)malloc(sizeof(HTTPSPolicyCallbackData))))
    {
        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
        return(FALSE);
    }

    memset(psDefUsage->pDefPolicyCallbackData, 0x00, sizeof(HTTPSPolicyCallbackData));
    memcpy(psDefUsage->pDefPolicyCallbackData, &polHttps, sizeof(HTTPSPolicyCallbackData));

    return(TRUE);
}

BOOL WINAPI SoftpubFreeDefUsageCallData(const char *pszUsageOID, CRYPT_PROVIDER_DEFUSAGE *psDefUsage)
{
    if (!(pszUsageOID) ||
        !(psDefUsage) ||
        !(_ISINSTRUCT(CRYPT_PROVIDER_DEFUSAGE, psDefUsage->cbStruct, pDefSIPClientData)))
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }

    if (psDefUsage->pDefPolicyCallbackData)
    {
        free(psDefUsage->pDefPolicyCallbackData);
    }
    
    return(TRUE);
}