Path: blob/a-new-beginning/SharedDependencies/Sources/cryptopp/eax.cpp
2 views
// eax.cpp - originally written and placed in the public domain by Wei Dai12#include "pch.h"3#include "eax.h"45NAMESPACE_BEGIN(CryptoPP)67void EAX_Base::SetKeyWithoutResync(const byte *userKey, size_t keylength, const NameValuePairs ¶ms)8{9AccessMAC().SetKey(userKey, keylength, params);10m_buffer.New(2*AccessMAC().TagSize());11}1213void EAX_Base::Resync(const byte *iv, size_t len)14{15MessageAuthenticationCode &mac = AccessMAC();16unsigned int blockSize = mac.TagSize();1718std::memset(m_buffer, 0, blockSize);19mac.Update(m_buffer, blockSize);20mac.CalculateDigest(m_buffer+blockSize, iv, len);2122m_buffer[blockSize-1] = 1;23mac.Update(m_buffer, blockSize);2425m_ctr.SetCipherWithIV(AccessMAC().AccessCipher(), m_buffer+blockSize, blockSize);26}2728size_t EAX_Base::AuthenticateBlocks(const byte *data, size_t len)29{30AccessMAC().Update(data, len);31return 0;32}3334void EAX_Base::AuthenticateLastHeaderBlock()35{36CRYPTOPP_ASSERT(m_bufferedDataLength == 0);37MessageAuthenticationCode &mac = AccessMAC();38const unsigned int blockSize = mac.TagSize();3940mac.Final(m_buffer);41xorbuf(m_buffer+blockSize, m_buffer, blockSize);4243std::memset(m_buffer, 0, blockSize);44m_buffer[blockSize-1] = 2;45mac.Update(m_buffer, blockSize);46}4748void EAX_Base::AuthenticateLastFooterBlock(byte *tag, size_t macSize)49{50CRYPTOPP_ASSERT(m_bufferedDataLength == 0);51MessageAuthenticationCode &mac = AccessMAC();52unsigned int blockSize = mac.TagSize();5354mac.TruncatedFinal(m_buffer, macSize);55xorbuf(tag, m_buffer, m_buffer+blockSize, macSize);56}5758NAMESPACE_END596061