Crypto++
8.6
Free C++ class library of cryptographic schemes
|
Go to the documentation of this file.
7 #ifndef CRYPTOPP_VMAC_H
8 #define CRYPTOPP_VMAC_H
16 #if CRYPTOPP_BOOL_X32 || defined(CRYPTOPP_DISABLE_MIXED_ASM)
17 # define CRYPTOPP_DISABLE_VMAC_ASM 1
29 unsigned int IVSize()
const {
return GetCipher().BlockSize();}
31 void Resynchronize(
const byte *nonce,
int length=-1);
33 unsigned int DigestSize()
const {
return m_is128 ? 16 : 8;};
34 void UncheckedSetKey(
const byte *userKey,
unsigned int keylength,
const NameValuePairs ¶ms);
35 void TruncatedFinal(
byte *mac,
size_t size);
36 unsigned int BlockSize()
const {
return m_L1KeyLength;}
38 unsigned int OptimalDataAlignment()
const;
42 virtual int DefaultDigestSize()
const =0;
44 void HashEndianCorrectedBlock(
const word64 *data);
45 size_t HashMultipleBlocks(
const word64 *input,
size_t length);
47 word64* StateBuf() {
return NULLPTR;}
50 void VHASH_Update_SSE2(
const word64 *data,
size_t blocksRemainingInWord64,
int tagPart);
51 template <
bool T_128BitTag>
52 void VHASH_Update_Template(
const word64 *data,
size_t blockRemainingInWord128);
53 void VHASH_Update(
const word64 *data,
size_t blocksRemainingInWord128);
55 CRYPTOPP_BLOCK_1(polyState,
word64, (m_is128 ? 8 : 4))
56 CRYPTOPP_BLOCK_2(nhKey,
word64, m_L1KeyLength/
sizeof(
word64) + 2*m_is128)
57 CRYPTOPP_BLOCK_3(data,
byte, m_L1KeyLength)
58 CRYPTOPP_BLOCK_4(l3Key,
word64, (m_is128 ? 4 : 2))
59 CRYPTOPP_BLOCK_5(nonce,
byte, IVSize())
60 CRYPTOPP_BLOCK_6(pad,
byte, IVSize())
61 CRYPTOPP_BLOCKS_END(6)
63 bool m_is128, m_padCached, m_isFirstBlock;
64 unsigned int m_L1KeyLength;
77 template <class T_BlockCipher,
int T_DigestBitSize = 128>
81 static std::string StaticAlgorithmName() {
return std::string(
"VMAC(") + T_BlockCipher::StaticAlgorithmName() +
")-" +
IntToString(T_DigestBitSize);}
85 int DefaultDigestSize()
const {
return T_DigestBitSize/8;}
86 typename T_BlockCipher::Encryption m_cipher;
VMAC message authentication code base class.
Provides a base implementation of SimpleKeyingInterface.
Interface for algorithms that take byte strings as keys.
const char * DigestSize()
int, in bytes
@ LITTLE_ENDIAN_ORDER
byte order is little-endian
Base classes for iterated hashes.
unsigned long long word64
64-bit unsigned datatype
unsigned int DigestSize() const
Provides the digest size of the hash.
std::string AlgorithmName() const
Provides the name of this algorithm.
unsigned int BlockSize() const
Provides the block size of the compression function.
Interface for random number generators.
const char * IV()
ConstByteArrayParameter, also accepts const byte * for backwards compatibility.
unsigned int IVSize() const
Returns length of the IV accepted by this object.
Provides key lengths based on another class's key length.
std::string IntToString(T value, unsigned int base=10)
Converts a value to a string.
ByteOrder
Provides the byte ordering.
Classes and functions for implementing secret key algorithms.
Iterated hash base class.
VMAC message authentication code.
Crypto++ library namespace.
std::string AlgorithmProvider() const
Retrieve the provider of this algorithm.
Interface for one direction (encryption or decryption) of a block cipher.
Interface for message authentication codes.
Interface for retrieving values given their names.
Abstract base classes that provide a uniform interface to this library.
unsigned int MinIVLength() const
Provides the minimum size of an IV.