/*++ Copyright (c) 1995 Microsoft Corporation Module Name: simssl.h Abstract: This module contains class declarations/definitions for CEncryptCtx (some code stolen from internet server) Revision History: --*/ #ifndef _SIMSSL_H_ #define _SIMSSL_H_ class CEncryptCtx { private: // // is this the client side // BOOL m_IsClient; // // indicates whether we are starting a new session // BOOL m_IsNewSSLSession; // // should this session be encypted // BOOL m_IsEncrypted; // // Handle to user's security context for encryption // CtxtHandle m_hSealCtxt; // // Pointers to cached credential blocks // // // Array of credential handles - Note this comes form the credential cache // and should not be deleted. m_phCredInUse is the pointer to the // credential handle that is in use // PVOID m_phCreds; CredHandle* m_phCredInUse; DWORD m_iCredInUse; // // ecryption header and trailer lengths // DWORD m_cbSealHeaderSize; DWORD m_cbSealTrailerSize; // // indicates whether we have context handles opened // BOOL m_haveSSLCtxtHandle; // // Have we been authenticated, if so did we use the // anonymous token // BOOL m_IsAuthenticated; // // Have we been authenticated, if so did we use the // anonymous token // static BOOL m_IsSecureCapable; // // static variables used by all class instances // static char szServiceName[16]; static char szLsaPrefix[16]; // // hSecurity - NULL when security.dll/secur32.dll is not loaded // static HINSTANCE m_hSecurity; // // hLsa - NULL for Win95, set for NT // static HINSTANCE m_hLsa; // // internal routine to implement public Converse // DWORD EncryptConverse( IN PVOID InBuffer, IN DWORD InBufferSize, OUT LPBYTE OutBuffer, OUT PDWORD OutBufferSize, OUT PBOOL MoreBlobsExpected, IN CredHandle* pCredHandle ); public: CEncryptCtx( BOOL IsClient = FALSE ); ~CEncryptCtx(); // // routines used to initialize and terminate use of this class // static BOOL WINAPI Initialize( LPSTR pszServiceName, LPSTR pszLsaPrefix ); static VOID WINAPI Terminate( VOID ); // // routine to set the magic bits required by the IIS Admin tool // static void WINAPI GetAdminInfoEncryptCaps( PDWORD pdwEncCaps ); // // returns whether sspi packages and credentials have been installed // static BOOL IsSecureCapable( void ) { return m_IsSecureCapable; } // // returns whether session is encrypted or not // BOOL IsEncrypted( void ) { return m_IsEncrypted; } // // returns whether session has successfully authenticated // BOOL IsAuthenticated( void ) { return m_IsAuthenticated; } // // Encryption routines // BOOL WINAPI SealMessage( IN LPBYTE Message, IN DWORD cbMessage, OUT LPBYTE pbuffOut, OUT DWORD *pcbBuffOut ); BOOL WINAPI UnsealMessage( IN LPBYTE Message, IN DWORD cbMessage, OUT LPBYTE *DecryptedMessage, OUT PDWORD DecryptedMessageSize, OUT PDWORD ExpectedMessageSize, OUT LPBYTE *NextSealMessage = NULL ); // // SSL specific routines. This is used for processing SSL negotiation // packets. // DWORD WINAPI Converse( IN PVOID InBuffer, IN DWORD InBufferSize, OUT LPBYTE OutBuffer, OUT PDWORD OutBufferSize, OUT PBOOL MoreBlobsExpected, IN LPSTR LocalIpAddr = "127.0.0.1" ); // // resets the user name // void WINAPI Reset( void ); // // returns the size of the encryption header for this session // DWORD GetSealHeaderSize( void ) { return m_haveSSLCtxtHandle ? m_cbSealHeaderSize : 0 ; } // // returns the size of the encryption trailer for this session // DWORD GetSealTrailerSize( void ) { return m_haveSSLCtxtHandle ? m_cbSealTrailerSize : 0 ; } // // decrypts read buffer, concatenating all decrypted data at the // head of the buffer. // DWORD WINAPI DecryptInputBuffer( IN LPBYTE pBuffer, IN DWORD cbInBuffer, OUT DWORD* pcbOutBuffer, OUT DWORD* pcbParsable, OUT DWORD* pcbExpected ); // // verifies the intended host name matches the name contained in the cert // This function, checks a given hostname against the current certificate // stored in an active SSPI Context Handle. If the certificate containts // a common name, and it matches the passed in hostname, this function // will return TRUE. // BOOL CheckCertificateCommonName( IN LPSTR pszHostName ); // // verifies the ccertificate has not expired // returns TRUE if the cert is valid // BOOL CheckCertificateExpired( void ); }; // CSslCtx // // blkcred.cpp // #endif // _SECURITY_H_