Crypto++
8.6
Free C++ class library of cryptographic schemes
|
Go to the documentation of this file.
26 #ifndef CRYPTOPP_SIPHASH_H
27 #define CRYPTOPP_SIPHASH_H
37 template <
bool T_128bit>
41 CRYPTOPP_STATIC_CONSTEXPR
const char* StaticAlgorithmName() {
return "SipHash";}
42 CRYPTOPP_CONSTANT(DIGESTSIZE = (T_128bit ? 16 : 8));
49 template <
unsigned int C,
unsigned int D,
bool T_128bit>
53 static std::string StaticAlgorithmName() {
78 {
return GetAlignmentOf<word64>();}
80 virtual void Update(
const byte *input,
size_t length);
85 virtual void UncheckedSetKey(
const byte *key,
unsigned int length,
const NameValuePairs ¶ms);
86 virtual void Restart();
88 inline void SIPROUND()
91 m_v[1] = rotlConstant<13>(m_v[1]);
93 m_v[0] = rotlConstant<32>(m_v[0]);
95 m_v[3] = rotlConstant<16>(m_v[3]);
98 m_v[3] = rotlConstant<21>(m_v[3]);
101 m_v[1] = rotlConstant<17>(m_v[1]);
103 m_v[2] = rotlConstant<32>(m_v[2]);
140 template <
unsigned int C=2,
unsigned int D=4,
bool T_128bit=false>
151 {this->ThrowIfInvalidKeyLength(length);
155 template <
unsigned int C,
unsigned int D,
bool T_128bit>
163 size_t head =
STDMIN(
size_t(8U-m_idx), length);
164 memcpy(m_acc+m_idx, input, head);
165 m_idx += head; input += head; length -= head;
171 for (
unsigned int i = 0; i < C; ++i)
185 for (
unsigned int i = 0; i < C; ++i)
196 size_t tail = length % 8;
199 memcpy(m_acc+m_idx, input, tail);
204 template <
unsigned int C,
unsigned int D,
bool T_128bit>
209 ThrowIfInvalidTruncatedSize(digestSize);
212 m_b[0] += m_idx; m_b[0] <<= 56U;
216 m_b[0] |= ((
word64)m_acc[6]) << 48;
219 m_b[0] |= ((
word64)m_acc[5]) << 40;
222 m_b[0] |= ((
word64)m_acc[4]) << 32;
225 m_b[0] |= ((
word64)m_acc[3]) << 24;
228 m_b[0] |= ((
word64)m_acc[2]) << 16;
231 m_b[0] |= ((
word64)m_acc[1]) << 8;
234 m_b[0] |= ((
word64)m_acc[0]);
242 for (
unsigned int i=0; i<C; i++)
252 for (
unsigned int i=0; i<D; i++)
255 m_b[0] = m_v[0] ^ m_v[1] ^ m_v[2] ^ m_v[3];
261 for (
unsigned int i = 0; i<D; ++i)
264 m_b[1] = m_v[0] ^ m_v[1] ^ m_v[2] ^ m_v[3];
272 template <
unsigned int C,
unsigned int D,
bool T_128bit>
275 CRYPTOPP_UNUSED(params);
289 template <
unsigned int C,
unsigned int D,
bool T_128bit>
292 m_v[0] =
W64LIT(0x736f6d6570736575);
293 m_v[1] =
W64LIT(0x646f72616e646f6d);
294 m_v[2] =
W64LIT(0x6c7967656e657261);
295 m_v[3] =
W64LIT(0x7465646279746573);
313 #endif // CRYPTOPP_SIPHASH_H
SipHash message authentication code.
#define W64LIT(x)
Declare an unsigned word64.
@ NOT_RESYNCHRONIZABLE
The object does not use an IV.
Classes and functions for secure memory allocations.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
virtual size_t GetValidKeyLength(size_t keylength) const
Returns a valid key length for the algorithm.
SipHash message authentication code base class.
@ LITTLE_ENDIAN_ORDER
byte order is little-endian
SipHash(const byte *key, unsigned int length)
Create a SipHash.
virtual unsigned int OptimalBlockSize() const
Provides the input block size most efficient for this hash.
unsigned long long word64
64-bit unsigned datatype
virtual size_t MaxKeyLength() const
Returns largest valid key length.
IV_Requirement
Secure IVs requirements as enumerated values.
virtual unsigned int OptimalDataAlignment() const
Provides input and output data alignment for optimal performance.
Inherited by keyed algorithms with fixed key length.
Utility functions for the Crypto++ library.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
SipHash message authentication code information.
virtual unsigned int DigestSize() const
Provides the digest size of the hash.
std::string IntToString(T value, unsigned int base=10)
Converts a value to a string.
virtual void Update(const byte *input, size_t length)
Updates a hash with additional input.
virtual unsigned int IVSize() const
Returns length of the IV accepted by this object.
T ConditionalByteReverse(ByteOrder order, T value)
Reverses bytes in a value depending upon endianness.
SipHash()
Create a SipHash.
virtual size_t MinKeyLength() const
Returns smallest valid key length.
const NameValuePairs & g_nullNameValuePairs
An empty set of name-value pairs.
Crypto++ library namespace.
virtual void TruncatedFinal(byte *digest, size_t digestSize)
Computes the hash of the current message.
Interface for message authentication codes.
void memcpy_s(void *dest, size_t sizeInBytes, const void *src, size_t count)
Bounds checking replacement for memcpy()
virtual IV_Requirement IVRequirement() const
Minimal requirement for secure IVs.
Interface for retrieving values given their names.
Abstract base classes that provide a uniform interface to this library.
virtual size_t DefaultKeyLength() const
Returns default key length.