//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1996 - 1999
//
//  File:       ccert.hxx
//
//  Contents:   Microsoft Internet Security Certificate Class
//
//  History:    15-Aug-1997 pberkman   created
//
//--------------------------------------------------------------------------

#ifndef CCERT_HXX
#define CCERT_HXX

#define     CCERT_MAXSTORES     5

class CCert_
{
    public:
            CCert_(PCCERT_CONTEXT pCertContext);
            virtual ~CCert_(void);

            WCHAR           *PublisherName(void);
            WCHAR           *AgencyName(void);

            WCHAR           *ProviderName(void);
            DWORD           ProviderType(void);
            WCHAR           *PrivateKeyContainer(void);

            PCCERT_CONTEXT  CertContext(void) { return(m_pCertContext); }

            BOOL            BuildChain(FILETIME *psftVerifyAsOf = NULL);
            CCert_          *IssuerCCert_(void) { return(m_pCCert_Issuer); } // build the chain first!
            DWORD           IssuersConfidence(void) { return(m_dwConfidence); }

    protected:
            BOOL            ExtractCommonNameExt(WCHAR **pwszRet);
            BOOL            ExtractCommonNameAttr(WCHAR **pwszRet);

    private:
            HCERTSTORE      m_pahStores[CCERT_MAXSTORES];
            DWORD           m_chStores;
            PCCERT_CONTEXT  m_pCertContext;
            CCert_          *m_pCCert_Issuer;
            WCHAR           *m_pwszPublisherName;
            WCHAR           *m_pwszAgencyName;
            DWORD           m_dwConfidence;

            BOOL            m_fTriedPrivateKey;
            WCHAR           *m_pwszProvider;        // if signing cert
            DWORD           m_dwProviderType;
            WCHAR           *m_pwszKeyContainer;    // if signing cert


            WCHAR           *GetRDNAttr(char *pszObjId, PCERT_NAME_BLOB pNameBlob);
            void            OpenStores(void);
            BOOL            BuildChainPrivate(DWORD chStores, HCERTSTORE *pahStores, FILETIME *psftVerifyAsOf);
            BOOL            FindPrivateKey(void);
            BOOL            EnumContainer(HCRYPTPROV *phProv, DWORD dwIndex, DWORD dwProvType, 
                                          WCHAR *pwszProv, WCHAR **ppwszContainer);
            BOOL            CheckContainerForKey(WCHAR *pwszProv, DWORD dwProvType, WCHAR *pwszContainer);
};

#endif // CCERT_HXX