00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef WINCAPICRYPTOHASHHMAC_INCLUDE
00029 #define WINCAPICRYPTOHASHHMAC_INCLUDE
00030
00031 #include <xsec/framework/XSECDefs.hpp>
00032 #include <xsec/enc/XSECCryptoHash.hpp>
00033
00034 #if !defined(_WIN32_WINNT)
00035 # define _WIN32_WINNT 0x0400
00036 #endif
00037
00038 #include <wincrypt.h>
00039
00040 class WinCAPICryptoProvider;
00041
00065 class DSIG_EXPORT WinCAPICryptoHashHMAC : public XSECCryptoHash {
00066
00067
00068 public :
00069
00072
00085 WinCAPICryptoHashHMAC(HCRYPTPROV prov, XSECCryptoHash::HashType alg);
00086 virtual ~WinCAPICryptoHashHMAC();
00087
00089
00092
00102 virtual void setKey(XSECCryptoKey * key);
00103
00105
00108
00115 virtual void reset(void);
00116
00128 virtual void hash(unsigned char * data,
00129 unsigned int length);
00130
00144 virtual unsigned int finish(unsigned char * hash,
00145 unsigned int maxLength);
00146
00148
00151
00160 virtual HashType getHashType(void);
00161
00163
00164 private:
00165
00166
00167 WinCAPICryptoHashHMAC();
00168
00169 unsigned char m_mdValue[XSEC_MAX_HASH_SIZE];
00170 unsigned int m_mdLen;
00171
00172 ALG_ID m_algId;
00173 XSECCryptoHash::HashType m_hashType;
00174
00175 HCRYPTPROV m_p;
00176 HCRYPTHASH m_h;
00177
00178 unsigned char m_ipadKeyed[XSEC_MAX_HASH_SIZE];
00179 unsigned char m_opadKeyed[XSEC_MAX_HASH_SIZE];
00180
00181 unsigned int m_blockSize;
00182
00183
00184 void eraseKeys();
00185
00186 };
00187
00188 #endif