#include "hash/tiger.hpp" #include #include #include /////////////////////////////////////////////////////////////////////////////// static struct { char const *data; cruft::crypto::hash::tiger::digest_t digest; char const *description; } const TESTS[] = { { .data = "", .digest = { cruft::btoh (0x3293ac630c13f024u), cruft::btoh (0x5f92bbb1766e1616u), cruft::btoh (0x7a4e58492dde73f3u) }, .description = "" }, { .data = "a", .digest = { cruft::btoh (0x77befbef2e7ef8abu), cruft::btoh (0x2ec8f93bf587a7fcu), cruft::btoh (0x613e247f5f247809u), }, .description = "a", }, { .data = "abc", .digest = { cruft::btoh (0x2aab1484e8c158f2u), cruft::btoh (0xbfb8c5ff41b57a52u), cruft::btoh (0x5129131c957b5f93u), }, .description = "abc" }, { .data = "message digest", .digest = { cruft::btoh (0xd981f8cb78201a95u), cruft::btoh (0x0dcf3048751e441cu), cruft::btoh (0x517fca1aa55a29f6u), }, .description = "message digest", }, { .data = "abcdefghijklmnopqrstuvwxyz", .digest = { cruft::btoh (0x1714a472eee57d30u), cruft::btoh (0x040412bfcc55032au), cruft::btoh (0x0b11602ff37beee9u), }, .description = "abcdefghijklmnopqrstuvwxyz", }, { .data = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", .digest = { cruft::btoh (0x0f7bf9a19b9c58f2u), cruft::btoh (0xb7610df7e84f0ac3u), cruft::btoh (0xa71c631e7b53f78eu), }, .description = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", }, { .data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", .digest = { cruft::btoh (0x8dcea680a17583eeu), cruft::btoh (0x502ba38a3c368651u), cruft::btoh (0x890ffbccdc49a8ccu), }, .description = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, { .data = "12345678901234567890123456789012345678901234567890123456789012345678901234567890", .digest = { cruft::btoh (0x1c14795529fd9f20u), cruft::btoh (0x7a958f84c52f11e8u), cruft::btoh (0x87fa0cabdfd91bfdu), }, .description = "12345678901234567890123456789012345678901234567890123456789012345678901234567890" }, }; //----------------------------------------------------------------------------- static struct { std::size_t count; cruft::crypto::hash::tiger::digest_t digest; } const REPEATS[] { { .count = 1024u, .digest = { cruft::btoh (0xcdf0990c5c6b6b0bu), cruft::btoh (0xddd63a75ed20e2d4u), cruft::btoh (0x48bf44e15fde0df4u) } }, { .count = 1025u, .digest = { cruft::btoh (0x89292aee0f82842au), cruft::btoh (0xbc080c57b3aadd9cu), cruft::btoh (0xa84d66bf0cae77aau) } }, }; /////////////////////////////////////////////////////////////////////////////// int main () { cruft::TAP::logger tap; for (auto const &t: TESTS) { auto const res = cruft::crypto::hash::tiger {} (cruft::view (t.data).cast ()); tap.expect_eq (t.digest, res, "%s", t.description); } for (auto const &t: REPEATS) { std::vector data (t.count); std::fill_n (data.begin (), t.count, 'A'); auto const res = cruft::crypto::hash::tiger {} (cruft::view (data).cast ()); tap.expect_eq (t.digest, res, "%! 'A's", t.count); }; return tap.status (); }