Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/SharedDependencies/Sources/cryptopp/cbcmac.cpp
2 views
1
#include "pch.h"
2
3
#ifndef CRYPTOPP_IMPORTS
4
5
#include "cbcmac.h"
6
7
NAMESPACE_BEGIN(CryptoPP)
8
9
void CBC_MAC_Base::UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs &params)
10
{
11
AccessCipher().SetKey(key, length, params);
12
m_reg.CleanNew(AccessCipher().BlockSize());
13
m_counter = 0;
14
}
15
16
void CBC_MAC_Base::Update(const byte *input, size_t length)
17
{
18
unsigned int blockSize = AccessCipher().BlockSize();
19
20
while (m_counter && length)
21
{
22
m_reg[m_counter++] ^= *input++;
23
if (m_counter == blockSize)
24
ProcessBuf();
25
length--;
26
}
27
28
if (length >= blockSize)
29
{
30
size_t leftOver = AccessCipher().AdvancedProcessBlocks(m_reg, input, m_reg, length, BlockTransformation::BT_DontIncrementInOutPointers|BlockTransformation::BT_XorInput);
31
input += (length - leftOver);
32
length = leftOver;
33
}
34
35
while (length--)
36
{
37
m_reg[m_counter++] ^= *input++;
38
if (m_counter == blockSize)
39
ProcessBuf();
40
}
41
}
42
43
void CBC_MAC_Base::TruncatedFinal(byte *mac, size_t size)
44
{
45
ThrowIfInvalidTruncatedSize(size);
46
47
if (m_counter)
48
ProcessBuf();
49
50
std::memcpy(mac, m_reg, size);
51
std::memset(m_reg, 0, AccessCipher().BlockSize());
52
}
53
54
void CBC_MAC_Base::ProcessBuf()
55
{
56
AccessCipher().ProcessBlock(m_reg);
57
m_counter = 0;
58
}
59
60
NAMESPACE_END
61
62
#endif
63
64