From a2828f6ae67c3d7294118a8144b1b2ec431237c4 Mon Sep 17 00:00:00 2001 From: weidai Date: Thu, 22 Jul 2004 00:51:57 +0000 Subject: fix documentation, fix PanamaMAC, fix algorithm names git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@186 57ff6487-cd31-0410-9ec3-f628ee90f5f0 --- panama.h | 58 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 14 deletions(-) (limited to 'panama.h') diff --git a/panama.h b/panama.h index 6bbe9b1..25b6419 100644 --- a/panama.h +++ b/panama.h @@ -33,7 +33,7 @@ public: PanamaHash() {Panama::Reset();} unsigned int DigestSize() const {return DIGESTSIZE;} void TruncatedFinal(byte *hash, unsigned int size); - static const char * StaticAlgorithmName() {return "Panama";} + static const char * StaticAlgorithmName() {return B::ToEnum() == BIG_ENDIAN_ORDER ? "Panama-BE" : "Panama-LE";} protected: void Init() {Panama::Reset();} @@ -41,47 +41,77 @@ protected: unsigned int HashMultipleBlocks(const word32 *input, unsigned int length); }; -//! . -template -class CRYPTOPP_NO_VTABLE PanamaMAC_Base : public PanamaHash, public VariableKeyLength<32, 0, UINT_MAX>, public MessageAuthenticationCode +//! MAC construction using a hermetic hash function +template +class HermeticHashFunctionMAC : public AlgorithmImpl > >, T_Info> { public: - void UncheckedSetKey(const byte *userKey, unsigned int keylength) + void SetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms = g_nullNameValuePairs) { - m_key.Assign(userKey, keylength); + m_key.Assign(key, length); Restart(); } - static const char * StaticAlgorithmName() {return B::ToEnum() == BIG_ENDIAN_ORDER ? "Panama-BE" : "Panama-LE";} + void Restart() + { + m_hash.Restart(); + m_keyed = false; + } + + void Update(const byte *input, unsigned int length) + { + if (!m_keyed) + KeyHash(); + m_hash.Update(input, length); + } + + void TruncatedFinal(byte *digest, unsigned int digestSize) + { + if (!m_keyed) + KeyHash(); + m_hash.TruncatedFinal(digest, digestSize); + m_keyed = false; + } + + unsigned int DigestSize() const + {return m_hash.DigestSize();} + unsigned int BlockSize() const + {return m_hash.BlockSize();} + unsigned int OptimalBlockSize() const + {return m_hash.OptimalBlockSize();} + unsigned int OptimalDataAlignment() const + {return m_hash.OptimalDataAlignment();} protected: - void Init() + void KeyHash() { - PanamaHash::Init(); - Update(m_key, m_key.size()); + m_hash.Update(m_key, m_key.size()); + m_keyed = true; } + T_Hash m_hash; + bool m_keyed; SecByteBlock m_key; }; /// Panama MAC template -class PanamaMAC : public MessageAuthenticationCodeImpl > +class PanamaMAC : public HermeticHashFunctionMAC > { public: PanamaMAC() {} - PanamaMAC(const byte *key, unsigned int length=PanamaMAC_Base::DEFAULT_KEYLENGTH) + PanamaMAC(const byte *key, unsigned int length) {this->SetKey(key, length);} }; -//! . +//! algorithm info template struct PanamaCipherInfo : public VariableKeyLength<32, 32, 64, 32, SimpleKeyingInterface::NOT_RESYNCHRONIZABLE> { static const char * StaticAlgorithmName() {return B::ToEnum() == BIG_ENDIAN_ORDER ? "Panama-BE" : "Panama-LE";} }; -//! . +//! _ template class PanamaCipherPolicy : public AdditiveCipherConcretePolicy, public PanamaCipherInfo, -- cgit v1.2.1