1 /* vim: set ts=8 sts=4 sw=4 tw=80 noet: */
2 /*======================================================================
3 Copyright (C) 2004,2005,2009,2011,2012 Walter Doekes
4 <walter+tthsum@wjd.nu>
5 This file is part of tthsum.
6
7 tthsum is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 tthsum is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with tthsum. If not, see <http://www.gnu.org/licenses/>.
19 ======================================================================*/
20 #include "tiger.h"
21
22 #include "base32.h"
23 #include "test.h"
24 #include <stdlib.h>
25 #include <string.h>
26
27
help_cmp_base32_bin(const char * name,const uint64_t * input,unsigned input_len,const char * base32)28 static int help_cmp_base32_bin(const char* name, const uint64_t* input,
29 unsigned input_len, const char* base32) {
30 uint64_t res[3];
31 char base32buf[40];
32 tiger((uint64_t*)input, input_len, res);
33 uint64tobase32(base32buf, res, 3);
34 TEST_PASS3(strcmp(base32buf, base32) == 0,
35 "Tiger hash result for \"%s\" is wrong! "
36 "Expected \"%s\", got \"%s\".", name, base32, base32buf);
37 if (input_len != 0) {
38 tiger_bp(((const char*)input)[0], (const char*)input + 1,
39 input_len - 1, res);
40 uint64tobase32(base32buf, res, 3);
41 TEST_PASS1(strcmp(base32buf, base32) == 0,
42 "Tiger BP hash result for \"%s\" is wrong!", name);
43 }
44 return 0;
45 }
46
help_cmp_base32(const char * input,const char * base32)47 static int help_cmp_base32(const char* input, const char* base32) {
48 unsigned input_len = strlen(input);
49 uint64_t buf64[32];
50 if (input_len > 8*32)
51 abort();
52 memcpy(buf64, input, input_len); /* force 64 bit alignment */
53 return help_cmp_base32_bin(input, buf64, input_len, base32);
54 }
55
test_tiger192_nessie_1a()56 static int test_tiger192_nessie_1a() {
57 /* echo -n '3293AC630C13F0245F92BBB1766E16167A4E58492DDE73F3' |
58 * perl -e 'use MIME::Base32 "RFC";$bin=<>;$bin=~s/([0-9A-Fa-f]{2})/chr
59 * hex $1/eg;print MIME::Base32::encode($bin)."\n";' */
60 return help_cmp_base32("",
61 "GKJ2YYYMCPYCIX4SXOYXM3QWCZ5E4WCJFXPHH4Y")
62 + help_cmp_base32("a",
63 "O67PX3ZOP34KWLWI7E57LB5H7RQT4JD7L4SHQCI")
64 + help_cmp_base32("abc",
65 "FKVRJBHIYFMPFP5YYX7UDNL2KJISSEY4SV5V7EY")
66 + help_cmp_base32("message digest",
67 "3GA7RS3YEANJKDOPGBEHKHSEDRIX7SQ2UVNCT5Q")
68 + help_cmp_base32("abcdefghijklmnopqrstuvwxyz",
69 "C4KKI4XO4V6TABAECK74YVIDFIFRCYBP6N5652I")
70 + help_cmp_base32("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnl"
71 "mnomnopnopq", "B557TIM3TRMPFN3BBX36QTYKYOTRYYY6PNJ7PDQ");
72 }
73
test_tiger192_nessie_1b()74 static int test_tiger192_nessie_1b() {
75 int ret = 0;
76 char buf[2048];
77 char *p;
78 int i = 0;
79
80 /* A..Z a..z 0..9 */
81 p = buf;
82 for (i = 'A'; i <= 'Z'; ++i)
83 *p++ = (char)i;
84 for (i = 'a'; i <= 'z'; ++i)
85 *p++ = (char)i;
86 for (i = '0'; i <= '9'; ++i)
87 *p++ = (char)i;
88 *p = '\0';
89 ret += help_cmp_base32(buf, "RXHKNAFBOWB64UBLUOFDYNUGKGEQ766M3RE2RTA");
90
91 /* 8 * (1..0) */
92 p = buf;
93 for (i = 0; i < 8; ++i) {
94 int j;
95 for (j = '1'; j <= '9'; ++j)
96 *p++ = (char)j;
97 *p++ = (char)'0';
98 }
99 *p = '\0';
100 ret += help_cmp_base32(buf, "DQKHSVJJ7WPSA6UVR6CMKLYR5CD7UDFL37MRX7I");
101
102 /* 1M * 'a' */
103 p = (char*)malloc(1000000);
104 memset(p, 'a', 1000000);
105 ret += help_cmp_base32_bin("one million times 'a'", (const uint64_t*)p,
106 1000000, "NWYOE4U4X2WZHVYVY2T5GYYC5GZ45YGSXQYUWQI");
107 free(p);
108
109 return ret;
110 }
111
test_tiger192_ross_and_eli()112 static int test_tiger192_ross_and_eli() {
113 return help_cmp_base32("",
114 "GKJ2YYYMCPYCIX4SXOYXM3QWCZ5E4WCJFXPHH4Y")
115 + help_cmp_base32("abc",
116 "FKVRJBHIYFMPFP5YYX7UDNL2KJISSEY4SV5V7EY")
117 + help_cmp_base32("Tiger",
118 "3UACGB4Z6UAJ73DN5PEDRO3KE7PSXHLPCEGHSNY")
119 + help_cmp_base32("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr"
120 "stuvwxyz0123456789+-", "64OILA4QFL5YPHW74YIPQLANI6DKHJJUKBCINNI")
121 + help_cmp_base32("ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopq"
122 "rstuvwxyz+0123456789", "JDHOWYYIXB6UN2K5MVQRFTPRRWLZCX4XMVSYSVY")
123 + help_cmp_base32("Tiger - A Fast New Hash Function, by Ross An"
124 "derson and Eli Biham", "RKDGQKIEBJAQY4U22I7VVWTRCYB3HTOTK7SMCXQ")
125 + help_cmp_base32("Tiger - A Fast New Hash Function, by Ross An"
126 "derson and Eli Biham, proceedings of Fast Software Encrypti"
127 "on 3, Cambridge, 1996.", "MMNL3UID5OND2JC3NX6U255SK76HIOKQDUKWRXI")
128 + help_cmp_base32("Tiger - A Fast New Hash Function, by Ross An"
129 "derson and Eli Biham, proceedings of Fast Software Encrypti"
130 "on 3, Cambridge.", "ZZK2NL6VSH26XLCUP74E7CJCP6JTDWVQWYI4RCI")
131 + help_cmp_base32("message digest",
132 "3GA7RS3YEANJKDOPGBEHKHSEDRIX7SQ2UVNCT5Q")
133 + help_cmp_base32("12345678901234567890123456789012345678901234"
134 "567890123456789012345678901234567890",
135 "DQKHSVJJ7WPSA6UVR6CMKLYR5CD7UDFL37MRX7I")
136 + help_cmp_base32("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr"
137 "stuvwxyz0123456789+-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm"
138 "nopqrstuvwxyz0123456789+-",
139 "YVADJZNUH24AAWCIU7QK42VMO3SP6WIK44K72JI");
140 }
141
test_tiger192_0to255()142 static int test_tiger192_0to255() {
143 char name[256];
144 uint64_t buf64[32];
145 char *buf = (char*)&buf64[0]; /* char[256] */
146 const char *results[256] = {
147 "LWPNACQDBZRYXW3VHJVCJ64QBZNGHOHHHZWCLNQ",
148 "MWYOD2RWZIL63YXQKXTH5LLHWHBIFII2LOR2RYA",
149 "VN73RUQ44PMNTO27DLY7F6QNHQTXSBQWBW4NEJQ",
150 "7YXJ2Q7XJMMZ3ENZFEOXHTH4UC7KL4DI7OREJ7Y",
151 "HX3NM4X6TWVLEFJD5MCHAXMKRNZLPCYAVVDF2HA",
152 "4BLSINJ74KMVPQ7I325KEHIMFXKJZSRCDEOVVUY",
153 "IBLN3P4CVZ2KWVTSBXVPA6NMULYHN3IENUCE3ZI",
154 "QAP3TPQ2TLDTG6UBGRNTQRPE47ATV4P3VW3TOIY",
155 "IMAVMVD2QJESZKCZHBJQI5EPMXZNJJ7CMZFOFMI",
156 "7RBVCN6NMUWXECQR5X2HVPSGQC5EVVN5QEGJQNI",
157 "ECUBIPPUP5LRL6QJAX7G7HI5FNNS2TRG7KMJGCY",
158 "4SRAMMAZ7PADJXVQDYVJKKLAIIYZZPADTWTJVEI",
159 "WXYPUVYMJTLJUPDIISF6ILEGLPPXP3LIXE4HLZY",
160 "QAV6N2RM5BVAWNY7ENKJISYZZMZDDL37WTYA76A",
161 "27AIQY5V4XR5NG2UASQRMMK2NGHBFDV27BRWW4A",
162 "LRJIRSYOJZJTAVV2KKJUIDM343Z4IYJDHPY62UI",
163 "RDJ2STZYEDSAQ7NGTWF34LHUCVDGAY3QTRCQYTI",
164 "YB5UWFK7T52YAXM5BBYIP7G5FDIIVHICEGJEI7Q",
165 "5ZDT4VU76PQJFT4JS2ZRZZTF5J6WCUQNILRHHFI",
166 "4E625AEYCOOPZ2TVLUQGB4IH4PDVQHW7T5FTXBI",
167 "WSFJYCPSNM3ZVIUPXR2QWUGO62OQ2DXDP73WL5Y",
168 "K5FACRLDOMAU6QLZZWQUKQPC4PC2DTO2T6OQOHA",
169 "6LRIGHS3WSXQLEKMJOTBXOGWADI66BY4LXYCE2I",
170 "W6AIUW3CLDF6OGHNVE4JPDDJ2P74IWRCF2O36TA",
171 "3DSOA5W546EVBVI6VSPZPUWRSFVASECGLVC2KXA",
172 "J3PM7KXB32MLPYCW4ZGKEQADIIV343YEQEU3ETA",
173 "BXRIHNNESU7KV3DPH7PFBV4HLSHOK75HTPOHB7A",
174 "5TOUXIMTNW46N6B6FPL7HHJDSJ5BUF5S2UVIMSI",
175 "XYIYSNDA4SLFT567H6Z32XR6TIYZ7BP5GSLOE3A",
176 "V3ANUDZMYBSGGJOMAMYZUDQIB5ULI2ZT7AMSBVQ",
177 "RASP2OMYJ5VFF777DEAW4J6FSSJBIUQIMNZ7F3Q",
178 "RNSZFL53ALRCPKSFDNOP3SBBXBBELU2LS27U6EY",
179 "SYG7TQ2J5RTBT7ZX4PYPJAZODHGGUTSNNCLCMUI",
180 "6TRLPKTSXR6W4DHW3IIJJPXPVKOFKYIDE7DCSAA",
181 "AX6RXAGKJR6BJ7S36CWL2DVD3LSJRXBZDXHSE5Y",
182 "YXUV7FJYTDDIGVNVSFIHXNYU6DS5VOMYTUEDSAA",
183 "WLKOFBWPP2UKW3WNMUGJ4SGKENEX5LPFKSC5WHQ",
184 "TVIWK7QRYVH734QF3O2DKCL2FPDPSPCL5DLBQCY",
185 "HRVOHEITK2RUHLRRCNZV6B747NPAI2WNI6YA7OY",
186 "MZBUFTPMZAS62NAKP77C4VYQPXILL4SMESZMH4A",
187 "J337ZIJ442CNQHPE6VTNFCL45NAH7OZ532A72ZA",
188 "KRUJ73HNMPZJPMJ42SKLQXTIM2APJ54N47WIDVI",
189 "V5BUXW64P34QXYB6ICQDH4LORJL3IGCA4HUKWWI",
190 "UMW3M6HUJEC4DCLI6XMJRSTZSLV6FZGMGMMLS3A",
191 "33U5KGNBFLH3RIETLI3I23TMOXXO5ZXSWDK5DEI",
192 "ZPDUQY2HFUOJ2I6FE32JBC6U2QRU4AGLZSM2T2I",
193 "NQRIUHKIOHUAFYBVZG5RNRIYONKIIH5WXY6GTNQ",
194 "ZKTVLRK2VBU6MM6LHRWZHJLBSRFMOQMBKTRLB4A",
195 "U2BV67AMNSUPJJCXQ65PU52HRLU23W7PXQYFFUY",
196 "4QDHKWKX5QQ3U2TEWXJ2V4YXJHHZRX4S6GY77YA",
197 "BQWUURFIAPN2TG32IZ2VHSJJHNDKKOCVRPLX3VA",
198 "6BHQCGYJ2J22DBKSRTAEB23RSZE4QRY2Q6ZFTMY",
199 "HWULK77VF7FOPQZGG3WGZADQQGE45WARHRON4HQ",
200 "NRWIROHBRX24WIXNWYNC2PWXI5A2OCF4IZLW7NY",
201 "FVEO4K7YLXRDI5KL5TZ4N5NQ4YUYRNN7ESXKLOY",
202 "BULXALO4UB4O2HGFDOK56KPKCBJ45F7WSOK4MEY",
203 "TWGCVUZH3ZB5K6BNL4QIQH2KRRBTXIM27SGBLLI",
204 "EJ52IGNXMDM5CDN3BFMF5XKHLLBHGT6UKOPYE5I",
205 "F5JCBKBI56KOGJ55KHKN6XCYMCPYVE5Z7YA775Q",
206 "B3WZ7EPBUM5FBOHJCPN2BNPCJDJGHYP4OLDKISI",
207 "OZVXA7UZT7Z4KHXACFUFCO5A3TX6VMRC3UPWT5Q",
208 "QXTHCBUU47BWUI2A3JVDOHAFMBCQ6PKE2NNNTDA",
209 "2QA7TMJ5HHBEI56AVZUXDRYFYY6AM7ZJKCGCTSI",
210 "EEW7RHCXCVJHANCKZSYZAJ5QWJVRAT5A7O7A7ZA",
211 "HPW6OZ5KJJ2QPW7P7A6RXQZ7M7V2TRSJIUDGEJY",
212 "PH7ND647C7CJQAII5BQFYEGZ4F3KZD7E62TFAZA",
213 "JDM3OYRKW74JNDWZEYSV66HIZZDB4TERML76RNY",
214 "MY4MQOBXFF5T6U5Q7ASMBB6ZUC4NT7DCMVUDXDY",
215 "C5CCDT3NGMP7KGJE7CKG5ASEKVOJAIGTRYY3NWY",
216 "APSCV62776NZYN4UUPN6ZGP2PY7XGBPPA66ST3Y",
217 "ZSX4NDKLH3MITXE7FDFZEJMARJAKVDQNLSRUH7Y",
218 "5ASPSO2AEIARRBXPYVCTTVGV2UMGHLNDFH5U4IQ",
219 "PTYNYANTEZUHKMHUEBALUDIM5EYXIRK6RKMQ2FA",
220 "PKHGDFDZ6T24IGHMAQMANBIOM4R4UVVPXQ6TFTA",
221 "BA6FZKIPJMUWYQQEAVM4QKLBJHKO5OVV54WLQLI",
222 "GWA3PLBS7KFATBX5CTZHP6YQNYISXEWRRTLITPI",
223 "EWHIELM4YHWKRNK5SJN2GYN2FWP4E6XRQHYTRNA",
224 "VBWB5CFGIUK7UKA2IYWUM5CYEMKJJ4LOQNO7Q4Y",
225 "O3T7A37JXCZYRWYBF6FUXYX3GQ7ZLEJ63XSHUJY",
226 "AATYWTSWSDTST3DRDC236Y6J2HVRE2EWBCJ4U5I",
227 "RXTQ4ZFDDOQ26T24EPHXOTGKGL7JKLLWYP65DNY",
228 "XPVHFSCAOSN2XLYUCX7KYNBUCG4JKFNYPBEKBGQ",
229 "Y3B4ZLA3GOG7CF5GD3HZUKAOTOTQS6CMOK3WO4I",
230 "V2MBH32EFHVOOPVJ7W26EPJGHLY3XB4SRT27ASA",
231 "NBSHZV577OHFGDJIZBTILKGS6ZL64TGWJ3OX4ZQ",
232 "VKGDLMHHI2XVMQ27NRYRVUCCHFTOURMQQ5AJOEY",
233 "VLK4BVPJQCZJXSEJQXCUI4L3QH2YZW4SHI2GRYA",
234 "6YESTUKHQHPEJ2TAPKX4BUS7UG3O6PDKUD4LHVY",
235 "YSAIPXDV5RB2KSSZH4SODM2ZXN24LANGLQYXBUA",
236 "CHITOL557WP7KFDBDKZA2MN2MLYYQVWI22XDVVY",
237 "6KUAO24QC7W233WUD5AJZHRS5M54BEHK5CPYKXI",
238 "OAX2I7S32NPDIS23Q7AAQIIGGNZANSW5HVGVAFA",
239 "XHQD73LVFJLAYOYDMXW7LP6E3R7KYXSLXOJXHDI",
240 "HSCMKK7VCB32LAM7K3S2LQOAMIERQFLZHEZCBRY",
241 "7DWMUKFFEVMU4E4LKXAGMF5AMPPXJ7RUNHMYHAI",
242 "CCA4HOXOYCW7JGAMF2TFSOYJA3OL5XSIAV2UO5A",
243 "WUKS4OO6BP7ITAWXQP6E6DFXCYHLFVU7N45T4WY",
244 "NJVXMC73DFS4OKWHSP44AL5CDMHRYNF5EZALW2Y",
245 "DZW4X6ULVDMWYKIQC5UKNI4UGPK22WSQ4CLQOMA",
246 "OMZCFU5AGM2R7L6WRROORJGYGO5HIIGUIEB4W2Y",
247 "4TGX3JM3EFPR32VI7O5IKDZMDJ7UYPKJL7TIASQ",
248 "PPTYY6IHCNKFOVGUY6FJGGFMUSVALDC4ENKACMI",
249 "W4ODQCNFAS7C6V5OTYS33TBZEHOGMXDFFCPKKWQ",
250 "FOGKHGLXKNPLNEXPX4G6ZWUJOGUGAT37ZOXHLXI",
251 "HTCIWUPEYXPE6DBKXYF6N3SLMPGFMSUHYAMUHTI",
252 "CV5M355VT7BFSZXZPAZAOVKDMSECQQHHEUPNNQI",
253 "32Q47LWPDDJWCHGNAULRGGQW3W6JPIJJALOYXKY",
254 "FLJOTEF46ZEBFBG7IS4WCYZGQ7BOMTP24KXBNQQ",
255 "QOHTUOZIUUFBFNLQOSIKMYEA3T5AEMHFQO3OWFA",
256 "ZCZAGFISDTP3HKI3YDW7CGEG6KB463CIB5EYMJY",
257 "FMH3ATYQBPU22UNX2ZGHMZI3VNFX2MOR3EMVOEI",
258 "WZEVWYSW75DE5RAJUQEYWYRORPN3CABUCGCU7VY",
259 "C5A2PCKHFYQODTEJQ2NCI57E6KAHYIQYF2S3EII",
260 "A6W4QLFT6JZYTIJLNOOCWJUL3X6R3FDY3HW2BVY",
261 "3G6WOYH3QGNIUPHOOUYD7AQI7SR6COFVC7NLSNA",
262 "T7HSDKJDNQWBFBQ72IHR7MK2DB6NP3TYEH3SXZY",
263 "OPIWK5U3GTNG6FIUMTTBCFOQ4CNGN6GQ7ICJOJQ",
264 "ORMAX6UI52QDYDVOOIXYDGL6IAGZZQS7UAYR36Q",
265 "4PDKG2MCBYTHZE4NE5VILCJIAQGHYJNIEZIB3RY",
266 "YIFNSDNQXC7OAM25A2JFTGIQMCLJ53E7SOPEZJY",
267 "6N2G6TGWUGOMCN6F7TEPMCSMBJ7VNWLRSC32TQQ",
268 "MOR3PHVPHXZVDAEWARSQLHAK33QG2RIXTJLCQTY",
269 "MBVP3AZ5BATCRVMGOJAD5ZW3GSHG62GYZUMUP6A",
270 "OVT6VDQQZPZRF6CHRN6FDWD3AC3M6PPIFMB5ZZY",
271 "3PG4FONYLCPWY5QWWVNQLGZ3HY4NS6U6NXY7FGQ",
272 "CXMZBH4NNFUJ47TYUDNZFAMUUWLCHZZFHKU5IAA",
273 "3Y4VRHOMBRSUQZ4UHAAZI24YRCZUOUTCPHFBLPI",
274 "GT5HY5HOM7A7SLAL4HH5JMXUNIKP7OMZMBESL5Q",
275 "32RM6ILFACIWWHX4JGFYI5U5CD6CUTYFDHR5POI",
276 "DGD6BKKGH3AQUVA7DDOZWS2LRPYTCG5C23GNLKA",
277 "KAQ2LYN7TEYGNVIVRGTWRL4FDSS7GPIRVRRY3KY",
278 "RY4HR4SOJ32AV72H7CEFIIXV243JAEZCRVXFNGA",
279 "YDS3SGLNKTO2XBRYTXRT6CQFC5RPCTWY4VIR6VA",
280 "TOZ7PTUDBNRYA2P4PUAOWH3ARMW7ADF3R4R5XZQ",
281 "2VN5HKX2D4YH3IQMMILR5OU3KSVZFUU6YLGSNIY",
282 "AHDZC2W5Y6YBQNKPIJQLYXUJ3IWCTAZPBF24SGQ",
283 "G7YYLV7LIVZSYBBAKYZ4R6BUWXO7KHZ7KVPPKRI",
284 "QGC3IZH4PMI64TRRC24QESZKGUEXJMLFE6LCRUI",
285 "MAO56LXX4CO7KHF3VRBXN6ROPZYA3F6OU5HEOZA",
286 "NXJZ3LLKNFIGECW3KK4FLRFYJXR656BBRUZGGOA",
287 "YRUYD3AKI3SIVIH5JTQV425AVNCS363J4YGK5QY",
288 "WBZK3JBTM5J7OQ62IPALVEV3X66UY54RM427YJA",
289 "YYF7KUUYFKY5O6QO7HXAQA5TZVVMZKJEPKKUC3Q",
290 "AAM2ABFELIJXLKNODF4AHLNHSOMIKTKPT742OZI",
291 "3YUIDE5QJGJVRXXX47FZFFDVPFQ4UZFPEQWBXHQ",
292 "HK7TEYEMKYVUHFUB25XJC2ZRBKBHLHRFUHKORMA",
293 "MGF5LPUOV2QUETHAAKGHYXQYXEKD7GG4HP2UN5Y",
294 "EKNBK6YSSIDDZTUZKW2S6QJRX3WQRBPAZXNJDDQ",
295 "HWWBBJ3Y2V7T73HZVQ7G2YPBTZEIPCKGZHJHGWQ",
296 "TUSLJITDCZP7K3IEZHD6PH5ZJN7TFQOUIIXAOMQ",
297 "E7VYSFDMRIGE5OULOWP67BCEA5IKCQLTUTVTNWA",
298 "XYJETXKBVW57IIUABPGKJI46XREQSTZUFMDNFGQ",
299 "PTYB2XTVSY7XRYNLNARPN6NAZOCGBVTLVOZUYXY",
300 "WVAE3KBQLN2WWLOE4YFU447H7PRALW3IMWIEL3A",
301 "RJC52KLP336OETVMOHIYMSM5IWD5FY2C77HTZEI",
302 "7SEPD75TGIFSJQOYC232N4YCYRXC7NC7SLVR73Y",
303 "DJ6AGOILGDVFL5ZJGRUU7JTCEJFWPSU6MYHH6RI",
304 "CTNJSYU245C6H3UIQVY5RMNJ3OPBWHMB4V76OJQ",
305 "OGORC6O2MB6IDTKYUILD6W2AY3RRDQBACL6JVPQ",
306 "IJ4336JAXNGBHTHNBYNQ7TS6O4V6POP7UHARAZY",
307 "U7EFYE2KTRCPB4DRU6EB4F2JGOANBN7RMHLJ4YI",
308 "IHKFGKRUUBEWCPAAQJKUOM5ZFG3FP3GHWHGNQRA",
309 "TODCDW4LPZS2NWK5DRIBA3J5G2GCHIO2PIIVXGA",
310 "LRLOEZ3HQRTTPTIK3MMEUJCOIBNRDJM4KD4R2BQ",
311 "IDPALYFIHCRENOVNATHEF6CWEDWEVDGVFSU2MWI",
312 "2MBXSFC6RFO674PVSF7FIVW7JIZJUCNFRZ3TMPY",
313 "HLMYUQO5K6FQGCU6TKVG7G55XQ6P6W5UGJTPZMY",
314 "IYG2OE2T5QEKYYH7U4PWQEKAMGNU4XOO3X3E2JA",
315 "KZLRXQ3K5KXF7HEIBMMNGZWXXF2NTNKKKCBZURA",
316 "THSWZB6CU6TYPB6YEODWJI6GPTARSN3O2OWFTNQ",
317 "6TOHWP2AIVPZSFU7S5KOBTX3H7TOQG7YCSWMKCI",
318 "ZXTONTTSRYXGLT2JC75OMWFUVBDSLLYGMYKT72Y",
319 "MRIZWQYCM7QE2A4UOJB2XLQ6T3FRDQ7SP7JEZ2I",
320 "PZTTS46DJG2PMYTLOHDRR3DOKNGHOWINXBHWE7Q",
321 "W2OFMNVOWMDAL5WKJJTRX2BYXM5KBHH3OUKEGQY",
322 "JJCDGWPQ3LB34AWD2XX3UEN23P2XXJZ2YXPHWEA",
323 "3F5FSYBRDWYQMEFEFSUAUG44A3QUQLVOHZNOODQ",
324 "E4OHMFFQFIOYB4K7DHVGBXYC54SXF3QO3C3Y3FI",
325 "ZA6NHVBVUIIRDY6BCXWOBWQD5TASWUV3KZNDI4Y",
326 "YJCMEZZ2JGFJUW2Y2Y2WOO42KIAYXHHLTX6EPYI",
327 "XD6JPM6DMKD6NTPPFEFOB57EOBUDMJP4LBD7ZFQ",
328 "OZBHUSVBAVJZBYOVUHVMKBALFYXP345BGQ4XSSQ",
329 "4QA33HZMJJPNT4XSXCJTKYKJ6V7DMQ73225Q2TY",
330 "F5SLLM6AXAVPOAULYDB2TLY3J32GJZ5ZNTQNFUY",
331 "VWXRK7F3R2ZLMCEUMK3QN6Y7BXI4O2UC7V3OKJA",
332 "HYIRWDFF6PDAJDEWDWCJAOVER4ZAHC4MGXF7VXA",
333 "OARGE3NPDEUZCF5LKXLCLP47IAPEKKH62HDHK3Y",
334 "2FEP6FOWAMLPZE43I64EE6LYWVP7MUBHCBEODAA",
335 "IYNG4VYBO32ADGEQ4GQH3AAKY2UGILZDY5TG6GY",
336 "MELMIUEKN24DJIPKRPM4XYWCTED5KBIILWZBHUQ",
337 "D7F6NJVK53BPIZHZFYIANJJ3VDI56ZX3ID4QDWA",
338 "JEUJXOTM77T7SLFBA2L3Q6I7MQP5HUZL7CFKS7Y",
339 "ORDNK5DB6T5IHQJE4NLS5DF7VZU2FTV3H565SEI",
340 "HTJD4F42BZ64RNWGMMJVM7LTW4VRKW4JHZGFDHI",
341 "G7QTMS6DLMKVEOOMFS4A2YWWEEXGOR67SDCTZCQ",
342 "KDF4GLZP4WGFGTNPVIEZTOYMMBBS5HIIJUTFUDI",
343 "FWQBOAZMVQLA4E5BMEVLK6DRWOMEXDZ7BVARFTA",
344 "6RSPTN2DJSEJUY2VBLSRIUWH3VG2TZBZWBR7IZA",
345 "6IARIZQCKVK7HLJSHXBWELEIAUKMGLP273ZIXOQ",
346 "NB7CEN3VJPU7ZBCITQAXNHZKINMLIGW7ANVYFZA",
347 "RJC44IPNNHRCFEXLBT7LZ455NRU45XWPF4DKDBI",
348 "5MOCB7SLPFJSVM553DHRRVRJSBV7EGPHE3C36QA",
349 "7DJXLJEVKAM7XHQPPPKSNMBWXT3COBEL7XFRITI",
350 "6BBPKU43LJ2RLSRZBOKGMPEBX536DSPHWOIV6EA",
351 "PI4E3BDUPERN6CXYMK5X3UQMWORLAMMP4VPUZWA",
352 "YZWIPSJZQNMJZJO47DRZ2ZLXUSD2RSXJ6F4BJBA",
353 "4HIQKOIHLZOWZNJF36BHTIHGFPYLDYOMIS5HPEY",
354 "EB4HKLKAQP7ZEHWLNYLBJSDAIPD5GCH6F22W5UY",
355 "2GR57JDXL3TCEYOUTHGXRAY2ZKO3A3G2NQ3GRHA",
356 "AZ635YQX5IHUIJ5IKYZVV4EVYDBIOTBOYJHECGI",
357 "DN32SZO6SEU7SEHU23ZNPKWFBEA6ADNT2BWF2QQ",
358 "2XJ5TSJ7UKK7MJPBO4NBBW5FXPLNFISJ7EPER7I",
359 "JB55WLFKIR3PLVAK6BGG65LVG56JQX224MJ6G2Y",
360 "4MW7ZSNBX4LSURKHSIYAEEFFGPUJOMRVG4QJALY",
361 "XT3ASJ6DIECY5VYWHLV7CPVERVXNFBGUW3VQ3HI",
362 "QQNEFKUIIPKFQM6Y4XSKAHYD3OAT75ZHXW6366A",
363 "EUXMMGHHGC6HZ7UGMFNJZCOSXYTA7PDM3UUWEFY",
364 "5MYSTBUSOYXB6W5XUTPYD2A3XEHA2JJTEKSGPMI",
365 "72XGOD2IY7MFXK3URTCMBEVAPIRP44ZUOERJXGI",
366 "DOF4GVPB3UQFM2FXKX5XZPEL3MYVIJG53QQEXFY",
367 "NZQZPSB3Y4NY5R6NZSDZZEYNFJW77OGVC63JQ6A",
368 "4LKYFNQQUE2JBDR5MZ74KX54RHSWGBWCQVMKSKY",
369 "XH5YMKIQHK6COXGT4JBY5IO5SQTS6IZ4PDIFZII",
370 "TZPF64R4YI6QL3ZN2UW3Z3YJQOIG5ACDZ47WDPA",
371 "S5PGNXT2WOIMIZDU3DHAIWVDJ25NWGUU3VEPDII",
372 "ZTCDIG52EXSTQSNXMFZVYXIB5MX2CCMEZEAWGTY",
373 "GTUJMZY2CSZQ3WX6A23BCGRBCBY3GLQ4VVL67RY",
374 "BOOXD4JIXX6WRN6BQU6JDZ76PEMDHN24UF4EAEA",
375 "75JXVY2ZT4JJNWRKSTVYOY3UDRSYOEIX2QYL3TQ",
376 "4EVUFPLLBEXNBX7DC65LR3ELULPDXYKAQO2RRFI",
377 "3RC2GTPP5M4RAZAOI5ZTTFJFOIE7I4THW6JP5HY",
378 "ISM2YBQKIDZMLDARHCN75AAWVAVD5ISHIA7PJAI",
379 "BLB4GRYDVNHZNGZJRP4I53IR2JYXA66OLSWK6SA",
380 "YO3ZP3NESLRUOJWJ2Z2ZCMTXR53DA3RSCMJSWFY",
381 "FC4BPAJVHCW4D6GDYVQCIA34S5YESFTXSWPVIAY",
382 "VQWALTQ2VV66M75RRCRG4ZEFBBHER6TLHQ6VG3I",
383 "FCGJCN4WPOTGMZBBLMDKG5SJLIRT7HPFWOYAIJY",
384 "XABLN2BETS3DMOFSDWSMBCNBN4AECT75GTQZ6GA",
385 "5YBTJHDV6AILPCSIPTHMNADWKE645GX3N4MHZXA",
386 "N6F6BY5IP7IJNT2X7TRRY3SCZ4ATZ5VHGZ7EFQQ",
387 "JAAEWOBNORJASTMJ3JUFMZFZCVLF7ECHPTORUXY",
388 "HX6GPU5GUAT5MJKE5O63XWYAFA4ZX5KY6RKRP2Q",
389 "G42Q47J2JYQO5L6CDRH2ODBHUIEAG6XHLMHSFIQ",
390 "QEIE7IKMSAI5UIVDJRMYMPFDHBEU7YRZF2BYGVI",
391 "G3VSBYIRM76QI4I36PQ36JGJXHNABSOLRZRN4QA",
392 "BBXWENR7SUAV2OPOWT3BEZWQEQETQFMVHHAOZ5Y",
393 "O72GHKBQVOD2SM2UH5DWLSBROAPDO77WCFPLMJY",
394 "SSIRRW6I47HUQLBCJU47HROY52OWN6VGKYERCPA",
395 "PUMGP24L3C3BK6OLUNN75H6TNTXGO47BJYQLYQY",
396 "GD2TAVFT3EMTPGL32ZQAFBZ7T65QAKJ4QFFYNAA",
397 "7XPTUXVFHWNKGNK6SU4DJBBXR23NOWIEO4LZGNY",
398 "V66BL34FLEWONDE4Z6WCE6OOE4SXJ2A767VGJBI",
399 "DZ4DTF7KCDSBBUXQV3ENXBV3QBNVCJNURAL6VFY",
400 "Z63ZRRF5CFJ2JODAZ7DUFFGGIIIO26XHC2BYCEA",
401 "SCIIV6BFYPFII5GNTWGEEAPBUEXJOYYP67LOGVA",
402 "UMC6OJR6MLYN6ZWWL2XM5CQC7TROEI4P67C4PJQ"
403 };
404 int i;
405 name[255] = '\0';
406 for (i = 0; i < 256; ++i) {
407 /* Avoid snprintf because it's not C90 */
408 sprintf(name, "<characters 0..%d, length %d>", i, i + 1);
409 buf[i] = (char)i;
410 if (help_cmp_base32_bin(name, buf64, i + 1, results[i]))
411 return 1;
412 }
413 return 0;
414 }
415
test_tiger192_alignment()416 static int test_tiger192_alignment() {
417 uint64_t res[3];
418 char buf[127];
419
420 memset(buf, (int)'A', 127);
421 tiger_bp(0x00, buf, 127, res);
422 TEST_PASS3(res[0] == _ULL(0x007bbdabb402654c)
423 && res[1] == _ULL(0xaa7aefd7cb812b2d)
424 && res[2] == _ULL(0x1df2166aea456fca),
425 "Tiger BP hash result for \"<127*A>\" is wrong! "
426 "Expected 007bbdabb402654c aa7aefd7cb812b2d 1df2166aea456fca, "
427 "got %016" PRIx64 " %016" PRIx64 " %016" PRIx64 ".\n",
428 res[0], res[1], res[2]);
429
430 /* The ARM fails on this second one when unaligned access is attempted on the
431 * last int64. It rotates some values and ends up with 8*A instead of 7*A+LF.
432 */
433 buf[126] = '\n';
434 tiger_bp(0x00, buf, 127, res);
435 TEST_PASS3(res[0] == _ULL(0x8dfae2bea717c033)
436 && res[1] == _ULL(0x91fc74dffb9eba48)
437 && res[2] == _ULL(0xe62d12fd8ef213af),
438 "Tiger BP hash result for \"<126*A+LF>\" is wrong! "
439 "Expected 8dfae2bea717c033 91fc74dffb9eba48 e62d12fd8ef213af, "
440 "got %016" PRIx64 " %016" PRIx64 " %016" PRIx64 ".\n",
441 res[0], res[1], res[2]);
442
443 return 0;
444 }
445
test_tiger192_abelarm_o3()446 static int test_tiger192_abelarm_o3() {
447 uint64_t res[3];
448 uint64_t const out[] = {
449 _ULL(0x60d56f0949e7560f), _ULL(0xcf62a9d35ea20959),
450 _ULL(0xd4f5836a7ce76166), /* 0..124 (len=125) */
451 _ULL(0x6baec4efc36d6da1), _ULL(0xf87ff3d2852f0250),
452 _ULL(0xfbdb48ea8c361c38), /* 0..125 (len=126) */
453 _ULL(0xa950e3ff469b7cc2), _ULL(0xd2e5105a998e1647),
454 _ULL(0x7dc3bc1a875015b5), /* 0..126 (len=127) */
455 _ULL(0xaa322e0262d43ccd), _ULL(0x85e408a00248ee64),
456 _ULL(0x327f3eec7f32687e) /* 0..127 (len=128) */
457 };
458 char buf[128];
459 int i, j;
460 int failures = 0;
461
462 /* A different ARM (abel@debian) fails on this one with -O3 optimization
463 * when an uint64_t pointer is pointing to unaligned memory. */
464 for (i = 0; i < 128; ++i)
465 buf[i] = (char)i;
466 for (i = 0, j = 125; j <= 128 /* i < 4 * 3 */; i += 3, ++j) {
467 tiger_bp(0x00, buf, j, res);
468 if (res[0] != out[i] || res[1] != out[i+1] || res[2] != out[i+2]) {
469 fprintf(stderr, ">>> %s:%i: Tiger BP hash result for \"<\\x00.."
470 "\\x%hhx is wrong! Expected %016" PRIx64 " %016"
471 PRIx64 " %016" PRIx64 ", got %016" PRIx64 " %016"
472 PRIx64 " %016" PRIx64 ".\n", __FILE__, __LINE__,
473 j - 1, out[i], out[i+1], out[i+2], res[0], res[1],
474 res[2]);
475 ++failures;
476 }
477 }
478 if (failures)
479 return 1;
480
481 return 0;
482 }
483
484
485 TESTS(tiger_test)
486 TEST(test_tiger192_nessie_1a);
487 TEST(test_tiger192_nessie_1b);
488 TEST(test_tiger192_ross_and_eli);
489 TEST(test_tiger192_0to255);
490 TEST(test_tiger192_alignment);
491 TEST(test_tiger192_abelarm_o3);
492 ENDTESTS
493