Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

# md5mac.h

Go to the documentation of this file.

    00001 #ifndef CRYPTOPP_MD5MAC_H
    00002 #define CRYPTOPP_MD5MAC_H
    00003
    00004 /** \file
    00005 */
    00006
    00007 #include "seckey.h"
    00008 #include "iterhash.h"
    00009
    00010 NAMESPACE_BEGIN(CryptoPP)
    00011
    00012 class CRYPTOPP_NO_VTABLE MD5MAC_Base : public FixedKeyLength<16>, public IteratedHash<word32, LittleEndian, 64, MessageAuthenticationCode>
    00013 {
    00014 public:
    00015         static std::string StaticAlgorithmName() {return "MD5-MAC";}
    00016         enum {DIGESTSIZE = 16};
    00017
    00018         MD5MAC_Base() {SetStateSize(DIGESTSIZE);}
    00019
    00020         void UncheckedSetKey(const byte *userKey, unsigned int keylength);
    00021         void TruncatedFinal(byte *mac, unsigned int size);
    00022         unsigned int DigestSize() const {return DIGESTSIZE;}
    00023
    00024 protected:
    00025         static void Transform (word32 *buf, const word32 *in, const word32 *key);
    00026         void HashEndianCorrectedBlock(const word32 *data) {Transform(m_digest, data, m_key+4);}
    00027         void Init();
    00028
    00029         static const word32 T[12];
    00030         FixedSizeSecBlock<word32, 12> m_key;
    00031 };
    00032
    00033 //! <a href="http://www.weidai.com/scan-mirror/mac.html#MD5-MAC">MD5-MAC</a>
    00034 DOCUMENTED_TYPEDEF(MessageAuthenticationCodeFinal<MD5MAC_Base>, MD5MAC)
    00035
    00036 NAMESPACE_END
    00037
    00038 #endif