source: git/src-cryptopp/cmac.h

Last change on this file was e230cb0, checked in by David Stainton <dstainton415@…>, at 2016-10-12T13:27:29Z

Add cryptopp from tag CRYPTOPP_5_6_5

  • Property mode set to 100644
File size: 2.1 KB
Line 
1// cmac.h - written and placed in the public domain by Wei Dai
2
3//! \file cmac.h
4//! \brief Classes for CMAC message authentication code
5//! \since Crypto++ 5.6.0
6
7#ifndef CRYPTOPP_CMAC_H
8#define CRYPTOPP_CMAC_H
9
10#include "seckey.h"
11#include "secblock.h"
12
13NAMESPACE_BEGIN(CryptoPP)
14
15//! \class CMAC_Base
16//! \brief CMAC base implementation
17//! \since Crypto++ 5.6.0
18class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CMAC_Base : public MessageAuthenticationCode
19{
20public:
21        CMAC_Base() : m_counter(0) {}
22
23        void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs &params);
24        void Update(const byte *input, size_t length);
25        void TruncatedFinal(byte *mac, size_t size);
26        unsigned int DigestSize() const {return GetCipher().BlockSize();}
27        unsigned int OptimalBlockSize() const {return GetCipher().BlockSize();}
28        unsigned int OptimalDataAlignment() const {return GetCipher().OptimalDataAlignment();}
29
30protected:
31        friend class EAX_Base;
32
33        const BlockCipher & GetCipher() const {return const_cast<CMAC_Base*>(this)->AccessCipher();}
34        virtual BlockCipher & AccessCipher() =0;
35
36        void ProcessBuf();
37        SecByteBlock m_reg;
38        unsigned int m_counter;
39};
40
41//! \brief CMAC message authentication code
42//! \tparam T block cipher
43//! \details Template parameter T should be a class derived from BlockCipherDocumentation, for example AES, with a block size of 8, 16, or 32.
44//! \sa <a href="http://www.cryptolounge.org/wiki/CMAC">CMAC</a>
45//! \since Crypto++ 5.6.0
46template <class T>
47class CMAC : public MessageAuthenticationCodeImpl<CMAC_Base, CMAC<T> >, public SameKeyLengthAs<T>
48{
49public:
50        //! \brief Construct a CMAC
51        CMAC() {}
52        //! \brief Construct a CMAC
53        //! \param key the MAC key
54        //! \param length the key size, in bytes
55        CMAC(const byte *key, size_t length=SameKeyLengthAs<T>::DEFAULT_KEYLENGTH)
56                {this->SetKey(key, length);}
57
58        static std::string StaticAlgorithmName() {return std::string("CMAC(") + T::StaticAlgorithmName() + ")";}
59
60private:
61        BlockCipher & AccessCipher() {return m_cipher;}
62        typename T::Encryption m_cipher;
63};
64
65NAMESPACE_END
66
67#endif
Note: See TracBrowser for help on using the repository browser.