1 /* 2 * Chocobo1/Hash 3 * 4 * Copyright 2017-2018 by Mike Tzou (Chocobo1) 5 * https://github.com/Chocobo1/Hash 6 * 7 * Licensed under GNU General Public License 3 or later. 8 * 9 * @license GPL3 <https://www.gnu.org/licenses/gpl-3.0-standalone.html> 10 */ 11 12 #include "../src/whirlpool.h" 13 14 #include "catch2/single_include/catch2/catch.hpp" 15 16 #include <cstring> 17 18 19 TEST_CASE("whirlpool") 20 { 21 using Hash = Chocobo1::Whirlpool; 22 23 // ISO test suite from whirlpool website 24 const char s1[] = ""; 25 REQUIRE("19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3" 26 == Hash().addData(s1, strlen(s1)).finalize().toString()); 27 28 const char s2[] = "a"; 29 REQUIRE("8aca2602792aec6f11a67206531fb7d7f0dff59413145e6973c45001d0087b42d11bc645413aeff63a42391a39145a591a92200d560195e53b478584fdae231a" 30 == Hash().addData(s2, strlen(s2)).finalize().toString()); 31 32 const char s3[] = "abc"; 33 REQUIRE("4e2448a4c6f486bb16b6562c73b4020bf3043e3a731bce721ae1b303d97e6d4c7181eebdb6c57e277d0e34957114cbd6c797fc9d95d8b582d225292076d4eef5" 34 == Hash().addData(s3, strlen(s3)).finalize().toString()); 35 36 const char s4[] = "message digest"; 37 REQUIRE("378c84a4126e2dc6e56dcc7458377aac838d00032230f53ce1f5700c0ffb4d3b8421557659ef55c106b4b52ac5a4aaa692ed920052838f3362e86dbd37a8903e" 38 == Hash().addData(s4, strlen(s4)).finalize().toString()); 39 40 const char s5[] = "abcdefghijklmnopqrstuvwxyz"; 41 REQUIRE("f1d754662636ffe92c82ebb9212a484a8d38631ead4238f5442ee13b8054e41b08bf2a9251c30b6a0b8aae86177ab4a6f68f673e7207865d5d9819a3dba4eb3b" 42 == Hash().addData(s5, strlen(s5)).finalize().toString()); 43 44 const char s6[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 45 REQUIRE("dc37e008cf9ee69bf11f00ed9aba26901dd7c28cdec066cc6af42e40f82f3a1e08eba26629129d8fb7cb57211b9281a65517cc879d7b962142c65f5a7af01467" 46 == Hash().addData(s6, strlen(s6)).finalize().toString()); 47 48 const char s7[] = "1234567890"; 49 Hash test7; 50 for (long int i = 0 ; i < 8; ++i) 51 test7.addData(s7, strlen(s7)); 52 REQUIRE("466ef18babb0154d25b9d38a6414f5c08784372bccb204d6549c4afadb6014294d5bd8df2a6c44e538cd047b2681a51a2c60481e88c5a20b2c2a80cf3a9a083b" 53 == test7.finalize().toString()); 54 55 const char s8[] = "abcdbcdecdefdefgefghfghighijhijk"; 56 REQUIRE("2a987ea40f917061f5d6f0a0e4644f488a7a5a52deee656207c562f988e95c6916bdc8031bc5be1b7b947639fe050b56939baaa0adff9ae6745b7b181c3be3fd" 57 == Hash().addData(s8, strlen(s8)).finalize().toString()); 58 59 const char s9[] = "a"; 60 Hash test9; 61 for (long int i = 0 ; i < 1000000; ++i) 62 test9.addData(s9, strlen(s9)); 63 REQUIRE("0c99005beb57eff50a7cf005560ddf5d29057fd86b20bfd62deca0f1ccea4af51fc15490eddc47af32bb2b66c34ff9ad8c6008ad677f77126953b226e4ed8b01" 64 == test9.finalize().toString()); 65 66 67 // my own tests 68 REQUIRE("19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3" 69 == Hash().finalize().toString()); 70 71 const char s11[] = "The quick brown fox jumps over the lazy dog"; 72 REQUIRE("b97de512e91e3828b40d2b0fdce9ceb3c4a71f9bea8d88e75c4fa854df36725fd2b52eb6544edcacd6f8beddfea403cb55ae31f03ad62a5ef54e42ee82c3fb35" 73 == Hash().addData(s11, strlen(s11)).finalize().toString()); 74 75 const char s12[] = "The quick brown fox jumps over the lazy dog."; 76 REQUIRE("87a7ff096082e3ffeb86db10feb91c5af36c2c71bc426fe310ce662e0338223e217def0eab0b02b80eecf875657802bc5965e48f5c0a05467756f0d3f396faba" 77 == Hash().addData(s12, strlen(s12)).finalize().toString()); 78 79 const char s13[] = "The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog"; 80 REQUIRE("b542bf13643b644826ed9854f0049dcb9d1bb53c3b041ad4c417203b1d2c43a891a93dc42dc77e2042ed612abc08dcab20d2c25cae02754d7032498689c3b013" 81 == Hash().addData(s13, strlen(s13)).finalize().toString()); 82 83 const std::vector<char> s14(1000001, 'a'); 84 REQUIRE("0c99005beb57eff50a7cf005560ddf5d29057fd86b20bfd62deca0f1ccea4af51fc15490eddc47af32bb2b66c34ff9ad8c6008ad677f77126953b226e4ed8b01" 85 == Hash().addData(s14.data() + 1, s14.size() - 1).finalize().toString()); 86 87 const int s15[2] = {0}; 88 const char s15_2[8] = {0}; 89 REQUIRE(Hash().addData(Hash::Span<const int>(s15)).finalize().toString() 90 == Hash().addData(s15_2).finalize().toString()); 91 92 const unsigned char s16[] = {0x00, 0x0A}; 93 const auto s16_1 = Hash().addData(s16, 2).finalize().toArray(); 94 const auto s16_2 = Hash().addData(s16).finalize().toArray(); 95 REQUIRE(s16_1 == s16_2); 96 } 97