summaryrefslogtreecommitdiff
path: root/hmac.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2015-11-05 01:59:46 -0500
committerJeffrey Walton <noloader@gmail.com>2015-11-05 01:59:46 -0500
commit48809d4e85c125814425c621d8d0d89f95405924 (patch)
tree1010fd16c4b1199f3d27dd726dda241a2bd29f83 /hmac.cpp
parent025337a94aceb75d188149db70c2094673772816 (diff)
downloadcryptopp-git-48809d4e85c125814425c621d8d0d89f95405924.tar.gz
CRYPTOPP 5.6.3 RC6 checkin
Diffstat (limited to 'hmac.cpp')
-rw-r--r--hmac.cpp173
1 files changed, 86 insertions, 87 deletions
diff --git a/hmac.cpp b/hmac.cpp
index 2df4ff34..a25eb749 100644
--- a/hmac.cpp
+++ b/hmac.cpp
@@ -1,87 +1,86 @@
-// hmac.cpp - written and placed in the public domain by Wei Dai
-
-#include "pch.h"
-
-#ifndef CRYPTOPP_IMPORTS
-
-#include "hmac.h"
-#include "trap.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-void HMAC_Base::UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs &)
-{
- AssertValidKeyLength(keylength);
-
- Restart();
-
- HashTransformation &hash = AccessHash();
- unsigned int blockSize = hash.BlockSize();
-
- if (!blockSize)
- throw InvalidArgument("HMAC: can only be used with a block-based hash function");
-
- m_buf.resize(2*AccessHash().BlockSize() + AccessHash().DigestSize());
-
- if (keylength <= blockSize)
- memcpy(AccessIpad(), userKey, keylength);
- else
- {
- AccessHash().CalculateDigest(AccessIpad(), userKey, keylength);
- keylength = hash.DigestSize();
- }
-
- CRYPTOPP_ASSERT(keylength <= blockSize);
- memset(AccessIpad()+keylength, 0, blockSize-keylength);
-
- for (unsigned int i=0; i<blockSize; i++)
- {
- AccessOpad()[i] = AccessIpad()[i] ^ 0x5c;
- AccessIpad()[i] ^= 0x36;
- }
-}
-
-void HMAC_Base::KeyInnerHash()
-{
- CRYPTOPP_ASSERT(!m_innerHashKeyed);
- HashTransformation &hash = AccessHash();
- hash.Update(AccessIpad(), hash.BlockSize());
- m_innerHashKeyed = true;
-}
-
-void HMAC_Base::Restart()
-{
- if (m_innerHashKeyed)
- {
- AccessHash().Restart();
- m_innerHashKeyed = false;
- }
-}
-
-void HMAC_Base::Update(const byte *input, size_t length)
-{
- if (!m_innerHashKeyed)
- KeyInnerHash();
- AccessHash().Update(input, length);
-}
-
-void HMAC_Base::TruncatedFinal(byte *mac, size_t size)
-{
- ThrowIfInvalidTruncatedSize(size);
-
- HashTransformation &hash = AccessHash();
-
- if (!m_innerHashKeyed)
- KeyInnerHash();
- hash.Final(AccessInnerHash());
-
- hash.Update(AccessOpad(), hash.BlockSize());
- hash.Update(AccessInnerHash(), hash.DigestSize());
- hash.TruncatedFinal(mac, size);
-
- m_innerHashKeyed = false;
-}
-
-NAMESPACE_END
-
-#endif
+// hmac.cpp - written and placed in the public domain by Wei Dai
+
+#include "pch.h"
+
+#ifndef CRYPTOPP_IMPORTS
+
+#include "hmac.h"
+
+NAMESPACE_BEGIN(CryptoPP)
+
+void HMAC_Base::UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs &)
+{
+ AssertValidKeyLength(keylength);
+
+ Restart();
+
+ HashTransformation &hash = AccessHash();
+ unsigned int blockSize = hash.BlockSize();
+
+ if (!blockSize)
+ throw InvalidArgument("HMAC: can only be used with a block-based hash function");
+
+ m_buf.resize(2*AccessHash().BlockSize() + AccessHash().DigestSize());
+
+ if (keylength <= blockSize)
+ memcpy(AccessIpad(), userKey, keylength);
+ else
+ {
+ AccessHash().CalculateDigest(AccessIpad(), userKey, keylength);
+ keylength = hash.DigestSize();
+ }
+
+ assert(keylength <= blockSize);
+ memset(AccessIpad()+keylength, 0, blockSize-keylength);
+
+ for (unsigned int i=0; i<blockSize; i++)
+ {
+ AccessOpad()[i] = AccessIpad()[i] ^ 0x5c;
+ AccessIpad()[i] ^= 0x36;
+ }
+}
+
+void HMAC_Base::KeyInnerHash()
+{
+ assert(!m_innerHashKeyed);
+ HashTransformation &hash = AccessHash();
+ hash.Update(AccessIpad(), hash.BlockSize());
+ m_innerHashKeyed = true;
+}
+
+void HMAC_Base::Restart()
+{
+ if (m_innerHashKeyed)
+ {
+ AccessHash().Restart();
+ m_innerHashKeyed = false;
+ }
+}
+
+void HMAC_Base::Update(const byte *input, size_t length)
+{
+ if (!m_innerHashKeyed)
+ KeyInnerHash();
+ AccessHash().Update(input, length);
+}
+
+void HMAC_Base::TruncatedFinal(byte *mac, size_t size)
+{
+ ThrowIfInvalidTruncatedSize(size);
+
+ HashTransformation &hash = AccessHash();
+
+ if (!m_innerHashKeyed)
+ KeyInnerHash();
+ hash.Final(AccessInnerHash());
+
+ hash.Update(AccessOpad(), hash.BlockSize());
+ hash.Update(AccessInnerHash(), hash.DigestSize());
+ hash.TruncatedFinal(mac, size);
+
+ m_innerHashKeyed = false;
+}
+
+NAMESPACE_END
+
+#endif