Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

CPipeSHA1.cpp

Go to the documentation of this file.
00001 
00032 #include "stdafx.h"
00033 #include "CPipeSHA1.h"
00034 
00035 namespace AxPipe {
00036     namespace Stock {
00039         CPipeSHA1::CPipeSHA1() {
00040             if (!CryptAcquireContext(&m_hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) {
00041                 SetError(AxPipe::ERROR_CODE_STOCK, _T("CPipeSHA1::CPipeSHA1() [CryptAcquireContext() failed]"));
00042             }
00043             m_hHash = NULL;
00044         }
00045 
00048         CPipeSHA1::~CPipeSHA1() {
00049             if (m_hHash) CryptDestroyHash(m_hHash); 
00050             if (m_hCryptProv) CryptReleaseContext(m_hCryptProv, 0); 
00051         }
00052 
00056         void
00057         CPipeSHA1::Out(AxPipe::CSeg *pSeg) {
00058             if (!CryptHashData(m_hHash, pSeg->PtrRd(), (DWORD)pSeg->Len(), 0)) {
00059                 SetError(AxPipe::ERROR_CODE_STOCK, _T("CPipeSHA1::CPipeSHA1() [CryptHashData() failed]"));
00060             }
00061             m_cb += pSeg->Len();
00062             Pump(pSeg);
00063         }
00064 
00067         unsigned __int64
00068         CPipeSHA1::CountBytes() {
00069             return m_cb;
00070         }
00071 
00074         unsigned char *
00075         CPipeSHA1::GetHash() {
00076             return (unsigned char *)m_Hash.GetLeft(160);
00077         }
00078 
00081         bool
00082         CPipeSHA1::OutOpen() {
00083             bool fReturn = CPipe::OutOpen();
00084 
00085             if (!CryptCreateHash(m_hCryptProv, CALG_SHA1, 0, 0, &m_hHash)) {
00086                 SetError(AxPipe::ERROR_CODE_STOCK, _T("CPipeSHA1::CPipeSHA1() [CryptCreateHash() failed]"));
00087             }
00088             m_cb = 0;
00089             return fReturn;
00090         }
00091 
00094         bool
00095         CPipeSHA1::OutClose() {
00096             DWORD dwHashLen = sizeof m_Hash;
00097             if (!CryptGetHashParam(m_hHash, HP_HASHVAL, (unsigned char *)&m_Hash, &dwHashLen, 0)) {
00098                 SetError(AxPipe::ERROR_CODE_STOCK, _T("CPipeSHA1::OutClose() [CryptGetHashParam() failed]"));
00099             }
00100             ASSAPI(CryptDestroyHash(m_hHash) == TRUE);
00101             m_hHash = NULL;
00102             return CPipe::OutClose();
00103         }   
00104     }
00105 }

Generated on Mon Feb 2 13:19:18 2004 for AxPipe by doxygen 1.3.5