diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2003-04-16 00:48:47 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2003-04-16 00:48:47 +0000 |
commit | 4ec1f8462de98d1ad83bd69fbc2142ee4beab620 (patch) | |
tree | 0fd99a2b6f4a82c1b57eb58c91904c2e26cfa911 /ttmac.h | |
parent | b23125460098162f3f93dc876d8326f3de57fe8e (diff) | |
download | cryptopp-4ec1f8462de98d1ad83bd69fbc2142ee4beab620.tar.gz |
add new algorithms (Kevin Springle)
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@57 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'ttmac.h')
-rw-r--r-- | ttmac.h | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -0,0 +1,38 @@ +// ttmac.h - written and placed in the public domain by Kevin Springle + +#ifndef CRYPTOPP_TTMAC_H +#define CRYPTOPP_TTMAC_H + +#include "seckey.h" +#include "iterhash.h" + +NAMESPACE_BEGIN(CryptoPP) +//! <a href="http://www.eskimo.com/~weidai/scan-mirror/mac.html#Two-Track-MAC">Two-Track-MAC</a> +/*! 160 Bit MAC with 160 Bit Key */ + +class TTMAC_Base : public FixedKeyLength<20>, public IteratedHash<word32, LittleEndian, 64, MessageAuthenticationCode> +{ +public: + static std::string StaticAlgorithmName() {return std::string("Two-Track-MAC");} + enum {DIGESTSIZE=20}; + + TTMAC_Base() : IteratedHash<word32, LittleEndian, 64, MessageAuthenticationCode>(DIGESTSIZE*2) {} + + unsigned int DigestSize() const {return DIGESTSIZE;}; + void UncheckedSetKey(const byte *userKey, unsigned int keylength); + void TruncatedFinal(byte *mac, unsigned int size); + +protected: + static void Transform (word32 *digest, const word32 *X, bool last); + void vTransform(const word32 *data) {Transform(m_digest, data, false);} + void Init(); + + FixedSizeSecBlock<word32, DIGESTSIZE> m_key; +}; + +//! <a href="http://www.weidai.com/scan-mirror/mac.html#TTMAC">Two-Track-MAC</a> +typedef MessageAuthenticationCodeTemplate<TTMAC_Base> TTMAC; + +NAMESPACE_END + +#endif |