Updated documentation

pull/351/head
Jeffrey Walton 2016-12-17 10:46:59 -05:00
parent cc6702a434
commit 7c73f25f12
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
2 changed files with 44 additions and 36 deletions

View File

@ -33,6 +33,9 @@
NAMESPACE_BEGIN(CryptoPP) NAMESPACE_BEGIN(CryptoPP)
//! \class SipHash_Info
//! \brief SipHash message authentication code information
//! \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size
template <bool T_128bit> template <bool T_128bit>
class SipHash_Info : public FixedKeyLength<16> class SipHash_Info : public FixedKeyLength<16>
{ {
@ -41,6 +44,11 @@ public:
CRYPTOPP_CONSTANT(DIGESTSIZE = (T_128bit ? 16 : 8)) CRYPTOPP_CONSTANT(DIGESTSIZE = (T_128bit ? 16 : 8))
}; };
//! \class SipHash_Base
//! \brief SipHash message authentication code base class
//! \tparam C the number of compression rounds
//! \tparam D the number of finalization rounds
//! \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size
template <unsigned int C, unsigned int D, bool T_128bit> template <unsigned int C, unsigned int D, bool T_128bit>
class SipHash_Base : public MessageAuthenticationCode, public SipHash_Info<T_128bit> class SipHash_Base : public MessageAuthenticationCode, public SipHash_Info<T_128bit>
{ {
@ -105,7 +113,7 @@ private:
}; };
//! \class SipHash //! \class SipHash
//! \brief A family of pseudorandom functions optimized for speed on short messages //! \brief SipHash message authentication code
//! \tparam C the number of compression rounds //! \tparam C the number of compression rounds
//! \tparam D the number of finalization rounds //! \tparam D the number of finalization rounds
//! \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size //! \tparam T_128bit flag indicating 128-bit (true) versus 64-bit (false) digest size

View File

@ -963,41 +963,6 @@ bool ValidateSipHash()
pass = pass1 && pass; pass = pass1 && pass;
} }
// Siphash-4-8, 64-bit MAC
{
const byte key[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
SipHash<4, 8, false> hash(key, 16);
byte digest[SipHash<4, 8, false>::DIGESTSIZE];
hash.Update((const byte*)"", 0);
hash.Final(digest);
fail = !!memcmp("\x41\xDA\x38\x99\x2B\x05\x79\xC8", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00", 1);
hash.Final(digest);
fail = !!memcmp("\x51\xB8\x95\x52\xF9\x14\x59\xC8", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00\x01\x02\x03\x04\x05\x06", 7);
hash.Final(digest);
fail = !!memcmp("\x47\xD7\x3F\x71\x5A\xBE\xFD\x4E", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00\x01\x02\x03\x04\x05\x06\x07", 8);
hash.Final(digest);
fail = !!memcmp("\x20\xB5\x8B\x9C\x07\x2F\xDB\x50", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00\x01\x02\x03\x04\x05\x06\x07\x08", 9);
hash.Final(digest);
fail = !!memcmp("\x36\x31\x9A\xF3\x5E\xE1\x12\x53", digest, COUNTOF(digest));
pass2 = !fail && pass2;
cout << (pass2 ? "passed " : "FAILED ") << "SipHash-4-8 64-bit MAC\n";
pass = pass2 && pass;
}
// Siphash-2-4, 128-bit MAC // Siphash-2-4, 128-bit MAC
{ {
const byte key[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"; const byte key[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
@ -1033,6 +998,41 @@ bool ValidateSipHash()
pass = pass3 && pass; pass = pass3 && pass;
} }
// Siphash-4-8, 64-bit MAC
{
const byte key[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
SipHash<4, 8, false> hash(key, 16);
byte digest[SipHash<4, 8, false>::DIGESTSIZE];
hash.Update((const byte*)"", 0);
hash.Final(digest);
fail = !!memcmp("\x41\xDA\x38\x99\x2B\x05\x79\xC8", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00", 1);
hash.Final(digest);
fail = !!memcmp("\x51\xB8\x95\x52\xF9\x14\x59\xC8", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00\x01\x02\x03\x04\x05\x06", 7);
hash.Final(digest);
fail = !!memcmp("\x47\xD7\x3F\x71\x5A\xBE\xFD\x4E", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00\x01\x02\x03\x04\x05\x06\x07", 8);
hash.Final(digest);
fail = !!memcmp("\x20\xB5\x8B\x9C\x07\x2F\xDB\x50", digest, COUNTOF(digest));
pass2 = !fail && pass2;
hash.Update((const byte*)"\x00\x01\x02\x03\x04\x05\x06\x07\x08", 9);
hash.Final(digest);
fail = !!memcmp("\x36\x31\x9A\xF3\x5E\xE1\x12\x53", digest, COUNTOF(digest));
pass2 = !fail && pass2;
cout << (pass2 ? "passed " : "FAILED ") << "SipHash-4-8 64-bit MAC\n";
pass = pass2 && pass;
}
// Siphash-4-8, 128-bit MAC // Siphash-4-8, 128-bit MAC
{ {
const byte key[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"; const byte key[] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";