Security Scol plugin
cbcmac.cpp
1#include "pch.h"
2
3#ifndef CRYPTOPP_IMPORTS
4
5#include "cbcmac.h"
6
7NAMESPACE_BEGIN(CryptoPP)
8
9void 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
16void 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
43void CBC_MAC_Base::TruncatedFinal(byte *mac, size_t size)
44{
46
47 if (m_counter)
48 ProcessBuf();
49
50 memcpy(mac, m_reg, size);
51 memset(m_reg, 0, AccessCipher().BlockSize());
52}
53
54void CBC_MAC_Base::ProcessBuf()
55{
56 AccessCipher().ProcessBlock(m_reg);
57 m_counter = 0;
58}
59
60NAMESPACE_END
61
62#endif
Classes for CBC MAC.
virtual size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const
Encrypt and xor multiple blocks using additional flags.
Definition cryptlib.cpp:141
void ProcessBlock(const byte *inBlock, byte *outBlock) const
Encrypt or decrypt a block.
Definition cryptlib.h:879
@ BT_XorInput
Xor inputs before transformation.
Definition cryptlib.h:921
@ BT_DontIncrementInOutPointers
should not modify block pointers
Definition cryptlib.h:919
virtual unsigned int BlockSize() const =0
CBC-MAC base class.
Definition cbcmac.h:18
void TruncatedFinal(byte *mac, size_t size)
Computes the hash of the current message.
Definition cbcmac.cpp:43
void Update(const byte *input, size_t length)
Updates a hash with additional input.
Definition cbcmac.cpp:16
virtual unsigned int BlockSize() const
Provides the block size of the compression function.
Definition cryptlib.h:1165
void ThrowIfInvalidTruncatedSize(size_t size) const
Validates a truncated digest size.
Definition cryptlib.cpp:415
Interface for retrieving values given their names.
Definition cryptlib.h:322
virtual void SetKey(const byte *key, size_t length, const NameValuePairs &params=g_nullNameValuePairs)
Sets or reset the key of this object.
Definition cryptlib.cpp:58
Precompiled header file.